AI 实践··2 分钟

从零搭建 RAG 知识库:架构设计与实践

记录搭建私有 RAG 知识库系统的完整过程,包括文档处理、向量检索与生成优化

#RAG#LLM#LangChain#向量数据库

什么是 RAG

RAG(Retrieval-Augmented Generation)是一种将检索与生成相结合的 AI 应用架构。简单来说,就是先从知识库中检索相关文档,然后将检索结果作为上下文传递给 LLM 生成回答。

这种方式解决了 LLM 的两个核心痛点:

  1. 知识时效性 — LLM 的训练数据有截止日期,RAG 可以动态更新知识库
  2. 幻觉问题 — 基于检索结果生成回答,大幅降低虚构内容的概率

架构设计

整个系统分为三个核心模块:

文档处理管道

负责将各种格式的文档转换为结构化的文本块:

原始文档 → 格式解析 → 文本分块 → 向量化 → 存储

分块策略直接影响检索质量。经过实验,采用语义分块(按段落/章节)比固定长度分块效果更好,尤其是在处理技术文档时。

向量存储

选择了 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%
  • 支持私有知识查询

后续计划接入更多文档格式,并支持多轮对话的上下文管理。