人工智能

ChatDev : 通過自然語言通信的 LLM 驅動軟件開發

mm
ChatDev : AI Assisted Software Development

軟件開發行業是一個往往依賴於諮詢和直覺的領域,具有複雜的決策策略。此外,軟件的開發、維護和運營需要一個有紀律和方法的方法。軟件開發人員通常根據問題的複雜性基於直覺而不是諮詢做出決策。為了提高軟件工程的效率,包括軟件的有效性和降低開發成本,科學家正在探索使用基於深度學習的框架來處理軟件開發過程中的各種任務。隨著深度學習和 AI 領域的最新發展和進步,開發人員正在尋找方法來轉變軟件開發過程和實踐。他們通過在軟件開發過程的不同階段實施複雜的設計來實現這一點。

今天,我們要討論 ChatDev,一種基於大型語言模型(LLM)的創新方法,旨在革新軟件開發領域。這種范式旨在消除在開發過程的每個階段都需要專用模型的需求。ChatDev 框架利用 LLM 框架的能力,使用自然語言通信來統一和簡化關鍵的軟件開發過程。

在這篇文章中,我們將探討 ChatDev,一家專門從事軟件開發的虛擬公司。ChatDev 採用瀑布模型,並將軟件開發過程分為四個主要階段。

  1. 設計。
  2. 編碼。
  3. 測試。
  4. 文檔。

每個階段都部署了一組虛擬代理,如編碼器或測試員,它們通過對話協作,從而實現無縫的工作流程。聊天鏈作為一個促進者,將每個階段的開發過程分解為原子級的子任務,從而實現雙重角色,允許提案和驗證解決方案,使用上下文感知的通信,讓開發人員有效地解決指定的子任務。

ChatDev : AI Assisted Software Development

ChatDev 的工具分析表明,ChatDev 框架不僅在完成軟件開發過程方面非常有效,而且在成本效益方面也非常高,完成整個軟件開發過程只需不到一美元。此外,框架不僅能夠識別潛在的漏洞,還能夠糾正潛在的幻覺,同時保持高效率和成本效益。

ChatDev : LLM 驅動軟件開發簡介

傳統上,軟件開發行業是一個建立在紀律和方法基礎上的領域,不僅適用於開發應用程序,也適用於維護和運營軟件。傳統上,軟件開發過程是一個複雜、耗時的過程,具有長的開發週期,因為開發過程中涉及多個角色,包括組織內的協調、任務分配、編碼、測試和文檔。

在最近幾年,隨著大型語言模型(LLM)的幫助,AI 社區在計算機視覺和自然語言處理領域取得了顯著的成就,尤其是在「下一個詞預測」范式的訓練後,大型語言模型已經展示了在下游任務如機器翻譯、問答和代碼生成方面的有效性能。

雖然大型語言模型可以為整個軟件編寫代碼,但它們有一個主要的缺點:代碼幻覺,這與自然語言處理框架面臨的幻覺類似。代碼幻覺可能包括未發現的錯誤、缺失的依賴關係和不完整的函數實現。代碼幻覺有兩個主要原因。

  • 任務規範不足: 當在單一步驟中生成軟件代碼時,未定義具體的任務會讓 LLM 混淆,軟件開發過程中的任務,如分析用戶需求或選擇首選編程語言,通常提供引導性思維,這是 LLM 處理的高級任務所缺乏的。
  • 缺乏交叉審查: 特別是在決策過程中,交叉審查的缺乏會帶來重大風險。

ChatDev 旨在解決這些問題,並通過創建一個虛擬公司來促進 LLM 創建最先進和有效的軟件應用程序,該公司建立了瀑布模型,並將軟件開發過程分為四個主要階段,每個階段都部署了一組虛擬代理,如編碼器或測試員,它們通過對話協作,從而實現無縫的工作流程。此外,ChatDev 使用聊天鏈機制將每個階段的開發過程分解為原子級的子任務,從而實現雙重角色,允許提案和驗證解決方案,使用上下文感知的通信,讓開發人員有效地解決指定的子任務。

  1. 設計。
  2. 編碼。
  3. 測試。
  4. 文檔。

