基于LangChain 开发RAG
说明:本文主要是基于LangChain开发的RAG示例
使用的大模型是:千问大模型
基于 LangChain 框架结合阿里云通义千问大模型构建 RAG(检索增强生成)系统,核心流程通常包含:文档加载 → 文本切分 → 向量化存储 → 检索器构建 → 问答链编排。
一,环境搭建与依赖安装
首先,在终端执行以下命令安装所需的依赖包:
pip install langchain langchain-community langchain-text-splitters chromadb dashscope python-dotenv
安装完成如图:

二,配置环境变量
DASHSCOPE_API_KEY=你的通义千问API密钥
3,完整demo 代码:
你可以将以下代码保存为 rag_demo.py,并在同目录下准备一个名为 example.txt 的测试文档:
import os
from dotenv import load_dotenv
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import CharacterTextSplitter
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_community.vectorstores import Chroma
from langchain_classic.chains import RetrievalQA
from langchain_community.llms import Tongyi
# 1. 加载环境变量
load_dotenv()
api_key = os.getenv("DASHSCOPE_API_KEY")
def basic_rag_flow():
# 2. 加载文档(确保文本文件为 utf-8 编码)
loader = TextLoader("example.txt", encoding='utf-8')
documents = loader.load()
# 3. 分割文档(将长文本切分为小块,避免超出模型上下文窗口)
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(documents)
# 4. 创建嵌入模型和向量存储(使用阿里云 text-embedding-v1 模型)
embeddings = DashScopeEmbeddings(
model="text-embedding-v1",
dashscope_api_key=api_key
)
# 将文本向量化并存入本地轻量级向量数据库 Chroma
vectorstore = Chroma.from_documents(texts, embeddings)
# 5. 构建检索器
retriever = vectorstore.as_retriever()
# 6. 创建 RAG 链(使用通义千问大模型)
llm = Tongyi(
model_name="qwen-max", # 也可替换为 "qwen-plus" 或 "qwen-turbo"
api_key=api_key,
temperature=0.1
)
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=retriever,
return_source_documents=True # 可选:返回参考文档片段
)
# 7. 循环接收问题并输出结果
while True:
query = input("请输入问题(输入1退出):").strip()
if query == "1":
print("已退出问答")
break
if not query:
print("问题不能为空")
continue
result = qa_chain.invoke({"query": query})
print("问题:", query)
print("回答:", result["result"])
return qa_chain
if __name__ == "__main__":
basic_rag_flow()
4,核心逻辑解析
文本切分(Chunking):大模型有上下文长度限制,且长文本直接检索效率低,通过CharacterTextSplitter将文档切分为小块(如1000字符),能够检索更精准;
向量化(Embeddings): DashScopeEmbeddings 会将切分后的文本转化为高维向量,当用户提问时,问题也会被转为向量,通过计算余弦相似度在Chroma数据库中找出相关的文本块。
问答链(QA Chain): RetrievalQA会自动将检索到的相关文本块和用户的问题拼接成prompt,发送给Tongyi大模型,最终生成基于文档内容的精准回答;
5,测试

没有什么优雅的代码比空代码的执行效率更高

浙公网安备 33010602011771号