基于 LangChain 搭建本地知识库系统
如何利用 LangChain 框架结合 RAG(检索增强生成)技术构建本地知识库。通过配置大语言模型与 Embedding 模型,将外部文档向量化存储至向量数据库,实现基于私有数据的问答功能。文章涵盖了环境安装、模型配置、数据加载与切片、向量检索及 Chain 构建等核心步骤,并提供了完整的 Python 代码示例与运行指南,帮助开发者快速落地私有化知识库应用。

如何利用 LangChain 框架结合 RAG(检索增强生成)技术构建本地知识库。通过配置大语言模型与 Embedding 模型,将外部文档向量化存储至向量数据库,实现基于私有数据的问答功能。文章涵盖了环境安装、模型配置、数据加载与切片、向量检索及 Chain 构建等核心步骤,并提供了完整的 Python 代码示例与运行指南,帮助开发者快速落地私有化知识库应用。

RAG(Retrieval-Augmented Generation,检索增强生成)是一种通过检索外部知识来增强大语言模型(LLM)生成能力的技术。它允许模型在回答时参考最新的、私有的或特定领域的数据,从而解决传统 LLM 训练数据滞后和无法访问私有信息的问题。
现有的通用大模型主要基于公开网络数据进行训练,存在以下局限性:
RAG 通过将模型建立在外部可验证的知识库之上,有效减少了幻觉风险,并降低了频繁微调模型的成本。
LangChain 是一个用于开发由语言模型驱动的应用程序的框架。它提供了构建复杂 AI 应用的工具链,主要能力包括:
首先,需要安装 LangChain 及其相关依赖包:
pip install langchain
pip install langchain-community
pip install langchain-core
pip install langchain-experimental
pip install "langserve[all]"
pip install langchain-cli
pip install langsmith
本文使用 Azure OpenAI 作为 LLM 服务,百度千帆作为 Embedding 模型。请根据实际情况修改密钥。
import os
os.environ["AZURE_OPENAI_ENDPOINT"] = "your_endpoint"
os.environ["AZURE_OPENAI_API_KEY"] = "your_api_key"
import os
os.environ["QIANFAN_AK"] = "your_ak"
os.environ["QIANFAN_SK"] = "your_sk"
以下是完整的知识库构建流程,包含文档加载、切片、向量化、检索及问答链的构建。
# 导入必要的依赖包
from langchain_community.vectorstores import Chroma
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.pydantic_v1 import BaseModel
from langchain_core.runnables import RunnableParallel, RunnablePassthrough
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.embeddings import QianfanEmbeddingsEndpoint
from langchain_openai import AzureChatOpenAI
import os
# 定义 Embedding 模型初始化函数
def embed_qianfan():
os.environ["QIANFAN_AK"] = "your_ak"
os.environ["QIANFAN_SK"] = "your_sk"
return QianfanEmbeddingsEndpoint()
# 定义 LLM 初始化函数
def openai_llm() -> AzureChatOpenAI:
os.environ["AZURE_OPENAI_ENDPOINT"] = "your_endpoint"
os.environ["AZURE_OPENAI_API_KEY"] = "your_api_key"
return AzureChatOpenAI(
azure_deployment="gpt-4",
openai_api_version="2023-05-15"
)
# 1. 加载网页文档
raw_documents = WebBaseLoader("https://docs.dify.ai/v/zh-hans/getting-started/readme").load()
# 2. 文本切片
# chunk_size 和 chunk_overlap 需根据 Embedding 模型的 token 窗口调整
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
all_splits = text_splitter.split_documents(raw_documents)
# 3. 向量化并存储到向量数据库
vectorstore = Chroma.from_documents(
documents=all_splits,
collection_name="rag-chroma",
embedding=embed_qianfan(),
)
retriever = vectorstore.as_retriever()
# 4. 构建 Prompt 模板
template = """Answer the question with chinese and based only on the following context:
{context}
Question: {question}
"""
prompt = ChatPromptTemplate.from_template(template)
# 5. 初始化 LLM
model = openai_llm()
# 6. 使用 LCEL 表达式构建 RAG Chain
chain = (
RunnableParallel({"context": retriever, "question": RunnablePassthrough()})
| prompt
| model
| StrOutputParser()
)
# 7. 类型检查与调用
class Question(BaseModel):
__root__: str
chain = chain.with_types(input_type=Question)
# 执行问答
print(chain.invoke("dify 是什么?"))
print(chain.invoke("dify 能干什么?请用列表形式回答"))
print(chain.invoke("dify 可以导入哪些数据?"))
print(chain.invoke("dify 如何导入 nation 数据?"))
如果使用 langchain serve 构建项目,可以通过以下命令启动服务:
langchain serve
启动成功后,终端会显示 Uvicorn 运行状态及可用的 Playground 地址,例如:
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
LANGSERVE: Playground for chain "/dify/" is live at:
└──> /dify/playground/
访问 http://127.0.0.1:8000/dify/playground/ 即可进行交互测试。
使用 RecursiveCharacterTextSplitter 时,需注意 chunk_size 的设置。如果切分后的文本超过 Embedding 模型支持的 Token 数量上限,会导致处理失败。建议先测试模型的最大输入长度,再动态调整参数。
本文使用 Chroma 作为轻量级向量数据库,适合本地开发和原型验证。生产环境中可根据需求替换为 Milvus、Pinecone 或 Elasticsearch 等支持高并发和持久化的方案。
默认的 as_retriever() 使用余弦相似度搜索。若需提升准确率,可尝试混合检索(Hybrid Search)或引入重排序(Rerank)模型,对初步检索结果进行二次打分。
本文详细介绍了如何使用 LangChain 构建本地知识库系统。核心流程包括:
通过上述步骤,开发者可以快速搭建起基于私有数据的智能问答系统,确保回答的准确性与时效性。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online