人机协作加速软件开发!AgileGen实现从想法到成品

探讨AgileGen框架如何通过人机协作提高软件开发的效率和准确性,解决用户需求不完整的问题。

原文标题:取人类与大模型之长,人机协作式智能软件开发框架AgileGen来了

原文作者:机器之心

冷月清谈:

文章介绍了AgileGen,这是一种基于人机协作的敏捷生成式软件开发框架,旨在通过融合人类的创造力与AI的生成能力,提升软件开发的效率与准确性。当前,软件开发面临要求不完整的问题,用户常常难以准确描述需求,导致开发过程中的信息偏差。AgileGen通过引入人机协作的方式解决这一问题,让用户专注于需求提出和决策,而AI负责技术实现与代码生成。该框架利用行为驱动开发(BDD)和记忆池机制,帮助用户逐步澄清需求并生成满意的软件原型。文章详细阐述了AgileGen的核心组件及其对比于现有生成式软件开发方法的优势,展望未来将为软件开发带来深刻的转变。

怜星夜思:

1、AgileGen与传统软件开发模式的最大区别是什么?
2、在实际应用中,AgileGen能解决哪些具体问题?
3、未来的智能软件开发市场会不会被AgileGen这样的人机协作框架完全占据?

原文内容

AIxiv专栏是机器之心发布学术、技术内容的栏目。过去数年,机器之心AIxiv专栏接收报道了2000多篇内容,覆盖全球各大高校与企业的顶级实验室,有效促进了学术交流与传播。如果您有优秀的工作想要分享,欢迎投稿或者联系报道。投稿邮箱:[email protected][email protected]

本论文作者张赛是天津大学博士研究生,师从张小旺教授。目前是澳大利亚联邦科学与工业研究组织(SE4AI 团队)联合培养博士生,合作导师为邢振昌教授。主要研究方向为生成式软件开发,软件工程需求分析等。她曾经以第一作者在 TOSEM, TNNLS, TCBB, Bioinformatics 等顶级期刊上发表论文。曾获得 2022 年度省级优秀硕士学位论文,国家奖学金和国家公派奖学金等荣誉。

作者联系方式:[email protected]


在人工智能迅猛发展的今天,我们正站在软件开发领域一次深刻变革的起点上。想象一下,只需一句简单的需求描述,就能生成符合你期望的软件。这不再是科幻小说中的情节,而是即将成为现实的创新技术。


而这一切的背后,正是我们即将介绍的 AgileGen— 一种基于人机协作的敏捷生成式软件开发框架。



  • 论文题目:Empowering Agile-Based Generative Software Development through Human-AI Teamwork

  • 论文链接:https://arxiv.org/abs/2407.15568

  • github 链接:https://github.com/UGAIForge/AgileGen

  • Huggingface (试用):https://huggingface.co/spaces/HarrisClover/AgileGen


目前,该论文已被 ACM TOSEM (CCF A) 录用。


软件开发的根本挑战:需求的不完整性


著名的图灵奖得主 Frederick P. Brooks 在他的经典论文”No Silver Bullet: Essence and Accidents of Software Engineering” 中指出:“软件开发的本质困难在于对复杂概念结构的构思和理解,这主要涉及需求分析和设计。相比之下,使用编程语言来实现这些抽象的软件实体只是偶然性的困难。” 也就是说,理解用户需求,设计出满足这些需求的系统架构和功能,是软件开发中最核心、最具挑战性的部分。


然而,在实际开发过程中,用户往往难以完整、准确地描述他们的需求。这并非用户的错,而是因为他们可能缺乏专业的技术背景,或者对自己的需求也不是特别清晰。举个例子,一位教师可能会提出:“我需要一个可以随机点名的应用。” 但是,这样的描述并未明确系统需要具备哪些具体功能,比如学生名单是否固定还是要动态添加删除,是否需要考虑请假学生,界面应该如何设计,是否需要配合随堂提问等。


现有生成式软件开发的局限性


随着大型语言模型(LLM)的发展,许多人开始尝试利用 AI 来自动生成代码。然而,现有的生成式软件开发方法在处理不完整的需求时仍存在巨大挑战:他们要么过于依赖用户的指导,要么在没有用户参与的情况下自行决策,导致生成的代码与用户的期望有较大偏差,也就是即使生成的软件可以成功运行 (build software right),也无法弥合用户的期待 (build right software)。


AgileGen 的诞生:人机协作的新范式


面对这些挑战,我们提出了 AgileGen,一种基于人机协作的敏捷生成式软件开发框架,旨在融合人类的创造力和 AI 大模型的生成能力,实现高效、准确的软件生成。


1. 核心理念:发挥人类与 AI 各自的优势


AgileGen 的核心理念是让用户和 AI 各自专注于自己擅长的领域。用户负责提出需求和进行决策,AI 负责技术实现和代码生成。通俗的讲就是人干两头,AI 干中间。通过这种人机协作的方式,我们能够更精准地捕捉用户的隐含需求,减少沟通成本。


