← 最新论文
💻 computer science

Contextualized Code Pretraining for Code Generation

本文提出了“上下文感知代码预训练”,这是一种调用感知框架,利用静态分析提取调用者 - 被调用者对以训练 CallerGen 模型,证明与现有模型相比,在真实基准测试中整合调用上下文能显著提升代码生成性能。

原作者: Chen Liu, Qingyuan Liang, Hanwen Zhang, Zeyu Sun, Yakun Zhang, Lu Zhang

发布于 2026-05-19
📖 1 分钟阅读☕ 轻松阅读

原作者: Chen Liu, Qingyuan Liang, Hanwen Zhang, Zeyu Sun, Yakun Zhang, Lu Zhang

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

以下是用通俗易懂的语言和生动的类比对论文《面向代码生成的上下文化代码预训练》的解释。

核心难题:“空白画布”的误区

想象你是一位受雇烹饪特定菜肴的大厨。通常,当你要求 AI 大厨做菜时,你会给它一张写着“做一份辣味意面”的食谱卡。AI 会查阅它庞大的意面食谱库,然后猜测该怎么做。

但在软件开发的实际世界中,情况并非如此。开发者很少从一张空白的食谱卡开始。相反,他们通常已经处于烹饪过程中。他们已经写好了主菜(即“调用者”代码),现在需要制作一道能完美融入这顿饭的配菜(即“被调用”函数)。

  • 旧方法:AI 只拿到配菜的名字,被要求猜测食材。它可能做出一份很棒的意面,但如果主菜是海鲜炖菜,AI 可能会不小心加入奶酪,从而毁掉整道菜。
  • 现实世界:开发者已经写好了主菜。他们正在调用这道配菜,并说:“我需要你把这些酱汁变成装饰。”AI 需要观察主菜是如何使用这道配菜的,才能确切知道该做什么。

目前的 AI 模型非常擅长遵循食谱卡(自然语言描述),但在观察主菜以理解配菜实际需要做什么方面却表现糟糕。

解决方案:"CallerGen"(具备上下文感知能力的大厨)

北京大学及其他机构的研究人员构建了一个名为CallerGen的新 AI 系统。你可以将 CallerGen 想象成一位专门在烹饪配菜前先观察主菜的大厨。

他们不只是让 AI 从食谱书中学习,而是通过向它展示数百万个真实世界的例子来训练它:在这些例子中,一个函数(配菜)已经被代码的其他部分(主菜)所调用。

他们是如何做到的:

  1. 侦探工作:他们使用一种特殊工具(静态分析)扫描海量的真实代码库。他们像侦探一样,找出每一次函数被“调用”的时刻,并查看调用它的代码。
  2. 训练过程:他们教导 AI:“这是主菜(调用者)。这是它要求配菜做的事情。现在,你来烹饪这道配菜。”
  3. 结果:AI 学会了配菜不仅仅是一个独立的食谱;它是拼图的一块。它学会了关注调用代码中的“线索”,比如传入了什么数据,以及调用者期望返回什么。

新测试:"CallerEval"(真实世界厨房)

为了证明他们的新大厨更优秀,他们不能仅仅使用旧的食谱卡(如 HumanEval 等标准基准测试)。那些测试太简单了;它们没有可供观察的“主菜”。

因此,他们建立了一个名为CallerEval的新测试厨房。

  • 在这个测试中,AI 会接到一个任务,其中“主菜”代码已经写好并等待处理。
  • AI 必须编写“配菜”(缺失的函数),使其能与现有代码完美协作。
  • 这就像一场烹饪比赛,评判标准不是你单独品尝菜肴有多美味,而是它与桌上已有的菜肴融合得有多好。

成果:小厨师,大胜利

论文将 CallerGen 与其他著名的 AI 大厨(如 CodeGen、DeepSeek 和 Qwen)进行了测试。

  • 惊喜:尽管 CallerGen 是一位“较小”的大厨(使用的计算资源更少),但它的表现优于那些按照旧方式(仅基于食谱卡)训练的更“大”的大厨。
  • 魔法时刻:当 AI 被允许查看调用上下文(即主菜)时,其性能突飞猛进。
    • 类比:这就像一位小厨师,因为能看到顾客的盘子而确切知道顾客想要什么,从而击败了一位仅凭模糊订单进行猜测的巨型厨师。
  • 关键点:如果你拿掉调用上下文(只给食谱卡),AI 的表现依然不错,但会失去那种额外的优势。这证明了“调用上下文”是一种当前模型尚未充分利用的超能力。

为什么这很重要

这篇论文认为,软件开发很少是在真空中编写代码。它是关于将新部件嵌入到现有的拼图中。

  • 旧 AI:“这是一个函数名。让它能工作。”(往往无法融入拼图)。
  • 新 AI(CallerGen):“这是一个函数名,这是程序其余部分使用它的确切方式。让它针对这种特定情况能工作。”(成功融入拼图)。

通过教导 AI 关注“调用上下文”——即使用该函数的代码留下的线索——研究人员创造了一个系统,该系统生成的代码在现实世界项目中更有可能正确运行,而无需庞大的计算资源。

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

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

试用 Digest →