AIxiv專欄是機(jī)器之心發(fā)布學(xué)術(shù)、技術(shù)內(nèi)容的欄目。過去數(shù)年,機(jī)器之心AIxiv專欄接收?qǐng)?bào)道了2000多篇內(nèi)容,覆蓋全球各大高校與企業(yè)的頂級(jí)實(shí)驗(yàn)室,有效促進(jìn)了學(xué)術(shù)交流與傳播。如果您有優(yōu)秀的工作想要分享,歡迎投稿或者聯(lián)系報(bào)道。投稿郵箱:liyazhou@jiqizhixin.com;zhaoyunfeng@jiqizhixin.com
本論文作者張賽是天津大學(xué)博士研究生,師從張小旺教授。目前是澳大利亞聯(lián)邦科學(xué)與工業(yè)研究組織(SE4AI 團(tuán)隊(duì))聯(lián)合培養(yǎng)博士生,合作導(dǎo)師為邢振昌教授。主要研究方向?yàn)樯墒杰浖_發(fā),軟件工程需求分析等。她曾經(jīng)以第一作者在 TOSEM, TNNLS, TCBB, Bioinformatics 等頂級(jí)期刊上發(fā)表論文。曾獲得 2022 年度省級(jí)優(yōu)秀碩士學(xué)位論文,國(guó)家獎(jiǎng)學(xué)金和國(guó)家公派獎(jiǎng)學(xué)金等榮譽(yù)。
作者聯(lián)系方式:zhang_sai@tju.edu.cn
在人工智能迅猛發(fā)展的今天,我們正站在軟件開發(fā)領(lǐng)域一次深刻變革的起點(diǎn)上。想象一下,只需一句簡(jiǎn)單的需求描述,就能生成符合你期望的軟件。這不再是科幻小說中的情節(jié),而是即將成為現(xiàn)實(shí)的創(chuàng)新技術(shù)。
而這一切的背后,正是我們即將介紹的 AgileGen 一種基于人機(jī)協(xié)作的敏捷生成式軟件開發(fā)框架。
論文題目: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) 錄用。
軟件開發(fā)的根本挑戰(zhàn):需求的不完整性
著名的圖靈獎(jiǎng)得主 Frederick P. Brooks 在他的經(jīng)典論文”No Silver Bullet: Essence and Accidents of Software Engineering” 中指出:“軟件開發(fā)的本質(zhì)困難在于對(duì)復(fù)雜概念結(jié)構(gòu)的構(gòu)思和理解,這主要涉及需求分析和設(shè)計(jì)。相比之下,使用編程語言來實(shí)現(xiàn)這些抽象的軟件實(shí)體只是偶然性的困難! 也就是說,理解用戶需求,設(shè)計(jì)出滿足這些需求的系統(tǒng)架構(gòu)和功能,是軟件開發(fā)中最核心、最具挑戰(zhàn)性的部分。
然而,在實(shí)際開發(fā)過程中,用戶往往難以完整、準(zhǔn)確地描述他們的需求。這并非用戶的錯(cuò),而是因?yàn)樗麄兛赡苋狈I(yè)的技術(shù)背景,或者對(duì)自己的需求也不是特別清晰。舉個(gè)例子,一位教師可能會(huì)提出:“我需要一個(gè)可以隨機(jī)點(diǎn)名的應(yīng)用! 但是,這樣的描述并未明確系統(tǒng)需要具備哪些具體功能,比如學(xué)生名單是否固定還是要?jiǎng)討B(tài)添加刪除,是否需要考慮請(qǐng)假學(xué)生,界面應(yīng)該如何設(shè)計(jì),是否需要配合隨堂提問等。
現(xiàn)有生成式軟件開發(fā)的局限性
隨著大型語言模型(LLM)的發(fā)展,許多人開始嘗試?yán)?AI 來自動(dòng)生成代碼。然而,現(xiàn)有的生成式軟件開發(fā)方法在處理不完整的需求時(shí)仍存在巨大挑戰(zhàn):他們要么過于依賴用戶的指導(dǎo),要么在沒有用戶參與的情況下自行決策,導(dǎo)致生成的代碼與用戶的期望有較大偏差,也就是即使生成的軟件可以成功運(yùn)行 (build software right),也無法彌合用戶的期待 (build right software)。
AgileGen 的誕生:人機(jī)協(xié)作的新范式
面對(duì)這些挑戰(zhàn),我們提出了 AgileGen,一種基于人機(jī)協(xié)作的敏捷生成式軟件開發(fā)框架,旨在融合人類的創(chuàng)造力和 AI 大模型的生成能力,實(shí)現(xiàn)高效、準(zhǔn)確的軟件生成。
1. 核心理念:發(fā)揮人類與 AI 各自的優(yōu)勢(shì)
AgileGen 的核心理念是讓用戶和 AI 各自專注于自己擅長(zhǎng)的領(lǐng)域。用戶負(fù)責(zé)提出需求和進(jìn)行決策,AI 負(fù)責(zé)技術(shù)實(shí)現(xiàn)和代碼生成。通俗的講就是人干兩頭,AI 干中間。通過這種人機(jī)協(xié)作的方式,我們能夠更精準(zhǔn)地捕捉用戶的隱含需求,減少溝通成本。
圖 1:?jiǎn)栴}陳述圖。用戶不確定如何驅(qū)動(dòng)代理生成所需的軟件,Agent 也不知道如何滿足用戶需求。我們?cè)谟脩艉?Agent 之間建立了一座橋梁,促進(jìn)了人類決策技能和 Agent 編碼能力之間的協(xié)作。這種協(xié)作創(chuàng)建了一個(gè)具有輕量級(jí)迭代反饋的生成式軟件開發(fā)代理。
2. 關(guān)鍵創(chuàng)新
我們的創(chuàng)新主要體現(xiàn)在以下三個(gè)方面:
人干兩頭 AI 干中間的人機(jī)協(xié)作方式
用戶在每次迭代的開始(場(chǎng)景決策)和結(jié)束(驗(yàn)收與建議)參與進(jìn)來,AI 則負(fù)責(zé)中間的技術(shù)實(shí)現(xiàn)。這樣既保留了用戶的控制權(quán),又充分利用了 AI 的優(yōu)勢(shì),減少了錯(cuò)誤的發(fā)生。
構(gòu)建用戶和 Agent 之間的橋梁
我們首次將行為驅(qū)動(dòng)開發(fā)(BDD) 引入生成式軟件開發(fā)中,使用 Gherkin 語言 將用戶的模糊需求轉(zhuǎn)化為清晰、可測(cè)試的場(chǎng)景描述,彌合了不完整需求與精確功能之間的差距。通過動(dòng)態(tài)融入用戶的決策,我們確保了生成的軟件始終符合用戶的真實(shí)需求。
自我進(jìn)化的 Agent 圖架構(gòu)
我們?cè)O(shè)計(jì)了一個(gè)包含人類決策點(diǎn)的 Agent 圖,形成了一個(gè)有向循環(huán)的流程,便于迭代和擴(kuò)展。引入了記憶池來收集用戶的決策結(jié)果,推薦給有類似需求的后續(xù)用戶,形成自我更新的循環(huán)。
AgileGen 核心組件設(shè)計(jì)介紹
圖 2 AgileGen 概括
1. 用戶需求和場(chǎng)景決策組件
- 用戶需求決策:用戶首先以自然語言描述自己的需求。這是用戶參與決策的第一步,決定了要生成的軟件目標(biāo)。例如,用戶可能會(huì)輸入:“Please generate a web system with a random roll call function”
- 場(chǎng)景決策:AgileGen 會(huì)根據(jù)用戶的需求,從記憶池中匹配類似的需求和場(chǎng)景,為用戶提供參考。用戶可以對(duì)這些場(chǎng)景進(jìn)行確認(rèn)、添加、刪除或修改,從而迭代地澄清需求。這些決策將被記錄并存儲(chǔ)在記憶池中,供后續(xù)用戶參考并循環(huán)使用。
2. 場(chǎng)景設(shè)計(jì)組件
- 記憶池機(jī)制:存儲(chǔ)了大量先前用戶決策的場(chǎng)景描述,當(dāng)新的需求輸入時(shí),系統(tǒng)會(huì)從記憶池中匹配相似的需求,提供參考場(chǎng)景,提升場(chǎng)景設(shè)計(jì)的可靠性。隨著使用次數(shù)的增加,記憶池會(huì)不斷豐富,為用戶提供更精準(zhǔn)的參考。
- 交互橋:為了讓用戶無需學(xué)習(xí)領(lǐng)域特定語言 Gherkin,系統(tǒng)設(shè)計(jì)了一個(gè)交互式橋梁,將 Gherkin 場(chǎng)景轉(zhuǎn)換為自然語言。用戶可以輕松理解這些場(chǎng)景,并進(jìn)行相應(yīng)的決策,降低了技術(shù)門檻。
3. 快速原型設(shè)計(jì)組件
- 視覺設(shè)計(jì):系統(tǒng)根據(jù)用戶確認(rèn)的 Gherkin 場(chǎng)景,自動(dòng)生成頁面布局和視覺描述,遵循八大成功的視覺設(shè)計(jì)原則,確保界面美觀、易用。
- 代碼生成與一致性因子:通過生成一致性因子(測(cè)試用例),確保生成的代碼與業(yè)務(wù)邏輯一致,減少功能偏差。
- 自動(dòng)修改與迭代:系統(tǒng)能夠根據(jù)用戶的反饋,自動(dòng)修改代碼,實(shí)現(xiàn)快速迭代。
4. 用戶驗(yàn)收與推薦反饋決策
- 用戶驗(yàn)收決策:在原型生成后,AgileGen 為用戶提供一個(gè)代碼執(zhí)行鏈接,用戶可以直接體驗(yàn)軟件的功能。如若滿意可以下載完整代碼,部署到實(shí)際環(huán)境中。
- 用戶推薦反饋決策:通過對(duì)界面和功能的測(cè)試,用戶可以提出修改建議,如調(diào)整界面風(fēng)格、添加新功能等。AgileGen 會(huì)根據(jù)用戶的反饋,自動(dòng)修改代碼,并提供新的原型供用戶驗(yàn)收。這種循環(huán)持續(xù)進(jìn)行,直到用戶滿意并完成軟件交付。
實(shí)戰(zhàn)案例:從想法到成品
讓我們回到之前的例子,看看 AgileGen 是如何將一個(gè)簡(jiǎn)單的想法轉(zhuǎn)化為完整的軟件的。
步驟 1:提出需求
用戶輸入初始需求:“Please generate a web system with a random roll call function”
步驟 2:場(chǎng)景設(shè)計(jì)與確認(rèn)
AgileGen 利用記憶池,從類似的需求中提取可能的場(chǎng)景,并以自然語言呈現(xiàn)給用戶:
用戶可以確認(rèn)這些場(chǎng)景,或者進(jìn)行修改。例如,用戶可能希望添加一個(gè)功能:“I need to be able to save the history of the roll call name.”
步驟 3:快速原型生成
AgileGen 根據(jù)用戶決策過的 Gherkin 場(chǎng)景,生成初步的代碼和界面設(shè)計(jì),包括頁面布局、按鈕位置、顏色搭配等。
步驟 4:用戶反饋與迭代
用戶運(yùn)行生成的原型,如果發(fā)現(xiàn)界面顏色不符合期望,或者按鈕位置需要調(diào)整。他可以在系統(tǒng)中提出這些問題,AgileGen 將根據(jù)反饋?zhàn)詣?dòng)修改代碼。
- 功能增加反饋:隨機(jī)點(diǎn)名時(shí)給我一些 python 相關(guān)的問題。
- 樣式修改反饋:我希望顏色能夠更豐富一些。
步驟 5:完成并交付
經(jīng)過幾次迭代,用戶對(duì)功能和界面都滿意之后,下載完整的代碼,部署到實(shí)際環(huán)境中。
- 更多示例和講解
視頻鏈接:https://www.youtube.com/watch?v=lClwF7KN2xw
案例對(duì)比:與現(xiàn)有生成式軟件開發(fā)方法對(duì)比
1. 筆記本助理項(xiàng)目 (Bookkeeping Assistant)
用戶需求描述:I need a bookkeeping assistant website.
AgileGen+GPT3.5 和 AgileGen+GPT4 和 GPT-Engineer 能夠做到實(shí)現(xiàn)記賬功能。AgileGenAgileGen+GPT3.5 生成的功能更多,而 AgileGen+GPT4 生成了更簡(jiǎn)潔的功能,以更合理的頁面布局完成核心功能。ChatDev (_23 版本,_24 版本)、GPT3.5+CoT 和 GPT4+CoT 生成的頁面未完成簿記功能。相反,它們是常見網(wǎng)頁元素的組合(例如 “關(guān)于我們” 和 “聯(lián)系我們”)。GPT4o+CoT 生成的頁面使用 Bootstrap 樣式表,但功能不完整無法記錄條目。
2. 運(yùn)動(dòng)場(chǎng)地預(yù)定軟件 (Sport Arena)
用戶需求描述:Develop a user-friendly software application that allows users to create and customize virtual sports arenas.(來源于 ChatDev’s SRDD 數(shù)據(jù)集)
AgileGen+GPT4 方法支持場(chǎng)地的創(chuàng)建、功能定制和配置管理,而 ChatDev+GPT-4 生成沒有 GUI 的應(yīng)用程序,ChatDev+GPT-3.5 生成了兩個(gè)點(diǎn)擊無響應(yīng)的按鈕界面,標(biāo)記為 “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 數(shù)據(jù)集)
所有方法都生成了能夠完成視頻剪輯的軟件,但 AgileGen 生成的界面體現(xiàn)了更好的界面設(shè)計(jì)和交互性。
展望未來:開啟軟件開發(fā)的新紀(jì)元
我們相信,AgileGen 的出現(xiàn),將開啟軟件開發(fā)的新紀(jì)元。通過人機(jī)協(xié)作,充分發(fā)揮人類的創(chuàng)造力和 AI 的計(jì)算能力,軟件開發(fā)將變得更加高效、準(zhǔn)確和個(gè)性化。正如 Frederick P. Brooks 所言,軟件開發(fā)的本質(zhì)困難在于需求分析和設(shè)計(jì)。AgileGen 通過引入人機(jī)協(xié)作的敏捷開發(fā)理念,讓用戶深度參與需求的澄清和驗(yàn)收,使得軟件真正滿足用戶的需求。
我們誠(chéng)摯地邀請(qǐng)廣大開發(fā)者、企業(yè)和對(duì)軟件開發(fā)感興趣的朋友和學(xué)者,關(guān)注并參與 AgileGen 的未來發(fā)展。讓我們攜手共進(jìn),探索人機(jī)協(xié)作在軟件開發(fā)中的無限可能,開啟智能軟件開發(fā)的新時(shí)代!