AIxiv專欄是機器之心釋出學術、技術內容的欄目。過去數年,機器之心AIxiv專欄接收報導了2000多篇內容,覆蓋全球各大高校與企業的頂級實驗室,有效促進了學術交流與傳播。如果您有優秀的工作想要分享,歡迎投稿或者聯絡報導。投稿郵箱:liyazhou@jiqizhixin.com;zhaoyunfeng@jiqizhixin.com
在人工智慧迅猛發展的今天,我們正站在軟體開發領域一次深刻變革的起點上。想象一下,只需一句簡單的需求描述,就能生成符合你期望的軟體。這不再是科幻小說中的情節,而是即將成為現實的創新技術。
而這一切的背後,正是我們即將介紹的 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 的未來發展。讓我們攜手共進,探索人機協作在軟體開發中的無限可能,開啟智慧軟體開發的新時代!