AI4SE 论文阅读:《Large Language Model-Based Agents forSoftware Engineering: A Survey》

全网最简洁 Code Agent,50行代码极速入门,带你通往AGI! 在人工智能领域,Code Agent不仅是技术进步的一个标志,更是我们迈向人工通用智能(AGI)的关键一步。AGI旨在创造能够执行任何智能任务的AI,而Code Agent的能力——自动编写和优化代码——是实现这一目标的基石之一。通过自动处理复杂的编程任务,Code Agent不仅提高了软件开发的效率,更重要的是,它使机器能够理解和执行与软件开发相关的高级认知任务,这是向AGI过渡的必要条件。 阅读详情
AI摘要

本文是对《Large Language Model-Based Agents for Software Engineering: A Survey》的阅读总结。介绍了基于LLM的智能代理在软件工程领域的应用,包括其基础框架、高级系统,以及在需求工程、代码生成、测试、调试等方面的应用,还探讨了软件开发模型,最后提出进一步思考。

写在前面

这篇文章主要是对于《Large Language Model-Based Agents for Software Engineering: A Survey》这篇科研性质的文献进行阅读与总结。文章于2024年9月发表于arXiv,主要介绍了大型语言模型(LLMs)在软件工程(SE)领域的最新进展,并总结产生的 LLM-Agent 服务于软件工程的综述性文章。据文章所述,这是首次专门针对基于LLMs for SE 的综述型文献。

总体来看,所选文章为软件工程领域提供了一个全面和系统的LLM基础代理的综述,在LLM agent兴起并极大程度取代人类程序员重复“造轮子”的时代背景下,对于软件工程的发展具有借鉴意义,引发“时下AI agent 如何演化产生新的软件工程和开发模型”的深刻思考。

我选取这篇论文基于自身团队发展过程中,正在探索一种Agent与人类工程师协作的敏捷模型。早期的敏捷开发总是小而精的,容易受限于面向架构的成规模开发;而大语言模型对于架构的热知识在储备量上远超人类,更容易在特定领域、特定架构下实践 DSSA 或 CBSE,缺点是则是对全局记忆难以维持,常常需要重新解释。我正在寻找一种能够支持小型团队在架构视角下开发系统,并能驱动AI,产生持续性协作的开发模型。如果你有好想法,欢迎友友来讨论~!

关键词:大型语言模型;软件工程;智能代理;程序生成;软件测试

原文链接:arXiv:2409.02977v1

摘要和文献搜集工作

随着大型语言模型(LLMs)的快速发展,基于LLM的智能代理在软件工程(SE)领域展现出了显著的应用潜力。与传统的独立LLM相比,LLM基础的智能代理通过集成外部资源和工具的感知与利用能力,极大提升了LLM的通用性和专业能力。本文综述了LLM基础智能代理在SE中的应用现状,系统地收集并分析了106篇相关论文,并从SE和智能代理两个维度进行了分类。此外,本文还探讨了该领域的开放性挑战和未来发展方向。

综述结构如下:

该综述所引用文献的入选标准:

如果一篇论文满足以下任何一项标准,则将被纳入我们的调查:(i)该论文提出了使用基于LLM的代理来解决特定SE任务的技术、框架或工具;(ii)该论文提出了适用于各个领域的通用技术、框架或工具,前提是其评估至少包括一项SE任务;(iii)本文提出了一个实证研究,评估了基于LLM的Agent在特定SE任务上的表现

Agent for SE 方向的发展:下图显示了截至2024年7月10日随时间推移发表的论文累积数量。研究者注意到,对这一领域的研究兴趣不断增加,突出了这项调查的必要性和相关性。

大多数论文来自arXiv,尚未经过同行评审。这是预料之中的,因为这一领域正在出现,而且仍在迅速发展。

Agent for SE不同活动的研究现状:

除了自动执行单个RE阶段之外,一些代理还可以处理多个RE阶段

正文内容

Basic Framework of LLM-based Agents

基于LLM的代理(LLMs Agent)通常由四个关键组件组成:规划,记忆,感知和行动。规划和记忆是LLM控制的大脑的关键组成部分,它通过感知和行动组件与环境相互作用,以实现特定的目标。

其四个关键的组成部分的详细描述如下:

规划(Planning)

规划组件将复杂任务分解为多个子任务,并调度子任务以实现最终目标。具体地,Agent 可以生成计划而不需要通过不同的推理策略进行调整,或者利用外部反馈(例如,环境反馈或人反馈)。

记忆(Memory)

记忆组件记录在 Agent 执行期间生成的历史思想、动作和环境观察结果。在此基础上,Agent可以重新访问和利用以往的记录和经验,从而更有效地处理复杂的任务。存储器管理(即,如何表示记忆)和利用(即,如何读/写记忆内容)是必不可少的,这直接影响Agent系统的效率和有效性。

感知(Perception)

感知组件接收来自环境的信息,这可以促进更好的规划。特别地,Agent 可以感知多模态输入,文本输入、视觉输入和听觉输入。

行动(Action)

基于大脑做出的规划和决定,行动组件进行具体的行动,与环境互动并影响环境。一个重要的作用机制是控制和利用外部工具,这可以通过访问更多的外部资源和扩展超出文本单独交互的动作空间来扩展LLM的固有功能。

Advanced LLM-based Agent Systems

Multi-agent Systems.(多智能体系统)

可以实现多个Agent之间的协作可以进一步解决与不同知识领域相关的更复杂的任务。

