返回
摘要
En 中文
软件工程活动,如包迁移、修复静态分析或测试中的错误报告,以及为代码库添加类型注解或其他规范,都涉及对整个代码仓库进行广泛编辑。我们将这些活动表述为repository-level coding(仓库级编码)任务。近年来,像GitHub Copilot这样由大型语言模型(LLMs)驱动的工具,在解决局部编码问题方面已成功提供高质量解决方案。仓库级编码任务更为复杂,无法直接使用LLMs解决,因为仓库内的代码具有相互依赖性,且整个仓库可能过大,无法放入提示词中。我们将仓库级编码表述为规划问题,并提出一个任务无关的神经符号框架CodePlan来解决这个问题。CodePlan合成一个多步编辑链(计划),其中每一步都会在代码位置上调用LLM,并从整个仓库、先前代码变更和任务特定指令中提取上下文。CodePlan基于增量依赖分析、变更可能影响分析和自适应规划算法(符号组件)与神经LLMs的新型组合。我们在两个仓库级任务上评估了CodePlan的有效性:包迁移(C#)和时序代码编辑(Python)。每个任务在多个代码仓库上进行评估,每个仓库都需要对多个文件(2~97个文件)进行相互依赖的变更。此前尚未使用LLMs自动化过此类复杂度的编码任务。结果表明,CodePlan与基线相比更接近真实结果。CodePlan能够使5/7个仓库通过有效性检查(即无错误构建并正确编辑代码),而基线(无规划但具有与CodePlan相同类型上下文信息)无法使任何仓库通过检查。我们在https://github.com/microsoft/codeplan提供了我们的(非专有)数据、评估脚本和补充材料。
期刊
暂无期刊信息
机构
暂无机构信息
引用论文
暂无论文信息

