第 12 章:RAG 入门:为什么需要知识库
本章目标
这一章解释 RAG 的价值和基本流程。你会理解为什么知识库问答不能只靠 Prompt。
本章效果
最终知识库页面会显示文档数量、片段数量、问答结果和引用来源。

模型不知道你的私有资料
大模型拥有通用知识,但它不知道你的公司制度、项目文档、接口说明、客户资料和内部流程。
如果用户问:
我们公司采购超过多少钱需要审批?
模型可能给出看似合理但完全错误的答案。
解决方式不是把所有文档复制到 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 解决的是私有知识接入问题。下一章开始处理文档上传和文本切分。