跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

基于 LangChain 搭建本地知识库系统

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

静心发布于 2025/2/7更新于 2026/7/2431 浏览
基于 LangChain 搭建本地知识库系统

基于 LangChain 搭建本地知识库系统

什么是 RAG

RAG(Retrieval-Augmented Generation,检索增强生成)是一种通过检索外部知识来增强大语言模型(LLM)生成能力的技术。它允许模型在回答时参考最新的、私有的或特定领域的数据,从而解决传统 LLM 训练数据滞后和无法访问私有信息的问题。

LLM 现存的痛点

现有的通用大模型主要基于公开网络数据进行训练,存在以下局限性:

  1. 知识时效性:模型无法知晓训练截止日期之后的最新信息。
  2. 私有数据缺失:企业内部的私有数据(如文档、数据库)通常不对外公开,模型无法直接获取。
  3. 幻觉问题:当面对未知问题时,模型可能会编造答案(Hallucination),缺乏事实依据。

RAG 通过将模型建立在外部可验证的知识库之上,有效减少了幻觉风险,并降低了频繁微调模型的成本。

LangChain 简介

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

实现知识库流程

1. 配置模型服务

本文使用 Azure OpenAI 作为 LLM 服务,百度千帆作为 Embedding 模型。请根据实际情况修改密钥。

Azure OpenAI 配置
import os
os.environ["AZURE_OPENAI_ENDPOINT"] = "your_endpoint"
os.environ["AZURE_OPENAI_API_KEY"] = "your_api_key"
Embedding 模型配置
import os
os.environ["QIANFAN_AK"] = "your_ak"
os.environ["QIANFAN_SK"] = "your_sk"

2. 核心代码实现

以下是完整的知识库构建流程,包含文档加载、切片、向量化、检索及问答链的构建。

# 导入必要的依赖包
from langchain_community.vectorstores import Chroma
from langchain_core.output_parsers  StrOutputParser
 langchain_core.prompts  ChatPromptTemplate
 langchain_core.pydantic_v1  BaseModel
 langchain_core.runnables  RunnableParallel, RunnablePassthrough
 langchain.text_splitter  RecursiveCharacterTextSplitter
 langchain_community.document_loaders  WebBaseLoader
 langchain_community.embeddings  QianfanEmbeddingsEndpoint
 langchain_openai  AzureChatOpenAI
 os


 ():
    os.environ[] = 
    os.environ[] = 
     QianfanEmbeddingsEndpoint()


 () -> AzureChatOpenAI:
    os.environ[] = 
    os.environ[] = 
     AzureChatOpenAI(
        azure_deployment=,
        openai_api_version=
    )


raw_documents = WebBaseLoader().load()



text_splitter = RecursiveCharacterTextSplitter(chunk_size=, chunk_overlap=)
all_splits = text_splitter.split_documents(raw_documents)


vectorstore = Chroma.from_documents(
    documents=all_splits,
    collection_name=,
    embedding=embed_qianfan(),
)
retriever = vectorstore.as_retriever()


template = 
prompt = ChatPromptTemplate.from_template(template)


model = openai_llm()


chain = (
    RunnableParallel({: retriever, : RunnablePassthrough()})
    | prompt
    | model
    | StrOutputParser()
)


 ():
    __root__: 

chain = chain.with_types(input_type=Question)


(chain.invoke())
(chain.invoke())
(chain.invoke())
(chain.invoke())
import
from
import
from
import
from
import
from
import
from
import
from
import
from
import
import
# 定义 Embedding 模型初始化函数
def
embed_qianfan
"QIANFAN_AK"
"your_ak"
"QIANFAN_SK"
"your_sk"
return
# 定义 LLM 初始化函数
def
openai_llm
"AZURE_OPENAI_ENDPOINT"
"your_endpoint"
"AZURE_OPENAI_API_KEY"
"your_api_key"
return
"gpt-4"
"2023-05-15"
# 1. 加载网页文档
"https://docs.dify.ai/v/zh-hans/getting-started/readme"
# 2. 文本切片
# chunk_size 和 chunk_overlap 需根据 Embedding 模型的 token 窗口调整
500
50
# 3. 向量化并存储到向量数据库
"rag-chroma"
# 4. 构建 Prompt 模板
"""Answer the question with chinese and based only on the following context: {context} Question: {question} """
# 5. 初始化 LLM
# 6. 使用 LCEL 表达式构建 RAG Chain
"context"
"question"
# 7. 类型检查与调用
class
Question
BaseModel
str
# 执行问答
print
"dify 是什么?"
print
"dify 能干什么?请用列表形式回答"
print
"dify 可以导入哪些数据?"
print
"dify 如何导入 nation 数据?"

3. 启动服务

如果使用 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 构建本地知识库系统。核心流程包括:

  1. RAG 原理:利用检索增强生成弥补 LLM 知识短板。
  2. 环境配置:设置 LLM 与 Embedding 模型的 API 凭证。
  3. 数据处理:加载文档、切片并向量化存储。
  4. 应用构建:通过 Prompt 工程与 Chain 编排实现问答功能。

通过上述步骤,开发者可以快速搭建起基于私有数据的智能问答系统,确保回答的准确性与时效性。

目录

  1. 基于 LangChain 搭建本地知识库系统
  2. 什么是 RAG
  3. LLM 现存的痛点
  4. LangChain 简介
  5. 环境安装
  6. 实现知识库流程
  7. 1. 配置模型服务
  8. Azure OpenAI 配置
  9. Embedding 模型配置
  10. 2. 核心代码实现
  11. 导入必要的依赖包
  12. 定义 Embedding 模型初始化函数
  13. 定义 LLM 初始化函数
  14. 1. 加载网页文档
  15. 2. 文本切片
  16. chunksize 和 chunkoverlap 需根据 Embedding 模型的 token 窗口调整
  17. 3. 向量化并存储到向量数据库
  18. 4. 构建 Prompt 模板
  19. 5. 初始化 LLM
  20. 6. 使用 LCEL 表达式构建 RAG Chain
  21. 7. 类型检查与调用
  22. 执行问答
  23. 3. 启动服务
  24. 关键步骤详解
  25. 文本拆分策略
  26. 向量数据库选择
  27. 检索优化
  28. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Ubuntu 22.04 安装 NVIDIA 显卡驱动完整步骤
  • 基于C++11手写Promise实现
  • CFAR 恒虚警率目标检测算法原理与 MATLAB 实现
  • WebStorm 下载与安装配置指南
  • 大模型选型避坑指南:20+ 供应商、220+ 模型性能实测与决策参考
  • C++ 红黑树详解与实现
  • Jetpack Compose 与 Flutter 技术选型对比指南
  • SQL 语言中 DDL、DML 与 DCL 的区别解析
  • RabbitMQ 后端消息队列技术详解
  • Stable Diffusion 与 Z-Image-Turbo 快速部署及效果对比
  • Python 变量与基础数据类型详解
  • RAG 系统优化:应对 7 大挑战提升 LLM 性能
  • JDK 23 详细安装与环境变量配置指南
  • 基于 Django-Flask 的关爱空巢老人与留守儿童管理系统设计与实现
  • 电商系统商品管理模块设计与实现(AI 辅助)
  • 五大主流远程桌面软件实测对比与选购指南
  • 巅峰对决:Codex Multi-Agent vs Claude Agent Teams,谁才是最强 AI 编程团队?
  • Neo4j 下载安装教程(Windows、MacOS、Linux 平台)
  • Stable Diffusion WebUI 部署与核心功能实战解析
  • Windows 部署 OpenAkita 并接入飞书模块,搭建本地 AI 助手

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online