取人類與大模型之長,人機協作式智能軟件開發框架AgileGen來了

本論文作者張賽是天津大學博士研究生,師從張小旺教授。目前是澳大利亞聯邦科學與工業研究組織(SE4AI 團隊)聯合培養博士生,合作導師爲邢振昌教授。主要研究方向爲生成式軟件開發,軟件工程需求分析等。她曾經以第一作者在 TOSEM, TNNLS, TCBB, Bioinformatics 等頂級期刊上發表論文。曾獲得 2022 年度省級優秀碩士學位論文,國家獎學金和國家公派獎學金等榮譽。

作者聯繫方式:zhang_sai@tju.edu.cn

在人工智能迅猛發展的今天,我們正站在軟件開發領域一次深刻變革的起點上。想象一下,只需一句簡單的需求描述,就能生成符合你期望的軟件。這不再是科幻小說中的情節,而是即將成爲現實的創新技術。

而這一切的背後,正是我們即將介紹的 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 的優勢,減少了錯誤的發生。

我們首次將行爲驅動開發(BDD) 引入生成式軟件開發中,使用 Gherkin 語言 將用戶的模糊需求轉化爲清晰、可測試的場景描述,彌合了不完整需求與精確功能之間的差距。通過動態融入用戶的決策,我們確保了生成的軟件始終符合用戶的真實需求。

我們設計了一個包含人類決策點的 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 的未來發展。讓我們攜手共進,探索人機協作在軟件開發中的無限可能,開啓智能軟件開發的新時代!