这道题其实在问我们怎么把系统做扎实,不是单纯列指标。评估的本质是平衡多个目标,比如召回率、准确率、延迟、成本,没有一套万能指标能覆盖所有场景。我会把评估分成两个层面来讲:检索层和生成层,因为它们的关注点完全不一样。
先说检索层。在 [[RAG]] 系统里,检索是第一步,核心指标是 Recall@K 和 MRR。Recall@K 看的是前 K 个结果里有没有正确答案,MRR 则更看重正确答案排得靠不靠前。举个例子,一个客服退款系统,用户问“我订单超时了,怎么退款”,如果检索没召回退款流程文档,后面生成再强也没用。所以检索层我通常会同时用关键词和向量两种方式,也就是 [[Hybrid Search]],因为光靠语义可能漏掉精确匹配的订单号或错误码。这里有个前提:K 值不能设太大,否则延迟会暴涨。如果系统要求 200 毫秒内响应,K 设到 10 可能就超了,得在召回率和延迟之间找平衡。
再讲生成层。这一步评估的核心是 [[Faithfulness]],也就是生成内容有没有忠实于检索到的文档。很多系统召回做得好,但生成时自己编造,这就是 [[Hallucination]]。我会用 NLI 模型来检测忠实度,比如判断“退款会在 3 个工作日内到账”这句话是否被原文支持。还有一个指标是 Answer Relevance,就是答案跟问题有多相关。比如用户问“退款多久到账”,你回答“退款流程分三步”,相关度就低了。实际落地中,这两个指标有时会冲突:为了让答案更相关,模型可能补充一些原文没有的细节,导致忠实度下降。所以我会设定一个底线:忠实度必须高于 0.9,再优化相关度。
实际挑战有几个。先说标注成本高,比如电商系统的退款政策经常变,要持续标注新数据,专家成本很高。再一个是指标跟用户体验脱节,比如 BLEU 分数高不代表用户满意,可能只是套话多。还有就是延迟跟质量的权衡,检索更多文档能提升 Recall,但响应时间可能从 0.5 秒变成 2 秒,用户等不了。
所以我的实践建议是:离线阶段用 [[RAGAS]] 这种开源框架快速迭代,测一组固定 query 的 Recall@K 和 Faithfulness,看趋势。上线后一定要埋点收集用户反馈,比如点赞点踩,把用户不满意但指标没反映出来的 case 捞回来分析,形成数据飞轮。这样不断优化,系统才能越跑越好。
另外,如果系统有多个工具调用,比如 [[Agent]] 场景,评估会更复杂。我会额外关注工具调用准确率和任务成功率,但核心还是得先保证检索和生成的基础质量,否则上层再花哨也没意义。
最后收一下:我更倾向把评估看成持续的过程,而不是一次性的打分。指标是辅助决策的,真正决定系统好不好的是用户是否完成了任务。