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