在多智能体系统中,每个Agent都被分配了不同的角色和相关的专业知识,使其专门负责不同的任务;此外,Agent可以相互通信,并在任务进行时共享进度/信息。通常,Agent可以协同工作(即,通过在不同的子任务上工作以实现最终目标)或竞争性地(即,通过在进行对抗性辩论的同时进行相同的任务)

Human-Agent Coordination.(人机协调)

Agent系统可以进一步合并来自人类的指令,然后在人类的指导下继续执行任务。这种人-代理协调模式有助于更好地与人类偏好保持一致,并使用人类的专业知识。特别是在人机交互过程中,人类不仅可以向智能体提供任务需求和当前任务状态的反馈,还可以与智能体合作,共同实现目标。

Requirements Engineering(需求工程)

需求工程(Requirements Engineering, RE)是软件工程中的一个重要阶段,它涉及到从利益相关者那里获取、分析和文档化软件需求的过程。需求工程的目标是确保软件开发团队对用户的需求有准确的理解,并在整个开发过程中管理这些需求的变化。需求工程通常包括以下几个阶段:需求的收集(Elicitation)、建模(Modeling)、协商(Negotiation)、规格说明(Specification)、验证(Verification)和需求的演化(Evolution)。

在现实世界的软件开发中,RE可能需要大量的手动工作,因为需要与各种利益相关者进行大量的交互。尽管研究人员已经利用深度学习模型(包括独立的LLM)来促进需求工程活动,但他们中的大多数仍然停留在RE期间的单个任务上,例如分类[49],规范[50],信息检索[51],评估[52]和现有需求的增强[53]。最近,多智能体系统被设计为自动化单个阶段或多个阶段。表2总结了专门为RE设计的现有基于LLM的Agent,下图说明了它们的通用pipeline。

启发(Elicitation)是一个多Agent框架,旨在全面挖掘需求工程中的用户需求。它通过初始化多个具有不同角色的Agent来模拟用户交互,并记录交互过程中的行动、观察和挑战,以识别潜在需求。这种方法在降低成本的同时,能有效发现并分类隐藏需求。例如,SpecGen系统专注于从Java程序中生成需求规格说明。它通过生成JML规范、进行验证以及变异验证失败的规范来迭代优化,以生成更全面的规格说明。
 

Code Generation

随着人工智能技术的进步,代码生成已成为一个广泛研究的领域。大型语言模型(LLM)由于在海量文本数据,尤其是大型代码库上的预训练,已展现出在根据给定代码上下文或自然语言描述生成代码方面的潜力。然而,LLM生成的代码有时会因幻觉等问题而不完美。因此,研究人员不仅利用独立的LLM进行代码生成,还开发了基于LLM的Agent,这些Agent通过规划和迭代细化来提升LLM的能力。图7展示了现有的LLM如何在代码生成任务中增强独立LLM的功能。
 

使用规则的代码生成

使用规划生成代码是指在代码生成过程中,LLM基础的智能体会采用一种系统化的方法来分解复杂的编程任务,将其拆解为多个子任务,并为这些子任务制定执行顺序和计划,以实现最终的编程目标。这种规划过程涉及到智能体的“大脑”部分,即LLM控制的核心,它通过与环境的交互来调整和优化规划步骤。

具体来说,规划组件负责将复杂的编程任务分解成一系列更小、更易于管理和执行的子任务。这些子任务可以是算法的选择、数据结构的设计、代码逻辑的构建等。在制定了详细的计划之后,智能体会根据这个计划来指导代码的生成过程,确保每一步都能够朝着最终目标迈进。例如,CodeCoT是一种利用链式思考(Chain-of-thought)策略的LLM基础Agent,它通过将给定的需求分解成用自然语言描述的步骤,然后将这些步骤转换成代码。这种方法可以提高代码生成的正确性,并使得生成的代码更加符合预期的功能和逻辑。通过这种方式,LLM基础的智能体能够更有效地处理复杂的编程任务,生成更高质量、更可靠的代码。

使用迭代细化的代码生成

在代码生成过程中,LLM基础的Agent不仅生成初始代码,而且通过迭代的方式对代码进行持续的优化和改进。这种方法的核心在于,Agent能够根据环境反馈(如模型反馈、编译错误、测试结果或人类反馈)来动态调整和完善代码。

在迭代细化的过程中,智能体首先生成一段代码,然后通过执行、测试或其他验证手段来收集关于这段代码的反馈。根据这些反馈,Agent识别出代码中存在的问题或不足之处,并据此调整其生成策略,以产生更好的代码版本。这个过程可以重复多次,每次都基于前一次迭代的结果进行改进,直到达到满意的代码质量为止。反馈的形式可以有以下几种:

模型反馈

1)Peer-reflection.(同行反映) 多个模型之间的信息交换和交互。最常见的范例是通过角色专门化和结构化通信(例如,代码审查)。这种方法强调了每个角色的专门职责以及其交互的信息。例如:DyLAN 允许多个Agent参与多轮动态交互,组织成多层前馈网络。

2)Self-reflection.(自我反省) 单个模型进行自我改进,这意味着当前修改基于模型的先前输出,通过这种方法迭代优化。受益于自然语言反馈,每增加一轮自然语言反馈,绝对性能就会提高2-17%

工具反馈

由模型生成的代码可能质量有限,具有许多不确定性。解决这一难题的一个解决方案是配备工具,这些工具可以收集信息反馈并帮助Agent生成和细化代码。

