在構建智能 AI 助手時,我們希望模型能夠智能地調用工具,以便提供準確的信息。LangChain 提供了 AgentType.ZERO_SHOT_REACT_DESCRIPTION
,它結合了 ReAct(Reasoning + Acting)策略,使得 LLM 可以基于工具的描述智能選擇合適的工具進行推理和執行。本文將介紹該類型 Agent 的核心原理,并通過示例展示其應用。
1. ZERO_SHOT_REACT_DESCRIPTION 簡介
AgentType.ZERO_SHOT_REACT_DESCRIPTION
采用了 ReAct 框架,主要特點包括:
- 零樣本學習(Zero-Shot):無需提供示例,LLM 通過工具的描述來決定如何使用它們。
- 自適應推理(ReAct):LLM 通過思考和行動循環決定調用哪個工具。
- 工具可擴展:可以動態地向 Agent 添加新的工具。
這種方式特別適用于開放域問答場景,例如查詢天氣、獲取時間、計算數值等。
2. 代碼示例
下面是一個完整的 ZERO_SHOT_REACT_DESCRIPTION
示例,我們定義了兩個工具:
get_weather(location: str)
: 獲取指定城市的天氣信息。get_time(location: str)
: 獲取指定城市的當前時間。
然后,我們使用 LangChain 的 initialize_agent
方法初始化一個智能 Agent,并使用 Ollama LLM 作為后端大模型。
代碼實現
from langchain.agents import initialize_agent, AgentType
from langchain.tools import Tool
from langchain_ollama import OllamaLLM# 定義工具
def get_weather(location: str):return f"{location} 的天氣是晴天,溫度 25°C"def get_time(location: str):return f"{location} 的當前時間是 12:00 PM"weather_tool = Tool(name="get_weather",func=get_weather,description="獲取城市天氣信息,輸入城市名稱"
)time_tool = Tool(name="get_time",func=get_time,description="獲取城市當前時間,輸入城市名稱"
)# 初始化 Agent
llm = OllamaLLM(model="llama3:8b", temperature=0)agent = initialize_agent(tools=[weather_tool, time_tool],llm=llm,agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,verbose=True
)# 讓 LLM 選擇合適的工具
response = agent.run("告訴我上海當前時間")
print(response)
代碼解析
-
定義工具
get_weather(location: str)
: 返回固定天氣信息。get_time(location: str)
: 返回固定時間信息。Tool
結構體用于封裝工具,包括名稱、調用函數和描述。
-
初始化 LLM 和 Agent
- 使用
OllamaLLM(model="llama3:8b", temperature=0)
作為 LLM。 - 使用
initialize_agent
方法創建 Agent,并指定AgentType.ZERO_SHOT_REACT_DESCRIPTION
。 - Agent 通過工具的
description
選擇合適的工具。
- 使用
-
運行 Agent
- Agent 接受用戶輸入
告訴我上海當前時間
,然后決定調用get_time
。 - 最終輸出
上海的當前時間是 12:00 PM
。
- Agent 接受用戶輸入
3. AgentType.ZERO_SHOT_REACT_DESCRIPTION 的核心機制
該 Agent 類型基于 ReAct 框架工作,流程如下:
-
模型解析用戶輸入
- LLM 讀取用戶的請求,如
告訴我上海當前時間
。
- LLM 讀取用戶的請求,如
-
Agent 選擇合適的工具
- LLM 根據工具的
description
確定使用get_time
。 - 生成相應的函數調用。
- LLM 根據工具的
-
執行工具調用并返回結果
- Agent 執行
get_time("上海")
。 - 返回
上海的當前時間是 12:00 PM
。
- Agent 執行
-
響應用戶
- Agent 將結果輸出給用戶。
4. ZERO_SHOT_REACT_DESCRIPTION 的應用場景
AgentType.ZERO_SHOT_REACT_DESCRIPTION
適用于以下場景:
- 問答系統:基于多種工具提供智能問答,如天氣查詢、匯率轉換、時間查詢等。
- 企業客服:可以根據客戶的輸入選擇合適的 API 調用,自動化處理查詢。
- 自動化任務執行:如調用不同的數據庫查詢接口、自動化執行不同任務等。
5. 結論
本文詳細介紹了 AgentType.ZERO_SHOT_REACT_DESCRIPTION
,并通過示例展示了如何在 LangChain 中使用它來創建智能 Agent。其主要優勢包括零樣本學習、自動推理與工具調用,適用于智能問答和自動化任務執行。希望本文能幫助你更好地理解和應用 LangChain 的 Agent 機制!
參考
LangChain教程 - Agent - 支持 9 種 ReAct 交互
J-LangChain - Agent - 0~1 編排一個 ReAct 反應鏈