← 最新论文
💬 NLP

Function-Aware Fill-in-the-Middle as Mid-Training for Coding Agent Foundation Models

本文介绍了一种函数感知的填空(FIM)中段训练方法,这是一种利用编码智能体循环与函数调用之间的结构相似性来显著提升编码智能体在 SWE-Bench 等基准测试上性能的自监督方法,同时还保留了在标准后训练中经常退化的通用编码和工具使用能力。

原作者: Yubo Wang, Jiarong Liang, Yuxuan Zhang, Xuye Liu, Cong Wei, Yuyu Zhang, Ping Nie, Wenhu Chen

发布于 2026-07-15
📖 1 分钟阅读☕ 轻松阅读

原作者: Yubo Wang, Jiarong Liang, Yuxuan Zhang, Xuye Liu, Cong Wei, Yuyu Zhang, Ping Nie, Wenhu Chen

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

想象一下,你正在教一个机器人去修复一个巨大且混乱的代码库中的漏洞。通常,我们通过让机器人从头到尾、从左到右地阅读书籍来教它们。但这里有一个问题:当机器人真正去修复漏洞时,它并不仅仅是向前阅读。它会采取一个行动,观察结果(比如某个工具报错了),然后决定下一步该做什么。这是一个循环:行动 → 观察 → 下一步

这篇论文的作者注意到一个很酷的现象:这个机器人循环看起来与普通计算机代码中的**函数调用(function call)**完全一致。

  • 机器人的行动就像是一个函数调用另一个函数。
  • 机器人的观察就像是那个函数返回了一个值。
  • 机器人的下一步就像是剩余的代码在使用那个返回的值。
    这个大想法是?与其仅仅让机器人向前阅读代码,作者教导他们的机器人玩一种关于这些函数调用的“填空游戏”。他们称之为函数感知的中间填充(Function-Aware Fill-in-the-Middle, FIM)中段训练(Mid-Training)

这个游戏:“猜猜缺失的部分”

想象你有一个故事,其中的角色(“调用者”)请求一位朋友(“被调用者”)去完成一项任务,但朋友实际完成的工作被隐藏起来了。机器人必须根据前后的上下文信息,猜出这位朋友做了什么,并解释他们为什么要这样做。

为了让这个游戏有效,作者并没有随机隐藏单词。他们使用了一张特殊的代码地图(“程序依赖图”,Program Dependency Graph)来寻找完美的谜题。他们寻找的是那些满足以下条件的函数:

  1. 足够复杂,能构成一个好的挑战(既不会太简单,也不会难到无法完成)。
  2. 足够可预测,以便机器人能根据周围的线索真正推断出来。

他们还让机器人先写一段“推理笔记”(思维链,Chain-of-Thought),然后再编写缺失的代码,迫使它在行动之前先进行思考,就像人类程序员那样。

结果:它奏效了吗?

作者在三个不同的“机器人大脑”(模型)上测试了这一点:两个来自 Qwen2.5-Coder 系列(70 亿和 140 亿参数)的模型,以及一个来自较新的 Qwen3 系列(80 亿参数)的模型。他们使用了一个包含 26 亿 token(单词和符号)的海量数据集对这些机器人进行了训练,这些数据取自 968 个真实的 Python 代码仓库

以下是他们的发现:

  • 更擅长修复漏洞: 当在名为 SWE-Bench-Verified(模拟真实软件问题)的著名基准测试上进行测试时,机器人的表现显著提升。
    • 7B 模型提升了 +2.8%
    • 14B 模型提升了 +3.0%
    • 8B 模型提升了 +3.2%
  • 在较简单的任务上表现更好: 在该测试的一个轻量版本(SWE-Bench-Lite)中,增幅甚至更高,8B 模型跃升了 +5.4%
  • 在任何地方都有效: 这些改进即使在机器人随后使用不同方法进行训练时依然存在。这表明“中间填充”训练为它们打下了坚实的底座,无论后续如何进行“抛光”,这种能力都会保留下来。

惊喜:它并没有破坏其他技能

通常,当你训练一个机器人成为超级专家(比如漏洞修复智能体)时,它会忘记做其他事情的能力,比如编写简单的代码或使用工具。作者曾担心这种情况会发生。

但事实是,“中段训练”实际上挽救了机器人的其他技能!

  • 如果没有这种额外的训练,机器人在自主编写代码方面会表现变差(在 LiveCodeBench 等基准测试中下降)。
  • 有了 FIM 训练,它们不仅没有退步,反而变得更强了(在 LiveCodeBench 上提升了 +11.1%)。
  • 尽管训练数据仅包含 Python 代码,但机器人在完全不同的上下文(如 τ-benchBFCL)中使用工具的能力也得到了提升,这表明它们学习到了一种通用的“思考因果关系”的技能,并能迁移到其他任务中。

他们明确排除了什么

作者非常谨慎地说明了这种方法不是什么:

  • 它不仅仅是模仿聪明的老师: 他们测试了机器人是否只是在死记硬背来自强大 AI(Gemini-3-Flash)的答案(该 AI 协助生成了训练数据)。他们发现,即使机器人生成自己的推理笔记,仍然会有所进步。因此,魔力不在于“复制老师”,而在于游戏本身的结构。
  • 它不是解决所有问题的万灵药: 该方法在代码具有模块化(被拆分为整洁的函数)时效果最好。如果代码是一个巨大的、混乱的脚本,其中所有东西都混杂在一起,那么该方法就无法发挥作用,因为它无法找到清晰的“函数调用”谜题来解决。
  • 尚未证明适用于所有语言: 训练数据仅为 Python。虽然机器人在其他任务上表现更好,但作者承认他们尚未证明这在 Java、C++ 或 Rust 中同样有效。

他们有多确定?

作者对自己的数据非常有信心,因为他们使用不同的随机种子运行了三次测试,以确保结果并非偶然。他们精确地测量了改进程度(例如 +2.8%+3.0%),并展示了当机器人陷入困境时,它们能持续解决更多问题并犯更少的错误。

他们认为这种“中段训练”是一个至关重要的缺失环节。这就像是在把机器人送入现实世界之前,先给它进行一次特定类型的“健身锻炼”,确保它拥有合适的肌肉力量,能够处理复杂的“行动、观察并继续”的循环,而不会丧失原有的其他能力。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →