L1D-05 知识库与 RAG:让助手依据你的资料回答

保姆级教程 · 面向希望让 AI 使用自己资料的创作者

项目 信息
课程系列 AI 创作入门 · L1-D 智能体/自动化
课程编号 L1D-05
难度等级 ★★★☆☆
适用人群 有历史文章、脚本、产品资料或团队文档,想搭建资料问答助手的人
预计学时 80-100 分钟
前置课程 L1D-01、L1D-03;参考 L0-2 名词词典
更新日期 2026 年 8 月
内容声明 RAG 只能提高资料可追溯性,不能自动保证资料真实、完整或拥有商用授权。

学习目标

学完本教程后,你将能够:

  1. 用通俗语言解释 RAG 为什么比"把资料全塞进提示词"更可持续,以及它的原理和局限。
  2. 把文档整理为适合检索的知识库,包含资料清单、版本管理和切分策略。
  3. 理解切分、向量化、Top-K 和重排序四个关键参数的作用和调优方向。
  4. 设计"有来源回答、资料不足就拒答、资料冲突就暴露"的助手规则。
  5. 用一组测试问题判断知识库是否真的变好,而不是凭感觉说"好像准了"。
  6. 识别 RAG 最常见的三个坑:把所有文件一次性上传、只测最容易的问题、没有删除机制。

前置准备

你需要什么

你不需要什么


一、RAG 是什么

1.1 一句话定义

RAG(Retrieval-Augmented Generation,检索增强生成)= 先检索,再生成。

用户提问时,系统先在你的知识库里找相关片段,再把这些片段连同问题交给模型回答,并要求标出依据。

1.2 工作流程

用户提问
  │
  ▼
检索:在知识库中找相关片段(Top-K 个)
  │
  ▼
拼入:把找到的片段 + 问题一起交给模型
  │
  ▼
生成:模型基于片段回答,标注来源
  │
  ▼
返回:答案 + 来源引用

1.3 RAG vs 把资料全塞进提示词

方法 做法 优点 缺点
全塞进提示词 把所有资料放在 Prompt 里 简单直接 资料一多就超长度限制,成本高,模型容易"迷路"
RAG 先检索相关片段,只把片段交给模型 突破长度限制,成本可控,可引用来源 检索不到就答不了,依赖切分和检索质量

打个比方:全塞进提示词像"考试时把整本书翻开放在桌上,翻到哪算哪";RAG 像"考试前先查目录找到相关页,只带这几页进考场"。后者更高效,但前提是目录(检索)要准。

1.4 RAG 的局限

RAG 不是万能的:

核心认知:RAG 让答案更容易追溯(有来源),但不让答案更"正确"。资料的质量决定回答的质量。


二、知识库质量从文件开始

2.1 先做资料清单

在上传任何文件之前,先列一张清单:

字段 示例
文档名称 账号定位说明 v2
来源 负责人张三 / 链接 / 原始文件路径
生效日期 2026-08-01
版本 v2
状态 有效 / 过期 / 待审核
可回答范围 账号语气、栏目设置、禁用表达

为什么需要清单:过期文档、互相矛盾的版本和未经确认的草稿不要混在一起。RAG 会忠实检索进去的内容,却不会替你判断哪个版本更应该生效。没有清单,你连"知识库里到底有什么"都不知道。

2.2 资料整理三原则

  1. 只上传已确认的资料:草稿、未核实的信息、个人隐私不要上传。
  2. 标注有效期:给每份资料设置过期时间,到期后自动标记"待复核"。
  3. 去重去矛盾:如果 v1 和 v2 同时存在,明确标注 v2 优先,或删除 v1。

2.3 文档切分

一篇文章不能总是作为一个巨大块,也不应从任意字符处切断。

切分原则:

文档标题 + 小节标题 + 一个完整段落

为什么这样切:

初始切分建议:按 300-800 个汉字尝试,再用测试问题调整。

❌ 从第 347 个字符处切断(可能把一句话切成两半)

✅ 按"## 小节标题"切分,每个片段包含:
   - 文档标题(标注来源)
   - 小节标题
   - 一个完整段落

2.4 切分策略对照

策略 做法 适合
按段落切 每个自然段一个片段 短文章、FAQ
按标题切 每个"## 小节"一个片段 长文章、手册
固定长度切 每 500 字一个片段(有重叠) 格式不统一的文档
按问答切 每个问答对一个片段 FAQ、客服文档

新手建议:先用"按标题切"开始,大部分文档都适用。跑通后再根据测试结果调整。


三、四个关键参数

3.1 向量化

是什么:系统把文字转换成可比较的数字表示(向量),用于寻找语义相近的片段。

为什么重要:不同向量模型对中文、代码、表格和混合语言的表现不同。默认的向量模型不一定最适合你的资料。

调优方向:

常见错误:用默认向量模型不管不问,结果检索质量很差,却以为是切分或 Top-K 的问题。

3.2 Top-K

是什么:每次检索取回多少个候选片段。K=3 就是取最相关的 3 个片段。

怎么调:

K 值 效果 风险
K=1 只取最相关的 1 个 可能漏掉关键定义
K=3-5 取 3-5 个候选 平衡精准和覆盖(推荐起点)
K=10+ 取很多个 无关信息多,成本高,模型可能"迷路"

调优方法:先用 K=3 测试,观察"有没有因为漏检索而答错的问题"。如果有,加到 5。如果加到 5 后无关信息变多,尝试用重排序优化。

3.3 重排序(Reranking)

是什么:初步检索按语义相似度找候选(可能找到很多),重排序再结合问题细节把更相关的片段排前。

为什么有用:初步检索(向量相似度)是"粗筛",重排序是"精排"。涉及数字、版本、专有名词时,重排序通常很有帮助。

打个比方:初步检索像"在图书馆用关键词搜到 20 本书",重排序像"馆员帮你把最相关的 3 本挑出来放最前面"。

使用建议:如果平台支持重排序功能,建议开启。特别是资料中有很多相似但不同版本的文档时,重排序能帮你在 v1 和 v2 之间选对版本。

3.4 元数据过滤

是什么:给片段增加标签(平台、日期、栏目、版本、权限),检索时先按标签过滤,再按语义搜索。

示例:

问题:"当前账号的禁用词有哪些?"

检索流程:
  1. 元数据过滤:status = "有效"(排除过期文档)
  2. 语义搜索:在有效文档中找"禁用词"相关片段
  3. 重排序:把最相关的排前
  4. 返回 Top-3 片段

为什么重要:没有元数据过滤,系统可能返回一份 2024 年的过期规则,而不是 2026 年的最新规则。版本问题是 RAG 最容易踩的坑之一。


四、配置一个可靠的资料助手

4.1 系统提示词模板

你是资料问答助手。
1. 只依据检索到的资料回答,不把常识当作本库事实。
2. 每个关键结论后给出文档名称、版本和小节。
3. 资料没有覆盖问题时,明确回答"当前资料不足",
   列出需要补充的资料。
4. 如果资料之间冲突,分别列出版本和冲突点,不自行裁决。
5. 不输出用户没有权限查看的内容,
   不泄露检索上下文中的无关信息。
6. 不要根据常识补充资料中没有的数字、日期和具体规则。

4.2 回答格式模板

结论:___________________________
依据:___________________________
   (文档名称 + 版本 + 小节)
适用版本/日期:_________________
仍需确认:_____________________

4.3 拒答规则(最重要的安全网)

拒答不是失败,而是可靠助手的标志。以下情况必须拒答:

拒答格式:

当前资料不足以回答这个问题。
已检索到以下相关但不充分的资料:
  - [文档名称,版本]
建议补充以下资料:
  - _________________

关键认知:一个会拒答的助手,比一个"什么都能答但答错"的助手可靠得多。用户信任的是"说不知道的勇气",不是"什么都说"的自信。


五、实战:历史文章问答助手

5.1 输入

把已经发布的 20 篇文章整理为 Markdown,文件名包含日期和标题;另外提供账号定位、禁用词和栏目规则。

5.2 过程

  1. 删除草稿和重复文件:只保留已发布、已确认的版本。
  2. 给每篇文章补标题、来源、日期和版本:写入文件头部元数据。
  3. 按小节切分:不把标题与正文分开,每个片段包含文档标题 + 小节标题 + 段落。
  4. 上传知识库并设置有效版本标签:用元数据标注 status: effective
  5. 准备 12 个测试问题(见下一节)。
  6. 要求回答附来源,资料外问题必须拒答。

5.3 测试问题集

编号 问题类型 示例问题 期望表现
Q1 原文事实 "账号过去写过哪些素材归档方法?" 找到正确片段,引用准确
Q2 原文事实 "禁用词有哪些?" 列出禁用词,附来源
Q3 同义表达 "这个账号不碰什么话题?"(换一种问法) 仍能检索到禁用词
Q4 跨文档总结 "这个账号的内容风格有什么特点?" 引用多篇文章,不混淆
Q5 版本问题 "当前的栏目设置是什么?" 优先返回最新版本
Q6 时间敏感 "下个月平台一定奖励什么内容?" 拒答或标记"需要查最新规则"
Q7 资料外问题 "明天天气怎样?" 明确拒答
Q8 资料外问题 "某产品的最新价格是多少?" 拒答,建议查官方渠道
Q9 冲突问题 (如果 v1 和 v2 有矛盾) 展示冲突,不私自合并
Q10 错别字 "禁用词有哪写?"(错别字) 仍能检索到
Q11 超长问题 一段 500 字的提问 能提取关键信息并回答
Q12 敏感问题 涉及医疗建议的问题 拒答或提示咨询专业人士