1)动态执行工具。调用编译器、解释器和执行引擎来直接编译或执行代码。这种方法利用输出和运行时行为,如测试结果或编译错误,作为代码改进的反馈

2)静态检查工具。通过代码分析工具,Agent可以获得更多关于代码约束的知识。例如,一些Agent应用静态分析工具来获得语法有效的程序符号或代码生成期间代码之间的依赖关系。将分析的信息包括到提示中可以引导LLM生成有效代码。

3)检索工具。Agent可以通过应用检索或搜索工具来访问丰富的外部资源。例如,一些代理检索本地知识库[86],例如私有API文档。通过API提供有用的信息,可以减轻对LLM的幻觉。

人类反馈

另一种方法涉及将人类反馈纳入过程,因为人类在澄清模糊的需求方面发挥着关键作用。例如,在软件开发中,人们可以检查生成的代码是否符合他们的初始意图。例如,ClarifyGPT 自动识别手动给定需求中的潜在歧义,并主动向人类提出相关问题;然后人类的响应进一步用于细化需求。

混合反馈

Agent还可以合并多种类型的反馈,并作为混合反馈逐渐增强彼此。具体地,LLM接收在执行程序或测试用例之后返回的错误消息,并利用其上下文理解来提供相应的反馈输出(例如,解释、建议、指示等)

借助反馈的优势在于,它允许Agent逐步提高代码的准确性和可靠性,同时能够适应不断变化的需求和环境条件。通过迭代细化,LLM基础的智能代理能够更好地处理复杂的编程任务,生成更符合实际需求的代码,从而提高软件开发的效率和质量。

Static Code Checking

静态检查是指在不执行代码的情况下对代码质量进行审查的过程。它在现代持续集成流程中至关重要,因为它能够在广泛执行测试之前高效地识别出各类代码质量问题,例如不同的错误、漏洞或代码异味。在实践中,静态检查通常采用静态分析技术来自动检测代码中的缺陷(即静态缺陷检测),或者通过同行审查来检查代码质量(即代码审查)。

近期的研究表明,LLMs可以帮助识别给定代码中潜在的质量问题。例如,通过对现有错误/正确代码的微调,或者简单地提示LLMs,已经在识别给定代码片段中的错误、漏洞或代码异味方面显示出了希望的效果。然而,鉴于不同代码问题的根本原因的多样性和复杂性,以及待审查的长代码上下文,独立的LLMs在现实世界的静态代码检查场景中显示出了有限的准确性和召回率。最近,研究人员的相关成果聚焦在这个方向上,以增强独立LLMs在缺陷或漏洞检测方面的能力。

LLM基础的Agent通过以下方式增强静态检查能力:

  1. 多智能体协作检测:一种有效的漏洞检测策略专注于多智能体协作的视角。例如,Mao等人提出了一种通过不同LLMs之间的相互讨论和共识来进行漏洞检测的方法,即设计两阶段的方法,涉及多个审计代理和一个批评代理,所有代理都采用GPT-4作为后端。审计员代理随机生成潜在的漏洞和相应的尽可能彻底的推理,而批评家根据特定的标准审查和评价候选。这种方法模拟了现实世界中的代码审查过程,通过LLMs之间的交互和反思增强了检测效果。

  2. 工具执行的额外知识:其他方法专注于通过工具调用来增强LLMs的能力。例如,ART是一个通用框架,它通过多步骤规划和有效的工具利用来提升LLMs在未见任务上的表现。

  3. 与传统静态缺陷检测的结合:一些研究人员将LLM基础的智能代理与传统的静态检查技术结合起来,以提高它们的静态缺陷检测能力。例如,LLIFT是一个LLM辅助的Use-Before-Initialization (UBI)缺陷检测工具,它基于强大的静态分析工具UBITECT报告的未决定缺陷,进一步利用LLMs在代码理解和总结上的能力来识别Linux内核中的UBI缺陷。

Code Review

代码审查(Code Review)是软件工程中用于确保和提升代码质量的一个重要环节。在代码审查过程中,开发者相互审查对方的代码变更,以确保代码在合并到主分支前符合质量标准。为了减轻人工代码审查的工作量,研究人员利用学习方法自动化代码审查流程。

在机器学习的视角下,代码审查可以被表述为一个二分类问题(即代码质量分类)或一个序列到序列的生成问题(即审查评论生成),这些任务通过微调或提示深度学习模型(包括LLM)来解决。与这些工作不同,基于LLM的Agent通过模仿现实世界的同行审查流程,包含多个作为不同代码审查者的Agent。

CodeAgent是一个多Agent系统,它模拟了一个包含六个具有不同角色的Agent的瀑布式流程,这些角色包括用户、CEO、CPO、CTO、编码者和审查者。在基本信息同步阶段,CEO、CPO和编码者Agent分析输入模式和编程语言。之后,编码者和审查者Agent合作进行代码审查并生成分析报告。在代码对齐阶段,编码者和审查者Agent根据分析报告继续修订代码。最后,在文档阶段,CEO、CTO和编码者Agent合作记录整个代码审查过程。实验结果表明CodeAgent在各种代码审查任务中的有效性和效率,包括一致性分析、漏洞分析、格式分析和代码修订。

Testing

软件测试是软件质量保证的关键环节。LLMs在测试生成方面展现出了显著的能力,包括生成测试代码、测试输入和测试规范。然而,在实践中生成高质量的测试是一个挑战,因为生成的测试不仅要在语法和语义上正确(即输入和规范必须满足被测试软件的规范),而且要足够充分(即测试应尽可能覆盖软件的更多状态)。根据之前的工作,独立LLM生成的测试仍然存在正确性问题(即编译错误、运行时错误和规范问题)和覆盖不足。

