CodeFlowBench: A Multi-turn, Iterative Benchmark for Complex Code Generation
Idea
CodeFlowBench将复杂程序拆成有依赖关系、逐轮实现的函数任务,检验模型能否复用前轮组件并最终集成完整解法。它为每个子问题提供描述和unit tests,用通过轮数与依赖深度补充最终Pass@k,使多轮代码构建中的中途失败可被定位。
Research Problem
单函数benchmarks过于简单,一次生成完整程序或一次repository修改又难以测出持续开发中的接口维持与依赖管理。现有多轮任务有的只是对同一段代码反复修复,并不要求按模块从底向上构建;最终成败指标还会把早期失败与几乎完成的模型同等处理。
Insight
经过验证的完整程序包含天然的function dependency graph,也包含执行时各子函数的输入输出。用这一结构反向构建任务,能够把同一问题转换为多轮组件开发,并将“能实现局部函数”和“能整合深层依赖”分开衡量;与一次生成全部组件对照可观察多轮组织的额外困难。
Method
- 从Codeforces抓取问题和官方editorial,用DeepSeek-R1整理为模块化solution,并提交官方judge,只保留通过所有官方测试的实现,构建5258题的CodeFlowBench-Comp。
- 解析solution AST,提取函数依赖并拓扑排序;用DeepSeek-V3把函数逻辑反向写成自然语言子问题,在公开测试输入下执行完整程序并instrument函数调用,捕获每个子问题的input-output tests。
- 将同一Subproblem Generation pipeline应用到DomainEval的高质量GitHub项目,形成覆盖Basic、Cryptography、Network、System、Visualization的Repo部分,并标记interaction turns及dependency depth。
- 每轮给定总问题背景、当前函数签名/说明及之前实现,要求生成下一个函数并进行单元验证;与单轮同时生成全部组件比较。除Pass@k外报告Pass Turn、Pass Depth及其均值和多次采样版本,Comp评测选最新1000题以控制成本及降低潜在污染。
Sources & Reading Scope
阅读依据:官方 PDF 正文。核读页码按 PDF 页序计数,可能与 proceedings 页码不同。
核读章节:3.1 Data Curation Pipeline · 3.2 Benchmark Details · 3.3 Evaluation Framework · 4 Experiments · 4.1 Main Experiments
核读数据、AST拆解、函数测试与指标正文。函数tests来自完整程序在public inputs上的运行,不等价于每个子函数的完备测试;AST按函数拆解也不自动证明Single Responsibility。最新题筛选是降低泄漏风险措施,未写成已消除所有training contamination。