選自Lil’Log
作者:Lilian Weng
機器之心編譯
編輯:杜偉、陳萍、小舟
立志實現 AGI 的 OpenAI,是不是已經在暗中做起了大模型智慧體?
最近幾個月,隨著大語言模型的持續火爆,利用其構建 AI 智慧體的研究陸續進入人們的視線。AI 智慧體這個概念也流行開來,不斷突破人們的想象力。
先是史丹佛大學、Google的研究者,他們成功構建了一個「虛擬小鎮」,小鎮上的居民不再是人,而是 25 個 AI 智慧體。它們的行為比人類角色的扮演更加真實,甚至舉辦了一場情人節派對。
隨後商湯、清華等機構提出了能夠自主學習解決任務的通才 AI 智慧體 Ghost in the Minecraft (GITM),在《我的世界》中比以往所有智慧體都有更優秀的表現。
同一時間,英偉達開源的VOYAGER,也給 AI 圈帶來了「小小的」的震撼。作為一個大模型驅動、可以終身學習的遊戲智慧體,VOYAGER 在《我的世界》中玩出了高水平。這些 AI 智慧體的先後湧現,甚至讓人認為是未來通用人工智慧(AGI)的雛形。
很多 AI 領域的大佬和科技巨頭對 AI 智慧體的發展產生了極大興趣並寄予了厚望。特斯拉前 AI 總監、今年年初回歸 OpenAI 的 Andrej Karpathy 在一次開發者活動上透漏,每當有新的 AI 智慧體論文出現時,OpenAI 內部就會非常感興趣,並認真地進行討論。

圖源:https://twitter.com/GPTDAOCN/status/1673781206121578498
那麼不禁要問,AI 智慧體到底有哪些組成部分呢?它的神奇之處又具體表現在哪些方面呢?
近日,OpenAI 安全系統(Safety Systems)負責人 Lilian Weng 寫了一篇關於 AI 智慧體的部落格。她認為 AI 智慧體的核心驅動力是大語言模型,規劃(Planning)、 記憶(Memory)和工具使用(Tool Use)是實現它的三個關鍵元件。

先前機器之心文章《GPT-4 背後的開發者:七大團隊,三十餘位華人》也曾介紹過 Lilian Weng,她 2018 年加入 OpenAI,在 GPT-4 項目中主要參與預訓練、強化學習 & 對齊、模型安全等方面的工作。
Lilian Weng 對每個元件展開詳細剖析,並提供了一些案例研究,比如科學發現智慧體、生成式智慧體模擬和概念驗證示例。對於 AI 智慧體未來將面臨哪些挑戰,她也給出了自己的觀點。

機器之心對部落格的核心內容進行了編譯整理。
部落格連結:https://lilianweng.github.io/posts/2023-06-23-agent/
智慧體系統的概念
在大語言模型(LLM)賦能的自主智慧體系統中,LLM 充當了智慧體的大腦,其三個關鍵元件分別如下:
首先是規劃,它又分為以下內容:
子目標和分解。智慧體將大型任務分解為更小、可管理的子目標,從而高效處理複雜的任務;
反思和完善:智慧體可以對過去的行為展開自我批評和自我反思,從錯誤中吸取教訓,並針對未來的步驟進行完善,提高最終結果的質量。
其次是記憶,分為了短期記憶和長期記憶:
短期記憶:作者認為所有的上下文學習(參見提示工程)都是利用模型的短期記憶來學習。
長期記憶:為智慧體提供了長時間保留和回憶(無限)資訊的能力,通常利用外部向量儲存和快速檢索實現。
最後是工具使用:
智慧體學習調用外部 API 來獲取模型權重中缺失的額外資訊(通常在預訓練後很難更改),包括當前資訊、程式碼執行能力、對專有資訊源的訪問等。
下圖 1 為 LLM 賦能的自主智慧體系統概覽。

