AI大模型實戰(zhàn)篇:LATS,可能是目前最強的AI Agent設(shè)計框架
在人工智能領(lǐng)域,AI Agent的設(shè)計和實現(xiàn)一直是研究和應(yīng)用的熱點。本文深入剖析了LATS(Language Agent Tree Search)這一前沿的AI Agent設(shè)計框架,供大家參考。
在上篇文章《AI大模型實戰(zhàn)篇:Reflexion,通過強化學(xué)習(xí)提升模型推理能力》中,風(fēng)叔結(jié)合原理和具體源代碼,詳細介紹了Reflexion這種本質(zhì)是強化學(xué)習(xí)的AI Agent設(shè)計模式。Reflexion已經(jīng)算是一種非常高級的設(shè)計框架,在解決很多復(fù)雜問題時,也能有比較好的表現(xiàn)。
在這篇文章中,風(fēng)叔將為大家介紹可能是目前最強大的AI Agent設(shè)計框架,集多種規(guī)劃和反思技術(shù)的集大成者,LATS。文章內(nèi)容會相對比較復(fù)雜難懂,值得收藏和反復(fù)研讀。
一、LATS的概念
LATS,全稱是Language Agent Tree Search,說的更直白一些,LATS = Tree search + ReAct + Plan&Execute+ Reflexion。這么來看,LATS確實非常高級和復(fù)雜,下面我們根據(jù)上面的等式,先從宏觀上拆解一下LATS。
1. Tree Search
Tree Search是一種樹搜索算法,LATS 使用蒙特卡羅樹搜索(MCTS)算法,通過平衡探索和利用,找到最優(yōu)決策路徑。
蒙特卡羅方法可能大家都比較熟悉了,是一種通過隨機采樣模擬來求解問題的方法。通過生成隨機數(shù),建立概率模型,以解決難以通過其他方法解決的數(shù)值問題。蒙特卡羅方法的一個典型應(yīng)用是求定積分。假設(shè)我們要計算函數(shù) f(x) 在[a, b]之間的積分,即陰影部分面積。
蒙特卡羅方法的解法如下:在[a, b]之間取一個隨機數(shù) x,用 f(x)?(b?a) 來估計陰影部分的面積。為了提高估計精度,可以取多個隨機數(shù) x,然后取這些估計值的平均值作為最終結(jié)果。當(dāng)取的隨機數(shù) x 越多,結(jié)果將越準確,估計值將越接近真實值。
蒙特卡羅樹搜索(MCTS)則是一種基于樹結(jié)構(gòu)的蒙特卡羅方法。它在整個 2^N(N 為決策次數(shù),即樹深度)空間中進行啟發(fā)式搜索,通過反饋機制尋找最優(yōu)路徑。MCTS 的五個主要核心部分是:
- 樹結(jié)構(gòu):每一個葉子節(jié)點到根節(jié)點的路徑都對應(yīng)一個解,解空間大小為 2^N。
- 蒙特卡羅方法:通過隨機統(tǒng)計方法獲取觀測結(jié)果,驅(qū)動搜索過程。
- 損失評估函數(shù):設(shè)計一個可量化的損失函數(shù),提供反饋評估解的優(yōu)劣。
- 反向傳播線性優(yōu)化:采用反向傳播對路徑上的所有節(jié)點進行優(yōu)化。
- 啟發(fā)式搜索策略:遵循損失最小化原則,在整個搜索空間上進行啟發(fā)式搜索。
MCTS 的每個循環(huán)包括四個步驟:
- 選擇(Selection):從根節(jié)點開始,按照最大化某種啟發(fā)式價值選擇子節(jié)點,直到到達葉子節(jié)點。使用上置信區(qū)間算法(UCB)選擇子節(jié)點。
- 擴展(Expansion):如果葉子節(jié)點不是終止節(jié)點,擴展該節(jié)點,添加一個或多個子節(jié)點。
- 仿真(Simulation):從新擴展的節(jié)點開始,進行隨機模擬,直到到達終止狀態(tài)。
- 反向傳播(Backpropagation):將模擬結(jié)果沿著路徑反向傳播,更新每個節(jié)點的統(tǒng)計信息。
2. ReAct
ReAct的概念和設(shè)計模式,風(fēng)叔在此前的文章中《AI大模型實戰(zhàn)篇:AI Agent設(shè)計模式 – ReAct》已做過詳細介紹。
它的典型流程如下圖所示,可以用一個有趣的循環(huán)來描述:思考(Thought)→ 行動(Action)→ 觀察(Observation),簡稱TAO循環(huán)。
- 思考(Thought):面對一個問題,我們需要進行深入的思考。這個思考過程是關(guān)于如何定義問題、確定解決問題所需的關(guān)鍵信息和推理步驟。
- 行動(Action):確定了思考的方向后,接下來就是行動的時刻。根據(jù)我們的思考,采取相應(yīng)的措施或執(zhí)行特定的任務(wù),以期望推動問題向解決的方向發(fā)展。
- 觀察(Observation):行動之后,我們必須仔細觀察結(jié)果。這一步是檢驗我們的行動是否有效,是否接近了問題的答案。
- 循環(huán)迭代
3. Plan & Execute
Plan & Execute的概念和設(shè)計模式,風(fēng)叔同樣在此前的文章中《AI大模型實戰(zhàn)篇:AI Agent設(shè)計模式 – Plan & Execute》已做過詳細介紹,因此不再贅述。
Plan-and-Execute這個方法的本質(zhì)是先計劃再執(zhí)行,即先把用戶的問題分解成一個個的子任務(wù),然后再執(zhí)行各個子任務(wù),并根據(jù)執(zhí)行情況調(diào)整計劃。
4. Reflexion
Reflexion的概念和設(shè)計模式,風(fēng)叔在上篇文章《AI大模型實戰(zhàn)篇:Reflexion,通過強化學(xué)習(xí)提升模型推理能力》做了詳細介紹。
Reflexion的本質(zhì)是Basic Reflection加上強化學(xué)習(xí),完整的Reflexion框架由三個部分組成:
- 參與者(Actor):根據(jù)狀態(tài)觀測量生成文本和動作。參與者在環(huán)境中采取行動并接受觀察結(jié)果,從而形成軌跡。前文所介紹的Reflexion Agent,其實指的就是這一塊
- 評估者(Evaluator):對參與者的輸出進行評價。具體來說,它將生成的軌跡(也被稱作短期記憶)作為輸入并輸出獎勵分數(shù)。根據(jù)人物的不同,使用不同的獎勵函數(shù)(決策任務(wù)使用LLM和基于規(guī)則的啟發(fā)式獎勵)。
- 自我反思(Self-Reflection):這個角色由大語言模型承擔(dān),能夠為未來的試驗提供寶貴的反饋。自我反思模型利用獎勵信號、當(dāng)前軌跡和其持久記憶生成具體且相關(guān)的反饋,并存儲在記憶組件中。智能體利用這些經(jīng)驗(存儲在長期記憶中)來快速改進決策。
因此,融合了Tree Search、ReAct、Plan & Execute、Reflexion的能力于一身之后,LATS成為AI Agent設(shè)計模式中,集反思模式和規(guī)劃模式的大成者。
二、LATS的工作流程
LATS的工作流程如下圖所示,包括以下步驟:
- 選擇 (Selection):即從根節(jié)點開始,使用上置信區(qū)樹 (UCT) 算法選擇具有最高 UCT 值的子節(jié)點進行擴展。
- 擴展 (Expansion):通過從預(yù)訓(xùn)練語言模型 (LM) 中采樣 n 個動作擴展樹,接收每個動作并返回反饋,然后增加 n 個新的子節(jié)點。
- 評估 (Evaluation):為每個新子節(jié)點分配一個標量值,以指導(dǎo)搜索算法前進,LATS 通過 LM 生成的評分和自一致性得分設(shè)計新的價值函數(shù)。
- 模擬 (Simulation):擴展當(dāng)前選擇的節(jié)點直到達到終端狀態(tài),優(yōu)先選擇最高價值的節(jié)點。
- 回溯 (Backpropagation):根據(jù)軌跡結(jié)果更新樹的值,路徑中的每個節(jié)點的值被更新以反映模擬結(jié)果。
- 反思 (Reflection):在遇到不成功的終端節(jié)點時,LM 生成自我反思,總結(jié)過程中的錯誤并提出改進方案。這些反思和失敗軌跡在后續(xù)迭代中作為額外上下文整合,幫助提高模型的表現(xiàn)。
下圖是在langchain中實現(xiàn)LATS的過程:
第一步,選擇:根據(jù)下面步驟中的總獎勵選擇最佳的下一步行動,如果找到解決方案或達到最大搜索深度,做出響應(yīng);否則就繼續(xù)搜索。
第二步,擴展和執(zhí)行:生成N個潛在操作,并且并行執(zhí)行。
第三步,反思和評估:觀察行動的結(jié)果,并根據(jù)反思和外部反饋對決策評分。
第四步,反向傳播:根據(jù)結(jié)果更新軌跡的分數(shù)。
三、LATS的實現(xiàn)過程
下面,風(fēng)叔通過實際的源碼,詳細介紹LATS模式的實現(xiàn)方法。關(guān)注公眾號【風(fēng)叔云】,回復(fù)關(guān)鍵詞【LATS源碼】,可獲取LATS設(shè)計模式的完整源代碼。
第一步 構(gòu)建樹節(jié)點
LATS 基于蒙特卡羅樹搜索。對于每個搜索步驟,它都會選擇具有最高“置信上限”的節(jié)點,這是一個平衡開發(fā)(最高平均獎勵)和探索(最低訪問量)的指標。從該節(jié)點開始,它會生成 N(在本例中為 5)個新的候選操作,并將它們添加到樹中。當(dāng)它生成有效解決方案或達到最大次數(shù)(搜索樹深度)時,會停止搜索。
在Node節(jié)點中,我們定義了幾個關(guān)鍵的函數(shù):
- best_child:選擇 UCT 最高的子項進行下一步搜索
- best_child_score:返回具有最高價值的子項
- height:檢查已經(jīng)推進的樹的深度
- upper_confidence_bound:返回 UCT 分數(shù),平衡分支的探索與利用
- backpropogate:利用反向傳播,更新此節(jié)點及其父節(jié)點的分數(shù)
- get_trajectory:獲取代表此搜索分支的消息
- get_best_solution:返回當(dāng)前子樹中的最佳解決方案
第二步 構(gòu)建Agent
Agent將主要處理三個事項:
- 反思:根據(jù)工具執(zhí)行響應(yīng)的結(jié)果打分
- 初始響應(yīng):創(chuàng)建根節(jié)點,并開始搜索
- 擴展:從當(dāng)前樹中的最佳位置,生成5個候選的下一步
對于更多實際的應(yīng)用,比如代碼生成,可以將代碼執(zhí)行結(jié)果集成到反饋或獎勵中,這種外部反饋對Agent效果的提升將非常有用。
對于Agent,首先構(gòu)建工具Tools,我們只使用了一個搜索引擎工具。
然后,構(gòu)建反射系統(tǒng),反射系統(tǒng)將根據(jù)決策和工具使用結(jié)果,對Agent的輸出進行打分,我們將在其他兩個節(jié)點中調(diào)用此方法。
接下來,我們從根節(jié)點開始,根據(jù)用戶輸入進行響應(yīng)
然后開始根節(jié)點,我們將候選節(jié)點生成和reflection打包到單個節(jié)點中。
第三步 生成候選節(jié)點
對于每個節(jié)點,生成5個待探索的候選節(jié)點。
將候選節(jié)點生成和refleciton步驟打包在下面的擴展節(jié)點中,所有操作都以批處理的方式進行,以加快執(zhí)行速度。
第四步 構(gòu)建流程圖
下面,我們構(gòu)建流程圖,將根節(jié)點和擴展節(jié)點加入進來
至此,整個LATS的核心邏輯就介紹完了。關(guān)注公眾號【風(fēng)叔云】,回復(fù)關(guān)鍵詞【LATS源碼】,可獲取LATS設(shè)計模式的完整源代碼。
總結(jié)
與其他基于樹的方法相比,LATS實現(xiàn)了自我反思的推理步驟,顯著提升了性能。當(dāng)采取行動后,LATS不僅利用環(huán)境反饋,還結(jié)合來自語言模型的反饋,以判斷推理中是否存在錯誤并提出替代方案。這種自我反思的能力與其強大的搜索算法相結(jié)合,使得LATS更適合處理一些相對復(fù)雜的任務(wù)。
然而,由于算法本身的復(fù)雜性以及涉及的反思步驟,LATS通常比其他單智能體方法使用更多的計算資源,并且完成任務(wù)所需的時間更長。
后記
這篇文章之后,整個《AI大模型實戰(zhàn)篇》系列就全部介紹完了,這個系列一共包括八篇文章,從最經(jīng)典的ReAct模式開始,沿著規(guī)劃路線介紹了REWOO、Plan&Execute和LLM Compiler,沿著反思路線介紹了Basic Reflection、Self Discover和Reflexion,并以最強大的設(shè)計模式LATS作為收尾。整個系列基本上包含了目前AI大模型和AI Agent的全部主流設(shè)計框架,后續(xù)如果有新的前沿設(shè)計模式和具體案例,風(fēng)叔還會零星做一些介紹。
但是,所有的這些設(shè)計模式,都只是在告訴AI Agent應(yīng)該如何規(guī)劃和思考,且只能依賴于大模型既有的知識儲備。而實際應(yīng)用中,我們往往更希望AI Agent結(jié)合我們給定的知識和信息,在更專業(yè)的垂直領(lǐng)域內(nèi)進行規(guī)劃和思考。
比如我們希望Agent幫我們做論文分析、書籍總結(jié),或者在企業(yè)級場景中,讓AI Agent寫營銷計劃、內(nèi)部知識問答、智能客服等等非常多的場景,只靠上面幾種Agent設(shè)計模式是遠遠不夠的,我們必須給大模型外掛知識庫,并且通過工作流進一步約束和規(guī)范Agent的思考方向和行為模式。
解決這個問題的最佳方式是利用Rag技術(shù),接下來我們正式開啟《Rag系統(tǒng)實戰(zhàn)篇》系列。在后續(xù)的幾篇文章中,風(fēng)叔將同樣結(jié)合應(yīng)用場景和源代碼,詳細介紹Rag系統(tǒng)的實現(xiàn)方式和優(yōu)化技巧。
對于還不太了解Rag的讀者,可以先參考風(fēng)叔的這兩篇文章進行預(yù)習(xí)。
《聊聊炙手可熱的Rag:產(chǎn)生原因、基本原理與實施路徑》
《Rag系統(tǒng)的發(fā)展歷程,從樸素、高級到模塊化》
本文由人人都是產(chǎn)品經(jīng)理作者【風(fēng)叔】,微信公眾號:【風(fēng)叔云】,原創(chuàng)/授權(quán) 發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自Unsplash,基于 CC0 協(xié)議。
- 目前還沒評論,等你發(fā)揮!