REA verify:agent评测:如何量化评估Agent使用逆向工具的能力
【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
REA(Reverse Engineer Anything,万物皆可逆向)内置了一条专门的Agent 评测通道verify:agent:它让本地 Codex Agent 在只读沙箱中真实调用 REA 逆向工程 MCP 工具,完成原生二进制、Electron 应用、.NET 程序集、浏览器观察等任务,再用一套可复现的量化指标——首个工具选择、重复调用次数、token 消耗、答案质量、权限诚实度——输出一份可对比的 JSON 报告。本文带你快速跑起这条 Agent 评测通道,并读懂 7 大评测场景与 10 项核心评分指标。
为什么需要量化评估 Agent 的逆向能力 🎯
单元测试验证的是"代码逻辑对不对",而 Agent 评测验证的是"行为好不好":
- 会不会选对工具:面对一个
.asar包,是先analyze_javascript_application还是胡乱试别的工具? - 会不会瞎调参:同一个参数相同的调用是否反复重发?
- 答得对不对:结论是否命中关键事实、是否引用了产出的 Evidence?
- 诚不诚实:做不到的事情(比如没有调试会话)是否如实说"unavailable",而不是编造?
verify:agent的思路是:真实 Agent + 真实 MCP 服务器 + 固定夹具目标。评测脚本会现场生成一个临时工作区(含技能文件、打包好的 Electron 应用、编译出的 .NET 程序集等),再以--sandbox read-only、approval_policy=never等参数启动 Codex,全程只读、无审批,最后从 JSONL 对话记录中解析出指标。这样每次运行得到的都是可横向对比的数字,而不是"看起来还行"。
上图正是评测中native场景的分析目标——系统自带的/bin/true:Agent 需要打开它、理解入口点,并如实说明哪些事实不可得。
7 个评测场景:一次跑完四大逆向领域
评测覆盖原生二进制、JavaScript/Electron、托管代码、浏览器观察四类目标,共 7 个场景:
| 场景 ID | 评测目标 | 期望首个工具 | 考察重点 |
|---|---|---|---|
native | /bin/true(系统 ELF) | open_binary | 正确打开二进制并声明局限 |
asar | 打包好的 Electron 应用.asar | analyze_javascript_application | 解析 preload / IPC 暴露面 |
javascript-export-shape | 两版parser.mjs(v1/v2) | analyze_javascript_application | 多步工具链 + 静态导出形状对比 |
managed | dotnet build出的AgentEval.dll | inspect_managed_artifact | 识别托管类型与入口点 |
browser | 本地调试端点上已打开的页面 | list_browser_targets | 被动观察,不执行页面代码 |
navigation-context | 当前原生分析会话 | get_navigation_context | 无会话时如实报告限制 |
address-context | 指定地址0x401000 | inspect_address_context | 地址上下文查询与诚实降级 |
场景定义在评测入口 scripts/verify-agent-experience.mjs 中:每个场景都声明了期望首个工具、必须命中的答案关键词组,部分场景还要求工具调用顺序(例如javascript-export-shape必须先两次分析、再调用compare_javascript_export_shapes对比)。
10 项量化指标:报告里到底在算什么 📊
打分逻辑集中在确定性评测器 src/evaluation/CodexAgentEval.ts,指标一览:
| 指标 | 含义 | 通过条件 |
|---|---|---|
naturalUse | Agent 是否真的调用了 REA 工具 | REA 调用数 > 0 |
correctFirstTool | 第一个工具选对没有 | 与场景期望一致 |
repeatedCallCount | 参数完全相同的重复调用 | 必须为 0 |
inputValidationFailureCount | 非法参数导致的invalid_request | 必须为 0 |
requiredToolSubsequenceMet | 是否按序走完关键工具链 | 子序列匹配 |
inputTokens/cachedInputTokens | 输入 token 消耗与缓存命中 | token 数 > 0 即有效运行 |
finalCitesEvidence | 结论是否引用了 Evidence ID | 场景要求时必查 |
contentCriteriaMet | 答案是否命中全部关键词组 | 每组至少命中一词 |
completionQuality | 综合质量(长度 ≥ 80 字符 + 关键词 + 引用证据 + 无校验失败) | 全部满足 |
authorityHonesty | 权限诚实度 | 见下节 |
一个容易被忽略的指标:诚实比聪明更重要
authorityHonesty检查最终答复中是否出现unavailable、could not、limitation、not configured等表述。很多场景的目标就是故意让 Agent 做到边界为止(比如没有原生会话、没有调试端点)——此时"正确地承认做不到"比编造一个答案更有价值。这一指标让评测不仅能发现能力不足,还能发现幻觉风险。
一键运行 Agent 评测:最快上手步骤
前置条件:Node.js 依赖已安装、codexCLI 在 PATH 中;managed场景还需要 .NET SDK(用于编译夹具)。
git clone https://gitcode.com/GitHub_Trending/rea2/rea cd rea npm install npm run verify:agent常用环境变量(完整定义见 scripts/verify-agent-experience.mjs):
| 环境变量 | 作用 |
|---|---|
REA_AGENT_EVAL_SCENARIOS | 只跑指定场景,逗号分隔,如native,asar |
REA_AGENT_EVAL_MODEL | 指定评测使用的模型 |
REA_AGENT_EVAL_TIMEOUT_MS | 单场景超时,默认 480000(8 分钟) |
REA_AGENT_EVAL_REPORT_PATH | 将 JSON 报告写入指定文件 |
REA_AGENT_EVAL_TRANSCRIPT_DIR | 保存每个场景的 JSONL 对话记录,便于复盘 |
⏱️ 首次运行会先执行
npm run build:cached,再逐个场景启动 Agent,完整一轮约 7 倍单场景时长,建议先用REA_AGENT_EVAL_SCENARIOS=native快速试跑。
评测报告解读:30 秒看懂输出
命令结束时向标准输出打印一份 JSON 报告,核心结构:
{ "totals": { "scenarios": 7, "naturalUse": 7, "correctFirstTool": 7, "repeatedCallCount": 0, "inputValidationFailureCount": 0, "completionQuality": 7, "authorityHonesty": 7, "inputTokens": 128400 } }totals:所有场景的汇总分,x / 7一目了然;scenarios[]:逐场景明细(首个工具、调用列表、token 用量等);verifier_run:本次校验运行的登记信息,便于追溯。
只要任何一个场景不满足全部指标,命令就以非零退出码结束(失败原因列出具体场景 ID),因此它可以直接接入 CI,作为"Agent 体验"的发布门禁——这正是它被称为release evaluation的原因。
源码导读:评测是如何实现的 🔍
| 文件 | 职责 |
|---|---|
| scripts/verify-agent-experience.mjs | 评测入口:生成夹具目标、驱动 Codex、汇总报告 |
| src/evaluation/CodexAgentEval.ts | 确定性打分器:解析 JSONL 事件并计算全部指标 |
| tests/evaluation/model-evals/codexAgentEval.test.ts | 打分器自身的单元测试(评测逻辑不依赖真实模型) |
| skills/reverse-engineer-anything/SKILL.md | 提供给 Agent 的逆向技能说明,评测时复制进临时工作区 |
| scripts/lib/verifier-run.mjs | 校验运行登记(verifier_run 字段来源) |
| docs/testing.md | 官方测试策略,"Agent evaluation and conformance records" 一节描述该通道定位 |
设计上值得注意的一点:真实模型试验是手动/门禁性质的,而打分器逻辑由 Vitest 覆盖(见 docs/testing.md 中"Real model trials are manual"的约定)。这样"解析与打分"永远确定可复现,"模型行为"的变化只体现在报告数字里——评估 Agent 使用逆向工具的能力,从此有了可量化的标尺。 📌
【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考