图 1:问题陈述图。用户不确定如何驱动代理生成所需的软件,Agent 也不知道如何满足用户需求。我们在用户和 Agent 之间建立了一座桥梁,促进了人类决策技能和 Agent 编码能力之间的协作。这种协作创建了一个具有轻量级迭代反馈的生成式软件开发代理。


2. 关键创新


我们的创新主要体现在以下三个方面:


  • 人干两头 AI 干中间的人机协作方式


用户在每次迭代的开始(场景决策)和结束(验收与建议)参与进来,AI 则负责中间的技术实现。这样既保留了用户的控制权,又充分利用了 AI 的优势,减少了错误的发生。


  • 构建用户和 Agent 之间的桥梁


我们首次将行为驱动开发(BDD) 引入生成式软件开发中,使用 Gherkin 语言 将用户的模糊需求转化为清晰、可测试的场景描述,弥合了不完整需求与精确功能之间的差距。通过动态融入用户的决策,我们确保了生成的软件始终符合用户的真实需求。


  • 自我进化的 Agent 图架构


我们设计了一个包含人类决策点的 Agent 图,形成了一个有向循环的流程,便于迭代和扩展。引入了记忆池来收集用户的决策结果,推荐给有类似需求的后续用户,形成自我更新的循环。


AgileGen 核心组件设计介绍


图 2 AgileGen 概括


1. 用户需求和场景决策组件


- 用户需求决策:用户首先以自然语言描述自己的需求。这是用户参与决策的第一步,决定了要生成的软件目标。例如,用户可能会输入:“Please generate a web system with a random roll call function”


- 场景决策:AgileGen 会根据用户的需求,从记忆池中匹配类似的需求和场景,为用户提供参考。用户可以对这些场景进行确认、添加、删除或修改,从而迭代地澄清需求。这些决策将被记录并存储在记忆池中,供后续用户参考并循环使用。


2. 场景设计组件


- 记忆池机制:存储了大量先前用户决策的场景描述,当新的需求输入时,系统会从记忆池中匹配相似的需求,提供参考场景,提升场景设计的可靠性。随着使用次数的增加,记忆池会不断丰富,为用户提供更精准的参考。


- 交互桥:为了让用户无需学习领域特定语言 Gherkin,系统设计了一个交互式桥梁,将 Gherkin 场景转换为自然语言。用户可以轻松理解这些场景,并进行相应的决策,降低了技术门槛。


3. 快速原型设计组件


- 视觉设计:系统根据用户确认的 Gherkin 场景,自动生成页面布局和视觉描述,遵循八大成功的视觉设计原则,确保界面美观、易用。


- 代码生成与一致性因子:通过生成一致性因子(测试用例),确保生成的代码与业务逻辑一致,减少功能偏差。


- 自动修改与迭代:系统能够根据用户的反馈,自动修改代码,实现快速迭代。


4. 用户验收与推荐反馈决策


- 用户验收决策:在原型生成后,AgileGen 为用户提供一个代码执行链接,用户可以直接体验软件的功能。如若满意可以下载完整代码,部署到实际环境中。


- 用户推荐反馈决策:通过对界面和功能的测试,用户可以提出修改建议,如调整界面风格、添加新功能等。AgileGen 会根据用户的反馈,自动修改代码,并提供新的原型供用户验收。这种循环持续进行,直到用户满意并完成软件交付。


实战案例:从想法到成品


让我们回到之前的例子,看看 AgileGen 是如何将一个简单的想法转化为完整的软件的。


步骤 1:提出需求


用户输入初始需求:“Please generate a web system with a random roll call function”



步骤 2:场景设计与确认


AgileGen 利用记忆池,从类似的需求中提取可能的场景,并以自然语言呈现给用户:



用户可以确认这些场景,或者进行修改。例如,用户可能希望添加一个功能:“I need to be able to save the history of the roll call name.”



步骤 3:快速原型生成


AgileGen 根据用户决策过的 Gherkin 场景,生成初步的代码和界面设计,包括页面布局、按钮位置、颜色搭配等。




步骤 4:用户反馈与迭代


用户运行生成的原型,如果发现界面颜色不符合期望,或者按钮位置需要调整。他可以在系统中提出这些问题,AgileGen 将根据反馈自动修改代码。


- 功能增加反馈:随机点名时给我一些 python 相关的问题。




- 样式修改反馈:我希望颜色能够更丰富一些。




步骤 5:完成并交付


经过几次迭代,用户对功能和界面都满意之后,下载完整的代码,部署到实际环境中。



- 更多示例和讲解




视频链接:https://www.youtube.com/watch?v=lClwF7KN2xw


案例对比:与现有生成式软件开发方法对比


1. 笔记本助理项目 (Bookkeeping Assistant)


用户需求描述:I need a bookkeeping assistant website.



