在构建智能 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 反应链