这道题其实是在问,怎么衡量[[RAG]]系统到底好不好。我的理解是把评估拆成三个层面来思考:检索评估、生成评估和端到端评估。我先说自动评估,再说人工评估,最后聊一下落地怎么取舍。
先说检索评估。这一步主要是看检索回来的片段质量怎么样。我最常用的指标是Recall@K,K一般取5或者10,它关心的是正确答案有没有被召回。如果业务场景对排序有要求,比如搜索结果要展示前几条,我会加上MRR来评估第一条正确结果的位置。不过说实话,检索评估只是中间环节,最终还是要看生成效果。
生成评估这边,如果任务有标准答案,比如FAQ场景,可以用BLEU或ROUGE做n-gram匹配。但我更推荐BERTScore,因为它基于语义相似度,对同义改写更鲁棒。举个例子,用户问“退款流程是什么”,标准答案是“在订单详情页点击申请退款”,如果模型回答“进入订单页面选择退款”,BLEU分数会很低,但BERTScore能判断出语义一致。
端到端评估我主要用[[RAGAS]]框架,它包含四个维度:[[Faithfulness]]、Answer Relevance、Context Relevance和[[Context Recall]]。其中Faithfulness是最关键的,它看模型有没有捏造内容。比如在客服退款场景,如果检索到的政策是“7天无理由退款”,但模型说“15天包退”,这就是不忠实。
人工评估方面,我关注四个维度:相关性、忠实性、有用性和连贯性。相关性和忠实性在自动评估里也能覆盖,但有用性必须靠人工判断。比如用户问“我的订单怎么还没到”,模型回答“您的订单预计明天到达”,虽然相关且忠实,但用户真正想要的是物流跟踪链接,这就是有用性不足。人工评估的适用场景很明确:高风险领域比如医疗、法律,忠实性必须人工把关;对话类产品则要重点看有用性和连贯性。
落地选型上,我的经验是迭代开发期用RAGAS跑自动评估,配合少量人工抽检,这样效率高。但上线前一定要做完整的人工评估,建立bad case库。线上监控则要埋点收集用户反馈,比如点赞点踩,形成闭环。
这里有个坑:自动指标和用户满意度可能脱钩。比如RAGAS的Faithfulness很高,但用户觉得答案没用,因为检索回来的上下文本身就不对。所以我会把自动评估看成筛选器,人工评估才是最终标准。
另外,我最近在关注如何用[[Self-RAG]]让模型自己评估自己的生成,通过反思和纠错来提升Faithfulness。
所以我的整体看法是:没有一套指标能通吃所有场景,关键是理解每个指标背后的含义,然后根据业务需求做组合。我更倾向于把评估做成一个持续迭代的过程,而不是一次性打分。