5.4 输出验证


六、检索质量测试表

6.1 测试记录模板

问题类型 测试问题 检索是否命中 引用是否支持结论 回答是否添加了资料没有的内容 合格?
原文事实 ☐ ☐ ☐ ☐ ☐ ☐
同义表达 ☐ ☐ ☐ ☐ ☐ ☐
版本问题 ☐ ☐ ☐ ☐ ☐ ☐
多文档总结 ☐ ☐ ☐ ☐ ☐ ☐
资料外问题 ☐ ☐ ☐ ☐ ☐ ☐
冲突资料 ☐ ☐ ☐ ☐ ☐ ☐

6.2 调优流程

测试 12-20 个问题
  → 记录检索命中率和引用准确率
  → 如果命中率低:
    → 检查切分是否太小或太大
    → 检查向量模型是否适合中文
    → 调整 Top-K(从 3 调到 5)
  → 如果命中率 OK 但引用不准:
    → 开启重排序
    → 调整系统提示词(更强调"只依据资料")
  → 如果资料外问题没有拒答:
    → 加强拒答规则
    → 检查是否模型在用常识补充

调优前提:优化切分和 K 值前,先确认问题本身覆盖了真实使用场景。用不真实的问题调优,只会越调越偏。


FAQ:常见问题

Q1:上传资料后回答仍然错误,为什么?

可能是以下原因之一:

排查顺序:先看检索到的片段(大多数平台能看到检索结果),判断是"没找到"还是"找到了但回答错了"。前者调检索,后者调提示词。

Q2:RAG 能替代事实核查吗?

不能。它让答案更容易追溯(有来源引用),但资料本身仍可能错误。涉及日期、价格、规则和法律判断,必须查原始来源。RAG 是"帮你快速找到资料中的相关段落",不是"帮你确认资料是否正确"。

Q3:知识库越大越好吗?

不是。无关、重复和过期资料会降低命中质量。小而干净、版本清楚的知识库更容易维护。一个 30 份高质量文档的知识库,效果通常好过 300 份混杂数据的知识库。

Q4:可以用 RAG 做客服机器人吗?

可以,但有前提:

Q5:不同平台的 RAG 功能差异大吗?

核心原理相同(检索 + 生成),但切分方式、向量模型、重排序能力和配置灵活度有差异。建议用同一组测试问题在 2 个平台上对比,选择命中率更高、拒答更可靠的。不要只看"界面好不好看"。


进阶避坑指南

坑 1:把所有文件一次性上传

现象:一次性把几百个文件全传上去,结果回答质量很差,而且不知道是哪些文件造成的。

原因:没有建立资料目录和版本规则,混杂数据互相干扰。过期资料和有效资料混在一起,系统分不清该用哪个。

处理:先建立资料目录和版本规则,分批加入并测试。每加一批,跑一次测试集,确认质量不下降。如果加了某批后质量骤降,就是那批资料有问题(可能是格式不对、内容过期或与现有资料矛盾)。

坑 2:只测试"最容易的问题"

现象:测试时只问"账号定位是什么"这类直接能从标题找到答案的问题,觉得"挺好用",上线后用户问了各种刁钻问题,系统各种答错。

原因:只测了简单情况,没有覆盖边缘情况。

处理:一定加入以下五类问题:

  1. 错别字问题:用户打字有误,系统还能不能找到?
  2. 同义问法:换一种说法,系统还认不认?
  3. 资料外问题:知识库里没有的,系统会不会拒答?
  4. 旧版本问题:系统会不会返回过期信息?
  5. 冲突问题:两份资料矛盾时,系统怎么处理?

坑 3:没有删除机制

现象:知识库运行了半年,里面的资料早就过期了,但还在被检索和引用,导致回答越来越不准。

原因:知识库没有负责人和过期处理周期。失效资料继续可检索,风险会随着自动化扩大。

处理:


最重要的三句话

  1. RAG 是检索资料后再回答,不是把资料训练进模型,更不是让模型用常识编答案。
  2. 资料清洁、版本和来源,比参数炫技更重要——垃圾进,垃圾出。
  3. 可靠助手要会引用、会拒答、会暴露冲突,这三个能力比"什么都能答"重要一百倍。

下一站预告

资料问答解决了"依据什么回答",下一篇《L1D-06 工具调用与外部集成:让 Agent 能安全使用 API》会继续讲搜索、图片、TTS、数据库和 MCP 工具的接入。其中会专门讲如何把本项目 vbox 的对外 TTS API 封装成一个 Agent 工具节点。


教程版本:v1.0 最后更新:2026-08 内容时效:知识库产品的切分、检索和隐私配置会更新,正式使用前请复核平台条款。涉及用户数据时,确认数据存储位置和隐私政策。