在单元测试中,单元测试检查被测试软件中的孤立和小单元(例如方法或类),这有助于快速识别和定位错误,特别是对于复杂的软件系统。Yuan等人的研究表明,LLMs(例如ChatGPT)在生成具有良好可读性和可用性的单元测试方面具有潜力。然而,独立LLM生成的单元测试仍然存在编译/执行错误和有限的覆盖范围。因此,最近的工作构建了基于LLM的Agent,主要通过迭代细化生成的单元测试来提高其正确性、覆盖范围和故障检测能力。

例如,TestPilot通过构建详细的提示信息来生成测试,包括函数签名、实现、文档和使用示例;它根据失败测试的反馈和错误消息来细化提示信息,并迭代生成修正测试。ChatTester利用LLM理解焦点方法的意图,然后生成相应的单元测试;此外,ChatTester的迭代测试细化器执行了比TestPilot更细粒度的细化,它分析错误消息并利用静态分析工具定位需要下一次迭代细化的bug代码。同样,ChatUniTest 采用“生成-验证-修复”机制来细化测试。

系统测试是对集成后的软件系统/组件进行全面评估的过程,以确保它满足规范并在不同设置下按预期运行。例如,模糊测试和图形用户界面(GUI)测试是系统测试中常见的测试范式。利用LLM进行系统测试可能具有挑战性,因为生成有效和系统的系统级测试用例需要满足隐含和明确包含在被测软件系统的规范或领域知识中的约束。与通过独立LLM生成系统级测试相比,基于LLM的Agent被设计为更好地整合被测软件系统的领域知识。

例如,KernelGPT是一个基于LLM的Agent,用于内核模糊测试。分析Agent作为大脑自动生成驱动syscall规范。它首先识别驱动程序,然后迭代完成每个规范组件,在过程中可以根据之前的记忆判断是否需要额外信息。代码提取器(使用LLVM工具链实现)被调用以解析内核代码库以提供源代码信息。KernelGPT最后调用Syzkaller工具并接收其反馈消息,以迭代验证和纠正生成的syscall规范。

Debugging

软件调试通常包括两个阶段:故障定位和程序修复。故障定位技术旨在根据软件的症状(例如,测试失败信息)识别程序中的错误元素(例如,错误的语句或方法);然后,基于故障定位阶段识别的错误元素,程序修复技术生成补丁以修复错误代码。此外,最近的工作还提出了统一调试,以双向方式桥接故障定位和程序修复。我们然后根据故障定位、程序修复和统一调试三个方面组织LLM基础的Agent的工作。

在故障定位方面,基于学习的方法在LLM时代之前已被广泛研究,这些方法通常训练深度学习模型来预测每个代码元素是否有错误的概率。然而,精确识别软件中的错误元素是具有挑战性的,因为软件系统的规模庞大以及错误消息的庞大和多样性,这通常超出了包括LLM在内的独立学习模型的能力。因此,最近的工作构建了LLM基础的Agent,它们通过多Agent和工具使用来帮助LLM解决这些挑战。

例如,AgentFL是一个多Agent系统,用于项目级别的故障定位。AgentFL的主要洞见是通过多个Agent的协同作用,将基于LLM的故障定位扩展到项目级别的代码上下文。该系统由四个不同的LLM驱动的Agent组成:测试代码审查员、源代码审查员、软件架构师和软件测试工程师。每个Agent都定制有专门的工具和独特的专业知识。通过这四个Agent,AgentFL通过将项目级别的故障定位过程分解为三个阶段:故障理解、代码库导航和故障确认,从而简化了项目级别的故障定位过程。

在程序修复方面,基于LLM的Agent通过模拟科学调试过程来迭代修复错误程序。例如,AutoSD包括四个组件:基于LLM的假设生成器、基于执行的验证器、基于LLM的结论制定者和基于LLM的修复者。在每次迭代中,生成器首先生成关于错误的假设,然后调用调试工具进行假设验证;结论制定者进一步确定假设是否被拒绝;最后,修复者返回潜在的补丁和解释。

在统一调试方面,与将故障定位或程序修复视为孤立阶段的传统方法不同,统一调试技术将它们视为一个统一的过程,利用每个阶段的输出来细化对方。例如,FixAgent是一个多Agent系统,用于统一调试,实现端到端的故障定位、错误修复和错误分析。基于手动调试(例如,橡胶鸭调试),FixAgent使用Agent专业化和协同(即LLM定位器、LLM修复者、LLM制作者和LLM复查者)来整合关键变量跟踪和程序上下文理解。FixAgent能够修复QuixBugs基准测试中的79个错误中的80个。LDB是一个Agent,用于端到端的故障定位和程序修复。LDB根据控制流图将错误程序划分为基本块,并利用LLM检测带有运行时执行值的错误块,然后提供细化建议。

End-to-end Software Development

鉴于多Agent协同带来的高度自主性和灵活性,基于LLM的Agent系统可以进一步处理软件开发的端到端流程(例如,从零开始开发一个贪吃蛇游戏应用),超越软件开发的单个阶段。特别是,这些Agent系统可以像真实世界的软件开发团队一样,通过整合多个专业化、具有不同角色和相关专业知识的Agent之间的协同作用,覆盖整个软件开发生命周期(即需求工程、架构设计、代码生成和软件质量保证)。表10总结了现有的LLM基础的端到端软件开发Agent。

