A few things about Code Agent
记录一些在实践代码大语言模型过程中的经验和思考总结,本篇是关于代码智能体的相关内容,包括代码智能体的关键功能、关键技术方案等。主要来源于公开论文。
背景
最早接触 Agent 的概念是在控制理论中,Agent 是指能够感知、进行决策和执行控制任务的实体。在强化学习范畴中,Agent 有明确的定义:在与环境交互的过程中,Agent 能够进行学习并做出完成指定目标(最大化累积奖励)的决策。在代码领域,我们一般将 Code Agent 定义为能够帮助用户端到端自主完成代码开发任务的实体(或系统),覆盖代码实现、验证和工具调用等环节。在这里我们暂时不对 Agent 的定义或起源做过多解释。
在软件开发行业,业界已经沉淀了许多成熟流程以及开发体系知识,包括不同角色的分工、不同研发阶段的产出规范等。那么,Code Agent 就可以基于这些成熟、特定的工作流,构建具备一定自主决策和执行能力的智能实体(这里强调了从 workflow 提升到自主决策),帮助提升研发效率。

分类
从应用的角度上看,Code Agent 可划分为:
- 通用型编码 Multi-Agent,定义多角色,通过协作的方式实现编码任务,如 Devin、ChatDev 等
- 特定功能性 Agent,专注于解决代码场景中的特定问题,如生成单测的 UTAgent、代码审查的 Code Review Agent 等
关键模块拆解
- 中控模块,包含对用户输入进行意图识别,结合上下文进行 reasoning,对复杂问题进行任务分解和执行策略的规划,如 RethinkMCTS 修改上一步生成的 Thought;LATS 结合 MCTS 的思想对代码的多步生成进行规划。中控的载体可以是结构化文本(JSON)或者(伪)代码,比如 CodeAct 等
- LLM 进行 inference 生成,得到代码或者其他文本。推理的过程中可能会生成思维链过程,如 CoT、ReAct 以及 Reflexion 等;生成的次数上,覆盖一轮到多轮的生成;在多轮的中间,可以引入对当前输入 Prompt 信息的干预,具体如何干预存在于中控模块的能力,如 LATS、RethinkMCTS 等
- 代码验证评估,一般呈现为调用不同工具,包括语法检查、编译、解释器执行、直接对生成代码进行打分评估,得到多层次反馈信息等;如 Self-Debugging 注入 Debug 信息到上下文进行代码的重新生成;LDB 注入代码的执行 Trace,重新生成代码等
- 知识库,包括代码库、代码领域知识等,包括本地高质量的检索库,或者网络云端的开放性信息。它们可以通过 RAG 的思路注入到输入 Prompt 中,如 CodeGRAG、EVOR 等;也可以从领域知识中提取当前任务的 Meta 信息给 Prompt,作为上下文信息使用。如瀑布开发流程的节点输入输出标准,产品经理角色输出需求,架构师输出系统设计等
- 工具集,包括代码的静/动态分析库、解释器执行验证、浏览器用于获取网络信息,以及 RAG 中常用的召回、排序模型等
经典算法及框架
- CodeAct,使用 Python 语言来表示 Agent 的动作空间,覆盖对 Thought 的反思过程以及多种工具的调用组合,可有效提升任务完成的成功率
- CodeAgent,定义了使用编码相关工具的固定 workflow,支持网络浏览器的信息检索、代码解释执行反馈、代码测试工具等,通过 ReAct 和工具规划方式,组合这些预定义的工具来解决 repo-level 的代码生成问题
- Self-Debugging,通过收集生成代码在解释器执行中的反馈信息并进行解释,然后反馈给模型进行反思推理,以提升多轮场景下的代码生成质量和准确度
- EVOR,构建一个可演化的 pipeline,多步演化用户的 query 以及知识片段的检索,来提升代码生成的质量
- ChatDev、MetaGPT、CAMEL、AgentCoder 等多智能体框架,基本上都是从研发流程的 workflow 衍生出来。ChatDev 模拟软件开发公司的不同角色,如 CEO、CTO、Programmer,分别进行不同的工种,构建通信和协作机制,进行软件开发;MetaGPT 模拟标准软件开发 SOP 瀑布流,定义 PM、架构师、工程师和 QA 等不同角色来实现复杂的编程任务;CAMEL 同样是定义多角色的多智能体框架,支持动态的 workflow,可解决相对复杂的问题;AgentCoder 定义三种独立的 Agent,协同编码、测试、执行者这三个角色完成代码生成任务
案例拆解
最近的代码助手 Cursor 成功出圈,在业界引发了一股热潮,它的自动补全和交互模式确实很惊艳。但是为更好呈现 Code Agent 的一些流程,我选择开源的 Cline 框架进行一个交互式代码生成的案例展示。Cline 支持 VS Code 插件,安装后,可以在左边启动对话栏,进入对话栏,输入用户任务后,触发一系列交互动作,这些动作可以设置 auto-approve。
- 首先进行任务分解与规划,并与用户进行参数确认
- 生成代码后,呈现为 Git 形态,并跟用户确认是否保存生成的代码(可以 auto-approve)
- 生成所有的文件后,Cline 会询问是否执行安装 Flask 包的命令
pip install flask,用户确认 run command,会拉起 terminal 进行安装 - 安装环境后,Cline 询问是否执行 Python 命令,用户可以点击 run command 直接拉起 Flask server

