A few things about Code Agent

Feb 1, 2024·
夏 伟
夏 伟

记录一些在实践代码大语言模型过程中的经验和思考总结,本篇是关于代码智能体的相关内容,包括代码智能体的关键功能、关键技术方案等。主要来源于公开论文。

背景

最早接触Agent的概念是在控制理论中,Agent 是指能够感知、进行决策、和执行控制任务的实体。在强化学习范畴中,Agnet 有明确的定义:在与环境交互的过程中,Agent能够进行学习并做出完成指定目标(最大化累积奖励)的决策。在代码领域,Code Agent 我们一般指能否帮助用户端到端自主完成代码开发任务的实体(或系统),覆盖到代码实现、验证和工具调用等环节。在这里我们暂时不对Agent的定义或起源做过多解释。

在软件开发行业,业界已经沉淀了许多的成熟流程以及开发体系知识,包括不同角色的分工,不同研发阶段的产出规范等。那么,Code Agent 就可以基于这些成熟、特定性的工作流,来构建具备自主意识的智能实体(这里强调了从workflow提升到自主决策),来帮助提升研发效率。

code agent arch

分类

从应用的角度上看,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信息到上下文进行代码的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,Programer,分别进行不同的工种,构建通信和协作机制,进行软件开发;MetaGPT 模拟标准软件开发SOP瀑布流,定义PM,架构师,工程师和QA等不同角色来实现复杂的编程任务;CAMEL 同样是定义多角色的多智能体框架,支持动态的workflow,可解决相对复杂的问题;Agentcoder 定义三种独立的agent,协同编码、测试、执行者这三个角色完成代码生成任务

案例拆解

最近的代码助手cursor成功出圈,在业界引发了一股热潮,它的自动补全和交互模式确实很惊艳。但是为更好呈现code agent的一些流程,我选择开源的cline框架进行一个交互式代码生成的案例展示。cline 支持vscode 插件,安装后,可以在左边启动对话栏,进入对话栏,输入用户任务后,触发一系列交互动作,这些动作可以设置auto-approve.

  1. 首先进行任务分解与规划,并与用户进行参数确认
  2. 生成代码后,呈现为git形态,并跟用户确认是否保存生成的代码 (可以auto-approve)
  3. 生成所有的文件后,cline 会询问是否执行安装flask包的命令pip install flask,用户确认run-command,会拉起terminal 进行安装
  4. 安装环境后,cline 询问,是否执行pyhton命令,用户可以点击 run command 直接拉起flask server
    cline1
    cline2
    cline3

用户场景识别

  • 面向程序员,解决专业问题,包括已有大系统的维护迭代开发工作,辅助补全优先,类似cursor的tab功能
  • 面向非开发者,运营产品经理等,进行快速原型开发,如花生开发小猫补光灯,可以从零开始开发原型,甚至商业化产品的工作(包括项目,小至模块)

未来的形态可能仍会是并存,随着自主能力的增强,两者的边界会越来越模糊。

Reference

  1. https://e2b-landing-page.framer.website/ai-agents/coding
  2. https://www.anthropic.com/research/building-effective-agents
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.
  9. 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.
  10. 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.
  11. 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.
  12. Chen, X., Lin, M., Schärli, N. & Zhou, D. (2023). Teaching Large Language Models to Self-Debug. arXiv preprint arXiv:2304.05128v2.
  13. 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.
  14. 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.
  15. 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.
  16. 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.
夏 伟
Authors
Senior Applied Researcher
My research interests include large language model, Reinforcement learning for Recommender System and Automatic (AI) Systems.