AgileGen+GPT3.5 和 AgileGen+GPT4 和 GPT-Engineer 能够做到实现记账功能。AgileGenAgileGen+GPT3.5 生成的功能更多,而 AgileGen+GPT4 生成了更简洁的功能,以更合理的页面布局完成核心功能。ChatDev (_23 版本,_24 版本)、GPT3.5+CoT 和 GPT4+CoT 生成的页面未完成簿记功能。相反,它们是常见网页元素的组合(例如 “关于我们” 和 “联系我们”)。GPT4o+CoT 生成的页面使用 Bootstrap 样式表,但功能不完整无法记录条目。


2. 运动场地预定软件 (Sport Arena)


用户需求描述:Develop a user-friendly software application that allows users to create and customize virtual sports arenas.(来源于 ChatDev’s SRDD 数据集)



AgileGen+GPT4 方法支持场地的创建、功能定制和配置管理,而 ChatDev+GPT-4 生成没有 GUI 的应用程序,ChatDev+GPT-3.5 生成了两个点击无响应的按钮界面,标记为 “Create arena” 和 “Customize arena”。


3. 视频分割软件 (Video Clipper)


用户需求描述:VideoClipper is a software application that allows users to easily clip and trim videos. It provides an intuitive interface to select specific sections of the video, and saves the trimmed video as a new file.(来源于 ChatDev’s SRDD 数据集)



所有方法都生成了能够完成视频剪辑的软件,但 AgileGen 生成的界面体现了更好的界面设计和交互性。


展望未来:开启软件开发的新纪元


我们相信,AgileGen 的出现,将开启软件开发的新纪元。通过人机协作,充分发挥人类的创造力和 AI 的计算能力,软件开发将变得更加高效、准确和个性化。正如 Frederick P. Brooks 所言,软件开发的本质困难在于需求分析和设计。AgileGen 通过引入人机协作的敏捷开发理念,让用户深度参与需求的澄清和验收,使得软件真正满足用户的需求。


我们诚挚地邀请广大开发者、企业和对软件开发感兴趣的朋友和学者,关注并参与 AgileGen 的未来发展。让我们携手共进,探索人机协作在软件开发中的无限可能,开启智能软件开发的新时代!


© THE END 
转载请联系本公众号获得授权
投稿或寻求报道:[email protected]

最大挑战:
- 确保用户和 AI 之间的有效沟通,避免需求理解偏差。
- 训练 AI 模型,使其能够有效地将自然语言需求转换为技术实现。

最大优势:
- 充分利用人类的创造力,指导 AI 的生成过程,提高软件的准确性和个性化。
- 减少软件开发的技术门槛,让更多非技术人员也能参与到软件开发中。

这取决于你的观点。从某种程度上来说,AgileGen 可以让非程序员也能够开发软件,这可能会减少对传统程序员的需求。但从另一个角度来看,AgileGen 也可能创造新的工作机会,如专门负责训练和维护 AI 模型的工程师。

不会。AgileGen 是一个辅助工具,它不能完全取代程序员,而是作为程序员的助手,帮助他们更高效、准确地完成软件开发任务。

AgileGen 在需求不完整或难以描述的领域具有最广泛的应用前景,例如:
- 软件原型制作
- 小型企业或初创公司的软件开发
- 教育和研究领域
- 个人开发项目

这个问题有点杞人忧天了。正如计算机没有取代数学家一样,AgileGen 也无法取代程序员。软件开发是一个复杂的创造性过程,需要人类的直觉、判断和专业知识。AI 可以帮助程序员自动化某些任务,但它无法完全取代人类程序员在软件开发过程中的作用。相反,AgileGen 更像是程序员的“超级工具”,帮助他们更高效、准确地完成工作。

AgileGen最大区别在于人机协作的深入。传统模式往往依赖技术人员的理解与实施,而AgileGen让用户参与到需求的澄清和验证中,从而减少了需求偏差。

我觉得更多是能加速开发周期。以前可能需要几个星期的需求分析,现在只需要几次交互就能产生原型,节省了开发时间。

AgileGen能特别有效地解决模糊需求的问题。比如,一个教育工作者想要一个课堂管理工具,AgileGen能够帮助用户逐步明确功能,比如忘记是否需要学生动态添加,或者请假处理等。

简单说,AgileGen就好比驾照考试时的双人驾车,用户与AI一起驾驭开发,而不是让开发人员单枪匹马。这样的合作能减少错误,提高效率!

我觉得AgileGen在需求分析和迭代上做得更好。传统模式往往周期较长,用户可能等很久才能看到效果,而AgileGen强调快速原型和用户反馈的循环,使用户能更早发现问题并调整需求。

没错,可能AI会帮助我们提高效率,但并不会完全取代软件开发人员。人类的创造力和灵活应变能力是AI无法复制的。

此外,AgileGen还带来了可重复使用的场景设计,用户之前的场景需求会被记忆与提取,降低了未来开发时的信息丢失。

我觉得这并不一定。虽然AgileGen为软件开发提供了新的可能性,但市场上总会有各种需求。有些复杂的项目或特定行业,可能仍需专业人员深度参与。

未来可能是一种并存状态,AgileGen处理一些简单和常见的需求,而复杂的项目仍需要深厚的专业知识。就像你的厨房总不能只有自动炒菜机,还是要有人掌控的。