AI Agent 开发 08|资料里明明有答案,RAG 为什么还会答错

11 小时前
/ , ,
摘要
分开索引与查询,理解 embedding、topK、混合检索和引用,沿真实数据排查 RAG 错误。

AI Agent 开发 08|资料里明明有答案,RAG 为什么还会答错

知识库助手要回答项目自己的问题,得先找到项目资料。RAG 把相关内容取出来,放进模型当前请求,再让模型依据它生成回答。

这条过程没有改变模型参数。资料更新以后,主要工作是同步来源和索引,再验证查询结果。模型能否答对,还取决于读取、切分、检索和生成是否都处理正确。

建索引与回答问题分开运行

索引任务先读取原始文件,整理成统一文档,切成片段,编码并保存。查询服务则接收问题,在已有资料中搜索,再组织上下文。

索引任务
资料 → 读取与清理 → 分块 → 编码 → 保存

查询服务
问题 → 检索已有数据 → 组织证据 → 生成回答

教程演示有时把两条过程写在同一个脚本里,便于第一次观察完整结果。长期运行时,每次提问都重读整批文件并编码,会增加耗时,也可能重复写入数据。

知识库助手应当知道当前查询使用哪个索引版本。更换分块方式或编码模型时,新索引验收以后再切换,可以保留可对照的旧结果。

向量解决的是相似内容怎样找

Embedding 把文本变成数值向量,用于比较相关程度。提问换了措辞,向量检索仍可能找到描述同一件事的资料。

问题与文档要使用兼容的编码方式。两个模型输出相同维度,也不能据此混用它们的向量。模型、维度或预处理改变以后,需要评估并相应重建索引。

相似度分数也有范围。它描述当前编码与检索系统如何排序,不能证明片段包含答案。关于退款的段落可能与价格问题很接近,却没有每年收费的具体数字。

原教程用余弦相似度解释向量方向的比较。实际选择点积、余弦或欧氏距离时,要符合模型和索引要求。维度更高同样不能单独证明检索质量更好。

topK 返回了内容,也可能没有证据

topK = 3 表示取排名靠前的三条。即使整批资料都没有正确答案,它仍可能返回三条结果。

因此需要看结果是否支持问题。可以结合相关性判断、去重和重排控制进入上下文的内容,并在资料不足时明确说明缺口。阈值需要用实际问题评估,别把某个分数直接当成通用标准。

精确标识还值得单独测试。用户搜索字段名 warehouseId 或错误码时,关键词检索可以补充向量检索。两种检索怎样融合,应当固定一组问题比较。LangChain 的检索文档 也区分了先检索再生成与由 Agent 决定何时检索的组织方式。

把来源一直带到回答里

检索片段至少保留正文、资料 ID 和可定位来源。项目制度有多个版本时,再加入版本与有效时间。组织上下文时,让片段编号与来源对应。

[资料 1]
文件 development.md,章节 本地启动,版本 v3
项目使用 pnpm,启动命令为 pnpm dev。

这是教学用资料。生成时可以要求关键结论使用本次资料编号,没有依据时直接说明缺少什么。程序再核对回答引用的编号是否存在。

编号存在以后,仍要检查内容是否支持结论。某段只说明包管理器,回答却把它引为部署环境的依据,引用格式正确也没有帮助。

检索材料中的文字还可能夹带操作指令。应用应该把它当成待分析内容,不能让资料里的“忽略前面的要求”覆盖系统规则。

沿着实际数据找故障

先确认原始文件中确实有答案,再看解析后的文字。如果 PDF 中的表格关系已经丢失,后面换检索模型也无法可靠恢复。

文字正确,再检查切出的片段。条件与结论是否被分开,章节标题有没有保留,决定最终答案的限制是否完整。片段没有问题,再检查搜索是否召回,过滤是否排掉了正确资料。

最后才看生成阶段。把真实召回片段单独打印,检查模型是否遗漏前提、误用旧版本或引用了无关内容。检索没找到,与找到以后读错了,需要不同的修复。

可以准备十个问题,提前为每个问题标出支持答案的原始位置,其中两个明确没有答案。分别记录检索是否命中、回答是否正确、引用是否支持结论。错误留在具体环节,下一次调整才能知道有没有变好。

延伸阅读

本篇依据冴羽《AI Agent 开发实战》学习整理稿中的索引、向量化和证据核对章节重写。原教程见 RAG 原理、企业知识库实践 和 文档向量化与语义检索。

上一篇 · 系列目录 · 下一篇

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...