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绕过, 自动化评估, 逆向工具, 静态分析