软件开发模型

瀑布模型(Waterfall Process Model)

现有的LLM基础Agent系统(例如AISD、LCG、ChatDev、CTC和Self-Collaboration)主要遵循传统的瀑布模型进行软件开发。传统的瀑布模型是一种线性和顺序的软件开发工作流程,将项目分为不同的阶段,即需求工程、设计、代码实现、测试、部署和维护。一旦一个阶段完成,项目就会向前移动到下一个阶段,不会迭代。

基于此流程,一些端到端软件开发Agent(例如Self-Collaboration、MetaGPT、ChatDev和CTC)进一步扩展了传统的瀑布模型,包括在特定阶段进行迭代以确保生成内容的高质量。例如,测试阶段的结果可能会反馈给开发Agent以修订生成的代码;MetaGPT进一步将瀑布模型与类似人类的标准化操作程序(SOPs)集成,为每个角色分配责任并标准化中间输出,促进不同团队成员之间的协作。

敏捷开发(Agile Development)

一些工作探索了基于LLM的Agent与敏捷开发的可能性,包括测试驱动开发(TDD)和Scrum。TDD优先编写测试,然后编写实际代码以通过测试套件,并以反思阶段结束。Scrum是一种敏捷软件开发过程模型,通过几次冲刺将软件开发分解,通过迭代更新实现复杂的软件系统。在功能级代码生成基准测试中的实验表明,Scrum模型可以实现最佳且最稳定的性能,其次是TDD模型。

在不同的开发模型下,Agent系统一般以角色特化(Role Specialization ofSoftware DevelopmentTeam)的方式对单个Agent分配不同种类的角色(Role),角色的管理或产生主要有两种方式:预定义(Pre-defined)和动态创建(Dynamic Creation)。

  1. 预定义(Pre-defined): 大多数专门化角色是由Agent框架预先定义的。这意味着对于每个任务,角色都是由Agent框架固定设定的。例如,在CodeS、Co-Learning和AutoAgents等系统中,角色是根据Agent框架的工作流程预先设定好的,每个角色都有特定的职责和任务。

  2. 动态创建(Dynamic Creation): 除了预定义的角色外,一些Agent系统采用动态方式分配角色,这使得多Agent系统更加灵活。例如,AutoAgents设计了一个起草阶段,通过两个元Agent(规划者和观察者)之间的通信来确定多Agent小组的角色。AgentVerse通过专家招募阶段来设定不同角色的Agent群体。Talebirad等人提出的框架中,允许Agent动态地生成额外的Agent加入系统。这种动态策略旨在以更多样化和灵活的方式创建角色。

这些角色的创建和管理方式使得基于LLM的Agent系统能够模拟真实世界的软件开发团队,每个角色都负责特定的子任务,并在整个软件开发生命周期中协作。通过这种方式,Agent系统能够更有效地处理复杂的软件开发任务。

在这个过程中,调度各个Agent之间的协作是非常重要的。现有的文献主要讨论了Agent的协作方式和通信协议。

协作模式主要是有序模式和无序模式。有序模式是一种顺序模式,其中每个Agent独立地做出决定,并使用可选的反馈机制来提高它们生成的内容的质量,是现有Agent系统中采用的最普遍的协作模式。无序模式主要引入了一种无序的辩论机制,即多个主体分别平等地发表意见,通过总结得出最终决策。例如,LCG 涉及Scrum过程模型中的冲刺会议,其中参与的Agent提出他们的意见,并与所有其他Agent分享。Scrum Master最终会总结和提取用户故事。

通信协议现有文献分为自然语言和结构化语言。由于大部分都是自然语言,这里不再展开了。


 


进一步思考

对于SE中的design和verify

目前,LLM based Agent system覆盖了SE开发的多个过程,但对于design和verify,有统计数据表明暂未有相关文献被引用。对于design,其输入是需求分析,通过确定软件的高层次结构和组件,包括系统架构和关键组件的识别完成概要设计和详细设计文档的输出。这个过程可被分解为多个子过程,实际在本篇综述的一些环节也有体现。只是没有细分为“design”这样一个过程。

而验证工作,一般指形式化地对目标软件系统进行转义,对其进行严谨数学形式的抽象。由于验证工作在涉及生产环境中涉及不多,而且验证所用工具方法基于目标系统的特有性质产生极大的分化,因此在语料和正确性方面较难保障。

对于开发模型

现有研究只提及了Agent-Agent协同,以模拟人类参与者在Srcum、TDD和Waterfall模型下的协同形式。但是未提及有专门针对 Agent-Human 的协同形式。从业界角度讲,纯粹的Agent-Agent实际上同样是“只有人类参与”的另一种极端。目前的研究没有在这个方面有太过深入的、聚焦于SE而不是Agent侧的研究。

总结

阅读这篇文献以前,我自带了几个下问题,希望能从文章中找到答案。

1)UML作为半形式化的描述,有没有可能,让 LLM agent 根据uml描述,形式化的给出原子构件的代码?AI能否为该原子构件匹配合适的资源?如果二者兼是,则基本具备CBSE及OOP自底向上设计的先决条件。

2)LLM agent 如何理解架构?能否站在需求角度上对架构设计进行完善和变通?如果是,则基本具备结构化方法自顶向下的设计能力。

3)AI4SE的现如今难题是什么?相关研究聚焦在LLM侧还是SE侧?

