[论文笔记] A Survey on Code Generation with LLM-based Agents
主要关注 Tool Integration and Retrieval Enhancement 这一部分。
将外部工具与 LLM 集成是单一代理突破自身生成能力边界的关键之一,代表工作包括:
-
ToolCoder:Arxiv'23 LLM 在特定上下文下会生成错误的 API 调用,ToolCoder通过将 API 搜索工具集成到 agent 中,从检索结果中学习正确的 API 使用。
-
ToolGen:Arxiv'24 ICLR'25 ToolGen 通过为 LLM 的词汇表添加特定外部工具的虚拟 token 来扩展 LLM 的词汇表,并训练模型在会话上下文中生成这些 token,然后产生工具调用,而非将工具描述作为上下文输入再做交互。
-
CodeAgent:ACL'24 CodeAgent 为模型集成了五种编程工具(包括网站搜索、文档阅读、代码符号导航、格式检查器和代码解释器),支持与软件组件的交互,以实现信息检索、代码实现和代码测试功能
-
ROCODE:Arxiv'24 ICSE'25 这个是我比较好奇的一个工作。
Abstract:将回溯机制和程序分析集成到LLMs的代码生成中。
Motivation:LLM 的生成基于自回归方法,一旦在生成过程中发生错误,错误将被累积并可能放大这个错误的影响。如果能够让 LLM 一边生成一边纠错,那么就可以提前暴露错误并解决。这需要关注三个问题:1. 何时回溯;2. 回溯到哪里;3. 如何避免重复错误。所以利用程序分析技术实现增量错误检测。
Methodology:
-
Incremental Error Detection:以一个 statement 作为最小单元,生成-检查的过程可以被形式化为:\(s_i = M(x, S_{i-1}), e_i = C(S_{i-1} || s_i)\)。选择编译器作为分析工具,在生成过程中,使用编译器对生成的代码进行静态检查,还可以通过预设的输入进行动态分析。
-
Strategic Rollback:当检测到错误时,需要撤销部分先前生成的代码以纠正问题。算法给每个语句计算一个熵值。这个熵值可以理解为不确定性的一种度量,回滚到包含最高熵的token的语句。
-
Constraint Generation:回滚后要防止 LLM 再次生成同样错误的代码,将约束定义为对 LLM 先前生成的错误代码对应的 token 的输出概率施加的惩罚,从而调整各token的生成概率。可以利用 trie 树来建模整体生成过程。