← 最新论文
🤖 AI

In Line with Context: Repository-Level Code Generation via Context Inlining

本文介绍了 InlineCoder,这是一个新颖的框架,通过将未完成的函数的调用图(包括生成的锚点、上游调用者和下游被调用者)内联到提示中,将复杂的仓库级理解转化为更易管理的函数级任务,从而提升仓库级代码生成的效果。

原作者: Chao Hu, Wenhao Zeng, Yuling Shi, Beijun Shen, Xiaodong Gu

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

原作者: Chao Hu, Wenhao Zeng, Yuling Shi, Beijun Shen, Xiaodong Gu

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

核心理念:以“调用栈”视角编写代码

想象你是一名新入职的员工,受雇为一家庞大的软件公司编写某个特定函数。在过去,如果你寻求帮助,可能只会得到来自办公室其他部分的、看起来相似的句子列表。你会看到诸如“计算”或“用户”之类的词汇,并试图猜测该做什么。这往往会导致错误,因为你不知道在要求你完成这项工作,也不知道房间里有哪些可用工具

InlineCoder 是一个新系统,它改变了 AI 为这些大型项目编写代码的方式。它不再仅仅向 AI 展示一系列相似的句子,而是重写整个故事,向 AI 精确展示新代码在现实世界中的具体位置。

以下是其工作原理的简化步骤分解:

1. 问题:“孤立房间”陷阱

当 AI 尝试为一个庞大的软件项目(即“代码库”)编写一段代码时,它通常会陷入一个“孤立房间”。

  • 旧方法:AI 仅被提供工作描述(函数签名)以及来自该项目的几份随机、外观相似的文档。这就像蒙着眼睛试图修理汽车引擎,手中只拿着另一辆不同汽车的相似引擎图片。它或许能装对螺栓,但不知道皮带该朝哪个方向走,也不知道是谁在驾驶这辆车。
  • 结果:AI 编写的代码单独看似乎没问题,但却破坏了整个系统,因为它不知道新代码如何与项目的其余部分连接。

2. 解决方案:“上下文内联”

这篇论文的作者,InlineCoder,意识到要理解一项工作,你需要看到两件事:

  1. 谁在调用你?(“上游”上下文:要求你工作的老板)。
  2. 你在调用谁?(“下游”上下文:你完成工作所需的工具或助手)。

InlineCoder 使用了一种称为内联(Inlining)的巧妙技巧。想象你正在为一场戏剧编写剧本。与其仅仅给演员他们的台词,不如将剧本中的演员台词物理粘贴到其他演员与他们对话的场景中。突然间,演员就能确切地看到该使用什么语气、递给他们什么道具,以及他们的台词如何融入对话的流动中。

3. InlineCoder 的工作原理(三步舞)

第一步:“草稿”(锚点)
首先,AI 对代码进行快速、粗略的猜测。它并不完美,但这是一个起点。这就好比 AI 在说:“这是我对于该函数应是什么样子的最佳猜测。”

第二步:“上游”内联(看见老板)
系统将那个粗略的猜测直接粘贴到调用它的函数的代码中

  • 类比:想象你是一位厨师。与其仅仅被告知“做一碗汤”,系统会向你展示服务员递给你订单的确切时刻、服务员手中拿着什么食材,以及汤将如何被端上。
  • 为何有帮助:AI 现在能确切看到传入的数据是什么,以及结果需要以何种格式呈现。它不再猜测,而是开始匹配“调用者”的具体需求。

第三步:“下游”检索(寻找工具)
系统查看那个粗略的猜测,看看 AI 试图使用哪些工具(其他函数)。然后,它进入项目的库中,获取这些工具的实际代码,确保 AI 使用正确的版本。

  • 类比:如果厨师的草稿写着“使用搅拌机”,系统会找到厨房里那台特定的搅拌机,并向厨师展示如何使用它,而不是让厨师猜测该抓取哪个电器。

4. “信心检查”

该系统足够智能,能够知道何时自己不确定。它根据草稿编写的难易程度计算出一个“信心分数”。

  • 高信心:“这看起来不错,只需润色一下。”
  • 低信心:“这看起来有风险。扔掉草稿,利用新的上下文重新开始。”
    这防止了 AI 仅仅因为先写出了某个想法就固执地坚持一个糟糕的主意。

5. 结果:为何这很重要

该论文在两个大型基准测试(DevEval 和 RepoExec)上,使用不同的 AI 模型对此进行了测试。

  • 结果:InlineCoder 以巨大优势击败了几乎所有其他方法。
  • 收益:在某些指标上,与以往最佳方法相比,它将代码的准确性提高了近30%
  • 启示:通过向 AI 展示“调用图”(谁与谁对话),而不仅仅是一系列相似的词汇,AI 能够编写出真正适用于真实软件项目复杂网络中的代码。

总结

可以将 InlineCoder 视为一种不仅翻译词汇,更翻译关系的翻译器。它不再将代码视为孤立的句子,而是将其视为一种对话。通过将新代码物理嵌入到其周围发生的对话(调用者)以及它所依赖的工具(被调用者)中,它确保 AI 编写的代码能够完美融入现有的软件生态系统。

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

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

试用 Digest →