元件 1:規劃
我們知道,一項複雜的任務通常涉及許多步驟。智慧體必須了解任務是什麼並提前進行規劃。
任務分解
首先是思維鏈(CoT)。它已經成為增強複雜任務上模型性能的標準提示技術。在實現過程中,模型被指示「一步一步思考」,從而利用更多的測試時間計算將困難任務分解為更小、更簡單的步驟。CoT 將大型任務轉化為多個可管理的小任務,並解釋清楚模型的思維過程。
其次是思維樹(Tree of Thoughts)。它通過在每一步探索多種推理可能性來擴展 CoT。首先將問題分解為多個思考步驟,並在每個步驟中生成多個思考,創建一種樹結構。搜尋過程可以是廣度優先搜尋(BFS)或深度優先搜尋(DFS),其中每個狀態由分類器(通過提示)或多數 vote 進行評估。
具體地,任務分解過程可以通過以下三種方式完成:
基於 LLM 的簡單提示,比如「XYZ 的步驟是什麼?」、「實現 XYZ 的子目標是什麼?」;
使用特定於任務的指示,比如「寫一個故事大綱」;
人工輸入。
最後一種截然不同的方法是 LLM+P,它依賴外部經典規劃器來進行長期規劃。該方法利用規劃領域定義語言(PDDL)作為描述規劃問題的中間接口。在這一過程中,LLM (1) 將問題轉化為「Problem PDDL」,然後 (2) 請求經典規劃器基於現有的「Domain PDDL」生成 PDDL 規劃,最後 (3) 將 PDDL 規劃轉換回自然語言。
本質上,規劃步驟被外包給了外部工具,並假設特定領域的 PDDL 和合適的規劃器可用。這在某些機器人設置中很常見,而在許多其他領域並不常見。
自我反思
自我反思(Self-reflection)允許自主智慧體通過完善以往行動決策和糾正以往錯誤來迭代改進,因而會在出現試錯的現實世界任務中發揮至關重要的作用。
ReAct 通過將動作空間擴展為一個任務特定的「離散動作和語言空間的組合」,將推理和動作集成在 LLM 中。離散動作使 LLM 能夠與環境互動(例如使用維基百科搜尋 API),而語言空間促使 LLM 以自然語言生成推理軌跡。
ReAct 提示模板包含了 LLM 思考的明確步驟,大致格式如下所示:
Thought: ...
Action: ...
Observation: ...
... (Repeated many times)
下圖 2 為知識密集型任務(如 HotpotQA、FEVER)和決策型任務(如 AlfWorld Env、WebShop)的推理軌跡示例。

圖源:https://arxiv.org/abs/2210.03629
實驗結果顯示,對於知識密集型任務和決策型任務,ReAct 的效果優於僅 Act 的基線方法,這類方法刪除了「Thought: …」步驟。
Reflexion 框架則為智慧體配備了動態記憶和自我反思能力,提高了推理技能。它有一個標準的 RL 設置,其中獎勵模型提供簡單的二元獎勵,而動作空間遵循 ReAct 中的設置。並且特定於任務的動作空間通過語言進行增強,實現複雜推理步驟。在每個動作 a_t 之後,智慧體計算啟發式 h_t,並選擇性地根據自我反思結果來決定重置環境,從而開始新的試驗。
下圖 3 為 Reflexion 框架概覽。

圖源:https://arxiv.org/abs/2303.11366
啟發式功能決定軌跡何時開始效率低下或包含幻覺,以及何時應該停止。低效的規劃是指花費太長時間而沒有成功的軌跡。幻覺(Hallucination)被定義為遇到了一系列連續的相同動作,而這些動作導致環境中出現相同的觀察。
自我反思通過向 LLM 展示 two-shot 示例來創建,每個例子都是一對失敗的軌跡,它們是指導未來規劃中變化的理想反思。然後反思被添加到智慧體的工作記憶中,最多三個,用作查詢 LLM 的上下文。
下圖 4 為在 AlfWorld Env 和 HotpotQA 上的實驗。其中在 AlfWorld 中,幻覺是比低效規劃更常見的失敗。

圖源:https://arxiv.org/abs/2303.11366
Chain of Hindsight(CoH)鼓勵模型通過顯式地呈現一系列過去的輸出(每個輸出都帶有反饋註釋)來改進其自身的輸出。人類反饋資料是

