很多人调 Agent 全靠手感:改一版 Prompt,自己问两句,觉得"好像变好了"就上线。我以前也是,直到改 A 修好了一个问题、却悄悄弄坏了另外仨,线上才发现。后来我老老实实攒了套评测用例,调 Agent 从拍脑袋变成看数字。这篇讲我一个评测集都没有的情况下,怎么从零把它攒起来的。
为什么必须有评测集
LLM 改动有个反直觉的地方:你改 Prompt、换模型、调检索,任何一处动一下,整体行为都可能漂。没有评测集,你根本不知道这次改动是净赚还是净亏——修好了眼前这个 case,可能踩塌了你没注意的五个。
评测集就是一组"问题 + 期望表现"的固定题库,每次改完拿它整体跑一遍,分数涨了才算真改好。本质上是给 Agent 上回归测试。
我攒用例的四个来源
来源一:上线前自己设想的核心场景。冷启动时没有真实数据,只能先靠想。我把这个 Agent"应该能答好的"典型问题列出来,二三十条打底。客服 Agent 就列退换货、发票、物流、改地址这些高频的。
来源二:badcase,这是金矿。上线后每一条答错、答偏、用户追问"你没懂我意思"的对话,我都捞出来变成一条评测用例。这批用例最值钱,因为它们是 Agent 真实摔过跤的地方。我专门在日志里给点了踩、转人工、重复提问的会话打标,定期捞。
来源三:边界和刁钻问题。故意构造一些难的:模糊提问("那个东西怎么弄")、超纲提问(知识库里没有的)、多意图混在一句、带前置条件的。这批用来测 Agent 的下限和稳健性。
来源四:同义改写扩充。同一个意图,用户问法五花八门。我把核心问题用不同口吻、方言化、加错别字各写几遍,覆盖真实的提问多样性。"咋退货""怎么退""我想把东西退了"得都能答对。
每条用例我记什么
不是只记一个标准答案——Agent 的回答是开放的,逐字比对没意义。我记的是判断要点:
问题:买的东西七天了还能退吗 必须包含:7天无理由的时间判断 / 提到需未影响二次销售 不能出现:编造的客服电话 / 承诺无条件全退 期望动作:命中"退货政策"知识 → 给出条件式回答判对判错看"必须包含 / 不能出现"这些点,而不是跟一个死答案逐字比。
怎么判分:人工 + LLM 评委混着来
几十条用人工过一遍最准,但用例攒到几百条,每改一版都人工跑一遍就吐了。我后来上了 LLM 当评委:让另一个模型按我写的评分标准给 Agent 的回答打分。它不完美,但批量回归够用,我再人工抽查它打分有没有离谱。关键是评分标准要写得具体,"回答是否准确"这种虚的让评委也没法打,得拆成可勾选的点。
两个真实的坑
评测集会过时。业务变了、知识库更新了,老用例的"标准答案"可能已经不对了。我吃过亏:某条用例期望答 A,可政策早改成 B 了,评测一直报"错",查半天发现是用例自己过期了。得定期回头校用例。
别用例太干净。全是工整的标准问法,评出来分很高,一上线被用户的乱七八糟问法打回原形。评测集里必须掺够脏数据——错别字、半句话、答非所问的追问,它们才像真实用户。
收尾
攒评测集是个枯燥但回报极高的事,有了它,调 Agent 才有方向盘。我现在跑评测就在讯飞 Agent 平台里配好题库批量跑,模型走它的 MaaS 直接调,不用自己搭评测服务和模型环境,改一版 Prompt 跑一遍看分数,踏实多了。
你们调 Agent 有没有评测集?badcase 都怎么收集的?评论区聊聊你们的回归办法。