epi13/graphflow-agent-bench
GitHub: epi13/graphflow-agent-bench
一个可复现的 A/B 基准测试框架,用于评估基于 Joern 代码属性图的 AI 编程智能体在 C 语言控制流重构任务中是否优于纯源码基线方法。
Stars: 0 | Forks: 0
# GraphFlow Agent 基准测试
GraphFlow Agent Bench 是一个可复现的配对 A/B 基准测试,旨在探讨一个实际问题:基于确定性 Joern 图分析的 Codex 工作流,是否比仅依赖源码、编译器反馈、sanitizers 和可见测试的同一模型,能做出更安全、行为更正确的控制流重构?
该处理被特意描述为**工作流级别的干预**。它结合了 Joern 访问权限、面向图的指令、强制的前/后快照以及 fail-closed 证据检查;这第一个实验并未将 Joern 的可用性与这些周边实践隔离开来。初步结果是探索性的,不应被视为具有统计学意义的结论。
协议版本 1 仍冻结于 `protocol-v1`。当前的 `protocol-v2` 修订版修正了 Task 5 中的一个 Joern oracle,该 oracle 此前无法解析间接的函数指针调用;它并未改变 prompts、baselines 或分数权重。
## 条件与隔离
两个条件都接收相同的规范 prompt 字节、模型、高强度推理努力、超时、不可变的源码和可见测试。通过设定种子的抛硬币决定顺序运行顺序。对照组被置于外部的 Bubblewrap 文件系统边界内,使用被忽略的 Codex 用户配置,移除了包含 Joern 的 PATH 条目,屏蔽了 Joern 安装,并且无法看到基准测试仓库、评估器、参考、生成的案例、处理产物或竞争运行。处理组从相同的 fixture 和 prompt 开始,但接收经过验证的 `joern-agent-mcp` STDIO 服务器、图工作流的 `AGENTS.md`、项目配置和强制执行钩子。
```
flowchart LR
Protocol[Preregistered protocol] --> Pair[Seeded pair coordinator]
Pair --> C[Control sandbox]
Pair --> T[Treatment sandbox]
C --> E[Clean evaluator]
T --> E
E --> R[Append-only results and reports]
```
```
sequenceDiagram
participant P as Pair runner
participant A as First randomized condition
participant B as Second condition
participant E as Evaluator
P->>P: Record order and evaluator seeds
P->>A: Fresh baseline + canonical prompt
A-->>P: JSONL, patch, final response
P->>E: Candidate source only
P->>B: Fresh identical baseline + prompt
B-->>P: JSONL, patch, final response
P->>E: Candidate source only
E-->>P: Runtime, sanitizer, graph, score
```
```
flowchart TB
subgraph Control
CS[Source + visible tests]
CP[Sanitized PATH]
CM[Joern and evaluator masked]
end
subgraph Treatment
TS[Identical source + tests]
JM[Joern MCP]
GH[Graph instructions + hooks]
end
CS --> CodexC[Same Codex model]
TS --> CodexT[Same Codex model]
JM --> CodexT
GH --> CodexT
```
```
flowchart LR
Source[Final candidate source] --> Build[Strict GCC/Clang]
Source --> Cases[Post-run seeded cases]
Source --> San[ASan/UBSan/LSan]
Source --> Joern[Independent Joern analysis]
Source --> Scope[Patch scope]
Build --> Score[Preregistered 100 points]
Cases --> Score
San --> Score
Joern --> Score
Scope --> Score
```
## 任务与评分
无害的 C11 仓库遥测状态机涵盖了解析、验证、分发、状态更改、重试、嵌套分支、多个退出、分配和共享清理。五个任务分别测试验证路径保留、每个退出点的清理、状态转换完整性、循环进展和分发一致性。每个任务都包含哈希处理的规范 prompt、确定性清单、可见测试、生成的评估器案例、图不变量、参考解决方案和一个已知的不良突变。
冻结的评分标准为:生成行为 40,图不变量 20,sanitizers 15,可见回归 10,严格构建 5,范围/最小化 5,保真度 5。
## 初步探索性结果
修复后的 protocol-v2 演示对每个任务运行了一对。对照组在所有五个任务中均得分为 100.00。处理组在任务 1、2 和 5 中得分为 100.00,在任务 3 和 4 中因缺少所需的处理证据而得分为 95.00。平均配对差异为 −2.00,中位数为 0.00,从处理组的角度来看,胜/负/平的计数为 0/2/3。在 v2 测试套件中,两个条件都通过了所有生成的行为案例和独立评估的图不变量。
这五对结果是探索性的,不支持统计学显著性的声明。具体而言,它们**不**支持声称 Joern 辅助的工作流在此演示中提高了测量性能。请参阅[生成的报告](reports/report.md)和[如何解读它](docs/interpreting-results.md)。
## 快速开始
```
python3 -m venv .venv
.venv/bin/pip install -e '.[dev]'
.venv/bin/graphflow-bench doctor
.venv/bin/pytest
```
此项目依赖于现有的 `joern-agent-bridge` 集成和兼容的 Joern 安装。`doctor` 会验证实际的可执行文件和外部隔离。
运行一对冒烟测试:
```
.venv/bin/graphflow-bench run-pair task1 --order-seed 20260724
```
运行五任务套件并生成报告:
```
.venv/bin/graphflow-bench run-suite --seed 20260724
.venv/bin/graphflow-bench report
```
对每个任务运行三个未来的配对重复:
```
.venv/bin/graphflow-bench run-suite --repetitions 3 --seed 20260724
```
创建盲审包并重新生成报告:
```
.venv/bin/graphflow-bench anonymize reports/blinded --seed 20260724
.venv/bin/graphflow-bench report
```
请参阅[实验协议](docs/experiment-protocol.md)、[条件隔离](docs/condition-isolation.md)和[局限性](docs/limitations.md)。生成的结果默认为只能追加。
付费的 Codex 实验是选择性加入的,绝不在公共 CI 中运行。
根据 Apache License 2.0 授权。
标签:DLL 劫持, 云安全监控, 人工智能, 代码重构, 后端开发, 大语言模型, 用户模式Hook绕过, 自动化评估, 逆向工具, 静态分析