【LangChain】在创建 Agent 时 initialize_agent 函数中 通过 agent 指定的 AgentType 有哪些?

在 LangChain 中,initialize_agent 函数用于创建代理(Agent),其中 agent 参数通过指定 AgentType 来定义代理的类型。AgentType 枚举了 LangChain 支持的代理类型,每种类型对应不同的代理行为和提示策略。尽管 initialize_agent 在 LangChain 0.3.x 中已被标记为不推荐(建议使用 LangGraph),但它仍然可用,且 AgentType 定义了其支持的代理类型。本文基于 LangChain 0.3.x,详细列出 AgentType 的所有可能值及其用途,并提供相关代码示例。


AgentType 概述

AgentType 是一个枚举类,位于 langchain.agents 模块中,用于指定代理的行为模式。不同的 AgentType 对应不同的提示模板和推理策略,适用于不同的工具调用和任务场景。以下是 LangChain 0.3.x 中 AgentType 的所有可能值及其描述。

可用的 AgentType

根据 LangChain 0.3.x 的源代码和文档(langchain.agents.AgentType),以下是所有 AgentType 枚举值:

  1. ZERO_SHOT_REACT_DESCRIPTION

    • 描述:基于 ReAct(Reasoning + Acting)框架的零样本代理,仅依赖工具描述进行推理和行动,无需示例。
    • 适用场景:通用工具调用任务,适合快速构建无需训练数据的代理。
    • 提示策略:生成包含工具描述的提示,代理通过推理选择工具并执行。
    • 工具支持:支持任意数量的工具。
  2. REACT_DOCSTORE

    • 描述:专为文档存储(Docstore)设计的 ReAct 代理,结合搜索和查找工具处理文档相关任务。
    • 适用场景:需要从文档库中检索信息的任务,如问答系统。
    • 提示策略:提示包含搜索和查找工具的描述,代理通过 ReAct 逻辑处理文档查询。
    • 工具支持:通常与 SearchLookup 工具配合。
  3. SELF_ASK_WITH_SEARCH

    • 描述:自问自答代理,通过搜索工具回答复杂问题,逐步分解问题并查找答案。
    • 适用场景:需要外部知识(如网络搜索)的问答任务。
    • 提示策略:提示引导代理提出子问题,调用搜索工具获取答案。
    • 工具支持:通常需要一个搜索工具(如 Google 搜索 API)。
  4. CONVERSATIONAL_REACT_DESCRIPTION

    • 描述:对话型 ReAct 代理,结合对话历史和工具调用,适合交互式对话场景。
    • 适用场景:需要维护对话上下文并调用工具的聊天机器人。
    • 提示策略:提示包含对话历史和工具描述,代理在对话中推理和行动。
    • 工具支持:支持任意工具,强调对话流畅性。
  5. CHAT_ZERO_SHOT_REACT_DESCRIPTION

    • 描述:为聊天模型优化的零样本 ReAct 代理,使用消息格式提示,适合现代聊天模型(如 gpt-4o)。
    • 适用场景:与聊天模型结合的工具调用任务,注重消息格式。
    • 提示策略:使用系统消息和用户消息,包含工具描述,代理通过 ReAct 逻辑行动。
    • 工具支持:支持工具调用,兼容现代模型的工具调用 API。
  6. CHAT_CONVERSATIONAL_REACT_DESCRIPTION

    • 描述:为聊天模型优化的对话型 ReAct 代理,结合对话历史和工具调用。
    • 适用场景:需要对话上下文和工具调用的交互式聊天场景。
    • 提示策略:提示包含对话历史、系统消息和工具描述,代理在对话中推理。
    • 工具支持:支持任意工具,强调对话连续性。
  7. STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION

    • 描述:为结构化工具调用优化的零样本 ReAct 代理,支持多输入工具(Structured Tools)。
    • 适用场景:需要调用复杂工具(多参数或 schema 定义)的任务。
    • 提示策略:提示包含工具的结构化描述,代理通过 ReAct 逻辑选择和调用工具。
    • 工具支持:专为 StructuredTool 或复杂工具 schema 设计。
  8. OPENAI_FUNCTIONS(已废弃)

    • 描述:专为 OpenAI 函数调用(Function Calling)设计的代理,使用 OpenAI 的原生函数调用 API。
    • 适用场景:早期 OpenAI 模型(如 gpt-3.5-turbo)的函数调用任务。
    • 提示策略:直接利用 OpenAI 的函数调用接口,无需复杂提示。
    • 工具支持:支持 OpenAI 函数格式的工具。
    • 注意:在 LangChain 0.3.x 中已标记为不推荐,建议使用 CHAT_ZERO_SHOT_REACT_DESCRIPTION 或 LangGraph。
  9. OPENAI_MULTI_FUNCTIONS(已废弃)

    • 描述:类似 OPENAI_FUNCTIONS,但支持同时调用多个函数。
    • 适用场景:需要批量函数调用的场景。
    • 提示策略:与 OPENAI_FUNCTIONS 类似,依赖 OpenAI 函数调用 API。
    • 工具支持:支持多函数调用。
    • 注意:同样不推荐,建议迁移到现代工具调用代理。

如何选择 AgentType

