让智能体动手干活再打分,是近几年评测的主流做法,而 Agent 评测的环境怎么搭,直接决定分数可不可信。环境不稳,同一模型两次跑分能差出一截;环境搭稳了,差距才轮得到模型本身来解释。这篇按搭建顺序,把每个环节的输入输出讲清楚。
环境搭建先想清楚任务边界
动手之前先划任务边界:模型能碰哪些工具、能访问哪些文件、允许几轮交互,都要在任务卡里写死。进来的是任务描述,发生的是把边界翻译成环境配置,出去的是一个可运行的初始状态。边界含糊的环境测出来的分数没有解释力——分低可能是模型不行,也可能是它压根没拿到该有的权限。
任务边界的写法本身有讲究:写成能力清单不如写成行为规则。前者告诉模型「你有什么」,后者约束模型「你在什么条件下能做什么」,评测要观察的是决策过程,行为规则才能暴露决策质量。比如同一个文件读写任务,边界写「可用文件工具」,模型可能在任何一步都去试一下;写成「仅当任务要求修改文件时使用」,模型调用工具的时机就成了可观察的信号。边界一旦写定就不要中途放宽,发现任务跑不通时,正确做法是修订任务卡重新评测,边跑边改边界会把两轮成绩混在一起,失去可比性。这个纪律与种子快照一样,都属于先写死再开跑的基本功。
工具注册与状态隔离
每个工具要在环境里注册清楚:名字、参数格式、返回样式、失败时报什么错。用扣子这类编排平台搭过工作流的话体会最深,工具描述写得含糊,模型调用就乱。状态隔离指任务之间互不残留:上一个任务建的文件、改的配置,不能漏进下一个任务,否则成绩里混进了环境记忆,测的就不纯是模型能力。
沙箱与网络权限的取舍
涉及代码执行的环境必须上沙箱,网络权限按最小需要开:任务不需要联网就把网断掉,既防干扰也防意外。和纯文本判分不同,这一层还要考虑资源回收与超时熔断,细节可参考代码评测沙箱;数学类任务环境简单得多,判分逻辑见数学自动判分。
可复现:种子与快照
可复现是环境质量的底线。固定随机种子、对初始状态做快照,跑完一轮能一键还原再跑第二轮,两次结果才具备可比性。腾讯元宝、豆包这类面向大众的产品做内部评测时,同样依赖快照回滚来排查分数异常。环境管理若不严格,考题还可能顺着语料回流到训练侧,风险分析见题目污染;任务集里若包含安全类题目,题库另有管理规矩,见安全题库维护。
快照之外,环境本身也要有版本号。工具升级、依赖库更新都会悄悄改变环境行为,昨天还能复现的分数今天对不上,排查半天往往发现是环境漂了。做法是把环境定义写成可声明的配置:镜像版本、依赖清单、工具列表各占一行,跑分报告引用对应的环境版本号,别人复现时按图索骥。环境版本与题目版本、判分版本三者对齐,成绩才有资格谈可复现。
多轮任务还有一层特殊性:模型在环境里的操作会改变环境本身,第二轮开始时的状态已经和第一轮不同。处理办法有两种,要么每轮结束强制复位到快照,要么接受状态延续并在任务卡里写明。两种选择测出来的能力面不同,前者看单轮发挥,后者看长程适应,报告里要写清用的是哪一种,读者才能正确理解分数的含义。
五个环节各要写死什么,没写死会出什么岔子:
| 环节 | 要写死的东西 | 没写死的后果 |
|---|---|---|
| 任务边界 | 能碰哪些工具、能访问哪些文件、允许几轮交互 | 分低说不清是模型不行还是没拿到权限 |
| 工具注册 | 名字、参数格式、返回样式、失败时报什么错 | 工具描述含糊,模型调用就乱 |
| 状态隔离 | 任务之间互不残留 | 成绩里混进环境记忆,测的不纯是模型能力 |
| 沙箱与网络 | 代码执行上沙箱,网络权限按最小需要开 | 干扰和意外都防不住 |
| 可复现 | 固定随机种子、初始状态快照、环境版本号 | 昨天能复现的分数今天对不上 |
环境搭建自查清单
- 任务边界和工具清单写死了没有?
- 任务之间状态是否完全隔离?
- 网络权限是不是按最小需要开的?
- 固定种子加快照,第二轮能原样重跑吗?
关于Agent评测环境再多问三句
- 环境搭得不稳,分数会怎么骗人?:波动全部算到模型头上,好模型被记成发挥失常,差模型可能蒙对高分。
- 工具描述写到多细才够?:参数、返回、报错三样齐全即可,写太长反而挤占模型注意力。
- 快照要在什么时机打?:任务初始化完成、模型尚未介入之前,这一帧才是干净的可还原点。


