任务生成出来之后,还要过几道关。看起来合理的任务,实际跑起来可能直接失败。

EntBench-Agent 的第四层是门控系统。

这一层我觉得非常重要。因为 LLM 生成的任务草稿,第一版大概率会有各种小问题。

有的问题是格式问题。

有的问题是工具范围问题。

有的问题是实体关系问题。

还有的问题更隐蔽:任务文字看起来合理,但真实工具链跑一遍之后,最终数据库状态达成失败。

所以系统加了两类 gate:

规则门控
可解性门控

1. 规则门控先查静态问题

规则门控主要检查 task draft 本身是否合理。

它会看这些东西:

JSON 结构是否完整
stage 字段是否齐全
required_tools 是否来自 allowed_tools
forbidden_tools 是否被避开
fill_blanks 是否有 expected
state_checks 是否指向真实表和字段
stage 依赖关系是否合理
实体 ID 是否来自 seed

这一步很像编译器里的静态检查。

比如一个 task draft 里写:

required_tools: ["delete_document"]

但 seed 里把 delete_document 放在 forbidden tools 里,那这个任务就要被拦住。

再比如 state check 写了一个数据库里缺失的字段:

PermissionRequest.status_code = approved

但真实字段叫 status,这个检查就会失败。

这种问题靠人工看很容易漏,靠规则检查更稳。

2. compiler 后还有补充检查

task draft 通过初步检查之后,会进入 compiler。

compiler 会做一些补全和转换:

根据 seed 和数据库补全 expected
构造 DatabasePatch
生成 cross-stage checks
生成 task.md
生成 task.py

这里还会做第二轮检查。

比如某个 fill_blank 的 expected 为空,但 seed 和数据库里可以推断出 request_id,compiler 就能补上。

再比如 task.py 需要在任务开始前确保某个 permission request 处于 pending,compiler 会生成数据库初始化 patch。

这一步的目标是让任务初始状态稳定。

如果任务开始前数据库状态飘了,后面评测就会变得很混乱。

3. 可解性门控:真的跑一遍工具链

规则门控能检查格式和静态关系,但它还没验证任务是否真的能被执行。

所以系统还需要可解性门控。

这一步会根据任务要求,把工具链真实跑一遍,然后检查:

工具是否能正常调用
参数是否能从前面阶段得到
读任务的 fill_blank 是否能回答
写任务的 state_check 是否能达成
跨阶段 ID 是否保持一致
最终 evaluator 是否通过

我觉得这一步非常像给题目做“试做”。

出题之后,系统自己先把题跑一遍。

跑通了,这个任务才进入 benchmark。

跑崩了,就进入修复或过滤。

4. 一个权限审批任务怎么被检查

还是拿文档权限审批举例。

任务目标是:

找到 pending edit request
审批这个 request
确认 requester 获得 edit 权限

规则门控会检查:

request_id 是否来自 seed
document_id 是否来自 seed
approve_permission_request 是否在 allowed_tools
reject_permission_request 是否出现在危险列表
state_checks 是否检查 PermissionRequest 和 DocumentPermission

可解性门控会真实执行:

list_permission_requests
get_document
approve_permission_request
list_document_permissions

然后检查数据库:

PermissionRequest(req000123).status = approved
DocumentPermission(doc000456, user031).permission = edit

如果 request 状态更新了,但 permission 记录没生成,那就是部分写入成功,任务评测会失败。

这种失败靠看任务文本很难发现,必须跑工具链。

5. 失败后怎么处理

PDF 里提到两种处理方式。

第一种是 gate repair。

系统把失败日志反馈给 LLM,让它修复 task_draft.json,然后重新编译和验证。

比如工具范围错了、评测字段写错了、stage 依赖写漏了,都可以尝试修。

第二种是过滤。

多轮修复之后仍然失败的任务,直接从样本集中移出。

这听起来有点浪费,但我觉得很必要。benchmark 最怕混入无解任务。无解任务会让 Agent 背锅,也会污染后面的失败分析。

6. 错误分类

门控失败还会形成错误分类。

常见类型包括:

格式错误
工具范围错误
实体关系错误
状态检查错误
可解性失败
跨阶段一致性失败

这些错误分类后面可以接到第六部分的失败分析体系。

也就是说,门控除了筛样本,也在收集系统哪里容易出错。

比如某一类 motif 经常可解性失败,说明 seed 采样或工具筛选有问题。

某一类 state_check 经常失败,说明 compiler 或 evaluator 设计要回头看。

7. 这一层的小结

我觉得门控系统是 EntBench-Agent 从“任务生成器”变成“benchmark 合成系统”的关键。

任务生成只是第一步。

真正能进入 benchmark 的任务,需要通过:

结构检查
实体检查
工具检查
编译检查
真实执行检查
评测检查

这一层把“看起来像任务”变成“真的能评测的任务”。