的集合,其中 x 是提示,每個 y_i 是模型補全,r_i 是 y_i 的人類評分,z_i 是相應的人類提供的事後反饋。假設反饋元組按獎勵排序

,該過程是有監督的微調。資料的序列形式為

,其中≤i≤j≤n。該模型經過微調,僅預測以序列前綴為條件的 y_n,使得模型可以根據反饋序列自我反思,從而產生更好的輸出。該模型可以選擇性地在測試時接受到人類註釋者的多輪指令。
為了避免過擬合,CoH 添加正則化項來最大化預訓練資料集的對數似然。同時為了避免捷徑和複製(由於反饋序列中有很多常見單詞),研究者在訓練過程中隨機遮蔽了 0%- 5% 的過去 token。
實驗中採用的訓練資料集是 WebGPT 比較、人類反饋總結以及人類偏好資料集的組合。下圖 5 展示了使用 CoH 進行微調後,模型可以按照指令生成具有序列增量改進的輸出。

圖源:https://arxiv.org/abs/2302.02676
CoH 的思路是呈現上下文中連續改進輸出的歷史,並訓練模型產生更好輸出。演算法蒸餾(AD)將相同的思路應用於強化學習任務中的跨情節軌跡,其中演算法被封裝在長期歷史條件策略中。
下圖 6 為演算法蒸餾的工作原理。

圖源:https://arxiv.org/abs/2210.14215
在演算法蒸餾論文中,研究者假設任何生成一組學習歷史的演算法都可以通過對動作執行行為克隆來蒸餾成神經網路。歷史資料由一組源策略生成,而每個源策略針對特定任務進行訓練。
在訓練階段,每次 RL 運行期間,研究者都會對隨機任務進行取樣,並使用 multi-episode 歷史的子序列進行訓練,使得學習到的策略與任務無關。
實際上該模型的上下文窗口長度有限,因此 episode 應足夠短以構建 multi-episode 歷史。要學習近最優的上下文 RL 演算法,需要 2 到 4 個 episode 的 multi-episodic 上下文。上下文 RL 的出現需要足夠長的上下文。
與三個基線相比,包括 ED(專家蒸餾,用專家軌跡而不是學習歷史進行行為克隆)、源策略(用於生成 UCB 蒸餾的軌跡)、RL^2( 2017 年提出的一種線上強化學習演算法,作為上限進行比較)。儘管 AD 演算法僅使用離線強化學習,但其性能接近 RL^2,並且學習速度比其他基線快得多。當以源策略的部分訓練歷史為條件時,AD 的改進速度也比 ED 基線快得多。
下圖 7 為 AD、ED、源策略和 RL^2 的比較。

元件 2:記憶
作者表示,這一章節藉助了 ChatGPT 來幫忙起草。下面我們看看這部分具體內容。
記憶類型
記憶類型分為三類:感知記憶、短期記憶(STM)或工作記憶以及長期記憶(LTM)。
感知記憶:這是記憶的早期階段,它能夠在原始刺激結束後保持對感官資訊(視覺、聽覺等)的印象。感知記憶通常只能持續幾秒鐘。其子類包括圖像記憶(視覺)、回聲記憶(聽覺)和觸摸記憶(觸感)。
短期記憶(STM)或工作記憶:短期記憶儲存著我們目前所知道的資訊,以及執行復雜認知任務(如學習和推理)所需要的資訊。一般來講,短期記憶持續 20-30 秒。
長期記憶:長時記憶可以將資訊儲存很長時間,從幾天到幾十年不等,其儲存容量基本上是無限的。LTM 有兩種子類型:
顯式、陳述性記憶:這是對事實和事件的記憶,指的是那些可以有意識地回憶起來的記憶,包括情景記憶(事件和經過)和語義記憶(事實和概念);
隱式、程序性記憶:這種類型的記憶是無意識的,涉及自主執行的技能和慣例,比如騎腳踏車或在鍵盤上打字。

