基于 LangChain 开发大模型 RAG 知识问答应用
RAG(Retrieval-Augmented Generation,检索增强生成)是一种通过引入外部资料来约束大模型回答的技术。在用户提问时,系统先检索相关资料,将'问题 + 上下文'一同输入大模型,使其在参考资料的提示下生成答案,从而减少幻觉、解决训练数据过时及知识范围有限的问题。
相比于大模型微调,RAG 在时间成本、经济成本和技术难度上更具优势,特别适用于专业领域或企业内部知识库场景。
核心知识点
- 使用 LangChain 调用 DeepSeek-v3 模型服务
- 设计提示词模板(系统提示词与用户提示词)
- 加载本地或在线文档构建知识库
- 文档分割为 Chunks(片段)
- 文本嵌入(Embedding)与向量存储(Indexing)
- 使用 BAAI/bge-reranker-large 进行 ReRank 重排优化
- 设计输出解析器格式化结果
- 构建 LCEL 链(LangChain Expression Language)
- 添加回调函数获取运行状态
本文代码基于 LangChain v0.3 版本。
环境准备
确保安装以下 Python 库:
pip install langchain langchain-community langchain-core faiss-cpu deeplake flag-embedding
需配置环境变量以保存 API Key:
import os
os.environ["DEEPSEEK_API_KEY"] = "YOUR_DEEPSEEK_API_KEY"
os.environ["DASHSCOPE_API_KEY"] = "YOUR_ALIBABA_CLOUD_API_KEY"
1. 大模型调用
LangChain 支持接入多种云服务模型。DeepSeek 采用了与 OpenAI 兼容的接口规范,可通过 ChatOpenAI 类配置自定义 Base URL 或直接使用专用 Provider。
from langchain.chat_models import ChatDeepSeek
llm = ChatDeepSeek(
model_name="deepseek-chat",
temperature=0,
max_tokens=None,
timeout=None,
max_retries=2,
)
2. 提示词模板设计
推荐使用 ChatPromptTemplate 管理消息结构。包含 System Message(系统指令)和 Human Message(用户问题)。
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个信息整理归纳助手。在回答用户问题时,请严格参考提供的上下文信息。如果上下文中没有相关信息,请直接回复'在资料中没有相关信息',不要自行编造。上下文如下:{context}"),
("human", )
])


