给一堆文档做个问答机器人:一次 RAG 实践记录

2026-08-09 · 实践记录

RAG(检索增强生成)这个词听着唬人,本质很简单:先在资料里找到相关内容,再把内容连同问题一起交给大模型回答。这样模型就不用"凭记忆"瞎编,而是照着你给的材料说。

整体流程就五步

  1. 切片:把长文档切成若干小段(通常 300–800 字一段)
  2. 向量化:用嵌入模型把每段文字转成一串数字(向量)
  3. 存起来:把向量放进向量库,同时保留原文
  4. 检索:用户提问时,把问题也转成向量,找出最相似的几段原文
  5. 生成:把这几段原文和问题一起交给大模型,让它基于材料作答

真正影响效果的三个地方

1. 切片方式比想象中重要

一开始我按固定字数硬切,结果经常把一段完整的说明拦腰截断,检索回来的片段上下文不全,答非所问。后来改成按标题层级切——先把文档按小节拆开,只有小节太长时才继续切,并让相邻片段保留一小段重叠。效果立刻好了一截。

2. 检索回来几条,需要实测

返回 3 条还是 8 条,没有标准答案。太少会漏掉关键信息,太多会把无关内容混进来稀释答案。我的做法是按自己的真实问题测二十来条,从 3 开始往上调,找到效果不再变好的那个点。

3. 要求它"只根据资料回答"

这一步是关键。提示词里明确写:"请只根据以下资料回答;资料中没有的内容,直接说明'资料中未提及',不要自行补充。" 加上这句之后,答非所问和编造的情况明显变少。

对于严肃场景(政策、制度、技术参数),"承认不知道"远比"编一个像样的答案"有价值。

踩过的坑

  • 扫描件 PDF 直接丢进去:识别出来是乱码,等于喂了垃圾。先做文字识别(OCR)再入库。
  • 表格被切成碎片:表格按行切会丢表头。遇到表格多的文档,考虑单独处理或整表入库。
  • 文档更新后忘了重建:资料改了但向量库没更新,答的还是旧内容,这是最容易被投诉的地方。
  • 中文嵌入模型没选对:通用模型对中文的支持参差,选专门优化过中文的,检索质量差别很大。

效果期望要合理

它能做好"资料里有的,快速找到并说清楚",做不好"资料里没有的,帮我推导出来"。如果你的期待是后者,那不是 RAG 能解决的。

小结

这套东西的门槛主要在工程细节,不在概念。先把流程跑通,再花时间调切片和检索,最后加上"只根据资料回答"的约束,基本就能用了。

← 返回AI 技术笔记