發(fā)布時間:2023 年 11 月 06 日 Agent應(yīng)用 MetaGPT: Meta Programming for A Multi-Agent Collaborative Framework 基于大型語言模型的代理社會在自動問題解決領(lǐng)域取得了顯著進步,但面對復雜任務(wù)時,由于幻覺連鎖導致的邏輯不一致,解決方案變得復雜。為此,我們推出了 MetaGPT,一種創(chuàng)新的元編程框架,它將人類工作流程的高效性融入到多代理協(xié)作中。MetaGPT 通過將標準化操作程序編碼為提示序列,優(yōu)化了工作流程,使得具備人類領(lǐng)域?qū)I(yè)知識的代理能夠驗證中間結(jié)果,減少錯誤。采用裝配線模式,MetaGPT 為不同代理分配特定角色,將復雜任務(wù)分解為多個子任務(wù),促進多代理協(xié)同工作。在協(xié)作軟件工程的測試中,MetaGPT 展現(xiàn)出了比以往基于聊天的多代理系統(tǒng)更為連貫的解決方案。欲了解更多信息,請訪問我們的 GitHub 項目頁面:https://github.com/geekan/MetaGPT。 https:///abs/2308.00352 為什么要開發(fā)MetaGPT? 使用大型語言模型(LLM)的自主智能體為提升和模擬人類工作流程帶來了巨大的潛力。然而,在現(xiàn)實世界的應(yīng)用實踐中,現(xiàn)有的系統(tǒng)往往會忽略復雜性,難以實現(xiàn)高效、一致且準確的解決問題的流程,尤其是在需要有意義的協(xié)作互動時。 人類通過廣泛的合作實踐,在多個領(lǐng)域內(nèi)發(fā)展出了被廣泛認可的標準操作程序(SOPs)。這些 SOPs 對于支持任務(wù)分解和有效協(xié)調(diào)至關(guān)重要。它們不僅明確了每個團隊成員的職責,還為中間產(chǎn)出設(shè)定了標準。良好的 SOPs 能夠提升任務(wù)執(zhí)行的一致性和準確性,確保與既定角色和質(zhì)量標準相符。例如,在軟件開發(fā)公司中,產(chǎn)品經(jīng)理會分析市場競爭和用戶需求,利用標準化框架撰寫產(chǎn)品需求文檔(PRDs)、設(shè)計工件、流程圖和接口規(guī)范等中間結(jié)構(gòu)化輸出顯著提升了目標代碼生成的成功率。舉例來說,在 MetaGPT 所模擬的公司中,所有員工遵循嚴格且高效的工作流程,且他們的工作交接都必須遵循既定的標準,有效減少了大型語言模型(LLM)間閑聊可能引起的誤解,尤其是在角色扮演框架中,例如產(chǎn)品經(jīng)理愛麗絲和架構(gòu)師鮑勃之間的對話(如下圖)。 ![]() 元編程的概念也涵蓋了諸如 CodeBERT、CodeLlama和 WizardCoder等先前和近期的工作。MetaGPT 作為一種獨特的解決方案,通過一群有組織的專業(yè)化代理進行高效的元編程,每個代理都有特定的角色和專業(yè)知識,遵循既定的標準。這允許在運行時自動進行需求分析、系統(tǒng)設(shè)計、代碼生成、修改、執(zhí)行和調(diào)試,展示了基于代理的技術(shù)如何提升元編程的效率。 為了驗證 MetaGPT 的設(shè)計,采用了公開可用的 HumanEval和 MBPP 進行評估。值得注意的是,在代碼生成基準測試中,MetaGPT 在 Pass@1 的指標上達到了新的最佳水平,分別為 85.9% 和 87.7%。與其他創(chuàng)建復雜軟件項目的流行框架相比,如 AutoGPT 、LangChain、AgentVerse 和 ChatDev,MetaGPT 在處理更高層次的軟件復雜性和提供廣泛功能方面表現(xiàn)出色。在實驗評估中,MetaGPT 實現(xiàn)了 100% 的任務(wù)完成率,證明了MetaGPT設(shè)計的魯棒性和效率。 什么是MetaGPT? MetaGPT 是一個為基于大型語言模型(LLM)的多Agent系統(tǒng)設(shè)計的元編程框架。 ![]() 上圖左側(cè)展示了通信協(xié)議的示例,代理們通過共享的消息池發(fā)布結(jié)構(gòu)化消息,并根據(jù)各自的角色配置文件訂閱相關(guān)信息。 右側(cè)則展示了具有可執(zhí)行反饋的迭代編程過程:在生成初始代碼之后,工程師代理執(zhí)行代碼并檢查錯誤。如果檢測到錯誤,代理會回顧存儲在記憶中的歷史消息,并將其與產(chǎn)品需求文檔(PRD)、系統(tǒng)設(shè)計和代碼文件進行對照比較。 SOP中的Agent 角色明確分工 清晰的角色劃分能夠?qū)⒎爆嵉墓ぷ骷毣癁楦鼮榫唧w和細分的任務(wù)。處理復雜任務(wù)或難題往往需要集合具備不同技能和專業(yè)知識的Agent,每個Agent都能針對特定問題提供專業(yè)化的解決方案。 比如,在一家軟件公司里,產(chǎn)品經(jīng)理一般負責進行業(yè)務(wù)分析并提煉出洞見,而軟件工程師則負責編碼工作。為軟件公司定義了五個關(guān)鍵角色:產(chǎn)品經(jīng)理、架構(gòu)師、項目經(jīng)理、工程師和質(zhì)量(QA)工程師。 在 MetaGPT 中,每個Agent設(shè)定了詳細的個人檔案,包括名稱、角色描述、目標以及各自的約束條件。同時,還為每個角色配置了特定的工作背景和技能。例如,產(chǎn)品經(jīng)理可以利用網(wǎng)絡(luò)搜索工具,而工程師則能夠執(zhí)行代碼。所有Agent都遵循 ReAct 風格的工作行為,持續(xù)監(jiān)控環(huán)境中的關(guān)鍵信息(例如 MetaGPT 中的消息池),這些信息可能直接觸發(fā)行動或輔助完成任務(wù)。 跨角色工作流程 通過明確Agent的角色和操作技能,可以構(gòu)建基礎(chǔ)的工作流程。 ![]() 具體而言,如上圖,產(chǎn)品經(jīng)理在收集到用戶需求后,會進行深入分析,制定詳盡的產(chǎn)品需求文檔(PRD),其中包含用戶故事和需求池,作為初步的功能分解。然后,這份結(jié)構(gòu)化的 PRD 將傳遞給架構(gòu)師,后者將需求轉(zhuǎn)化為系統(tǒng)設(shè)計要素,如文件列表、數(shù)據(jù)結(jié)構(gòu)和接口定義。系統(tǒng)設(shè)計確定后,信息將傳遞給項目經(jīng)理進行任務(wù)分配。工程師隨后根據(jù)規(guī)劃執(zhí)行相應(yīng)的類和函數(shù),如下圖所示。在隨后的階段,QA 工程師會制定測試案例,確保代碼質(zhì)量。最終,MetaGPT 將產(chǎn)出一個精心打造出來的軟件解決方案。 ![]() 下圖提供了MetaGPT中SOP工作流程的詳細示意圖(更多內(nèi)容參考論文原文)。 ![]() 通信協(xié)議 結(jié)構(gòu)化通信接口 當前,大多數(shù)基于大型語言模型(LLM)的多Agent系統(tǒng)框架采用了不加限制的自然語言作為通信接口,盡管自然語言極為靈活,但它是否足以應(yīng)對解決復雜任務(wù)的需求仍有待商榷。例如,在“電話游戲”中,信息經(jīng)過幾輪傳遞后可能會變得面目全非。 ![]() 借鑒人類社會結(jié)構(gòu)的設(shè)計,MetaGPT采用結(jié)構(gòu)化通信來規(guī)范代理間的交流。為每個角色和請求設(shè)定了特定的模式和格式,要求參與者根據(jù)其角色和具體情境提供必要的輸出。如上圖所示,架構(gòu)代理會生成系統(tǒng)接口設(shè)計和序列流程圖這兩種輸出,它們包含了系統(tǒng)模塊設(shè)計和交互序列,對工程師而言是至關(guān)重要的成果。與 ChatDev 不同,MetaGPT 中的代理通過文檔和圖表(即結(jié)構(gòu)化輸出)而非對話來進行通信,這些文檔涵蓋了所有必需信息,避免了信息的不相關(guān)或缺失。 發(fā)布-訂閱機制 ![]() 在協(xié)作中,信息共享是至關(guān)重要的。例如,架構(gòu)師和工程師經(jīng)常需要查閱產(chǎn)品需求文檔(PRD)。然而,如果每次都以一對一的方式傳遞這些信息,將會使得通信網(wǎng)絡(luò)變得復雜,降低效率。為了解決這一問題,MetaGPT將信息存儲在全局消息池中。如上圖(左)所示,MetaGPT引入了一個共享的消息池,使所有代理能夠直接交換消息。Agent不僅在共享信息池中發(fā)布結(jié)構(gòu)化消息,還能透明地訪問其他Agent的消息。任何Agent都可以直接從共享池中檢索所需信息,無需詢問其他代理或等待回應(yīng),這種設(shè)計提升了通信的效率。 然而,將所有信息分享給每個代理可能會導致信息過載。在執(zhí)行任務(wù)時,代理通常只希望接收與任務(wù)直接相關(guān)的信息,避免被不相關(guān)的細節(jié)分散注意力。因此,信息的有效管理和精準傳播非常關(guān)鍵。MetaGPT提出了一個簡單而有效的解決方案——訂閱機制。代理根據(jù)自身的角色特定興趣來篩選相關(guān)信息,而不是依賴對話。它們可以根據(jù)角色配置文件選擇關(guān)注的信息。在實際操作中,代理僅在收到所有必要的先決條件信息后才會激活其行動。架構(gòu)師主要集中精力處理產(chǎn)品經(jīng)理提供的產(chǎn)品需求文檔,而來自 QA 工程師等角色的文檔則可能是次要的。 可執(zhí)行反饋的迭代編程 在常規(guī)編程工作中,調(diào)試與優(yōu)化是不可或缺的環(huán)節(jié)。但目前的方法往往缺少自我修正功能,這導致了代碼生成的失敗。以往的研究提出了非可執(zhí)行代碼的審查與自我反思機制,盡管如此,它們在保證代碼的可執(zhí)行性和運行時的正確性上仍面臨挑戰(zhàn)。 在最初的 MetaGPT 實現(xiàn)中,由于大型語言模型的“幻覺”效應(yīng),審查過程中忽略了一些錯誤。為了解決這個問題,在生成初始代碼之后,MetaGPT引入了可執(zhí)行反饋機制,以此來迭代地提升代碼質(zhì)量。比如,工程師需要根據(jù)產(chǎn)品原始需求和設(shè)計來編寫代碼。 這允許工程師利用自身的歷史執(zhí)行和調(diào)試經(jīng)驗來不斷優(yōu)化代碼。為了收集更多信息,工程師會編寫并運行相應(yīng)的單元測試案例,然后獲取測試結(jié)果。如果測試結(jié)果令人滿意,則會繼續(xù)進行下一步的開發(fā)任務(wù);如果不滿意,則工程師會先對代碼進行調(diào)試再繼續(xù)編程。 這一迭代測試過程將持續(xù)進行,直至測試通過,或者達到最多三次的重試限制。 效果測評 測評數(shù)據(jù)集 采用了兩個知名的公共基準測試集:HumanEval和 MBPP,同時還有一個作者自創(chuàng)的、更具挑戰(zhàn)性的軟件開發(fā)測試集,稱為 SoftwareDev: · HumanEval 收錄了 164 項手寫編程任務(wù),涵蓋功能規(guī)格說明、描述、參考代碼以及測試案例。 · MBPP 包含 427 項 Python 編程任務(wù),覆蓋了核心概念和標準庫特性,同樣提供了任務(wù)描述、參考代碼和自動化測試。 · SoftwareDev 數(shù)據(jù)集匯集了 70 個具有代表性的軟件開發(fā)任務(wù)實例,每個任務(wù)都配有獨特的任務(wù)提示,如下圖。包括迷你游戲、圖像處理算法和數(shù)據(jù)可視化等,為實際開發(fā)任務(wù)提供了一個全面的測試環(huán)境。與以往的數(shù)據(jù)集相比,SoftwareDev 更加注重工程實踐方面。在對比測試中,我們隨機挑選了七個具有代表性的開發(fā)任務(wù)進行評估。 ![]() 評估指標 在 HumanEval 和 MBPP 的評估中,采用了無偏 Pass @k 版本,用以評價生成的前 k 個代碼的功能準確性:Pass @k = EProblems × (1 ? (n?c/k) / (n/k))。 對于 SoftwareDev,考慮到實用性,并通過人工評審(A, E)或統(tǒng)計分析(B, C, D)來衡量性能表現(xiàn): (A) 可執(zhí)行性:該指標將代碼的執(zhí)行情況從 1 分(失敗/非功能性)評為 4 分(完美無瑕)。其中,'1' 表示代碼無法運行,'2' 表示代碼可運行但存在缺陷,'3' 表示代碼接近完美,'4' 則表示代碼完美無瑕。(B) 成本:此處的成本評估涵蓋了(1)運行時間,(2)令牌使用量,以及(3)開銷。(C) 代碼統(tǒng)計:包括(1)代碼文件數(shù)量,(2)每個文件的代碼行數(shù),以及(3)總代碼行數(shù)。(D) 生產(chǎn)力:這基本上定義為令牌使用量除以代碼行數(shù),即每行代碼的令牌消耗率。(E) 人工修訂成本:通過確保代碼順暢運行所需的修訂輪數(shù)來量化,反映了人工干預的頻率,例如調(diào)試或?qū)胲浖拇螖?shù)。 測評結(jié)果 ![]() 如上圖,MetaGPT 在 HumanEval 和 MBPP 兩個基準測試中都超越了之前的所有方法。特別是當 MetaGPT 與 GPT-4 協(xié)同工作時,在 HumanEval 測試中的 Pass @k 指標顯著優(yōu)于 GPT-4 獨立運行的結(jié)果,分別達到了 85.9% 和 87.7% 的高比率。 ![]() 如上表,MetaGPT 在更具挑戰(zhàn)性的 SoftwareDev 數(shù)據(jù)集上,在幾乎所有評價指標上都超過了 ChatDev。以可執(zhí)行性為例,MetaGPT 獲得了接近完美的 3.75 分(滿分為 4 分)。同時,MetaGPT 的運行時間更短,僅為 503 秒,顯著少于 ChatDev。在代碼統(tǒng)計和人工修訂成本方面,MetaGPT 同樣表現(xiàn)出色。盡管 MetaGPT 在生成代碼時使用了更多的令牌(24,613 或 31,255 相對于 ChatDev 的 19,292),但它每生成一行代碼所需的令牌數(shù)(126.5/124.3)遠少于 ChatDev(248.9)。這些對比結(jié)果凸顯了在多代理協(xié)作中采用 SOPs 的顯著優(yōu)勢。 ![]() 相較于開源的其他方法,如 AutoGPT,以及像 AgentVerse 和 ChatDev 這樣的自主代理,MetaGPT 提供了專門用于軟件工程任務(wù)的功能。如上圖,MetaGPT的框架擁有廣泛的能力,能夠有效且高效地處理復雜和專業(yè)的開發(fā)任務(wù)。通過融合標準操作程序(SOPs,例如角色扮演的專業(yè)知識、結(jié)構(gòu)化通信、優(yōu)化的工作流程),可以顯著提升代碼生成的質(zhì)量。其他基線方法也能夠通過整合類似 SOP 的設(shè)計來提升性能,這與在大型語言模型(LLM)中嵌入思維鏈(Chain-of-Thought)的概念有異曲同工之妙。 結(jié)論 定義角色是否有效? ![]() 為了探究不同角色對最終成果的影響,作者開展了兩項任務(wù):一是生成高效能的代碼,二是計算平均統(tǒng)計數(shù)據(jù)。排除某些角色會導致生成無法運行的代碼。根據(jù)上表的數(shù)據(jù),除了工程師角色之外,引入不同角色能夠顯著提升代碼的修訂質(zhì)量和可執(zhí)行性。盡管增加角色數(shù)量會小幅增加成本,但整體性能的顯著提升反映了各個角色的重要作用。 可執(zhí)行反饋機制的顯著效果 ![]() 根據(jù)上圖的結(jié)果,將可執(zhí)行反饋機制整合進 MetaGPT 系統(tǒng)后,在 HumanEval 和 MBPP 測試的 Pass @1 指標上分別實現(xiàn)了 4.2% 和 5.4% 的提升。如表 1 所示,該反饋機制不僅提升了代碼的可行性評分(從 3.67 增至 3.75),還顯著降低了人工修訂的成本(從 2.25 降至 0.83)。這些成果清晰地展示了MetaGPT的反饋機制能夠顯著提升代碼質(zhì)量。 · 論文原文: https:///abs/2308.00352 · 獲取更多最新 Arxiv 論文更新: https://github.com/HuggingAGI/HuggingArxiv! |
|