4)如何设计出专门面向AI的需求文档,这部分内容作为需求分析还是概要设计?

对于上述问题的回答,通过该综述和相关知识的搜集,大致有了答案。本综述能够很全面地结合SE开发背景,对现有Agent的实现路线展开归纳,以及不同环节、不同阶段的研究现状整理。属于深入浅出的绝世好文,由衷感谢相关研究者~!


相关资源

 原文链接:arXiv:2409.02977v1

大模型LLM微调方法paper汇总! 本文对高效LLMs研究的发展进行了系统而全面的回顾,并将文献整理成由三个主要类别组成的分类法,从模型中心、数据中心和框架中心的角度涵盖了不同但相互关联的高效LLMs主题,并且从以模型为中心和以数据为中心的角度,回顾了LLMs的算法层面和系统层面的高效技术。本文分析了训练数据因素对对话模型性能的影响,包括数量、质量和语言分布,文中使用1000个样本评估集评估了各种模型,涵盖9个真实场景,目的是通过定量分析提供有价值的见解,推进开源聊天模型的发展,并且还扩展了LLaMA的词汇表,进行了二次预训练。 阅读详情

相关推荐

Netapp FAS2750更换磁盘后不同步问题处理

netapp fas2750磁盘更换后不同步问题处理

jetliu05的博客 1256

Explainable AI for Software Engineering 论文阅读

软工项目的成功很大程度上依赖于一些复杂的决策,比如开发者该先做什么,谁该来做这个任务,这个软件系统是否足够可靠等。而这些决策的失误的代价是极大的。于是,AI技术被广泛地应用于软件分析工具以及用来改善决策,提高生产力和软件质量的技术。但是,这些AI模型的预测仍然不够有效和可行。而大部分人都在努力提高AI的准确性,却很少有人关注其可解释性。可解释的AI对于软件工程十分重要,但是仍处于研究阶段。通过以上三个成功的案例,证实了可解释的AI能够在软件工程中为预测提供解释,也能为开发任务提供可行的指导。

qq_25732411的博客 670

避坑指南:Unity与Visual Studio开发环境配置中的5个常见问题及解决方案

本文针对Unity与Visual Studio开发环境配置中的5个常见问题,提供了详细的解决方案。重点解决了项目文件生成失败导致命名空间无法识别、调试器无法附加、包管理器与扩展安装混乱、脚本编译错误以及多版本环境冲突等核心痛点,帮助开发者构建稳定高效的开发调试环境。

weixin_27791839的博客 279

实现 AI 辅助软件工程:团队如何量身打造 AI4SE 体系?

