TFD-Bench 将评估重点从一次性代码生成转向依赖测试反馈的迭代调试,包含覆盖 10 类 Python 错误的 50 个多轮任务。文章提供数据集、评估 Notebook 和 GitHub 仓库,便于进一步检查评测方法。
Kaggle Benchmarking Challenge 参赛作品
提交至 DEV 上的 Kaggle Benchmarking Challenge。作者:Raja Rajak(@rajrajak99)。Kaggle 基准数据集:Gemma 4 TFD Agentic Trajectories。Kaggle 评估 Notebook:TFD-Bench on Kaggle。GitHub 仓库:github.com/rajrajak99/gemma4-tfd-agent。
HumanEval、MBPP 和静态 LeetCode 风格题目等标准 AI 编程基准存在一个致命盲区:它们孤立地测试单次代码生成,完全忽略了现实世界中软件工程的实际开展方式。真实的软件开发不是一次 prompt 与响应的交互,而是一个有状态、反复迭代、由假设驱动,并受测试反馈引导的过程。
当最先进的 LLM 被部署到真实代码仓库中时,它们会出现我们所说的「单次生成胜任能力的幻觉」:生成的代码补丁优雅、语法干净,却无法通过 64.2% 的真实回归测试套件。
为了衡量真正重要的能力,我们设计了 TFD-Bench(Test-Feedback-Driven Benchmark,测试反馈驱动基准):这套评估包含从 SWE-bench Lite 改编的 50 个多轮调试任务,覆盖 10 类 Python 错误。我们对 5 种前沿模型配置进行了基准测试,评估指标包括 Pass@1 问题解决率、AST 工具调用有效率、上下文 token 消耗量,以及循环停滞频率。
我们的核心发现是什么?闭环测试执行反馈能够大幅加速推理:要求模型在生成代码前自主复现测试,可以将问题解决率从 29.5% 提升到 45.6%,同时减少 49.5% 的上下文 token 浪费。
当前的 LLM 评估往往依赖单轮基准:给 LLM 一段 docstring,让它生成一个自包含函数。这种方式无法评估开发者不可或缺的四项能力:
exit_code != 0)?TFD-Bench 通过一个严格的五阶段闭环来测试模型:
search_code 和 view_file 定位代码。create_reproducer),确认修复前测试失败(exit_code != 0)。edit_file_replace)。exit_code == 0)。数据集包含 50 个具备标准答案、达到真实仓库要求的任务,均匀分布在 10 类 Python bug 中,每类包含 5 个精心挑选的任务:
为了严格评估开放模型与闭源模型的差异,以及专门 fine-tuning 的影响,我们评估了 5 个具有代表性的模型,覆盖不同规模和范式:
当模型不被强制要求复现测试时,它们会表现出一种令人担忧的失败模式:
在 64.2% 的失败尝试中,普通模型生成的补丁在人类审阅者快速浏览时看起来完全正确,但实际上要么无法处理长度为零的输入,要么引入了另一个异常,要么破坏了下游调用函数。
强制模型先编写复现脚本(assert func(...) == ...),并通过 exit_code != 0 确认脚本失败,能够让 Agent 的推理建立在实际执行结果之上。仅这一项流程约束,就让整体问题解决率提高了 16.1 个百分点。
最令人意外的发现之一,是工具调用质量会随着多轮对话的推进而下降:
在第 1 至第 4 轮,模型的有效 JSON 工具调用比例约为 92%。
超过第 7 轮后,普通模型的工具语法错误激增至原来的 3.8 倍,包括格式错误的 JSON 字符串、尾随逗号,以及凭空编造工具参数,例如用 path 代替 file_path。
一旦发生错误,普通模型往往会进入「幻觉级联」,不断重复无效的工具参数。
通过逐轮监督进行 fine-tuning 的 TFD-Agent,将工具调用有效率保持在 96.9% 以上,并消除了灾难性的循环停滞现象:停滞率从 18.2% 降至 2.1%。
许多开发者认为,增加自动化测试运行会提高推理成本。我们的基准测试证明,事实恰恰相反:
为什么?带有 exit_code: 1 和行号的具体 traceback,相当于一个语义锚点。模型不必猜测故障在哪里,Python 运行时会直接告诉它,从而剪除多余的探索路径。
请注意,TFD-Agent(31B)的参数量不到 Llama 3.1 70B 的一半,却取得了更好的成绩:45.6% 对 42.4%。
通用的 70B 模型拥有更丰富的世界知识,但它们没有经过训练来遵循「定位 → 复现 → 精确修改 → 验证」这一严格协议。
当一个 31B 模型经过对齐,学会将终端输出视为真实可靠的反馈时,它就能在消费级或边缘工作站上达到先进的软件工程能力水平。
下面是任务 tfd_zerodivisionerror_1 中的一个真实示例,展示了这一闭环的作用:
json
{"tool": "search_code", "arguments": {"query": "def calculate_precision_recall"}}
部分评论已被文章作者隐藏,了解更多。
如需采取进一步行动,你可以考虑屏蔽此人和/或举报滥用行为。