人類記憶分類
參考人類記憶的分類,我們可以得到以下對映:
感知記憶作為原始輸入(包括文字、圖像或其他模態)的學習嵌入表示。
短期記憶作為上下文學習,由於受到 Transformer 有限上下文窗口長度的限制,短期記憶是短暫且有限的。
長期記憶作為外部向量儲存,智慧體可以查詢、快速檢索,從而進行訪問。
最大內積搜尋(MIPS)
外部記憶可以緩解注意力的一些限制。為了更好的處理外部記憶,一個常見的做法是將資訊的嵌入表示保存到一個向量儲存資料庫中,該資料庫可以支持快速的最大內積搜尋(MIPS)。為了最佳化檢索速度,研究者經常使用的方法是近似最近鄰(ANN,approximate nearest neighbors)演算法。
在加速 MIPS 中,經常用到的 ANN 演算法包括:
局部敏感哈希(LSH):它引入了一個雜湊函式,使得相似的輸入項以高概率對映到相同的 buckets 中,其中 buckets 的數量遠遠小於輸入的數量。
近似最近鄰(ANNOY):該方法的核心資料結構是隨機投影樹(Random Projection Trees),它是一組二叉樹,其中每個非葉節點表示一個超平面,將輸入空間分割為兩部分,而每個葉節點則儲存一個資料點。樹是獨立且隨機構建的,因此在某種程度上類似於雜湊函式。這個想法與 KD 樹(一種將空間中點分開儲存的樹狀資料結構)密切相關,但擴展性更強。
分層可導小世界(HNSW,Hierarchical Navigable Small World):這個方法受到小世界網路(small world networks,是一種圖結構)的啟發,其中大多數節點可以在很少的步驟內與其他節點相連。HNSW 構建了這些小世界圖的層次結構,其中底層包含實際的資料點,中間層創建了快捷方式以加速搜尋。在執行搜尋時,HNSW 從頂層的一個隨機節點開始,並向目標節點導航,當無法再靠近目標時,它向下移動到下一層,直到達到底層。在上層進行的每一次移動都有可能在資料空間中覆蓋較大的距離,而在下層進行的每一次移動都會提高搜尋的精度。
Facebook AI (現 Meta AI)團隊開源的庫 FAISS:FAISS 運作的基本假設是,在高維空間中,節點之間的距離遵循高斯分佈,因此應該存在資料點的聚類。FAISS 通過將向量空間分割成聚類並在聚類內進行量化來應用向量量化。
可擴展最近鄰(ScaNN):ScaNN 的主要創新是各向異性向量量化(Anisotropic Vector Quantization,AVQ),它將資料點 x_i 量化為

,使得內積儘可能接近原始距離,從而減少了資料點之間的距離誤差。

MIPS 演算法比較。
元件 3:使用工具
使用工具是人類的一個顯著特點。我們創造、修改和利用外部物體來探索和認知現實世界。類似地,給 LLM 配備外部工具可以大幅擴展模型的能力。

一張海獺在水中漂浮時用石頭敲開貝殼的照片。雖然其他一些動物也能使用工具,但其複雜性無法與人類相比。圖源:Animals using tools
MRKL(Karpas et al. 2022)是一種用於自主智慧體的神經 – 符號(neuro-symbolic)架構,命名來源於模組化推理(Modular Reasoning)、知識(Knowledge)和語言(Language)的簡稱。每個 MRKL 系統包含一些「專家」模組,通用 LLM 作為一個路由器,負責將查詢路由到最合適的專家模組。這些模組可以是神經的(如深度學習模型),也可以是符號的(如數學計算器、貨幣轉換器、天氣 API)。
MRKL 的研究團隊使用數學計算作為測試案例,進行了一個微調 LLM 調用計算器的實驗。由於 LLM(7B Jurassic1-large 模型)未能可靠地提取基本計算的正確 argument,因此該實驗表明解決口語簡單闡述的數學問題比明確說明的數學問題更難。該實驗結果強調了當外部符號工具能夠可靠地工作時,知道何時和如何使用這些工具是至關重要的,而這由 LLM 的能力決定。
另外兩項研究 TALM(Parisi et al. 2022)和 Toolformer(Schick et al. 2023)都對語言模型(LM)進行了微調,以學習使用外部工具 API。資料集則是根據新增加的 API 調用註釋是否能提高模型的輸出質量來擴展的。
ChatGPT 外掛和 OpenAI 的 API 函數調用是 LLM 使用工具增強能力的最好實例。工具 API 的集合可以由其他開發者提供(外掛)或自定義(函數調用)。
HuggingGPT(Shen et al. 2023)則是一個使用 ChatGPT 作為任務規劃器的框架,根據模型描述選擇 HuggingFace 平台中可用的模型,並根據執行結果歸納總結出響應。

