日常居 AI、SEO与投放的一些笔记
AI 应用工程

RAG 检索不准,八成不是模型的问题

2026-10-12 · AI 应用工程

有个内部知识库问答,用户反馈"答得驴唇不对马嘴"。第一反应是换模型,从 A 换到 B,没好多少。后来花了两天做归因,发现模型完全是无辜的。

问题一:切块切在了句子里

最初的切块策略是"每 500 字切一刀",简单粗暴。结果很多段落被从中间切开,前半句在块 A,后半句在块 B。检索命中块 A,模型看到的是半句话,自然答不完整。

改成按语义边界切:优先在标题、空行、句号处断开,块大小控制在 300 到 600 字之间,相邻块保留 80 字重叠。同一个文档里的块,带上标题路径作为上下文前缀,比如"报销制度 > 差旅 > 住宿标准"。

这一项改完,人工抽检的准确率从 54% 提到 71%。

问题二:只做向量检索

向量检索擅长"意思相近",不擅长精确匹配。用户问"出差住宿一晚最多报多少",向量可能召回一堆讲"员工福利"的段落,因为语义上都跟"待遇"沾边。

我们现在是混合检索:向量召回 20 条,关键词(BM25)召回 20 条,用倒数排名融合(RRF)合并,取前 8 条给模型。遇到带数字、专有名词的问题,关键词那一路往往才是对的。

问题三:没有评估集

这是最要命的。改完不知道是好是坏,只能凭感觉。

我们花了半天整理了 60 个问题,每题标好"应该来自哪个文档的哪一段"。每次调整切块或检索策略,跑一遍,看命中率。评估集不大,但足够判断方向对不对。

有了评估集才发现,之前很多"感觉变好了"的调整,其实是噪声。

还有一些小细节

  • 块里带上文档标题和更新时间,模型回答时会引用,用户也更容易验证
  • 检索结果按相关度截断,不要把所有召回都塞进上下文——噪声比缺失更伤
  • 提示词里明确写"如果资料里没有,就说没有",不加这句模型特别爱编

RAG 的效果上限由检索决定,模型只负责把找到的东西说清楚。检索给的东西不对,再强的模型也只能一本正经地胡说。

← 更新的一篇技术 SEO 上线前该过的十二项
更早的一篇 →信息流投放,素材是第一生产力
← 返回首页