Cline 任务规划与代码生成 
Cline 环境安装与命令执行 
Cline 启动 Flask Server
用户场景识别
- 面向程序员,解决专业问题,包括已有大系统的维护迭代开发工作,辅助补全优先,类似 Cursor 的 Tab 功能
- 面向非开发者,运营产品经理等,进行快速原型开发,如花生开发小猫补光灯,可以从零开始开发原型,甚至商业化产品的工作(包括项目,小至模块)
未来的形态可能仍会是并存,随着自主能力的增强,两者的边界会越来越模糊。
Reference
- https://e2b-landing-page.framer.website/ai-agents/coding
- https://www.anthropic.com/research/building-effective-agents
- Du, K., Chen, J., Rui, R., Chai, H., Fu, L., Xia, W., Wang, Y., Tang, R., Yu, Y. & Zhang, W. (2024). CodeGRAG: Bridging the Gap between Natural Language and Programming Language via Graphical Retrieval Augmented Generation. arXiv preprint arXiv:2405.02355v3.
- Qian, C., Liu, W., Liu, H., Chen, N., Dang, Y., Li, J., Yang, C., Chen, W., Su, Y., Cong, X., Xu, J., Li, D., Liu, Z. & Sun, M. (2023). ChatDev: Communicative Agents for Software Development. arXiv preprint arXiv:2307.07924v5.
- Hong, S., Zhuge, M., Chen, J., Zheng, X., Cheng, Y., Zhang, C., Wang, J., Wang, Z., Yau, S.K.S., Lin, Z., Zhou, L., Ran, C., Xiao, L., Wu, C. & Schmidhuber, J. (2023). MetaGPT: Meta Programming for A Multi-Agent Collaborative Framework. arXiv preprint arXiv:2308.00352v7.
- Li, G., Hammoud, H.A.A.K., Itani, H., Khizbullin, D. & Ghanem, B. (2023). CAMEL: Communicative Agents for "Mind" Exploration of Large Language Model Society. arXiv preprint arXiv:2303.17760v2.
- Wang, X., Chen, Y., Yuan, L., Zhang, Y., Li, Y., Peng, H. & Ji, H. (2024). Executable Code Actions Elicit Better LLM Agents. arXiv preprint arXiv:2402.01030v4.
- Zhang, K., Li, J., Li, G., Shi, X. & Jin, Z. (2024). CodeAgent: Enhancing Code Generation with Tool-Integrated Agent Systems for Real-World Repo-level Coding Challenges. arXiv preprint arXiv:2401.07339v2.
- Li, Q., Xia, W., Du, K., Dai, X., Tang, R., Wang, Y., Yu, Y. & Zhang, W. (2024). RethinkMCTS: Refining Erroneous Thoughts in Monte Carlo Tree Search for Code Generation. arXiv preprint arXiv:2409.09584v1.
- Zhong, L., Wang, Z. & Shang, J. (2024). Debug like a Human: A Large Language Model Debugger via Verifying Runtime Execution Step-by-step. arXiv preprint arXiv:2402.16906v6.
- Zhou, A., Yan, K., Shlapentokh-Rothman, M., Wang, H. & Wang, Y. (2023). Language Agent Tree Search Unifies Reasoning Acting and Planning in Language Models. arXiv preprint arXiv:2310.04406v3.
- Chen, X., Lin, M., Schärli, N. & Zhou, D. (2023). Teaching Large Language Models to Self-Debug. arXiv preprint arXiv:2304.05128v2.
- Yang, K., Liu, J., Wu, J., Yang, C., Fung, Y.R., Li, S., Huang, Z., Cao, X., Wang, X., Wang, Y., Ji, H. & Zhai, C. (2024). If LLM Is the Wizard, Then Code Is the Wand: A Survey on How Code Empowers Large Language Models to Serve as Intelligent Agents. arXiv preprint arXiv:2401.00812v2.
- Wang, L., Ma, C., Feng, X., Zhang, Z., Yang, H., Zhang, J., Chen, Z., Tang, J., Chen, X., Lin, Y., Zhao, W.X., Wei, Z. & Wen, J. (2023). A Survey on Large Language Model based Autonomous Agents. arXiv preprint arXiv:2308.11432v6.
- Su, H., Jiang, S., Lai, Y., Wu, H., Shi, B., Liu, C., Liu, Q. & Yu, T. (2024). EVOR: Evolving Retrieval for Code Generation. arXiv preprint arXiv:2402.12317v2.
- Huang, D., Zhang, J.M., Luck, M., Bu, Q., Qing, Y. & Cui, H. (2023). AgentCoder: Multi-Agent-based Code Generation with Iterative Testing and Optimisation. arXiv preprint arXiv:2312.13010v3.