HuggingGPT 工作原理示意圖。圖源:Shen et al. 2023
HuggingGPT 系統由 4 個階段組成:
(1)任務規劃:LLM 作為大腦,將使用者請求解析為多個任務。每個任務有四個關聯屬性:任務類型、任務 ID、依賴項和參數。研究團隊使用少量例子來指導 LLM 進行任務解析和規劃。
The AI assistant can parse user input to several tasks: [{"task": task, "id", task_id, "dep": dependency_task_ids, "args": {"text": text, "image": URL, "audio": URL, "video": URL}}]. The "dep" field denotes the id of the previous task which generates a new resource that the current task relies on. A special tag "-task_id" refers to the generated text image, audio and video in the dependency task with id as task_id. The task MUST be selected from the following options: {{ Available Task List }}. There is a logical relationship between tasks, please note their order. If the user input can't be parsed, you need to reply empty JSON. Here are several cases for your reference: {{ Demonstrations }}. The chat history is recorded as {{ Chat History }}. From this chat history, you can find the path of the user-mentioned resources for your task planning.
(2) 模型選擇:LLM 會從一個模型列表中選擇模型,將任務分配給專家模型。由於上下文長度有限,需要進行基於任務類型的過濾。
Given the user request and the call command, the AI assistant helps the user to select a suitable model from a list of models to process the user request. The AI assistant merely outputs the model id of the most appropriate model. The output must be in a strict JSON format: "id": "id", "reason": "your detail reason for the choice". We have a list of models for you to choose from {{ Candidate Models }}. Please select one model from the list.
(3) 任務執行:專家模型執行具體任務,並記錄執行結果。
With the input and the inference results, the AI assistant needs to describe the process and results. The previous stages can be formed as - User Input: {{ User Input }}, Task Planning: {{ Tasks }}, Model Selection: {{ Model Assignment }}, Task Execution: {{ Predictions }}. You must first answer the user's request in a straightforward manner. Then describe the task process and show your analysis and model inference results to the user in the first person. If inference results contain a file path, must tell the user the complete file path.
(4) 響應生成:LLM 接收執行結果,並向使用者提供總體結果。
為了將 HuggingGPT 投入實際使用,需要解決幾個挑戰:(1)需要提高效率,因為 LLM 推理和與其他模型的互動都會減慢進程;(2)它依賴一個長的上下文窗口來溝通複雜的任務內容;(3)提高 LLM 輸出和外部模型服務的穩定性。
API-Bank(Li et al. 2023)是一個評估工具增強型 LLM 性能的基準。它包含 53 個常用的 API 工具,一個完整的工具增強型 LLM 工作流,以及涉及 568 個 API 調用的 264 個已註釋的對話。API-Bank 基準中可選擇的 API 相當多樣化,包括搜尋引擎、計算器、日曆查詢、智慧家居控制、日程管理等等。LLM 首先可以通過 API 搜尋引擎找到合適的 API 進行調用,然後使用相關文件調用 API。