每個階段都部署了一組虛擬代理,如編碼器或測試員,它們通過對話協作,從而實現無縫的工作流程。此外,ChatDev 使用聊天鏈機制將每個階段的開發過程分解為原子級的子任務,從而實現雙重角色,允許提案和驗證解決方案,使用上下文感知的通信,讓開發人員有效地解決指定的子任務。

在這種方法中,ChatDev 框架首先分析客戶的需求,生成創意想法,設計和實現原型系統,識別和解決潛在問題,創建吸引人的圖形,解釋調試信息,生成用戶手冊。最後,ChatDev 框架將軟件交付給用戶,連同源代碼、用戶手冊和依賴環境規範。

ChatDev : 架構和工作原理

現在,我們來看看 ChatDev 的架構和工作原理,從聊天鏈開始。

聊天鏈

如前所述,ChatDev 框架使用瀑布方法進行軟件開發,將軟件開發過程分為四個階段,包括設計、編碼、測試和文檔。每個階段都有其在開發過程中的唯一角色,需要有效的溝通,同時也面臨著挑戰,例如識別個體、確定交互順序等。

為了解決這個問題,ChatDev 框架使用了一種通用的架構,稱為聊天鏈,將每個階段分解為原子級的聊天,關注任務導向的角色扮演,涉及雙重角色,實現了合作和交換指令,從而實現了無縫的工作流程。聊天鏈機制是用於中間任務解決的,下圖示意了這種機制。

對於每個聊天,教練首先發起指令,然後引導對話,直到完成任務,同時,助手跟隨教練的指令,提供理想的解決方案,參與討論任務的可行性。教練和助手之間的多輪對話,直到達成共識,認為任務已經成功完成。聊天鏈機制為用戶提供了開發過程的透明視圖,闡明了決策的途徑,提供了除錯和干預的機會,允許用戶分析和診斷錯誤,檢查中間輸出,必要時干預過程。通過整合聊天鏈,ChatDev 框架可以關注每個具體的子任務,從而實現有效的合作和快速獲得所需的輸出。

設計

在設計階段,ChatDev 框架需要從人類客戶那裡獲得初始想法作為輸入,並且有三個預定義的角色。

  1. CEO 或首席執行官。
  2. CPO 或首席產品官。
  3. CTO 或首席技術官。

聊天鏈機制將設計階段分解為順序的原子級聊天任務,包括編程語言(CTO 和 CEO)和目標軟件的模態(CPO 和 CEO)。設計階段涉及三個關鍵機制:角色分配、記憶流和自我反思。

角色分配

ChatDev 框架中的每個代理都通過特殊的消息或提示在角色扮演過程中分配角色。與其他對話語言模型不同,ChatDev 框架僅限制自己啟動代理之間的角色扮演場景。這些提示用於在對話之前為代理分配角色。

最初,教練承擔 CEO 的責任,參與互動式規劃,而 CPO 的責任由執行任務的代理承擔。框架使用「啟動提示」進行角色專業化,允許代理有效地履行其角色。助手和教練的提示包括關於指定角色和任務的重要細節,終止標準,通信協議和約束,旨在防止不想要的行為,如無限循環,不具情報的響應和指令冗余。

記憶流

記憶流是一種 ChatDev 框架使用的機制,維護了代理之前對話的全面記錄,幫助隨後的決策過程,以對話感知的方式進行。ChatDev 框架使用提示建立所需的通信協議。例如,當相關方達成共識時,會發送一個滿足特定格式要求的結束消息(如 <MODALITY>: Desktop Application」)。為了確保遵守指定的格式,框架不斷監控,最終允許當前對話達到結束。

自我反思

ChatDev 框架的開發人員觀察到,當雙方達成共識,但預定的通信協議沒有被觸發的情況。為了解決這些問題,ChatDev 框架引入了一種自我反思機制,幫助檢索和提取記憶。為了實現自我反思機制,ChatDev 框架啟動了一個新的和清新的聊天,列出「虛擬自我」作為一個新的問題者。虛擬自我分析之前的對話和歷史記錄,告知當前助手,然後要求總結有結論和行動的信息,如下圖所示。

通過自我反思機制,ChatDev 助手被鼓勵反思和分析其提出的決策。

編碼

