当前位置: 首页 > news >正文

RAG 系统评测:检索命中和答案正确要分开看

RAG 系统评测:检索命中和答案正确要分开看

一、RAG 失败不一定是模型回答差

RAG 系统由检索和生成两部分组成。用户看到的是最终答案,但答案错误可能来自多个环节:问题改写失败、检索未命中、召回文档过多、排序不准、上下文截断、模型没有引用证据,或者模型在证据不足时仍然编造。因此评测 RAG 时,不能只给最终回答打分。

更合理的做法,是把检索质量和生成质量拆开评估。检索阶段关注是否找到了正确证据,生成阶段关注是否基于证据回答、是否覆盖关键点、是否拒答不确定问题。这样才能知道优化方向是向量库、chunk 策略、rerank 模型,还是 Prompt 和生成模型。

二、评测链路:问题、证据和答案要可追踪

flowchart TD A[评测问题] --> B[检索系统] B --> C[TopK 文档] C --> D[Rerank] D --> E[生成模型] E --> F[最终答案] C --> G[检索指标] F --> H[生成指标]

评测集应包含问题、标准答案、标准证据文档 ID 和必要的拒答样本。只有标准证据,才能计算 Recall@K、MRR、nDCG 等检索指标。只有拒答样本,才能评估系统是否在知识库没有答案时保持克制。

对于企业知识库,建议使用真实用户问题和人工标注证据构建评测集。自动生成问题可以增加覆盖面,但不能完全替代人工标注。生成问题往往过于贴近文档原文,容易高估检索效果,而真实用户提问通常含有缩写、口语和上下文省略。

三、指标实现:先计算检索是否命中

下面示例展示 Recall@K 的基本计算。它回答的是“正确证据是否出现在 TopK 结果中”。

def recall_at_k(predicted_doc_ids, gold_doc_ids, k: int) -> float: hits = 0 for preds, golds in zip(predicted_doc_ids, gold_doc_ids): topk = set(preds[:k]) gold_set = set(golds) if topk & gold_set: hits += 1 return hits / max(len(gold_doc_ids), 1)

如果 Recall@5 很低,优先排查 embedding 模型、chunk 切分、索引字段和查询改写。此时继续调 Prompt 通常没有意义,因为模型没有拿到正确证据。如果 Recall@5 很高但答案质量差,再检查上下文拼接、证据排序、引用格式和生成模型。

生成质量可以采用人工评估和模型辅助评估结合。人工评估更可靠,但成本高;模型评估效率高,但需要校准。建议抽样人工复核模型评估结果,计算一致性。如果评估器本身不稳定,RAG 指标也不可信。

四、实验变量:一次只改一个因素

RAG 优化容易同时修改多个因素,例如换 embedding、改 chunk、加 rerank、调整 TopK 和 Prompt。这样虽然可能分数提升,但无法知道是哪一项有效。严谨实验应一次只改一个变量,固定数据集、固定生成模型、固定评估脚本,并记录版本。

还要关注延迟和成本。更大的 TopK、更强的 rerank 和更长的上下文通常能提高准确率,但会增加响应时间和 token 消耗。工程上需要画出准确率、延迟和成本之间的曲线,而不是只追求最高分。

最后,评测集要定期更新。知识库内容会变化,用户问题分布也会变化。一个长期运行的 RAG 系统,应把线上失败样本回流到评测集中,让评测覆盖真实问题,而不是只在初始样本上取得高分。

五、总结

RAG 评测要拆分检索命中和生成正确性。先确认正确证据是否被召回,再讨论模型是否基于证据回答。标准证据、拒答样本、单变量实验和成本延迟曲线,是让 RAG 优化可解释的基础。

http://www.jsqmd.com/news/1112530/

相关文章:

  • AI 无障碍评审:让界面被看见,也能被读懂
  • 缓存一致性实践:删除缓存不是银弹
  • 2026届毕业生必备AI工具:论文求职效率全攻略
  • AI 存储异常检测:先定义指标拓扑,再谈智能告警
  • Rust FFI 包装推理库:unsafe 边界要像防火墙一样清楚
  • Home Assistant Operating System终极方案:如何构建专业级智能家居操作系统?
  • LV30条码扫描器与PIC18F27K40微控制器的集成与优化
  • AI 日志摘要:别把关键上下文压没了
  • GraphQL 成本控制:灵活查询也要有防火墙
  • ASP.NET 8 Cookie身份验证实现与安全实践
  • SpringBoot+MySQL构建云端课堂系统的实践指南
  • 我的编程经历与我所热爱的游戏服务端开发
  • 一种让图像生成模型懂得自我纠错的新技术
  • 专知智库OPC研究院——帮助每一个有意义的想法,创世为有生命力的细胞公司
  • 6轴MEMS传感器与微控制器的三维运动跟踪方案
  • 创业团队技术债:该借,但要写借条
  • HPA 扩缩容:CPU 指标不够,业务队列也要进来
  • 影刀RPA新手教程:鼠标拖拽完全指南——让影刀帮你拖动文件和界面元素
  • 2026编程LLM选型指南:基准、场景与自验证
  • LeetCode 高频题:双指针不是模板,是单调关系
  • Go Wind UBA 拆解系列 - 多租户与安全:两套隔离机制的边界
  • Skywalking分布式监控部署与SpringBoot集成实战
  • 【计算机Java毕业设计案例】基于 SpringBoot 的水务应急预案管理与智能调度系统的设计与实现 基于 SpringBoot 的水务运行大数据分析与应急决策系统(程序+文档+讲解+定制)
  • 【每天认识一个国家 | 法国】
  • 医养智伴APP的设计与开发
  • 情绪类 AI 的安全分级:先识别风险,再决定回应方式
  • Device Tree 调试:外设不工作,先别急着改驱动
  • AI 后端队列背压:请求堆住时,系统要会说不
  • Java计算机毕设之基于学习行为分析的自适应课程推荐系统的设计与实现 基于 SpringBoot 的在线教学资源个性化推荐系统(完整前后端代码+说明文档+LW,调试定制等)
  • 从零到一开发「天才厨神」美食烹饪小程序:架构设计与踩坑记录