LangChain教程 - Agent -之 ZERO_SHOT_REACT_DESCRIPTION

server/2025/3/13 19:10:12/

在构建智能 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 作为后端大模型。

代码实现

python">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)

代码解析

  1. 定义工具

    • get_weather(location: str): 返回固定天气信息。
    • get_time(location: str): 返回固定时间信息。
    • Tool 结构体用于封装工具,包括名称、调用函数和描述。
  2. 初始化 LLM 和 Agent

    • 使用 OllamaLLM(model="llama3:8b", temperature=0) 作为 LLM。
    • 使用 initialize_agent 方法创建 Agent,并指定 AgentType.ZERO_SHOT_REACT_DESCRIPTION
    • Agent 通过工具的 description 选择合适的工具。
  3. 运行 Agent

    • Agent 接受用户输入 告诉我上海当前时间,然后决定调用 get_time
    • 最终输出 上海的当前时间是 12:00 PM

3. AgentType.ZERO_SHOT_REACT_DESCRIPTION 的核心机制

该 Agent 类型基于 ReAct 框架工作,流程如下:

  1. 模型解析用户输入

    • LLM 读取用户的请求,如 告诉我上海当前时间
  2. Agent 选择合适的工具

    • LLM 根据工具的 description 确定使用 get_time
    • 生成相应的函数调用。
  3. 执行工具调用并返回结果

    • Agent 执行 get_time("上海")
    • 返回 上海的当前时间是 12:00 PM
  4. 响应用户

    • 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 反应链


http://www.ppmy.cn/server/174699.html

相关文章

【Python】06、流程控制语句

文章目录 1.条件判断语句1.1 if 语句2. input 函数3.if-else 语句4.if-elif-else 语句 2.循环语句2.1 while语句2.2 while语句练习:2.3 循环嵌套2.4 break和continue 通过流程控制语句,可以改变程序的执行顺序,也可以让指定程序反复执行多次。…

计算机网络——路由器

一、路由器的作用 路由器(Router)是网络层(OSI第三层)的核心设备,承担着跨网络通信的关键任务,主要功能包括: 跨网络数据转发 基于IP地址,在不同网络间选择最优路径传输数据包&…

数字IC后端项目典型问题(2025.03.10数字后端项目问题记录)

小编发现今天广大学员发过来的问题都比较好,立即一顿输出分享给大家(每天都有好多种类的数字后端问题)。后续可能会经常通过这种方式来做分享。其实很多问题都是实际后端项目中经常遇到的典型问题。希望通过这种方式的分享能够帮助到更多需要…

详细介绍ListView_DeleteItem

书籍:《Visual C 2017从入门到精通》的2.3.8 Win32控件编程 环境:visual studio 2022 内容:【例2.27】支持按Delete键删除某行的列表视图控件 说明:以下内容大部分来自腾讯元宝。 以下是关于**ListView_DeleteItem**函数的详细…

Android Compose: `remember` 与 `ViewModel` 保存数据的优缺点对比

在开发 Android 应用时,管理 UI 状态是一个不可避免的话题。Jetpack Compose 提供了两种常见的方式来保存和管理数据:remember 和 ViewModel。它们各有优缺点,适用于不同的场景。 本文将详细对比这两者在保存数据时的优缺点,帮助…

前端非技术性场景面试题

1.如果给你主导一个项目你会怎么展开工作 我的回答: 当我拿到一个项目的时候我首先会进行需求的收集和分析,给出项目的概要设计,同时根据目前的需求做可行性性分析,做的是技术的可行性分析,可行性分析做完之后&#x…

双周报Vol.67: 模式匹配支持守卫、LLVM 后端发布、支持 Attribute 语法...多项核心技术更新!

2025-03-10 语言更新 模式匹配支持守卫(Pattern Guard) 模式守卫可以通过在模式后追加 if ... 的语法结构来指定。有模式守卫的分支只有在被模式匹配的值满足对应模式,并且模式守卫为真的情况下才会执行。如果模式守卫为假,则会…

【贪心算法】柠檬水找零

1.题目解析 860. 柠檬水找零 - 力扣(LeetCode) 2.讲解算法原理 分情况讨论 5---》直接收下 10---》找五元,收下 20----》105△ ----》555 由于5元更有用,则尽可能保留5元 3.代码 class Solution {public boolean lemonadeCh…