編碼階段有三個預定義的角色,分別是 CTO、編程員和藝術設計師。如往常,聊天鏈機制將編碼階段分解為個別的原子級任務,如生成代碼(編程員和 CTO)或設計 GUI(編程員和設計師)。CTO 指示編程員使用 markdown 格式實現軟件系統,然後設計師提出了一個用戶友好和交互的 GUI,使用圖形圖標與用戶交互,而不是依賴傳統的文本命令。

代碼管理

ChatDev 框架使用物件導向編程語言,如 Python、Java 和 C++,來處理複雜的軟件系統,因為這些編程語言的模塊化允許使用自包含的對象,不僅有助於故障排除,也有助於合作開發,同時也可以通過繼承的概念去除冗余,重複使用對象。

思維指令

傳統的問答方法通常會導致不相關的信息或不準確,特別是在生成代碼時,提供天真的指令可能會導致 LLM 的幻覺,從而成為一個挑戰性的問題。為了解決這個問題,ChatDev 框架引入了一種「思維指令」機制,從鏈式思維提示中汲取靈感。思維指令機制明確地解決了個別的問題解決思維,類似於順序和組織的方式解決任務。

測試

編寫無錯誤的代碼在第一次嘗試中是具有挑戰性的,不僅對於 LLM,也對於人類編程員。測試階段在 ChatDev 框架中分為三個角色:編程員、測試員和審核員。測試過程進一步分為兩個順序的原子級任務:同行審查或靜態調試(審核員和編程員)和系統測試或動態調試(編程員和測試員)。靜態調試分析源代碼以識別錯誤,而動態調試則通過測試驗證軟件的執行,主要關注黑盒測試以評估應用程序。

文檔

在設計、編碼和測試階段完成後,ChatDev 框架使用四個代理:CEO、CTO、CPO 和編程員,生成軟件項目的文檔。ChatDev 框架使用 LLM,利用少量示例和上下文生成文檔。CTO 指示編程員提供配置環境依賴的指令,創建一個名為「dependency requirements.txt」的文檔。同時,要求和系統設計被 CEO 通知給 CPO,以生成產品的用戶手冊。

結果

軟件統計

為了分析 ChatDev 框架的性能,開發團隊對由框架生成的軟件應用程序進行了統計分析,根據包括消耗的令牌、總對話轉折、圖像資產、軟件文件、版本更新等幾個關鍵指標,結果如下表所示。

持續時間分析

為了檢查 ChatDev 的生產時間,開發人員還進行了持續時間分析,不同的請求提示的開發時間差異反映了任務的清晰度和複雜性,結果如下圖所示。

案例研究

下圖示意了 ChatDev 開發的一個五子棋或 Gomoku 遊戲。

最左邊的圖示意了框架在未使用 GUI的情況下創建的基本軟件。可以看到,沒有 GUI 的應用程序提供了有限的交互性,用戶只能通過命令終端玩這個遊戲。下一個圖示意了使用 GUI 創建的更具視覺吸引力的遊戲,提供了更好的用戶體驗和增強的交互性,為用戶創建了一個更具吸引力的遊戲環境。設計師代理創建了額外的圖形,以進一步增強遊戲的可用性和美觀,但不影響軟件的功能。然而,如果人類用戶不滿意設計師生成的圖像,則可以在 ChatDev 框架完成軟件後手動替換圖像。ChatDev 框架提供的圖像替換的靈活性允許用戶根據自己的偏好定制應用程序,以增強交互性和用戶體驗,而不影響軟件的功能。

最終想法

在這篇文章中,我們討論了 ChatDev,一種基於大型語言模型(LLM)的創新方法,旨在革新軟件開發領域。ChatDev 框架旨在利用 LLM 框架的能力,使用自然語言通信來統一和簡化關鍵的軟件開發過程。ChatDev 框架使用聊天鏈機制將軟件開發過程分解為原子級的子任務,從而實現了細粒度的焦點和每個子任務的期望輸出。ChatDev 框架通過使用自然語言通信來統一和簡化關鍵的軟件開發過程,從而實現了軟件開發的革新。

专业为工程师,心为作家。 Kunal是一名技术作家,对AI和ML有着深厚的热爱和理解,致力于通过其引人入胜和信息丰富的文档来简化这些领域中的复杂概念。