第 12 章:RAG 入门:为什么需要知识库

4 阅读3分钟

第 12 章:RAG 入门:为什么需要知识库

本章目标

这一章解释 RAG 的价值和基本流程。你会理解为什么知识库问答不能只靠 Prompt。

本章效果

最终知识库页面会显示文档数量、片段数量、问答结果和引用来源。

RAG 知识库问答转存失败,建议直接上传图片文件

模型不知道你的私有资料

大模型拥有通用知识,但它不知道你的公司制度、项目文档、接口说明、客户资料和内部流程。

如果用户问:

我们公司采购超过多少钱需要审批?

模型可能给出看似合理但完全错误的答案。

解决方式不是把所有文档复制到 Prompt 里,而是在回答前检索相关内容。

RAG 是什么

RAG 是 Retrieval-Augmented Generation,检索增强生成。

基本流程:

准备阶段:
文档 -> 切分 -> 向量化 -> 存入向量库

提问阶段:
用户问题 -> 向量化 -> 相似度检索 -> 取回相关片段 -> 交给模型生成答案

RAG 的重点是:模型回答时有材料可依。

RAG 和搜索的区别

普通关键词搜索依赖文字匹配。比如“差旅报销”和“出差费用申请”可能语义接近,但关键词不同。

向量检索更偏语义相似度。它可以找到表达不同但意思接近的内容。

不过向量检索不是万能的。实际项目里常常会组合:

  • 关键词检索
  • 向量检索
  • 元数据过滤
  • 重排
  • 人工规则

最小 RAG 示例

可以先用内存数组模拟:

const docs = [
  {
    title: "报销制度",
    content: "报销必须提供真实有效发票,金额超过 5000 元需要部门负责人审批。"
  },
  {
    title: "差旅制度",
    content: "员工出差需要提前提交差旅申请,住宿标准按城市级别区分。"
  }
];

第一版甚至可以用关键词过滤:

function simpleRetrieve(question: string) {
  return docs.filter((doc) => question.includes("报销") && doc.title.includes("报销"));
}

后面再换成真正的 Embedding 和向量库。

RAG 回答格式

知识库问答最好要求模型输出引用:

根据《报销制度》,报销必须提供真实有效发票。金额超过 5000 元时,需要部门负责人审批。

引用来源:
1. 报销制度

引用不是装饰,而是可信度来源。

实战任务

完成:

  • 准备 3 条模拟知识库文档
  • 写一个简单检索函数
  • 把检索结果塞进 Prompt
  • 让模型基于资料回答

常见坑

不要把 RAG 理解成“上传文档给模型”。文档需要切分、向量化、检索和组装上下文。

不要认为用了 RAG 就不会幻觉。检索不到、检索错、上下文太乱,都会导致错误回答。

不要忽略引用来源。没有引用的知识库问答很难让用户信任。

本章小结

RAG 解决的是私有知识接入问题。下一章开始处理文档上传和文本切分。