RAG知识库搭建实战:零基础使用LangChain+

环境准备:工具与依赖

开始前请确认你的电脑已安装 Python 3.8 或更高版本,建议使用虚拟环境避免依赖冲突。
打开终端依次执行以下命令:

pip install langchain chromadb sentence-transformers

这三个库分别是编排框架、向量数据库和嵌入模型工具。
接着需要本地嵌入模型,推荐使用 Ollama 简化部署。
前往 ollama.com 下载安装,然后拉取轻量模型 nomic-embed-text

ollama pull nomic-embed-text

Ollama 会提供兼容 OpenAI 的 API,LangChain 可以直接调用。
如果电脑配置较低,也可以改用 sentence-transformers 加载 BAAI/bge-small-zh-v1.5 等中文模型,替换后续的 OllamaEmbeddings 为 HuggingFaceEmbeddings。

文档加载与分割

假设你有一份 公司产品手册.txt 需要转为知识库。
LangChain 支持纯文本、PDF、Word 等格式,这里以 txt 为例:

from langchain.document_loaders import TextLoader
loader = TextLoader("公司产品手册.txt")
documents = loader.load()

原始文档可能很长,必须切成小片段才能检索。
推荐使用 RecursiveCharacterTextSplitter,按段落和句子切分:

from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
docs = splitter.split_documents(documents)

chunk_size 控制每个片段的字符数,chunk_overlap 让相邻片段有重叠,避免关键信息被切断。

创建向量库并持久化

随后将切好的文档片段转为向量并存入 Chroma。
首先通过 Ollama 获取嵌入:

from langchain.embeddings import OllamaEmbeddings
from langchain.vectorstores import Chroma

embeddings = OllamaEmbeddings(model="nomic-embed-text")
vectordb = Chroma.from_documents(docs, embeddings, persist_directory="./chroma_db")
vectordb.persist()

persist_directory 指定向量库的本地存储路径,以后可以直接加载,无需重复生成。
注意如果重新建库,先删除旧的 ./chroma_db 文件夹再运行。

搭建检索问答链

现在需要一个大脑(LLM)来理解你的问题并基于检索内容生成答案。
同样使用 Ollama 提供一个聊天模型,比如 Mistral:

ollama pull mistral

接着构建链:

from langchain.chains import RetrievalQA
from langchain.llms import Ollama

llm = Ollama(model="mistral")
qa_chain = RetrievalQA.from_chain_type(llm=llm, retriever=vectordb.as_retriever())

试试提问:

question = "公司产品手册中提到了哪些售后服务?"
answer = qa_chain.run(question)
print(answer)

如果一切正常,你会看到基于你上传文档生成的回答。

避坑指南

  • 切块参数调整:chunk_size 推荐 300~800,chunk_overlap 设为 10%~20%。中文文档可以稍微减小 chunk_size,避免片段包含不完整句子。
  • 模型选型:Ollama 默认模型可能不支持中文,建议使用 qwen2:0.5bphi3:3.8b 等中文友好模型。嵌入模型推荐 nomic-embed-textbge-m3
  • 内存不足怎么办:选择更小的 LLM 模型(如 tinyllama),或改用 GPU 推理。嵌入模型尽量轻量。
  • 首次运行需下载模型文件:保持网络畅通,模型文件大小从几百 MB 到几 GB。
  • 持久化路径冲突:不要重复使用同一个 persist_directory 建库,否则会追加。如需重建,先手动删除目录。

验证与常见问题

运行上述代码后,输入一个测试问题。
如果回答内容与你上传的文档一致,说明知识库已生效。
你也可以直接检验向量库:

loaded_db = Chroma(persist_directory="./chroma_db", embedding_function=embeddings)
retriever = loaded_db.as_retriever()
results = retriever.get_relevant_documents("售后服务")
print(len(results), results[0].page_content[:100] if results else "无结果")

Q:为什么回答总是说“我不知道”? A:常见原因是文档切块过大或嵌入模型不适合中文,建议更换 bge-small-zh-v1.5 并调小 chunk_size。

Q:能不能直接支持 PDF? A:可以,改用 PyPDFLoader 加载,安装 pypdf 即可。

Q:怎么让知识库支持更多文件? A:LangChain 提供了 DirectoryLoader,可以一次性读取文件夹内所有支持格式的文件。

到这里,你的 RAG 知识库就搭建完成,可以继续封装为 Web API 或集成到企业微信机器人中。
如果在搭建过程中遇到其他问题,欢迎查阅 LangChain 官方文档或留言交流。

分享到:
上一篇
从零搭建向量数据库Milvus:安装配置与避坑实战
下一篇
零基础搭建AI智能问答系统:从服务器准备到上线验证
1
系统公告

高考专属福利来袭|凭准考证免费领香港 CN2 云服务器

值高考落幕之际,泽御云开启考生专属回馈 + 产品限时特惠双重活动,助力学子暑期学习建站 高考 考生专属福利 全体应届高考生,凭高考准考证即可免费申领【香港 CN2 轻量云服务器,4 核 4G AMD 处理器】,免费使用周期 30 天,可用于搭建个人站点、编程实操、技术实训,祝各位考生金榜题名,前程似锦! 泽御云资质齐全合规自营机房,线路覆盖香港 CN2、国内 BGP、内蒙电信、美国精品线路,售后全天候技术支持。 官方网站:www.zeyuyun.com,活动限时有效,优惠逾期不再保留。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意