AI Agent开发学习系列 - langchain之Agent智能体(2):几种不同的内置agent类型
在 LangChain 框架中,常见的内置 Agent 类型有以下几种,每种类型适用于不同的推理和交互场景:
- ZERO_SHOT_REACT_DESCRIPTION
零样本推理+ReAct风格,最常用。
支持“思考-行动-观察”循环,能自主调用工具解决复杂问题。
适合大多数通用智能体场景。 - STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION
结构化对话版的 ReAct Agent。
输出和工具调用格式更规范,适合需要严格结构化输出的场景。 - CONVERSATIONAL_REACT_DESCRIPTION
专为多轮对话设计的 ReAct Agent。
能更好地处理带有上下文记忆的连续对话任务。 - OPENAI_FUNCTIONS
支持 OpenAI Function Calling 风格的 Agent。
能自动根据函数描述调用工具,适合与 OpenAI 兼容模型配合。 - CHAT_ZERO_SHOT_REACT_DESCRIPTION
聊天风格的零样本 ReAct Agent。
更适合自然语言对话和多轮交互。
不同 Agent 类型在推理风格、对话结构、工具调用方式等方面各有侧重。实际开发中可根据任务复杂度、对话需求和模型能力选择合适的 AgentType。
ZERO_SHOT_REACT_DESCRIPTION
ZERO_SHOT_REACT_DESCRIPTION 是 LangChain 框架中最常用、最通用的内置 Agent 类型之一。它结合了“零样本推理(Zero-Shot)”和“思考-行动-观察(ReAct)”两种能力,能够让大模型在没有额外训练样本的情况下,通过自然语言推理和多步工具调用,自动解决复杂问题。
主要特点
- 零样本推理:无需额外训练数据,直接用大模型的理解和推理能力解决问题。
- ReAct 机制:支持“Thought(思考)-Action(行动)-Observation(观察)”循环,Agent 会先思考,再决定是否调用工具,获取结果后继续推理,直到得出最终答案。
- 多工具协作:可集成搜索、计算、数据库等多种工具,Agent 会自动选择和调用。
典型用法
from langchain_openai import ChatOpenAI # 导入混元ChatOpenAI模型
from langchain.agents import (load_tools, # 导入工具加载方法initialize_agent, # 导入agent初始化方法AgentType # 导入agent类型
)
from pydantic import SecretStr # 用于安全存储API密钥
import os
from dotenv import load_dotenv # 用于加载环境变量load_dotenv() # 加载.env文件中的环境变量llm = ChatOpenAI(api_key=SecretStr(os.environ.get("HUNYUAN_API_KEY","")), # 读取混元APIKeybase_url="https://api.hunyuan.cloud.tencent.com/v1", # 混元API地址model="hunyuan-lite", # 指定混元模型temperature=0, # 设定温度为0,保证输出稳定
)tools = load_tools(["serpapi","llm-math"],llm=llm) # 加载搜索和数学工具agent = initialize_agent(tools, # 工具列表llm, # 大语言模型agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, # 零样本增强式agent类型handle_parsing_errors=True, # 处理解析错误verbose=True # 输出详细日志
)agent.run("上一任韩国总统是谁?用他的年龄除以2是多少?") # 运行agent,提问并推理
结果:
> Entering new AgentExecutor chain...
上一任韩国总统是文在寅。
他的年龄是73岁。
将73岁除以2等于36.5。
Final Answer: 36.5> Finished chain.'36.5'
适用场景
需要多步推理、动态工具调用的复杂问答
智能助理、知识检索、自动化决策等场景
ZERO_SHOT_REACT_DESCRIPTION 让 Agent 具备了“自主思考+动态行动+多工具协作”的强大能力,是构建通用智能体的首选类型。
CHAT_ZERO_SHOT_REACT_DESCRIPTION
CHAT_ZERO_SHOT_REACT_DESCRIPTION 是 LangChain 框架中一种专为“对话场景”设计的智能体(Agent)类型。它结合了零样本推理(Zero-Shot)和 ReAct 思考-行动-观察机制,但在 Prompt 和交互格式上更贴近多轮对话和聊天机器人应用。
主要特点
- 对话友好:Prompt 模板和输出格式更适合连续对话,能更好地理解和利用上下文。
- 零样本推理:无需额外训练,直接用大模型的理解能力解决问题。
- ReAct 机制:支持“思考-行动-观察”循环,能多步推理、动态调用工具。
- 多工具协作:可集成搜索、计算等多种工具,自动选择调用。
典型用法
from langchain_openai import ChatOpenAI
from langchain.agents import (load_tools,initialize_agent,AgentType
)
from pydantic import SecretStr
import os
from dotenv import load_dotenvload_dotenv()llm = ChatOpenAI(api_key=SecretStr(os.environ.get("HUNYUAN_API_KEY","")), # 混元 APIKeybase_url="https://api.hunyuan.cloud.tencent.com/v1", # 混元 endpointmodel="hunyuan-lite", # 模型名称temperature=0,
)tools = load_tools(["serpapi","llm-math"],llm=llm)agent = initialize_agent(tools,llm,agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION,handle_parsing_errors=True,verbose=True,# max_iterations=3
)agent.run("现任联合国秘书长是谁?用他的年龄除以2是多少?")
结果:
> Entering new AgentExecutor chain...
Thought: 首先,我需要找到联合国秘书长的当前姓名。
Action:
{“action”: “Search”, “action_input”: “现任联合国秘书长是谁?”}
Observation: ['António Guterres (安东尼奥·古特雷斯) type: Secretary-General of the United Nations.', 'António Guterres (安东尼奥·古特雷斯) kgmid: /m/02dkv_.', 'António Guterres (安东尼奥·古特雷斯) born: 1949 (age 76 years), Santos-o-Velho, Lisbon, Portugal.', 'António Guterres (安东尼奥·古特雷斯) parents: Virgílio Dias Guterres, Ilda Cândida de Oliveira.', 'António Guterres (安东尼奥·古特雷斯) spouse: Catarina Vaz Pinto (m. 2001), Luísa Amélia Guimarães e Melo (m. 1972–1998).', '联合国秘书长安东尼奥·古特雷斯。联合国图片/Mark Garten.', '联合国秘书长是联合国秘书处的长官,由于联合国秘书处是联合国的行政机构,故该职 ... 现任 葡萄牙 · 东帝汶 安东尼奥·古特雷斯 2017年1月1日就职. 尊称 · 阁下 · 官邸 ...', '安东尼奥·古特雷斯是现任联合国秘书长。 他是第九任联合国秘书长,2017年1月1日就职。 格拉德温·杰布(英国)从1945年10月24日至1946年2月1日任职代理秘書長。 秘书处研究指 ...', '2016年10月5日,古特雷斯当选联合国秘书长,于2017年1月1日就任。 2024年,东帝汶议会一致决定授予古特雷斯东帝汶公民身份。 2024年10月2日,以色列方面宣布将古特雷斯列入不 ...', '安东尼奥·古特雷斯(António Guterres),男,1949年4月30日出生于葡萄牙里斯本,电气工程师、政治家,联合国全球契约组织理事会主席,联合国秘书长。1971年,安东尼奥·古特雷 ...', '秘书长安东尼奥·古特雷斯(右)在巴西里约热内卢举行的第17届金砖国家峰会上致辞。 联合国图片/Ana Carolina Fernandes. 精选内容. 联合国秘书长2024年国际妇女节视频致辞.', '安东尼奥•古特雷斯(António Guterres) 是联合国第九任秘书长,于2017年1月1日就职。 2016年的程序. 秘书长职位候选人征集. 大会主席和安理会主席关于秘书长选举和任命的联名 ...', '联合国秘书长,常被看作是“世界的总管”。 2021年6月18日,联合国现任秘书长安东尼奥·古特雷斯通过投票正式连任,他在2022年1月至2026年12月间继续其联合国秘书长第二任期。', '央视新闻消息,当地时间6月18日,联合国现任秘书长安东尼奥·古特雷斯通过投票正式连任,他将在2022年1月至2026年12月间继续其联合国秘书长第二任期。 18日,古特雷斯宣誓连任并 ...']
Thought:Thought: 我已经找到了现任联合国秘书长的姓名,接下来我需要计算他的年龄除以2的结果。
Action:
{“action”: “Calculator”, “action_input”: “76 divided by 2”}
Observation: Answer: 38.0
Thought:I now know the final answer
Final Answer: 38> Finished chain.'38'
适用场景
- 智能客服、聊天机器人
- 需要多轮对话、上下文记忆的复杂交互
- 需要自然语言风格输出的智能体
CHAT_ZERO_SHOT_REACT_DESCRIPTION 让 Agent 更适合对话型应用,既能多轮推理、动态调用工具,又能保持自然流畅的聊天体验,是构建智能对话助手的理想选择。
CONVERSATIONAL_REACT_DESCRIPTION
CONVERSATIONAL_REACT_DESCRIPTION 是 LangChain 框架中专为“多轮对话”场景设计的 Agent 类型。它在 ReAct(思考-行动-观察)机制基础上,进一步优化了对话历史的处理和上下文理解能力,使智能体在连续对话中能更好地利用历史信息,进行多步推理和动态工具调用。
主要特点
- 多轮对话优化:专为连续对话设计,能自动管理和利用对话历史,理解上下文,保持对话连贯性。
- ReAct 机制:支持“思考-行动-观察”循环,Agent 可多次调用工具,逐步推理直至获得最终答案。
- 多工具协作:可集成搜索、计算等多种工具,Agent 会根据对话内容自动选择调用。
- 自然语言交互:输出风格更贴近真实对话,适合智能客服、助理等场景。
典型用法
from langchain_openai import ChatOpenAI
from langchain.agents import (load_tools,initialize_agent,AgentType
)
from langchain.memory import ConversationBufferMemory
from pydantic import SecretStr
import os
from dotenv import load_dotenvload_dotenv()#记忆组件
memory = ConversationBufferMemory(memory_key="chat_history",
)llm = ChatOpenAI(api_key=SecretStr(os.environ.get("HUNYUAN_API_KEY","")), # 混元 APIKeybase_url="https://api.hunyuan.cloud.tencent.com/v1", # 混元 endpointmodel="hunyuan-lite", # 模型名称temperature=0,
)tools = load_tools(["serpapi","llm-math"],llm=llm)agent = initialize_agent(tools,llm,agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION,# handle_parsing_errors=True,memory=memory,verbose=True
)agent.run("你好,我是Alex。")
agent.run("我的名字是什么?")
agent.run("西瓜是什么颜色?")
结果:
> Entering new AgentExecutor chain...
Thought: Do I need to use a tool? No
AI: Hello, Alex! How can I assist you today?> Finished chain.> Entering new AgentExecutor chain...
Thought: Do I need to use a tool? No
AI: Your name is Alex.> Finished chain.> Entering new AgentExecutor chain...
Thought: Do I need to use a tool? No
AI: 西瓜通常是绿色的外皮,但内部果肉可以是红色、黄色或其他颜色。> Finished chain.'西瓜通常是绿色的外皮,但内部果肉可以是红色、黄色或其他颜色。'
适用场景
- 智能客服、对话机器人
- 需要多轮连续对话、上下文记忆的复杂交互
- 需要多步推理和动态工具调用的对话型应用
CONVERSATIONAL_REACT_DESCRIPTION 让 Agent 在多轮对话中表现更佳,既能理解上下文、记住历史,又能动态推理和调用工具,是构建高智能对话系统的理想选择。
CHAT_CONVERSATIONAL_REACT_DESCRIPTION
CHAT_CONVERSATIONAL_REACT_DESCRIPTION 是 LangChain 框架中专为“多轮对话+聊天场景”设计的智能体(Agent)类型。它结合了 ReAct(思考-行动-观察)推理机制、多轮对话上下文管理,以及自然语言聊天风格,适合需要连续对话、上下文记忆和工具动态调用的复杂聊天应用。
主要特点
- 多轮对话优化:自动管理和利用对话历史,理解上下文,保证对话连贯性。
- ReAct 机制:支持“思考-行动-观察”循环,能多步推理、动态调用工具。
- 聊天风格:Prompt 和输出更贴近真实聊天体验,适合智能助手、客服等场景。
- 多工具协作:可集成搜索、计算等多种工具,Agent 会根据对话内容自动选择调用。
典型用法
from langchain_openai import ChatOpenAI
from langchain.agents import (load_tools,initialize_agent,AgentType
)
from langchain.memory import ConversationBufferMemory
from pydantic import SecretStr
import os
from dotenv import load_dotenvload_dotenv()#记忆组件
memory = ConversationBufferMemory(memory_key="chat_history",return_messages=True
)llm = ChatOpenAI(api_key=SecretStr(os.environ.get("HUNYUAN_API_KEY","")), # 混元 APIKeybase_url="https://api.hunyuan.cloud.tencent.com/v1", # 混元 endpointmodel="hunyuan-t1-latest", # 模型名称temperature=0,
)tools = load_tools(["serpapi","llm-math"],llm=llm)agent = initialize_agent(tools,llm,agent=AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION,# handle_parsing_errors=True,memory=memory,verbose=True
)agent.run("你好,我是Alex。")
agent.run("我的名字是什么?")
agent.run("西瓜是什么颜色?")
结果:
> Entering new AgentExecutor chain...
```json
{"action": "Final Answer","action_input": "你好,Alex!很高兴见到你,有什么我可以为你提供帮助的吗?"
}
``> Finished chain.> Entering new AgentExecutor chain...
```json
{"action": "Final Answer","action_input": "你的名字是Alex。"
}
``> Finished chain.> Entering new AgentExecutor chain...
```json
{"action": "Final Answer","action_input": "西瓜的外皮通常呈现绿色(带有深绿或浅绿的条纹),而内部的果肉多为红色(部分品种可能为黄色),中间分布着黑色的籽。"
}
``> Finished chain.'西瓜的外皮通常呈现绿色(带有深绿或浅绿的条纹),而内部的果肉多为红色(部分品种可能为黄色),中间分布着黑色的籽。'
适用场景
- 智能客服、聊天机器人
- 需要多轮连续对话、上下文记忆的复杂交互
- 需要自然语言风格输出和多步推理的对话型应用
CHAT_CONVERSATIONAL_REACT_DESCRIPTION 让 Agent 在多轮对话和聊天场景下表现更自然、更智能,既能记住历史、理解上下文,又能动态推理和调用工具,是构建高智能对话助手的理想选择。
OPENAI_FUNCTIONS
OPENAI_FUNCTIONS 是 LangChain 框架中专为支持 OpenAI Function Calling(函数调用)能力而设计的 Agent 类型。它让大模型能够根据函数描述,自动生成结构化的函数调用请求,并动态调用相应的工具(Tool),实现更强的可控性和结构化交互。
主要特点
- 函数调用能力:Agent 能理解并生成符合 OpenAI Function Calling 规范的结构化调用,自动匹配并调用工具。
- 结构化输出:大模型输出严格遵循函数参数格式,便于后续处理和集成。
- 多工具协作:可集成多种工具,Agent 会根据用户意图自动选择并调用合适的函数。
- 高可控性:适合需要精确控制工具调用和结果格式的场景。
典型用法
from langchain.agents import initialize_agent, load_tools, AgentType
from langchain_openai import ChatOpenAI
from pydantic import SecretStr
import os
from dotenv import load_dotenv
load_dotenv()llm = ChatOpenAI(api_key=SecretStr(os.environ.get("HUNYUAN_API_KEY","")), # 混元 APIKeybase_url="https://api.hunyuan.cloud.tencent.com/v1", # 混元 endpointmodel="hunyuan-lite", # 模型名称temperature=0,
)
tools = load_tools(["serpapi", "llm-math"], llm=llm)
agent = initialize_agent(tools,llm,agent=AgentType.OPENAI_FUNCTIONS,verbose=True
)
result = agent.run("请帮我查一下上海的年平均气温,并计算它的平方根。")
结果:
> Entering new AgentExecutor chain...
首先,我们需要查找上海的年平均气温。根据可靠的数据来源,上海的年平均气温大约为17摄氏度。接下来,我们计算这个温度的平方根。平方根是指一个数乘以它自己得到的结果。对于17摄氏度,其平方根可以通过以下计算得出:$$
\sqrt{17} \approx 4.123
$$因此,上海的年平均气温的平方根大约是4.123。> Finished chain.
适用场景
- 需要与 OpenAI Function Calling 兼容的应用
- 需要结构化、可控工具调用的智能体
- 复杂业务流程自动化、API编排等场景
OPENAI_FUNCTIONS 让 Agent 具备了与 OpenAI 函数调用生态无缝对接的能力,适合需要结构化、自动化工具调用的高级智能体开发。
STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION
STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION 是 LangChain 框架中一种专为“结构化对话”场景设计的 Agent 类型。它结合了零样本推理(Zero-Shot)和 ReAct(思考-行动-观察)机制,但在输出和工具调用格式上更为规范和结构化,适合需要严格格式、易于解析的对话应用。
主要特点
- 结构化输出:Agent 的输出和工具调用都采用结构化格式,便于后续自动化处理和集成。
- 零样本推理:无需额外训练,直接用大模型的理解和推理能力解决问题。
- ReAct 机制:支持“思考-行动-观察”循环,能多步推理、动态调用工具。
- 多工具协作:可集成搜索、计算等多种工具,Agent 会自动选择调用。
典型用法
from langchain_openai import ChatOpenAI
from langchain.agents import (load_tools,initialize_agent,AgentType
)
from langchain.memory import ConversationBufferMemory
from pydantic import SecretStr
import os
from dotenv import load_dotenvload_dotenv()#记忆组件
memory = ConversationBufferMemory(memory_key="chat_history",return_messages=True
)llm = ChatOpenAI(api_key=SecretStr(os.environ.get("HUNYUAN_API_KEY","")), # 混元 APIKeybase_url="https://api.hunyuan.cloud.tencent.com/v1", # 混元 endpointmodel="hunyuan-lite", # 模型名称temperature=0,
)tools = load_tools(["serpapi","llm-math"],llm=llm)agent = initialize_agent(tools,llm,agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION,# handle_parsing_errors=True,memory=memory,verbose=True
)agent.run("langchain是什么?")
结果:
> Entering new AgentExecutor chain...
Thought: langchain似乎不是一个我熟悉的工具或概念。
Action:{"action": "Search","action_input": "langchain definition"
}Observation: ["LangChain is a software framework that helps facilitate the integration of large language models into applications. As a language model integration framework, LangChain's use-cases largely overlap with those of language models in general, including document analysis and summarization, chatbots, and code analysis.", 'LangChain type: Software.', 'LangChain entity_type: kp3_verticals.', 'LangChain programming_languages: Python, JavaScript.', 'LangChain initial_release: October 2022.', 'LangChain developer_s: Harrison Chase.', 'LangChain license: MIT License.', 'LangChain stable_release: 0.1.16 / 11 April 2024; 14 months ago.', 'LangChain is an open source framework for building applications based on large language models (LLMs). LLMs are large deep-learning models pre-trained on large ...', 'LangChain is an open source framework that enables software developers working with artificial intelligence (AI) and its machine learning ...', 'LangChain is a framework for developing applications powered by large language models (LLMs). LangChain simplifies every stage of the LLM application lifecycle.', 'LangChain is a software framework that helps facilitate the integration of large language models (LLMs) into applications.', 'LangChain is a set of tools for Python and JavaScript that simplify complex LLM-powered applications like chatbots. Learn more with Google Cloud.', 'Langchain makes creating agents using large language models simple through their agents API. Developers can use OpenAI functions or other means ...', 'LangChain is essentially a library of abstractions for Python and Javascript, representing common steps and concepts necessary to work with language models.', 'The platform for reliable agents. Tools for every step of the agent development lifecycle -- built to unlock powerful AI in production.', 'LangChain is an open-source framework designed to simplify the creation of applications using large language models (LLMs).']
Thought:Thought: langchain似乎是一个用于集成大型语言模型到应用程序中的软件框架。它主要用于文档分析、摘要、聊天机器人和代码分析等语言模型的用例。
Action:{"action": "Final Answer","action_input": "LangChain is a software framework that helps facilitate the integration of large language models into applications."
}> Finished chain.'LangChain is a software framework that helps facilitate the integration of large language models into applications.'
适用场景
- 需要结构化、规范输出的对话型应用
- 需要自动化工具调用和结果解析的业务流程
- 需要多步推理和动态工具协作的智能体
STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION 让 Agent 在结构化对话和自动化场景下表现更规范、更易集成,是企业级、流程化智能体开发的理想选择。