选择 AgentType 取决于你的任务需求和模型类型:

  • 简单工具调用:使用 ZERO_SHOT_REACT_DESCRIPTION(通用)或 CHAT_ZERO_SHOT_REACT_DESCRIPTION(聊天模型)。
  • 对话场景:使用 CONVERSATIONAL_REACT_DESCRIPTIONCHAT_CONVERSATIONAL_REACT_DESCRIPTION
  • 复杂工具:使用 STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION
  • 文档检索:使用 REACT_DOCSTORE
  • 搜索驱动:使用 SELF_ASK_WITH_SEARCH
  • OpenAI 函数调用:避免使用 OPENAI_FUNCTIONSOPENAI_MULTI_FUNCTIONS,改用 CHAT_ZERO_SHOT_REACT_DESCRIPTION

代码示例

以下是一个使用 initialize_agentCHAT_ZERO_SHOT_REACT_DESCRIPTION 的示例,展示如何创建代理并调用工具。同时,我会指出迁移到 LangGraph 的建议。

import os
os.environ["OPENAI_API_KEY"] = "Your OpenAI API Key"

from langchain.agents import initialize_agent, AgentType
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool

# 定义工具
@tool
def search_web(query: str) -> str:
    """搜索网络以获取信息。"""
    return f"搜索 {query} 的结果:[示例内容]"

tools = [search_web]

# 初始化 LLM
llm = ChatOpenAI(temperature=0, model="gpt-4o-mini")

# 初始化代理
agent = initialize_agent(
    tools=tools,
    llm=llm,
    agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)

# 调用代理
response = agent.invoke({"input": "成都的天气如何?"})
print(response["output"])

输出示例

[代理使用 search_web 工具] 成都的天气是晴天,最高气温 28°C。
代码说明
  1. OpenAI API 密钥
    • 通过 os.environ["OPENAI_API_KEY"] 设置,确保 OpenAI 模型正常调用。
    • "Your OpenAI API Key" 替换为你的实际密钥。
  2. 工具
    • 使用 @tool 装饰器定义 search_web,兼容现代工具调用。
  3. LLM
    • 使用 langchain_openai.ChatOpenAI,选择 gpt-4o-mini 支持工具调用。
  4. 代理
    • 设置 agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION,适合聊天模型的零样本工具调用。
    • verbose=True 显示代理推理过程。
  5. 调用
    • 使用 invoke 方法(推荐),输入为字典 {"input": "..."}
    • 输出为字典,访问 response["output"] 获取结果。

迁移到 LangGraph 的建议

initialize_agent 已被标记为不推荐,建议迁移到 LangGraph,因为它更灵活,支持状态持久化、复杂工作流和现代工具调用。以下是使用 LangGraph 的等效代码:

import os
os.environ["OPENAI_API_KEY"] = "Your OpenAI API Key"

from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
from langgraph.prebuilt import create_react_agent

# 定义工具
@tool
def search_web(query: str) -> str:
    """搜索网络以获取信息。"""
    return f"搜索 {query} 的结果:[示例内容]"

tools = [search_web]

# 初始化 LLM
llm = ChatOpenAI(temperature=0, model="gpt-4o-mini")

# 创建 LangGraph ReAct 代理
agent = create_react_agent(llm, tools)

# 调用代理
response = agent.invoke({"messages": [{"role": "human", "content": "成都的天气如何?"}]})
for message in response["messages"]:
    if message["role"] == "assistant":
        print(message["content"])

输出示例

[代理使用 search_web 工具] 成都的天气是晴天,最高气温 28°C。

说明

  • 使用 create_react_agent 创建 ReAct 代理,替代 initialize_agent
  • 支持状态持久化(可添加 MemorySaver)。
  • 输入为消息列表,输出为状态字典。

注意事项

  1. API 密钥安全
    • 避免硬编码密钥,推荐使用 .env 文件和 python-dotenv
      from dotenv import load_dotenv
      load_dotenv()  # 加载 .env 文件中的 OPENAI_API_KEY
      
    • 确保密钥支持指定模型(如 gpt-4o-mini)。
  2. 工具兼容性
    • 确保工具返回字符串或 JSON 兼容输出,适应现代工具调用。
    • 复杂工具使用 StructuredTool
  3. 模型选择
    • gpt-4o-mini 性价比高,适合工具调用。
    • 其他选项:gpt-4ogpt-3.5-turbo
  4. LangGraph 迁移
    • initialize_agent 适用于简单场景,但 LangGraph 更适合复杂任务。
    • 参考 迁移指南

常见问题

Q1:如何选择合适的 AgentType
A:根据任务选择:

  • 通用工具调用:CHAT_ZERO_SHOT_REACT_DESCRIPTION
  • 对话场景:CHAT_CONVERSATIONAL_REACT_DESCRIPTION
  • 复杂工具:STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION
  • 文档/搜索:REACT_DOCSTORESELF_ASK_WITH_SEARCH

Q2:initialize_agent 还能用多久?
A:支持到 LangChain 1.0,但新项目应使用 LangGraph。

Q3:LangGraph 与 initialize_agent 相比有何优势?
A:LangGraph 支持状态持久化、复杂工作流和人机交互,initialize_agent 仅适合简单场景。

Q4:如何调试代理行为?
A:设置 verbose=True 查看推理过程,或使用 LangGraph 的调试工具。


总结

LangChain 0.3.x 中 AgentType 的可能值包括:

  • ZERO_SHOT_REACT_DESCRIPTION
  • REACT_DOCSTORE
  • SELF_ASK_WITH_SEARCH
  • CONVERSATIONAL_REACT_DESCRIPTION
  • CHAT_ZERO_SHOT_REACT_DESCRIPTION
  • CHAT_CONVERSATIONAL_REACT_DESCRIPTION
  • STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION
  • OPENAI_FUNCTIONSOPENAI_MULTI_FUNCTIONS(已不推荐)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彬彬侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值