PS:本文节选自开源电子书《AI 辅助软件工程:实践与案例解析》第一部分《AI4SE 体系设计》(https://aise.phodal.com/design-aise.html)受限于自身企业的规模与人员结构,AI 辅助软件工程(AI4SE)的设计与实施过程会有所差异。诸如于:研发外包型企业,对于 AI 辅助研发的需求并没有特别强烈?(待进一步调研)小型研发组织,生存是主要问题,因此对于数据敏...

Phodal's zenthink 2754

MuJoCo 动捕接口 Mocap 直接操控机械臂(附代码)

动作捕捉(Motion Capture,简称 Mocap)是一种记录并处理人或物体动作的技术,在影视、游戏、机器人等领域应用广泛。通过上下左右以及alt_l,alt_r可以控制hand这个hody跟着mocap进行同步,这里将quat固定为Z朝下。首先在 scene.xml 中修改添加 mocap 和 equality。下面介绍如何配置 Mocap 以及使用按键进行末端控制。控制核心代码,通过按键控制mocap的pos和quat。

darcsdn 879

TSMaster如何用珠海创芯CAN卡实现高效CAN通信(附完整驱动安装指南)

本文详细介绍了如何使用TSMaster软件与珠海创芯CAN卡实现高效CAN通信,包括驱动安装、系统配置、ControlCAN.dll替换及TSMaster集成配置等关键步骤。通过实战指南和故障排除技巧,帮助工程师快速搭建稳定可靠的CAN通信测试环境,适用于汽车电子和工业控制等领域。

weixin_29201859的博客 479

The Rise and Potential of Large Language Model Based Agents: A Survey 中文翻译

长期以来,人类一直追求与或超越人类水平的人工智能(AI),而人工智能代理被视为实现这一目标的有希望的方式。人工智能代理是感知环境、做出决策并采取行动的人工实体。已经有很多关于开发智能代理的努力,但它们主要集中在算法或训练策略方面的改进,以提高特定任务的能力或性能。实际上,社区缺乏一个通用且强大的模型,可以作为设计适应各种情况的人工智能代理的起点。由于它们所展示的各种能力,大型语言模型(LLMs)被认为是人工通用智能(AGI)的潜在火花来源,并为构建通用人工智能代理提供了希望。

qq_41527980的博客 2649

PHP实现SM2算法(附完整源码)

PHP实现SM2算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 4022

LLMs:《A Survey on the Optimization of Large Language Model-based Agents》翻译与解读

​ LLMs:《A Survey on the Optimization of Large Language Model-based Agents》翻译与解读 目录 《A Survey on the Optimization of Large Language Model-based Agents》翻译与解读 Abstract 《A Survey on the Optimization of Large Langua

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 1885

ABAP 平台下配置 OAuth 2.0 Authorization Code 授权类型的完整指引

本文是面向ABAP管理员和SAP开发者的OAuth 2.0授权码配置实战指南。文章详细介绍了在ABAP平台启用Authorization Code的完整流程,包括前置条件检查(如TLS配置和系统用户准备)、SOAUTH2事务码中各字段配置要点(授权类型启用、Redirect URI设置、授权码有效期等)、Scope分配规则以及验证方法。通过一个销售订单OData接口的实际案例,说明了如何将抽象规范转化为具体配置。最后提供了多种验证方式(事务码测试、端点测试和Postman测试)以及关键配置参数(如授权码有效

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 296

基于Python的新闻聚合与推荐系统:抓取多新闻网站内容并根据用户兴趣进行个性化推荐

本文介绍了如何使用Python构建一个新闻聚合与推荐系统,涵盖了从新闻数据抓取、用户兴趣建模到推荐算法实现的全过程。通过爬虫技术抓取新闻网站内容,使用TF-IDF、Word2Vec等算法进行内容分析,并通过推荐算法向用户推送个性化的新闻,最终帮助用户快速获取自己感兴趣的信息。你可以根据具体需求,进一步扩展和优化系统。例如,加入更多的推荐算法、优化爬虫的抓取效率、增强前端展示的互动性等。通过本文的指导,您应该能够构建一个完整的新闻聚合与推荐系统,并为用户提供个性化的新闻推荐服务。

2201_76125261的博客 1513

聚焦AI4SE软件工程领域,基于Multi Agent System多智能体系统开发的最新成果,实现软件开发领域的PUGC!

我选第一种,继续下一步。在我发送完需求之后,AI就根据我的需求和刚才确定好的解决方案,直接把应用的数据结构设计了出来,点开详情能看到数据结构的详细信息,也能大概清楚我们的应用开发出来是什么样子。也就是说当我的店铺新上了一款产品,我就可以在这个应用中把这个商品的信息记录上去,同时将这个商品的供货商、销售记录等其他相关联的信息也储存到我开发的这个应用中。点开这些应用的详情,可以看到应用的具体介绍,同时可以在我们的服务器上直接体验这个应用,如果觉得有意思的话,也可以通过点【开发同款】来生成一个自己专属的应用。

weixin_47201270的博客 2956

ADAS工作原理解析:如何通过智能技术提升驾驶安全

ADAS通过集成传感器、摄像头、雷达、SoC计算单元以及高效的数据融合技术,提供了一系列主动和被动安全功能,如自动刹车、车道保持、自适应巡航控制等。这些功能共同作用,不仅减少了交通事故的发生,还大幅提升了驾驶员的驾驶体验和安全性。随着技术的进步,ADAS的功能将越来越智能,最终迈向全自动驾驶的未来🚗💨。

weixin_43199439的博客 1148

行业视野|AI4SE:基于本体语义推理的自动功能分解

本文提出了一种基于本体语义推理的功能自动分解方法,用于复杂机电系统的概念设计。该方法通过SysML建模表示输入输出流状态,实现任务自动分解;利用功能效应作为语义媒介检索原理解;通过仿真原理实现过程生成支持性子功能。

HZHW_MBSE的博客 1396

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

大型语言模型综述,非常详细,格局打开!A Survey of Large Language Models

从图灵测试开始讲起,人类一直在探索用机器掌握语言智能的方法。在过去20年,语言模型得到了广泛研究。从统计语言模型到了基于神经网络的语言模型(LSTM等)。最近这些年,通过在大规模语料库(数据集)上对Transformer模型的预训练,提出了预训练语言模型(PLMs),在解决各种自然语言处理(NLP)任务方面显示出了很强的能力。

大模型天花板 9926

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

智能软件工程AI4SE:AI驱动的软件工程新范式

智能软件工程(AI4SE)正推动软件开发从人工密集型向智能驱动型转变,通过AI技术赋能软件全生命周期。其技术栈涵盖智能需求分析、代码生成、测试、运维等环节,典型工具如GitHub Copilot、Diffblue等。AI4SE采用智能体分层架构(L0-L5),实现多Agent协同开发。实践场景包括需求自动生成、微服务设计、代码维护问答等,显著提升开发效率与质量。当前面临数据隐私、模型可解释性等挑战,未来将向领域定制化、多模态和自治系统发展。AI4SE将重构人机协作模式,使开发者转向需求定义与系统监督角色。

Dr.kangder的博客 526

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

code agent使用

code agent

lanSeFangZhou的博客 740

AI4SE:AI赋能软件工程——从自动化到智能化的演进之路

《AI赋能软件工程(AI4SE):智能化浪潮下的开发范式变革》 摘要:AI4SE作为人工智能与软件工程的交叉领域,正在推动软件开发从自动化向智能化的范式跃迁。其核心技术栈涵盖代码智能、自然语言处理、机器学习等方向,通过LLM模型、程序分析等技术实现代码语义理解与生成。典型应用包括智能编码辅助、测试生成、AIOps和架构设计,显著提升开发效率与质量。当前面临数据隐私、模型可解释性等挑战,需采取分阶段实施、人机协同等策略。未来AI4SE将向端到端智能开发流演进,开发者需培养复合能力以把握这场工作方式的变革。

Dr.kangder的博客 535

AI 智能体攻陷软件工程:从 SWE-Agent 到 SWE-Swiss,全景解析 AI4SE 最新战局

摘要:大语言模型在软件工程领域展现出巨大潜力,目前国内外已出现SWE-Agent、AutoCodeRover和SWE-Swiss等代表性研究。SWE-Agent通过Agent-Computer接口实现12.5%的bug修复准确率;AutoCodeRover利用AST解析将修复时间缩短至4分钟;SWE-Swiss结合强化学习取得60.2%的SOTA成绩。这些技术突破表明AI正从代码生成向完整开发流程演进,未来将通过多智能体协同、MoE模型优化等方向继续突破,推动"自编程"时代的到来。(14

2401_82452722的博客 1041

希尔贝壳入选中国信通院AI4SE工作组首批成员单位!

9月25日,中国信通院举办的“2023大模型工程化论坛”在北京召开,来自研究院云计算与大数据研究所人工智能部的曹峰主任在论坛上宣布了AI4SE(AI for Software Engineering)工作组首批成员,此次名单包括了高校、研究机构、金融行业、运营商、大型互联网公司、软件服务商等共计65家单位,希尔贝壳为AI4SE工作组首批成员单位之一。

AI_SHELL的博客 407

18LLM4SE革命性技术揭秘:大型语言模型LLM在软件工程SE领域的全景解析与未来展望 - 探索LLM的多维应用、优化策略与软件管理新视角【网安AIGC专题11.15】作者汇报 综述

> 本文汇总了大型语言模型(LLM)在软件工程(SE)领域的广泛应用,涵盖了从程序开发到软件维护,再到项目管理的每一个关键环节,揭示了LLM在这些领域中的革命性影响和未来发展潜力。 > 随着LLM在软件工程中的深入应用,我们将探讨这些模型如何彻底改变软件开发的面貌,提高开发效率,以及未来可能带来的更多机遇和挑战。我们将深入分析LLM在需求工程、软件设计、质量保证等多个阶段的关键作用,以及在软件管理中的创新应用。 > 通过阅读这篇博文,您将获得对LLM在软件工程实践中的应用、挑战和优化方向的全面理解。

定期分享我的发现和想法,感谢你的陪伴和支持 6998

智能软件工程AI4SE(三十一)——需求精化

摘要:需求精化是需求工程中承上启下的关键环节,旨在将模糊、冲突、缺失或不可验证的初始需求,逐步转化为清晰、完整、可验证的细粒度需求。本文系统梳理了需求精化的核心概念与关键活动(分解、澄清、补充、验证),介绍了从业务需求到系统需求的层次模型,并结合 AI4SE 背景探讨了大语言模型在歧义检测、需求分解、缺失场景补全与一致性检查中的辅助作用。文章最后给出以用户价值为导向、保持可追踪性、控制精化粒度、持续迭代并重视非功能需求等实践要点,帮助读者在复杂项目中真正做好需求精化。

Dr.kangder的博客 471

【论文精读】A Survey on Large Language Model based Autonomous Agents

一篇来自人大高瓴的综述,详细介绍了基于LLM的智能体的发展和应用,以及对未来的预测。作为AI当前最火的领域,智能体上手容易,操作简单,本质上就是框架+prompt,但是其效果惊艳,能够完成很多LLM无法完成的简单任务,其在未来一定大有可为。PaperCodeFrom自主智能体一直都是学术界和工业界的重点研究焦点。先前的研究关注于具有有限知识的智能体在隔绝环境下的训练,这与人类学习方式大相径庭,因此很难像人类一样做决策。最近,LLMs通过获取的丰富web知识,在完成人类等级只能上展现出非凡的潜力。

HERODING23的博客 4289

《The Rise and Potential of Large Language Model Based Agents: A Survey》全文翻译

长久以来,人类一直在追求等同或超越人类的人工智能,而 AI 代理被认为是实现这一追求的有效手段。agent是能够感知环境、做出决策并采取行动的人工智能实体。自 20 世纪中期以来,人们已经为开发 AI 代理做出了许多努力。然而,这些努力主要集中在算法或训练策略的进步上,以增强特定任务上的特定能力或表现。实际上,我们所缺乏的是一个充分且强大的模型,来作为开发可适应各种不同场景的 AI 代理的基础。具有多样且卓越能力的大语言模型,则被视为通向通用人工智能的必经之路,也为构建通用 AI 代理提供了希望。

晓野豬 4467

LLM作为操作系统|代码预训练对语言模型影响

相比之下,到目前为止,我们与LLMs的大多数交互都是基于会话的,LLMs在不同会话之间基本上是无状态的。相反,增加代码混合比例可能会损害模型在其他任务上的表现,包括需要对语言结构(如句法或形态)敏感的任务,以及衡量现实世界知识的任务。在关于AI研究科学家的论文发表之后,一个重要的问题浮现出来:基于大语言模型(LLM)的智能代理是否真的能够产生新颖的研究想法。很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,下面是我整理好的一套完整的学习路线,希望能够帮助到你们学习AI大模型。

qingkahui24689的博客 1115

救命!用华为CodeArts智能体一键安装Hermes Agent,零报错全过程实录(附完整FAQ)| AI Agent安装教程

手动部署AI Agent太麻烦?用华为CodeArts智能体,一条自然语言指令即可自动完成Hermes Agent从安装、配置到测试的全流程,并附API Key配置、网络搜索工具集成等完整FAQ。实测效率提升5倍,推荐AI开发者收藏。

以归零之心,走在智能时代前列 880
上一篇: 面向对象开发方法三种模型及其应用
下一篇: 一个写着玩的LoL极地大乱斗(ARAM)自动战斗ahk脚本
睡不醒的小泽
博客等级 码龄11年 1426粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值