几千页的产品文档,怎么让 AI 帮我们查?

全发过去?发不下——上下文窗口有上限。让模型"背"下来?那是微调,又贵又难更新,文档改一个字都得重来。

还有一个办法——不背,去查。答题之前,先把相关的几页翻出来摆在桌上,然后照着答题。这就是开卷考试。

正规叫法是 RAG(检索增强生成)。这篇把它的全流程拆开:书是怎么编上索引的,考场上书是怎么翻的,坑都在哪。

一、总览:两步走

开卷考试要做两件事:考前把书编好索引,考场上按题翻书。RAG 也是这两步。

建库 —— 离线做一次,慢慢来 原始文档 切块 拆成小段 向量化 变成一串坐标 向量库 找坐标最像的几块 答题 —— 每次提问,现场翻书 用户提问 向量化 检索 拼进提示词 模型作答 拿问题去库里,找坐标最相近的几块
离线:切块、变坐标、入库,做一遍就够。在线:问题也变成坐标,去库里挑出最近的几块,摆到模型面前再作答。

建库是"离线"的——做一遍就够,慢慢来;答题是"在线"的——每次提问都要跑一遍,要快。

二、建库:把书编上号

先看建库。这一步做一次,之后每次答题都受益。

原始文档先过一道切块:一篇长文塞不进任何一张"桌子",得拆成一段段小纸片。怎么切有讲究——按标题切、按段落切、按固定字数切;每块多大、块与块之间要不要留点重叠,都是要调的参数。

切块 —— 下刀的位置,决定块的成色 切在边界 —— 每块都完整 安装失败时,请先检查网络设置。 如果还是不行,换一个网络再试。 切在字中间 —— "设""置"分了家 安装失败时,请先检查网络设 置。如果还是不行,换一个网络再试。
切块的第一要义:下刀落在句号、段落这些"缝"上;一刀切进字里,两块各拿半句话,谁都读不懂。

然后向量化:每块纸片过一遍 embedding 模型,变成一串数字——像在"语义地图"上标了个坐标。意思相近的段落,坐标也挨得近。这一步,是"查意"的本钱。

向量化 —— 一段话,变成地图上的一个点 可折叠的 iPhone 发布 (0.12, 0.87, 0.31, …) 可折叠的 iPhone 发布 折叠屏铰链供应商 三季度财报解读 退款说明
每段话被算成一串数字,落在"语义地图"上的某处——意思相近的,彼此挨着。真实坐标有几百上千维,这里放平了画而已。

最后入库:坐标和原文绑在一起存好——坐标管"找",原文管"用"。

入库 —— 坐标和原文,一起存好 可折叠的 iPhone 发布 (0.12, 0.87, …) 折叠屏铰链供应商 (0.15, 0.79, …) 三季度财报解读 (0.94, 0.11, …)
每条记录都绑着两样东西:坐标管"找",原文管"用"——先靠坐标定位,取出来的是原文。

三、答题:按题翻书

问题进来,也先过一遍 embedding,落进同一张地图;然后找离它最近的几个邻居,把对应的原文取出来——这就是检索,通常取前 3 到 10 块。

检索 —— 问题也落进地图,找离它最近的邻居 可折叠的 iPhone 发布 折叠屏铰链供应商 三季度财报解读 能折的手机叫什么? 最近的两个点被选中 —— 取走的是它们存的原文
问题也被算成一串数字,落进同一张地图;谁离得近,谁对应的原文被取出来,拼进提示词。太远的,留在库里。

取出来的块,和问题一起拼进提示词,交给模型。模型看到的不是整座图书馆,只是桌上这几页——但它答得踏实,因为材料就在眼前。

四、每一步都有坑

流程不复杂,但每一步都有坑:

  • 切得不好——一段完整的意思被拦腰切断,谁也读不懂;
  • 找得不准——你问"退款",文档里写的是"退货",对不上;
  • 塞得太多——翻出一堆似是而非的段落,把真正有用的淹没,模型反而晕了。

还有个常被忽略的事实:RAG 治不好幻觉。有审计发现,法律领域的 RAG 系统,幻觉率依然两位数——检索只是把材料放到桌上,答卷还得靠模型自己,读跑偏的照样跑偏。

五、找的两种思路

上一节说"找得不准"是个坑。那"找"这个环节,到底靠什么找?两种思路:

  • 查字——拿关键词对字面,对上了算命中(grep 那一路);
  • 查意——按语义相似度找,"能折的手机"能对上"可折叠的 iPhone"(向量检索那一路)。

口诀很直白:知道想要什么字,用查字;知道想要什么意思、但不知道原文怎么写,用查意。

找版本号、找配置、找错误码——查字又快又准;"我们没有带娃上班的政策吗"这种问法——只能靠查意。谁也不是万能的,场景说了算。

有趣的是最近的实验:把 grep 放进几套真实的 Agent 环境里和向量检索对照——多数组合里,grep 的准确率反而更高。作者自己补了句公道话:环境的影响,比检索方式的影响还大。

于是这两年,中小规模的知识库开始流行一种朴素做法:直接放文件里。文档写成 markdown 放进 git 仓库,agent 自己翻——目录树就是索引,README 就是导览图,git 顺手把版本管理也解决了。

有团队把 94 篇文档的知识库,从 RAG 换成了纯文件检索:单问题耗时从 48 秒降到 17 秒,答案从"每次可能不一样"变成"每次一样",跨文档关系类的问题反而能答了——因为 agent 会顺着文件之间的引用一路读过去,而不是在相似度碎片里拼图。

当然,前提是对得上:几百到几千页、结构化、自己人写自己人用——文件就够了。大到几十万条、来源杂乱、还要语义泛化的时候,向量检索仍是主路。不是推翻谁,是各回各的赛道。

开卷考试,考的从来不是记性,是找资料的本事。

RAG 也一样——八成功夫在"找":找得快,是索引的事;找得准,是切块和检索的事。剩下的,才轮到模型作答。