當前,在各個大廠紛紛卷LLM的情況下,各自都藉助自己的LLM推出了自己的AI Agent,比如位元組的Coze,百度的千帆等,還有開源的Dify。
你是否想知道其中的原理?是否想過自己如何實現一套AI Agent?當然,藉助LangChain就可以。
1. 簡述AI Agent
何為AI Agent呢?如果拿人來對比的話,半支菸認為AI Agent就是一個會思考和行動的人,其中LLM就是這個人的大腦。
說白了,AI Agent就是藉助LLM這個大腦,加上一些 能夠感知外部環節 和 能夠發起行動 的部件,共同組成的一個 機器人。
那怎樣能夠讓 AI Agent這個機器人,充分利用LLM 和 各種部件呢?那ReAct就是這個協作工具。利用ReAct機制,LLM可以很好的結合外部環境和行動元件,形成一個完整的AI Agent。
下面將探討ReAct框架的概念、原理、優勢,並透過程式碼示例展示如何在LangChain中使用ReAct構建AI Agent。
2. ReAct概念和原理
2.1 為什麼需要ReAct
我們知道,LLM在訓練完畢後,會具備較強的推理能力,但是他的知識隨著時間的推移會過時,但是又不可能經常性的去訓練LLM,畢竟每次訓練的成本太高了。
那怎麼解決這個問題?機器可以像人一樣自己主動去學習和搜尋新知識呀。
那機器怎麼知道什麼時候該去搜尋知識?什麼時候時候該去呼叫什麼樣的工具解決當前的問題呢?
ReAct應運而生。ReAct的核心在於,推理和行動。
2.2 ReAct的定義
ReAct(Reasoning and Action
)是一個框架,其概念來源於一篇論文,其核心思想,就是透過思維鏈
的方式,引導模型將複雜問題進行拆分,一步一步地進行推理(Reasoning
)和行動(Action
),同時還引入了觀察(Observation
)環節,在每次執行(Action
)之後,都會先觀察(Observation
)當前現狀,然後再進行下一步的推理(Reason
)。
ReAct這個框架,就是要讓LLM,進行推理,然後採取行動與外界環境互動。
ReAct這個框架,就是要讓開發者一步步引導LLM進行推理,然後根據推理的結果,判斷採取哪個行動。
2.3 ReAct的核心元件
ReAct框架的核心元件包括:
- 思維鏈(Chain of Thought):將一個大的複雜任務進行拆解,拆解成多個思維步驟。
- 推理(Reasoning):負責分析和處理輸入的資料,生成有效的決策。
- 行動(Action):執行具體的操作,比如搜尋、執行程式碼,或者其餘自定義的行動。
- 觀察(Observation):監控和收集環境反饋的資料,為下一步的推理和行動提供依據。
2.4 工作流程
ReAct框架的工作流程如下:
- 輸入資料:接收使用者輸入或環境資料。
- 推理階段:分析輸入資料,生成決策和計劃。
- 行動階段:根據決策執行具體操作。
- 觀察階段:監控操作結果,收集反饋資料。
- 迴圈迭代:根據反饋資料調整推理和行動,持續最佳化結果。
2.5 舉個例子說明ReAct步驟
比如,要知道2024年周杰倫最新的演唱會是時間和地點是什麼,透過ReAct機制,會被拆解成以下步驟:
推理1:使用者想知道2024年周杰倫最新的演唱會是時間和地點是什麼,需要查詢最新的資訊。
行動1:呼叫Google的搜尋API進行搜尋。
觀察1:搜尋結束,搜尋的結果中出現一些關於《2024年周杰倫最新的演唱會》的網頁資訊。
推理2:搜尋出來的網頁較多,大概瀏覽前6個網頁的具體內容。
行動2:點選第一個網頁,開始瀏覽。
觀察2:瀏覽結束,瀏覽的網頁內容提及到了2024年周杰倫最新的演唱會資訊。
推理3:針對網頁的內容進行,問題的總結。
結果:將最終的答案輸出給使用者。
3. LangChain的ReAct機制實現AI Agent
以上我們已經瞭解的原理和步驟,接下來我們使用LangChain定義一個ReAct機制的AI Agent。
3.1 示例
比如,在不使用ReAct機制藉助外部工具的情況下,讓LLM幫我們計算兩個小數相加,則直接出錯。
然後,藉助ReAct機制,會讓LLM自動使用自定義工具,最終計算正確。
然後,繼續測試,問別的問題,藉助ReAct機制,則不會使用到工具,直接給出答案。
3.2 程式碼
具體程式碼如下:
from langchain import hub
from langchain.agents import create_structured_chat_agent, AgentExecutor
from langchain.memory import ConversationBufferMemory
from langchain.schema import HumanMessage
from langchain.tools import BaseTool
from langchain_openai import ChatOpenAI
# 模型
model = ChatOpenAI(model="gpt-3.5-turbo",
openai_api_key="sk-XXXXXXXXXX",
openai_api_base="https://api.aigc369.com/v1")
# 直接讓模型計算數字,模型會算錯
model.invoke([HumanMessage(content="你幫我算下,3.941592623412424+4.3434532535353的結果")])
# 下面開始使用ReAct機制,定義工具,讓LLM使用工具做專業的事情。
# 定義工具,要繼承自LangChain的BaseTool
class SumNumberTool(BaseTool):
name = "數字相加計算工具"
description = "當你被要求計算2個數字相加時,使用此工具"
def _run(self, a, b):
return a.value + b.value
# 工具合集
tools = [SumNumberTool()]
# 提示詞,直接從langchain hub上下載,因為寫這個ReAct機制的prompt比較複雜,直接用現成的。
prompt = hub.pull("hwchase17/structured-chat-agent")
# 定義AI Agent
agent = create_structured_chat_agent(
llm=model,
tools=tools,
prompt=prompt
)
# 使用Memory記錄上下文
memory = ConversationBufferMemory(
memory_key='chat_history',
return_messages=True
)
# 定義AgentExecutor,必須使用AgentExecutor,才能執行代理定義的工具
agent_executor = AgentExecutor.from_agent_and_tools(
agent=agent, tools=tools, memory=memory, verbose=True, handle_parsing_errors=True
)
# 測試使用到工具的場景
agent_executor.invoke({"input": "你幫我算下3.941592623412424+4.3434532535353的結果"})
# 測試不使用工具的場景
agent_executor.invoke({"input": "請你充當稿件稽核師,幫我看看'''號裡的內容有沒有錯別字,如果有的話幫我糾正下。'''今天班級裡的學生和老實要去哪裡玩'''"})
4. 總結
本文主要介紹了AI Agent的概念,探討了ReAct框架的概念、原理、優勢,並透過程式碼示例展示如何在LangChain中使用ReAct構建AI Agent。希望對你有幫助!
======>>>>>> 關於我 <<<<<<======
本篇完結!歡迎點贊 關注 收藏!!!
原文連結:https://mp.weixin.qq.com/s/OAQ3nPeRaC7mSNFNFDqF_A