AI 实践··2 分钟
从零搭建 RAG 知识库:架构设计与实践
记录搭建私有 RAG 知识库系统的完整过程,包括文档处理、向量检索与生成优化
#RAG#LLM#LangChain#向量数据库
什么是 RAG
RAG(Retrieval-Augmented Generation)是一种将检索与生成相结合的 AI 应用架构。简单来说,就是先从知识库中检索相关文档,然后将检索结果作为上下文传递给 LLM 生成回答。
这种方式解决了 LLM 的两个核心痛点:
- 知识时效性 — LLM 的训练数据有截止日期,RAG 可以动态更新知识库
- 幻觉问题 — 基于检索结果生成回答,大幅降低虚构内容的概率
架构设计
整个系统分为三个核心模块:
文档处理管道
负责将各种格式的文档转换为结构化的文本块:
原始文档 → 格式解析 → 文本分块 → 向量化 → 存储
分块策略直接影响检索质量。经过实验,采用语义分块(按段落/章节)比固定长度分块效果更好,尤其是在处理技术文档时。
向量存储
选择了 ChromaDB 作为向量数据库,主要原因:
- 开源免费,可本地部署
- 支持多种 embedding 模型
- Python SDK 完善
- 元数据过滤能力强
问答引擎
基于 LangChain 构建,核心是一个带上下文压缩的检索链:
from langchain.chains import ConversationalRetrievalChain
chain = ConversationalRetrievalChain.from_llm(
llm=llm,
retriever=vectorstore.as_retriever(search_kwargs={"k": 5}),
return_source_documents=True,
)
关键优化
检索优化
单纯的向量相似度检索效果有限,引入了混合检索策略:
- 向量检索(语义匹配)
- BM25 检索(关键词匹配)
- 结果融合(RRF 算法)
上下文压缩
当检索到的文档片段较多时,直接全部塞入 prompt 会浪费 token 且降低质量。引入了上下文压缩,只保留与问题最相关的部分。
实际效果
在内部测试中,RAG 系统相比直接使用 LLM:
- 回答准确率提升约 35%
- 幻觉率降低约 60%
- 支持私有知识查询
后续计划接入更多文档格式,并支持多轮对话的上下文管理。