此為Stanford CS25-Apr 2024: V4 I Overview of Transformers - Transformers and LLMs: An Introduction(下)
內容為講解內容中幻覺狀況以及之後的內容。
此為原版的影片
Stanford CS25: V4 I Overview of Transformers
下面的英文的課堂的教材,中文部分是根據字幕再稍微修改的文本
最後一個大問題是幻覺問題,當模型不知道自己不知道的事情時會出現。由於採樣過程的原因,有很高的可能性,比如說,你可能也曾使用過ChatGPT,有時它生成的文本非常自信,但實際上是錯誤的、事實不正確或毫無道理。
我們可以通過不同的方法來增強這方面的性能。可能通過基於內部的事實驗證方法,利用置信度分數來實現。有一個稱為模型校準(model calibration)的研究方向,就是專注於這方面,潛在地通過驗證和再生成輸出來改進。如果模型發現其輸出是不正確的,它可以被要求重新生成。
當然,還有像RAG(檢索增強生成)這樣的方法,可以從知識庫中檢索相關信息,這也是人們研究的一個潛在解決方案,用於減少幻覺問題。通過這些方法,我們希望能夠減少模型生成錯誤信息的情況,提高模型的準確性和可靠性。
Ref: https://arxiv.org/abs/2201.11903
最後,Emily將介紹一些有關思維鏈推理的內容。
思維鏈推理(Chain of Thought)是一個非常有趣的概念,我認為它結合了認知模仿和解釋性研究。思維鏈的想法是,我們中的每一個人,除非有一些非凡的照相記憶,通常都是一步一步地思考事情。如果我要求你將兩個10位數相乘,你可能需要將這個問題分解為中間的推理步驟來解決。
一些研究人員認為,若對大型語言模型進行相同的操作,強迫它們通過推理過程來思考和組織其想法,可能有助於提高它們的準確性和結果。因此,思維鏈利用了這個理念,模型內部的權重知道有關問題的更多信息,而不僅僅是提示模型並讓其重複記住的答案。
這種方法可以讓模型在回答問題時不僅僅是回憶已知的答案,而是通過逐步推理來生成更加準確和有意義的答案。這不僅有助於提高模型的性能,還能提高它們的解釋性,使我們能更好地理解模型的推理過程。
Ref: https://arxiv.org/abs/2201.11903
思維鏈推理的例子在右側展示。左側是標準的提示方式,即當我給你一個複雜的問題時,僅僅提供問題和答案,而不解釋如何解決問題。這種方式可能會讓問題變得難以理解。
相比之下,思維鏈推理則不同。當你第一次接觸到這個問題時,我會一步步帶你走過解決的過程。這樣做的目的是希望你在理解如何思考問題的框架後,能夠產生更準確的答案。
這種方法有助於模型更好地理解問題的背景和推理過程,而不僅僅是給出一個答案。通過這種方式,模型能夠提供更符合邏輯和更具解釋力的答案。
Ref: https://arxiv.org/abs/2201.11903
思維鏈推理對大型語言模型的性能提升非常顯著。這也是一種新出現的能力,因此我們在較小的模型中並沒有看到同樣的性能提升。
正如我之前提到的,解釋性非常重要。通過觀察模型的輸出,我們可以看到它們的推理過程和最終答案。這樣,我們可以發現模型出錯的地方,例如某些錯誤的推理步驟。我們能夠將思維鏈推理中的錯誤分解成不同的類別,這有助於我們更精確地定位問題出在哪裡,以及如何直接解決這些問題。
這種解釋性使得我們能夠更好地理解模型的內部運作,並且有針對性地改進模型的性能和準確性。
Ref: https://arxiv.org/abs/2201.11903
目前,思維鏈推理在擁有約1000億參數或更多的大型模型中效果非常顯著。這些模型的規模非常大。
為什麼會這樣呢?一篇初期的論文發現,小型模型中最常見的錯誤是缺少某一步驟和語義理解錯誤。你可以想像,比如在乘法過程中忘記執行某個步驟,或者根本不理解乘法的概念。
一些潛在的原因可能是小型模型即使在相對簡單的映射任務上也會失敗,它們似乎本質上在算術能力上較弱,並且可能存在邏輯漏洞,導致無法得出最終答案。也就是說,儘管所有的推理過程都是正確的,但由於某些原因,最終未能達到正確答案。
因此,一個有趣的研究方向是改進小型模型的思維鏈推理能力,這樣也能讓更多人有機會參與並解決有趣的問題。這不僅可以提高模型的性能,還能使更多資源有限的研究人員參與其中。
那麼,我們該如何實現這一點呢?一個想法是將思維鏈推理進行泛化。並不是所有問題的推理方式都是相同的,有多種方法可以解決一個問題,而不僅僅是逐步分解。因此,我們可以嘗試將思維鏈推理的概念變得更加靈活,以適應不同的推理方式。
這種泛化可以包括探索不同的推理策略和思維過程,而不僅限於線性的步驟分解。例如,我們可以考慮使用多路徑推理、多層次分析等方法,使模型能夠更靈活地處理各種問題。通過這種方式,我們可以改進小型模型的推理能力,使其能夠更好地應對不同類型的任務。
一個例子是「思維樹」(Tree of Thoughts)的概念。思維樹考慮了多種不同的推理路徑,並通過評估這些選擇來決定下一步的行動方向。這與我們常見的一些模型架構相似,比如可以前瞻並回溯的方式。
具體來說,這種方法允許模型在面臨問題時不僅僅是沿著一條單一路徑推理,而是可以考慮多種可能性,並在最終產生更準確的輸出。這就像我們在思考一個問題時,不僅僅考慮一個解決方案,而是探索多種可能的解決方案,最終選擇最優的那一個。這種方法有助於提高模型的靈活性和準確性。
另一個想法是蘇格拉底式提問(Socratic questioning)。這個概念是通過分而治之的方式實現自我提問和自我反思的想法,如同Steven提到的。這種方法涉及一個自我提問模塊,利用大型語言模型來提出與原始問題相關的子問題,然後遞歸地回溯並回答這些子問題,最終解決原始問題。
這與最初的思維鏈概念相似,不同之處在於,蘇格拉底式提問不僅僅是將所有步驟列出來,而是讓語言模型反思如何將問題分解,如何回答這些子問題並最終得出答案。這種方法可以促使模型更深入地理解問題的結構和本質,從而更有效地找到解決方案。
接下來,讓我們深入探討一些在2024年變得日益重要的有趣主題。去年,我們見證了語言模型的爆炸性發展,尤其是GPT-4的問世。如今,我們正邁向人工智慧代理的時代。探討代理與模型之間的差異將會是一個饒富趣味的過程,我將會談到許多面向,例如動作、長期記憶、溝通等等。
Key thesis: Humans will communicate with AI using natural language and AI will operate machines allowing for more intuitive and efficient operations
讓我們從最根本的問題開始:為什麼我們要構建AI代理?
仔細想想這個問題。我有一個大膽的假設:未來,人類將使用自然語言與AI進行交流,而AI將操控我們的機器,從而實現更直觀、更有效的操作。
想像一下一台筆記型電腦,如果你把它展示給一個可能從未用過電腦的孩子,他們可能會問:「為什麼我必須用這個盒子?為什麼我不能直接跟它說話?為什麼它不能更像人類一樣,我可以直接告訴它做什麼,然後它就可以幫我完成工作?」
這似乎是更符合人類習慣的介面,也是未來世界可能的發展方向。我們將不再需要點擊或打字,而是像與人交談一樣,用自然語言與AI溝通,然後AI就會去完成我們的任務。
事實上,講者寫了一篇關於這個主題的部落格文章,標題是「軟體3.0」,如果你有興趣可以去看看。
Why?
A single call to a large Foundation AI model is not enough. A lot more can be unlocked by building AI systems
How?
Using model chaining, reflection & other mechanisms
Ingredients?
Memory, context length, personalization, actions, internet access…
What can they do?
不過,為什麼要開發代理呢?
你想要代理嗎?事實證明,單純調用大型基礎AI模型往往不夠。透過建構系統,我們可以做到更多。所謂的系統,意味著執行更多操作,如模型鏈接、模型反思和其他機制。這需要許多不同的元素,像是記憶體、大上下文長度,還需要實現個人化、動作執行和網際網路訪問。透過這種代理,我們可以實現這些目標。
這是一張圖表,解析了智能代理的不同組成部分,來源於Lillian Weng,她是OpenAI的一位高級研究員。若要構建真正強大的代理,就需要將其視為一種新型計算機,擁有各種不同的組件。
首先,你需要考慮如何建立記憶系統,包括長期記憶和短期記憶。接著,你需要考慮如何進行規劃,以及如何實現反思。如果出現錯誤,該如何糾正?如何實現思維鏈?如何分解目標?例如,如果我說「幫我訂一次去意大利的旅行」,代理如何將這個任務分解為子目標?
此外,還需要能夠將所有這些規劃和計劃付諸行動,這一點非常重要。要實現這一切,需要使用工具。比如說,計算器、日曆或代碼解釋器等現有的工具。這類似於我們人類使用計算器的方式。我們希望AI能夠使用現有的工具,從而變得更高效、更強大。
這是一個實際演示案例,來自我的公司,展示了智能代理在現實世界中的應用。我們讓代理通過了加利福尼亞州的在線駕駛考試。這是一個實時的考試演示,參與者可以在家裡進行。測試中,參與者的手放在鍵盤上方,並被網絡攝像頭錄製,同時也進行了屏幕錄製。DMV(車輛管理局)要求參與者在電腦上安裝特殊的軟件來檢測是否不是機器人,但代理仍然能夠完成考試。
有趣的是,我們創造了這個案例,成為第一個在加利福尼亞州獲得駕駛許可的AI。在演示中,參與者的手放在鍵盤上方,代理運行在筆記本電腦上,回答所有問題。整個過程完全自動化,這次測試大約有40個問題,代理可能犯了兩三個錯誤,但最終成功通過了整個測試。
這次演示非常有趣,我們在考試後通知了DMV。這個案例展示了智能代理可能帶來的許多有趣應用,這次測試也成為了一個技術嘗試,結果非常有趣。
Can do what you can do: Able to use existing interfaces designed for humans & operate outside programmatic boundaries
Digital extension of you: Can act as an extension of the user and act on their behalf
Less-restrictive boundaries: Can handle logins, payments, etc. and interact with services without any API restrictions
Simple action space: Need only click & type action primitives
Self-learning: Can learn from the user and self-improve with more interactions
可以想象,一旦我們擁有這些能力可供所有人使用,將會有許多不同的事情可以實現。這也引發了一個問題:為什麼我們要構建更類似人類的代理?我認為這個問題非常有趣,因為它類似於「為什麼我們要建造類人機器人?」的問題。為什麼不建造不同類型的機器人?為什麼我們想要類人機器人?同樣的,為什麼我們需要類似人類的代理?
顯然,這個問題非常有趣,因為很多技術是為人類設計的,我們可以重用現有的基礎設施,而不是建造新的東西。因此,使用現有技術來部署這些代理變得非常有趣。
其次,這些代理可以成為你的一個數字延伸,它們可以了解你的喜好、偏好,知道你喜歡什麼、不喜歡什麼,並能夠代表你行動。它們的限制較少,因此能夠處理登錄、支付等事務,而這些在使用API時可能更困難。如果是基於計算機的控制,這些操作更像是人類的行為,那麼就更容易實現。
你可以想象,這個問題也在根本上更簡單,因為行動空間僅限於點擊和打字,這本身就是一個相對有限的行動空間。因此,相比於構建一個更通用的系統,這是一個更簡單的問題。
另一個有趣的地方是,你可以教導這些類人代理。你可以教它們如何做事情,它們可以被動地記錄你的行為並從中學習,然後不斷改進。這也提供了一種有趣的方式來隨著時間的推移提升這些代理的能力。
當我們談論智能代理時,有一個人們喜歡使用的圖譜,稱為「五個不同的自動化等級」。這個概念最初來自於自動駕駛汽車。這個系統分為L0到L5。
在L0到L2的等級中,人類仍然是主要的控制者。例如,人類駕駛汽車,可能會有一些部分自動化的功能,比如自動輔助功能。當到達L3時,情況開始變得有趣。L3等級下,雖然車內仍有一名駕駛員,但大多數情況下,汽車可以在高速公路或大多數道路上自行駕駛。
L4等級下,仍然有駕駛員在車內,但汽車進行所有駕駛操作。這可能類似於你開特斯拉的自動駕駛功能,它接近於L4自動駕駛。L5等級基本上不需要駕駛員。汽車可以獨立處理所有系統部分,沒有任何人工干預的需求。這就像現在Waymo正在做的事情,如果你在舊金山乘坐Waymo,你會體驗到L5等級的自動駕駛汽車,完全由AI進行駕駛。
同樣的概念也適用於智能代理。你可以想像,如果你正在構建一個L4等級的能力系統,那麼仍然有一個人在系統中監控,以確保沒有問題。這時仍然存在一些瓶頸。
但是,如果能夠達到L5等級的代理自動化,那就意味著你可以完全依賴代理來完成任務。例如,你讓代理預訂航班,它會完成;你讓它訂購某樣東西,它會執行。這些所有的事情都可以自動完成,無需人類的介入。當我們能夠從L4過渡到L5,不再需要人類的介入時,事情就會變得非常有趣。
在構建智能代理時,主要有兩條路線可供選擇。第一條路線是基於API的控制,可以通過現有的API來控制各種功能。例如,OpenAI正在通過ChatGPT插件進行這方面的嘗試。加州大學伯克利分校(Berkeley)也有相關的研究,例如一個名為Gorilla的項目,這個項目訓練了一個基礎模型來控制多達10,000個API。這個方向有很多有趣的發展。
第二條路線是直接與計算機進行交互,這方面有不同的公司在進行探索。我們自己也在進行相關的嘗試。此外,還有一個名為Adept的初創公司,正在嘗試模擬人類的交互方式。這種方式更像是讓代理與計算機環境直接互動,而不僅僅是通過API來控制。
這是一個展示代理的潛力的例子。我們這裡有一個代理,我們讓它去Twitter發一篇帖子。這個過程中,代理控制整個計算機進行操作。一旦完成後,它可以給我發回一個回應,你可以在這裡看到。
這樣的應用非常有趣,因為如果有這樣的代理,你實際上不需要API。當我有一個可以控制我的電腦、控制網站、幾乎以類似人類的方式進行任何操作的代理時,你就不再需要API,因為這變成了一個可以進行任何控制的抽象層。
這樣的代理一旦開始在現實世界中工作,將會非常令人著迷,並且我們將會看到技術方面的許多變革。
好的,接下來我們討論關於智能代理的另一個有趣主題:記憶。
一個好的思考模型的方法是將其類比為計算芯片。這裡的過程是,你有一些輸入的令牌,這些令牌是自然語言定義的,作為模型的輸入。然後,你會得到一些輸出的令牌,同樣是自然語言。
例如,對於GPT-3.5,令牌長度大約是8,000個。隨著GPT-4,這個長度變成了16,000甚至28,000。因此,你可以想像這個令牌大小或指令大小是由神經網絡驅動的計算單元。
這基本上就是你可以想像的GPT-4,它就像一個CPU,接收一些自然語言定義的輸入令牌,進行一些計算,然後輸出一些令牌。這其實與你思考記憶芯片的方式類似。
例如,這裡我展示了一個MIPS32處理器,這是最早期的處理器之一。它的運作方式是接收二進制的輸入和輸出令牌,比如0和1。類似地,我們現在所做的事情是處理自然語言,進行非常相似的處理,但只是應用於自然語言上。
如果進一步思考這個類比,我們可以考慮如何將我們在構建計算機、CPU和邏輯方面的知識概括到自然語言中。因此,你可以開始思考當前處理器和計算機芯片的運作方式。這些系統有指令、有記憶、有變量,並且逐行運行這些二進制指令序列以輸出代碼。
你可以以類似的方式思考Transformer,它可以作為計算單元,你可以逐行傳遞某些指令。每條指令可以包含一些基本的操作定義,例如用戶命令。這些指令可能包含從外部檢索的記憶部分,例如個性化系統,還有一些變量。然後你可以逐行運行這些指令。
這是一個很好地理解這類系統如何工作的方式。你可以想象,未來可能會出現新的編程語言,這些語言專門用於對類似Transformer的系統進行編程。這些編程語言可能專注於自然語言處理、記憶管理和指令執行,為這些新型計算系統提供更靈活和高效的操作。
在談到記憶時,傳統上我們會把記憶想像成一個磁碟,這是一種持久的存儲方式。當電腦關機時,你會將所有數據從RAM保存到磁碟,然後可以在需要時重新加載這些數據。我們希望在AI和智能代理中實現類似的功能,提供存儲和檢索數據的機制。
目前,我們通過嵌入(embeddings)來實現這一點。你可以將任何PDF或其他你關心的模態轉換為嵌入,並將這些嵌入存儲在向量數據庫中。當你需要訪問記憶時,你可以加載相關的嵌入部分,作為指令的一部分,然後輸入模型。
這是我們在AI領域中思考記憶的方式,本質上是通過檢索模型來存儲和檢索記憶,而嵌入則是用來編碼記憶的格式。目前,我們通常使用簡單的k近鄰(k-NN)方法來實現這一點,即簡單的最近鄰搜尋,這種方法效率不高,無法很好地泛化,也不易擴展。
還有很多開放的問題需要解決,尤其是層次結構和時間一致性方面的問題。因為很多記憶數據都是時間序列數據,存在許多時間相關的部分。數據中也通常有很多結構,可以利用這些結構來進行處理,比如圖結構。此外,還有很多關於在線適應的問題需要解決,因為大多數數據不是靜態的,總是會學習新事物,適應新的變化。
一個很好的參考模型可能是人類大腦的工作方式。例如,像海馬體這樣的大腦區域,至今人們仍未完全理解其工作原理,但它涉及到即時學習新事物、創建新記憶、適應新記憶等方面。
我認為,隨著時間的推移,這一研究領域的發展將非常有趣。
User-Agent Alignment Problem: Enable agent to take actions that are aligned with the user preferences
Everyone has different prefs & likes/dislikes:
同樣,記憶問題的一個非常相關的方面是個性化。如果現在你有一個代理為你執行任務,你希望這個代理實際上了解你的喜好和不喜歡的東西。假設你告訴代理幫你訂一張1000美元的機票,但它卻訂錯了機票,浪費了你的錢,或者它做了很多錯誤的操作,這對你來說是不好的。
因此,你希望代理能夠學習你的喜好,並且理解你的需求。這涉及到建立一個長期的用戶記憶系統,例如,隨著你與代理的互動越多,它應該能夠形成對你的記憶並利用這些信息來做決策。
這種記憶可以有不同的形式。一種是明確的,你可以直接告訴它你的過敏情況、飛行偏好(如你喜歡靠窗座位還是過道座位)、你喜歡的菜餚等。另一種是隱性的,代理可以從你的行為中推斷出你的偏好。例如,也許你更喜歡阿迪達斯而不是耐克;或者在亞馬遜上,如果有10種不同的襯衫可供選擇,也許你會選擇某一特定類型和品牌的襯衫。
還有很多隱性學習可以進行,這更多是基於反饋或比較。通過這些方式,代理可以逐漸了解你的偏好,從而更好地為你服務。
Collecting user data & preferences:
Learning from user preferences: supervised fine-tuning vs human-feedback
On-fly adaptation
Privacy
在這裡有很多挑戰需要解決。例如,如何收集這些數據?如何形成記憶?如何學習?是否使用監督學習還是基於反饋的學習?如何即時學習?
在執行這些任務的同時,如何保護用戶隱私?對於系統進行個性化,它需要了解大量關於你的信息。但是,如何確保在構建這樣的系統時,能夠保證這些信息的安全,不會侵犯你的隱私?
這些問題都是在開發個性化代理系統時需要考慮的重要因素。找到平衡用戶體驗和隱私保護之間的最佳方法,是這個領域面臨的主要挑戰之一。
一個有趣的領域是代理之間的通信。假設你有一個可以為你執行任務的代理,但為什麼不讓多個代理一起工作呢?
如果我有一個代理,你也有一個代理,這些代理之間可以開始相互通信。我認為我們將開始看到這種多代理自主系統的現象,其中每個代理可以獨立執行任務,並且這些代理之間可以進行交流和協作。
這種多代理系統的發展將非常有趣,因為它們能夠協同工作,完成更複雜的任務,並且可能帶來更多創新的應用場景。
Parallelization unlock: Breaking a task into smaller chunks and dividing between agents to improve efficiency & speeds
Task Specialization: An AI agent might seat between the user and each service: e.g. a spreadsheet AI agent, a slack AI agent, a web-browser AI agent, …
Challenges:
為什麼要這樣做呢?有幾個原因:
首先,如果你只有一個代理,它總是會很慢,因為它需要按順序執行所有任務。但如果你有多個代理系統,你就可以並行處理任務。例如,如果我有成千上萬的代理,它們可以同時為我做不同的事情,而不僅僅是依賴一個代理。
其次,你可以擁有專業化的代理。例如,我可以有一個專門處理電子表格的代理,一個操作Slack的代理,還有一個操作網頁瀏覽器的代理。這樣我可以將不同的任務分配給不同的代理,這有助於提高效率。這就像在工廠裡,你有專門的工人,每個工人都在做他們專業的事情。這是人類歷史上發現的正確的任務分工方式,以獲得最大的性能。
當然,這裡也有很多挑戰。最大的挑戰之一是如何交換信息。因為現在所有的事情都是通過自然語言進行的,而自然語言本身是有損的。因此,很容易出現溝通間隙。即使是人類之間的對話,也常常會出現大量的誤解,因為自然語言是模糊的。因此,我們需要更好的協議或更好的方法來解決這些問題。
為了確保代理之間的通信不會引發錯誤或混亂,我們需要建立有效的協議和方法。此外,這也可以促進一些有趣的基礎設施的構建。
舉個例子,我們可以設想一個經理代理,經理代理負責協調一群工人代理。這與人類組織非常相似。例如,作為用戶,我與一個主要的代理交流,但在幕後,這個代理會與它自己的工人代理溝通,確保每個工人完成任務。當所有任務完成後,經理代理會回來告訴我結果已經完成。
這樣的系統可以構建許多這樣的基礎設施。可以將其類比為單核機器與多核機器的差異。當你只有一個代理時,就像擁有一個單核處理器的計算機;而如果有多個代理,就像擁有一個16核或64核的機器,許多任務可以分配給不同的代理,並行處理。
這種多代理系統的類比非常有趣,因為它展示了如何在不同代理之間分配和協調任務,以提高效率和完成複雜的任務。這種系統的設計和實現將為未來的智能系統帶來更多可能性。
在這個領域還有許多工作需要完成,其中最大的挑戰之一就是通信問題非常困難。為了減少誤解,我們需要建立健全的通信協議。此外,可能還需要非常好的數據結構和標準化的通信方式。就像互聯網上使用HTTP來傳輸信息一樣,我們可能需要類似的協議來在不同代理之間傳輸信息。這些協議將有助於確保代理之間的通信是準確和一致的,從而實現有效的合作和任務分配。
您可以考慮一些基本的構件。假如我們有時間,我可以快速講解一個小例子來說明這些基本構件的應用和運作方式。
假設有一個經理代理希望完成一些任務,它向工人代理提供了一個計劃和上下文。工人代理則回應說:「好的,我完成了這個任務。」然後經理代理會收到一個回應,確認任務的完成。
這個過程展示了經理代理如何協調和管理工人代理的任務。經理代理負責制定計劃並提供必要的信息,而工人代理則負責執行具體的任務,並將結果反饋給經理代理。這樣的結構可以確保各個代理之間的合作高效且有條理,並且能夠有效地完成複雜的任務。
然後,通常你需要驗證這個任務是否真的完成。因為有可能工人代理在回報時並沒有如實反映情況,可能任務失敗了或者出現了問題。因此,你需要進一步檢查和確認這個任務是否確實按照計劃完成。
這一過程中,經理代理可能需要執行一些額外的檢查步驟,例如對比結果與期望,或進行一些測試,以確保任務的執行符合要求。這樣的驗證步驟對於維持系統的可靠性和精確性至關重要,可以防止潛在的錯誤和問題。
如果一切都完成了,那很好,你可以告訴用戶這個任務已經完成。但是,如果發現工人代理實際上沒有正確完成任務,或者出了什麼問題,那麼你需要重新進行該任務。
在這種情況下,經理代理需要對出現的問題進行分析,找出失敗的原因,然後可能需要重新分配任務,確保問題得到解決並且任務正確完成。這種重新執行的過程有助於保證最終結果的質量,確保系統能夠可靠地完成用戶的需求。
確實,在這種代理系統中,建立故障切換機制至關重要。否則,可能會有許多事情出錯。因此,考慮這些同步原語和如何確保系統的可靠性以及後備機制變得非常重要。
這些機制可以包括:
這些措施有助於提高系統的穩定性和可靠性,確保代理系統能夠有效地處理各種情況,並且即使在發生錯誤時也能繼續運行。這樣的設計對於實現自動化和智能化的任務管理至關重要。
未來還有許多方向需要探索,自主代理仍然存在很多問題。最大的問題是可靠性。這是因為模型本質上是隨機的,AI模型是概率性的函數,而不是完全確定性的。
這導致的問題是,如果我想讓模型做某件事,有可能它會以一定的錯誤率做出意料之外的事情。因此,很難完全信任這些模型。如果我有傳統的代碼,我可以寫一個腳本,然後通過多個測試案例和單元測試來驗證它的可靠性。我知道,如果這些測試通過了,那麼這個腳本在100%的情況下都會正常運行,我可以將它部署給數百萬甚至數十億人使用。
但是,對於自主代理,它是一個隨機函數。即使它的成功率是95%,還有5%的可能會失敗。目前沒有辦法完全解決這個問題。因此,如何解決這些問題成為了一個非常有趣的課題。
同樣,我們還會遇到很多關於循環和計劃偏差的問題。當涉及到代理時,你需要進行多輪互動。你希望代理完成一個任務,然後利用這個結果去完成另一個任務,如此循環進行。這可能需要進行數百或數千步操作。但是,如果在第20步失敗,可能會導致系統出現混亂,不知道如何繼續後續的操作。因此,如何糾正這些問題,讓系統回到正軌,成為了一個有趣的問題。
此外,如何測試和基準測試這些代理,特別是在它們要在現實世界中運行時?如何構建系統的可觀測性?例如,如果代理可能有權訪問我的銀行賬戶,為我執行操作,我怎麼知道它正在進行安全的操作?如何防止被黑客攻擊?如何建立信任?
還有,我們如何建立人類的後備機制?例如,如果代理要為你進行購買,你可能希望有雙重身份驗證(2FA)來保障安全。或者你希望有一些方法來保證你的銀行賬戶不會因為代理的錯誤操作而清空。
這些都是設計和運行自主代理時需要考慮的重要問題。
AI Agents like AutoGPT don’t know how to correct on making a mistake!
這些是我們需要解決的一些問題,才能使代理真正應用於現實世界。以下是一個計劃偏差問題的例子,這個問題常見於代理中。比如,如果你讓代理去完成某件事,你通常期望它按照一條理想的路徑來達成目標。
但是,有時它可能會偏離這條路徑。一旦偏離,它可能不知道該怎麼做,並且會不斷犯錯。這種情況在早期的代理中比較常見,比如AutoGPT。我不確定這個房間裡是否有人玩過AutoGPT,有人試過嗎?
AutoGPT是一個很好的原型,但實際上它並不能完成任務,因為它會不停地犯錯,陷入循環,不斷出錯。這表明我們需要有非常好的方法來修正代理的錯誤,確保它在犯錯後能夠回到正軌,而不是隨意行事。
這種問題顯示出,在開發和部署自主代理時,必須確保它們能夠處理錯誤並做出適當的糾正,以避免陷入無限錯誤的循環。
基於這個概念,Andrej Karpathy 提出了另一個很好的類比,他稱之為「LLM操作系統」。
我們在討論LLMs(大型語言模型)和代理時,將其類比為構建計算機芯片和計算機。實際上,你可以這樣思考。這裡,計算機芯片就是LLM,而RAM(隨機存取記憶體)是你輸入模型的令牌的上下文長度。然後你有這個文件系統,相當於磁碟,用來存儲你的嵌入數據(embeddings)。你可以檢索這些嵌入數據。
你還可能擁有傳統的軟件工具,例如計算器、Python解釋器、終端等。如果你學過操作系統課程,你會知道有一個叫做ALU(算術邏輯單元)的東西,它用來進行乘法、除法等複雜操作。這和這裡的概念非常相似,你需要工具來完成複雜的操作。
此外,你還可能擁有外圍設備。你可能有不同的模態,比如音頻、視頻。你可能希望能夠連接到互聯網,因此你需要一些瀏覽功能。你也可能希望能夠與其他LLMs進行交流。
這種方式展示了我們如何利用AI的創新來設計新一代的計算機。這樣的系統不僅包括傳統的計算能力,還包括自然語言處理和多模態數據處理的能力,從而實現更強大的功能和更廣泛的應用。
我想在此結束時描述一下我對未來的想像。你可以將其視為一個神經計算機,使用者通過聊天界面與系統互動。在背後,聊天界面有一個行動引擎,該引擎可以將任務分配給不同的代理,幫你完成任務,然後將結果返回給你。
Error correction mechanisms & better agent frameworks
Security & user permission models
Sandboxing & deployment in risky settings
是的,總結一下,對於代理來說,還有許多工作需要完成。目前最大的問題之一是錯誤修正。當出現錯誤時該怎麼辦?如何防止這些錯誤在現實世界中引發問題?如何構建安全機制?如何設置用戶許可權?
例如,如果有人試圖劫持你的電腦或代理該怎麼辦?如何建立強健的安全機制?此外,如何隔離這些代理?如何在風險場景中部署它們?特別是在金融或法律等高風險的場景中,你希望系統非常穩定和安全。
這些問題至今仍未完全解決,但同時也為研究和應用提供了許多激動人心的思考空間。無論是在學術研究方面,還是在實際應用方面,這些都是非常有前景的探索方向。