这道题其实问的是[[RAG]]系统上线前怎么验证它好不好用,本质上是两段式质量验证,检索和生成得分开看,因为问题出在哪一段完全不一样。我先说检索质量。
检索评估核心就两件事:找全和排好。找全看Recall@K,分母是黄金相关文档总数;前K中的相关占比是Precision@K。比如客服退款场景,用户说“订单还没退”,系统得把退款政策和订单状态相关文档都捞出来,漏一个就可能答错。排好看MRR和NDCG,MRR关注第一个正确答案是不是排前面,NDCG则更精细,允许相关度分级。比如企业SOP文档,有的段落完全匹配,有的只沾边,NDCG就能区分。实际落地时,我倾向于混合用:Recall@K保底,MRR兜快,NDCG优化排序。但前提是得有标注数据,没有的话我会用[[Embedding]]模型自动打标做快速迭代,不过自动标注有噪声,上线前必须人工抽检。
生成质量我重点盯**[[忠实性]]和答案相关性**。忠实性就是看有没有[[Hallucination]],比如明明检索文档里没写满减政策,模型却编了一个,这在商家场景里很致命。我常用NLI模型判断答案和检索内容是否矛盾,或者让LLM自己打分,但LLM打分不稳定,尤其用本地小模型时,分数经常忽高忽低,这是个大坑。答案相关性则看有没有跑题,用户问“退款到账时间”,模型回答“退款流程”,就不行。我一般用问题-答案的Embedding相似度初筛,再用LLM精判。这里有个边界:忠实性比相关性优先级高,因为不忠实等于瞎编,相关性差顶多是答非所问。
端到端评估我用[[RAGAS]]框架,它自动化程度高,不用人工标注,但LLM打分不稳定,所以我建议用GPT-4级别的模型做评判,或者本地大模型加校准,比如跑一批样本人工打分,把LLM分数映射到人工尺度上。ARES用合成数据训练评判模型,成本低,但合成数据分布和线上可能不一样,需要验证。人工评估是最终标准,A/B测试看用户反馈,比如客服场景看解决率。
不过RAGAS有个隐藏问题:它对上下文相关性的打分经常和人对不上,比如检索文档冗余但答案对,它可能判错,所以我会加一层上下文压缩的评估,看系统剔除无关信息的能力。
最后说说落地取舍。我一般先保检索Recall@K,因为检索漏了,生成再好也没用。再针对生成做忠实性过滤,分太低的直接不回答。上线我会特别关注常见失败场景:比如检索返回空集时模型怎么处理,是硬编还是拒绝回答;再比如多轮对话中上下文漂移,检索文档和当前问题脱节。说白了,没有银弹,指标得和业务绑定,客服加解决率,知识问答加信息完整性。我更倾向把评估看成持续监控,上线后跑离线集,定期看趋势,不追求单次完美。