今天小編分享的科技經驗:大模型自主智能體爆火,OpenAI也在暗中觀察、發力,這是内部人的分析博客,歡迎閱讀。
選自Lil'Log
作者:Lilian Weng
機器之心編譯
編輯:杜偉、陳萍、小舟
立志實現 AGI 的 OpenAI,是不是已經在暗中做起了大模型智能體?
最近幾個月,随着大語言模型的持續火爆,利用其構建 AI 智能體的研究陸續進入人們的視線。AI 智能體這個概念也流行開來,不斷突破人們的想象力。
先是斯坦福大學、谷歌的研究者,他們成功構建了一個「虛拟小鎮」,小鎮上的居民不再是人,而是 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 可能會出現格式錯誤,偶爾還會表現出叛逆行為(例如,拒絕遵循指令)。
© THE END
轉載請聯系本公眾号獲得授權
投稿或尋求報道:[email protected]