AI大模型實戰篇:Reflexion,為AI Agent開啟強化學習之路
前面的文章中,作者分享了一種偏重反思的AI Agent設計模式,即Basic Reflection。但面對復雜度很高的產品時,還有另一種框架可以解決。就是本文介紹的Reflexion設計模式。
在文章《AI大模型實戰篇:Basic Reflection,AI Agent的左右互搏之術》中,風叔結合原理和具體源代碼,詳細介紹了第一種偏重反思的AI Agent設計模式,即Basic Reflection。Basic Reflection 的思路非常樸素,就是通過左右互搏讓兩個Agent相互進化,實現成本也較低。
但是在實際應用中,Basic Reflection的Generator生成的結果可能會過于發散,和我們要求的結果相去甚遠。同時,當面對一些復雜度很高的問題時,Basic Reflection框架也難以解決。有兩種方法來優化Basic Reflection,一種是邊推理邊執行的Self Discover模式,一種是增加了強化學習的Reflexion模式。
上篇文章《AI大模型實戰篇:Self Discover框架,萬萬想不到Agent還能這樣推理》,風叔沿著“邊推理邊執行”的優化路線介紹了Self Discover。這篇文章中,風叔沿著“強化學習”這條優化路線,詳細介紹下Reflexion設計模式。
01 Reflexion的概念
Reflexion本質上是強化學習,可以理解為是Basic reflection 的升級版。Reflexion機制下,整個架構包括Responder和Revisor,和Basic Reflection機制中的Generator和Reflector有點類似。但不同之處在于, Responder自帶批判式思考的陳述,Revisor會以 Responder 中的批判式思考作為上下文參考對初始回答做修改。此外,Revisor還引入了外部數據來評估回答是否準確,這使得反思的內容更加具備可靠性。
下圖是Reflexion的原理:
- Responder接收來自用戶的輸入,輸出initial response,其中包括了Response、Critique和工具指示(示例圖中是Search)
- Responder將Initial Response給到執行工具,比如搜索接口,對Initial Response進行初步檢索
- 將初步檢索的結果給到Revisor,Revisor輸出修改后的Response,并給出引用來源Citations
- 再次給到執行工具,循環往復,直到循環次數
- Revisor將最終結果輸出給用戶
02 Reflexion的實現過程
下面,風叔通過實際的源碼,詳細介紹Basic Reflection模式的實現方法。關注公眾號【風叔云】,回復關鍵詞【Reflexion源碼】,可以獲取到Reflexion設計模式的完整源代碼。
第一步 構建Responder
在下面的例子中,我們先構建一個Responder
為Responder確定Prompt模板,并建立一個Responder。通過Prompt,我們告訴Responder,“你需要反思自己生成的答案,要最大化嚴謹程度,同時需要搜索查詢最新的研究信息來改進答案”。
第二步 構建Revisor
接下來我們開始構建Revisor,通過Prompt告訴Revisor
- 應該使用之前生成的critique為答案添加重要信息
- 必須在修改后的答案中包含引用,以確保答案來源可驗證
- 在答案底部要添加參考,形式為[1] https://example.com
- 使用之前的批評從答案中刪除多余的信息,并確保其不超過 250 個字。
第三步構建Tools
接下來,創建一個節點來執行工具調用。雖然我們為 LLM 賦予了不同的模式名稱,但我們希望它們都路由到同一個工具。
第四步構建Graph
下面,我們構建流程圖,將Responder、Revisor、工具等節點添加進來,循環執行并輸出結果。
以上內容就是Reflexion的核心思想,其實完整的Reflexion框架要比上文介紹的更復雜,包括Actor、Evaluator和self-Reflection三塊,上文的內容只涵蓋了Actor。
- 參與者(Actor):主要作用是根據狀態觀測量生成文本和動作。參與者在環境中采取行動并接受觀察結果,從而形成軌跡。前文所介紹的Reflexion Agent,其實指的就是這一塊
- 評估者(Evaluator):主要作用是對參與者的輸出進行評價。具體來說,它將生成的軌跡(也被稱作短期記憶)作為輸入并輸出獎勵分數。根據人物的不同,使用不同的獎勵函數(決策任務使用LLM和基于規則的啟發式獎勵)。
- 自我反思(Self-Reflection):由大語言模型承擔,能夠為未來的試驗提供寶貴的反饋。自我反思模型利用獎勵信號、當前軌跡和其持久記憶生成具體且相關的反饋,并存儲在記憶組件中。Agent會利用這些經驗(存儲在長期記憶中)來快速改進決策。
關于Reflexion完整的實現方案可參考:https://github.com/noahshinn/reflexion
總結
Reflexion是我們介紹的第一個帶強化學習的設計模式,這種模式最適合以下情況:
智能體需要從嘗試和錯誤中學習:自我反思旨在通過反思過去的錯誤并將這些知識納入未來的決策來幫助智能體提高表現。這非常適合智能體需要通過反復試驗來學習的任務,例如決策、推理和編程。
傳統的強化學習方法失效:傳統的強化學習(RL)方法通常需要大量的訓練數據和昂貴的模型微調。自我反思提供了一種輕量級替代方案,不需要微調底層語言模型,從而使其在數據和計算資源方面更加高效。
需要細致入微的反饋:自我反思利用語言反饋,這比傳統強化學習中使用的標量獎勵更加細致和具體。這讓智能體能夠更好地了解自己的錯誤,并在后續的試驗中做出更有針對性的改進。
但是,Reflexion也存在一些使用上的限制:
- 依賴自我評估能力:反思依賴于智能體準確評估其表現并產生有用反思的能力。這可能是具有挑戰性的,尤其是對于復雜的任務,但隨著模型功能的不斷改進,預計自我反思會隨著時間的推移而變得更好。
- 長期記憶限制:自我反思使用最大容量的滑動窗口,但對于更復雜的任務,使用向量嵌入或 SQL 數據庫等高級結構可能會更有利。
- 代碼生成限制:測試驅動開發在指定準確的輸入輸出映射方面存在限制(例如,受硬件影響的非確定性生成器函數和函數輸出)。
在下一篇文章中,風叔將介紹目前最強大的AI Agent設計模式,集多種技術的集大成者,LATS。
本文由人人都是產品經理作者【風叔】,微信公眾號:【風叔云】,原創/授權 發布于人人都是產品經理,未經許可,禁止轉載。
題圖來自Unsplash,基于 CC0 協議。
- 目前還沒評論,等你發揮!