LLM 在 API-BANK 中進行 API 調用的偽程式碼。(圖片來源:Li et al. 2023)
在 API-Bank 的工作流中,LLM 需要做出一些決定,包括:
是否需要調用 API;
確定要調用的正確 API:如果不夠好,LLM 需要反覆修改 API 輸入(例如更換搜尋引擎 API 的搜尋關鍵詞);
基於 API 結果的響應:如果結果不滿意,模型可以選擇最佳化並再次調用。
這個基準在三個層次上評估了智慧體的工具使用能力:
調用 API 的能力:根據 API 的描述,模型需要確定是否調用給定的 API,正確地調用,並對 API 的返回結果作出正確的反應;
檢索 API 的能力。模型需要搜尋可能解決使用者需求的 API,並通過閱讀文件學習如何使用它們。
檢索和調用之外規劃 API 的能力。考慮到不明確的使用者要求(例如安排小組會議,為旅行預訂航班 / 酒店 / 餐廳),模型可能需要進行多次 API 調用來解決實際問題。
案例研究
用於科學發現的智慧體
ChemCrow 是一個由大型語言模型(LLM)設計的化學智慧體,旨在完成有機合成、藥物發現和材料設計等任務。通過整合 17 種專家設計的工具,ChemCrow 提高了 LLM 在化學方面的性能,並衍生出新的能力。
關於 ChemCrow ,一個有趣的觀察是,儘管基於 LLM 的評估結果得出的結論是 GPT-4 和 ChemCrow 的性能幾乎相當,但經過專家人工評估表明,ChemCrow 在很大程度上優於 GPT-4。這意味著在需要深度專業知識的領域使用 LLM 來評估其自身的性能可能存在潛在問題。缺乏專業知識可能導致 LLM 不了解其缺陷,因此無法很好地判斷任務結果的正確性。
Boiko 等人的論文則研究了用於科學發現的 AI 智慧體,它被用來處理複雜科學實驗的自主設計、規劃和執行。這個智慧體可以使用工具瀏覽網際網路、閱讀文件、執行程式碼、調用機器人實驗 API 和利用其他 LLM。
舉例來說,當智慧體收到提示「develop a novel anticancer drug(開發一種新的抗癌藥物)」時,其推理步驟是這樣的:
詢問當前抗癌藥物發現的趨勢;
選定目標;
開始尋找針對這個目標的化合物;
一旦確定了化合物,模型就嘗試合成它。
生產式智慧體
生成式智慧體將 LLM 與記憶、規劃和反射機制相結合,使智慧體能夠根據過去的經驗做出反應,並與其他智慧體進行互動。

生成式智慧體架構圖。
概念驗證示例
這裡作者提到了AutoGPT(自主人工智慧),有了它,人類無需插手,AutoGPT 就能自主完成任務。Andrej Karpathy 也大讚:「AutoGPT 是 prompt 工程的下一個前沿。」
具體來說,AutoGPT 相當於給基於 GPT 的模型一個記憶體和一個身體。有了它,你可以把一項任務交給 AI 智慧體,讓它自主地提出一個計劃,然後執行計劃。此外其還具有網際網路訪問、長期和短期記憶體管理、用於文字生成的 GPT-4 實例以及使用 GPT-3.5 進行檔案儲存和生成摘要等功能。AutoGPT 用處很多,可用來分析市場並提出交易策略、提供客戶服務、進行營銷等其他需要持續更新的任務。
此外,作者還列舉了GPT-Engineer項目,和程式碼生成類工具差不多,其能根據提示生成程式碼庫(codebase)。就像前面講到的,只要你提出合理的要求,GPT-Engineer 都能完成。
挑戰
在了解了構建以 LLM 為中心的智慧體關鍵思想和演示之後,我們應該也看到一些限制:
有限的上下文長度:LLM 處理上下文資訊的能力有限,儘管 self-reflection 等機制可以從過去的錯誤中學習,但更長或無限的上下文窗口將會帶來很大的好處。雖然向量儲存和檢索可以提供對更大知識庫的訪問,但它們的表示能力不如全注意力(full attention)強大。
LLM 在長期規劃和任務分解中的挑戰:LLM 在面對意外錯誤時很難調整規劃並進行改正,與人類可以不斷試錯相比,LLM 魯棒性還是比較差的。
自然語言接口的可靠性:當前的智慧體系統依賴於自然語言作為 LLM 與記憶體和工具等外部元件之間的接口。然而,模型輸出的可靠性是值得懷疑的,因為 LLM 可能會出現格式錯誤,偶爾還會表現出叛逆行為(例如,拒絕遵循指令)。
