In Line with Context: Repository-Level Code Generation via Context Inlining
本文介绍了 InlineCoder,这是一个新颖的框架,通过将未完成的函数的调用图(包括生成的锚点、上游调用者和下游被调用者)内联到提示中,将复杂的仓库级理解转化为更易管理的函数级任务,从而提升仓库级代码生成的效果。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
核心理念:以“调用栈”视角编写代码
想象你是一名新入职的员工,受雇为一家庞大的软件公司编写某个特定函数。在过去,如果你寻求帮助,可能只会得到来自办公室其他部分的、看起来相似的句子列表。你会看到诸如“计算”或“用户”之类的词汇,并试图猜测该做什么。这往往会导致错误,因为你不知道谁在要求你完成这项工作,也不知道房间里有哪些可用工具。
InlineCoder 是一个新系统,它改变了 AI 为这些大型项目编写代码的方式。它不再仅仅向 AI 展示一系列相似的句子,而是重写整个故事,向 AI 精确展示新代码在现实世界中的具体位置。
以下是其工作原理的简化步骤分解:
1. 问题:“孤立房间”陷阱
当 AI 尝试为一个庞大的软件项目(即“代码库”)编写一段代码时,它通常会陷入一个“孤立房间”。
- 旧方法:AI 仅被提供工作描述(函数签名)以及来自该项目的几份随机、外观相似的文档。这就像蒙着眼睛试图修理汽车引擎,手中只拿着另一辆不同汽车的相似引擎图片。它或许能装对螺栓,但不知道皮带该朝哪个方向走,也不知道是谁在驾驶这辆车。
- 结果:AI 编写的代码单独看似乎没问题,但却破坏了整个系统,因为它不知道新代码如何与项目的其余部分连接。
2. 解决方案:“上下文内联”
这篇论文的作者,InlineCoder,意识到要理解一项工作,你需要看到两件事:
- 谁在调用你?(“上游”上下文:要求你工作的老板)。
- 你在调用谁?(“下游”上下文:你完成工作所需的工具或助手)。
InlineCoder 使用了一种称为内联(Inlining)的巧妙技巧。想象你正在为一场戏剧编写剧本。与其仅仅给演员他们的台词,不如将剧本中的演员台词物理粘贴到其他演员与他们对话的场景中。突然间,演员就能确切地看到该使用什么语气、递给他们什么道具,以及他们的台词如何融入对话的流动中。
3. InlineCoder 的工作原理(三步舞)
第一步:“草稿”(锚点)
首先,AI 对代码进行快速、粗略的猜测。它并不完美,但这是一个起点。这就好比 AI 在说:“这是我对于该函数应是什么样子的最佳猜测。”
第二步:“上游”内联(看见老板)
系统将那个粗略的猜测直接粘贴到调用它的函数的代码中。
- 类比:想象你是一位厨师。与其仅仅被告知“做一碗汤”,系统会向你展示服务员递给你订单的确切时刻、服务员手中拿着什么食材,以及汤将如何被端上。
- 为何有帮助:AI 现在能确切看到传入的数据是什么,以及结果需要以何种格式呈现。它不再猜测,而是开始匹配“调用者”的具体需求。
第三步:“下游”检索(寻找工具)
系统查看那个粗略的猜测,看看 AI 试图使用哪些工具(其他函数)。然后,它进入项目的库中,获取这些工具的实际代码,确保 AI 使用正确的版本。
- 类比:如果厨师的草稿写着“使用搅拌机”,系统会找到厨房里那台特定的搅拌机,并向厨师展示如何使用它,而不是让厨师猜测该抓取哪个电器。
4. “信心检查”
该系统足够智能,能够知道何时自己不确定。它根据草稿编写的难易程度计算出一个“信心分数”。
- 高信心:“这看起来不错,只需润色一下。”
- 低信心:“这看起来有风险。扔掉草稿,利用新的上下文重新开始。”
这防止了 AI 仅仅因为先写出了某个想法就固执地坚持一个糟糕的主意。
5. 结果:为何这很重要
该论文在两个大型基准测试(DevEval 和 RepoExec)上,使用不同的 AI 模型对此进行了测试。
- 结果:InlineCoder 以巨大优势击败了几乎所有其他方法。
- 收益:在某些指标上,与以往最佳方法相比,它将代码的准确性提高了近30%。
- 启示:通过向 AI 展示“调用图”(谁与谁对话),而不仅仅是一系列相似的词汇,AI 能够编写出真正适用于真实软件项目复杂网络中的代码。
总结
可以将 InlineCoder 视为一种不仅翻译词汇,更翻译关系的翻译器。它不再将代码视为孤立的句子,而是将其视为一种对话。通过将新代码物理嵌入到其周围发生的对话(调用者)以及它所依赖的工具(被调用者)中,它确保 AI 编写的代码能够完美融入现有的软件生态系统。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。