langchain Agent
智能体类型核心场景创建方式执行方式复杂推理、工具调用多轮对话+结构化工具调用(指定类型)同上,支持memory多轮对话分步事实性问答(指定类型)长流程任务规划OpenAI 模型工具调用SQL Agent数据库自然语言查询选择时需根据任务类型(如是否需要规划、是否依赖特定模型、是否操作数据库)和工具特性(如是否需要结构化参数)决定。
概念
是一个具备自主决策能力的 “智能实体”,核心目标是通过规划、工具调用、反思等逻辑,自主完成复杂任务(如多步骤问答、问题拆解、动态工具选择等)。
它本质上是一个 “决策者”,内置了任务拆解、行动选择、结果评估的闭环逻辑(例如 ReAct 模式:思考→行动→观察→再思考)
SQL Agent
from langchain.agents import create_sql_agent, AgentType
from langchain.agents.agent_toolkits import SQLDatabaseToolkit
from langchain.sql_database import SQLDatabase
# 配置数据库连接
db_user = "root"
db_password = "mysql2018"
db_host = "192.168.1.123:3306"
db_name = "operation-center01"
db = SQLDatabase.from_uri(f"mysql+pymysql://{db_user}:{db_password}@{db_host}/{db_name}")
# 大模型
chat = ChatDeepSeek(
model="deepseek-chat",
temperature=0,
api_key=API_KEY,
)
# 初始化工具集(Toolkit)
toolkit = SQLDatabaseToolkit(db=db, llm=chat)
# 创建 SQL 代理
agent_executor = create_sql_agent(
llm=chat,
toolkit=toolkit,
agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
)
# 运行代理并获取结果
result = agent_executor.run(‘一共有多少用户?’)
print("查询结果:", result)
ReAct Agent
# 将外部函数封装成Agent可调用的工具对象
from langchain.agents import Tool
searchTool = Tool(
name = "get_search_result", # 函数名
func = get_search_result,
description="用于互联网搜索",
)
timeTool = Tool(
name = "get_current_time",
func = lambda x: get_current_time(),
description="用于获取当前时间,当需要知道当前具体时间时使用",
)
weatherTool = Tool(
name = "get_weather",
description = "查询指定城市的即时天气信息,**参数类型为字符串,并且是城市的拼音**。",
func = get_weather,
)
tools=[searchTool, timeTool, weatherTool]
# 大模型
chat = ChatDeepSeek(
model="deepseek-chat",
temperature=0,
api_key=API_KEY,
)
from langchain import hub
prompt_react = hub.pull("hwchase17/react") # 系统提示词
# 创建Agent
from langchain.agents import create_react_agent
agent = create_react_agent(chat,tools,prompt_react)
# 用 AgentExecutor 运行 Agent
from langchain.agents import AgentExecutor
agent_executor = AgentExecutor(
agent = agent,
tools = tools,
verbose = True
)
agent_executor.invoke({"input":"背景最近天气怎么样?看看哪天天气好,我想看演唱会,并且帮我看看有谁的演唱会?"})
以下内容从豆包获取
- 简单工具调用、透明推理 → ReAct Agent;
- 多轮对话 + 结构化工具参数 → Structured Chat Agent;
- 事实性分步问答 → Self-Ask with Search;
- 长流程任务规划 → Plan-and-Execute Agent;
- 使用 OpenAI 模型 → OpenAI Functions Agent。
一、ReAct Agent(反应式智能体)
核心逻辑
遵循“思考(Reason)→行动(Act)→观察(Observe)”循环,通过自然语言推理明确下一步行动,调用工具后根据结果迭代,直到完成任务。
特点:推理过程透明(输出思考步骤),工具调用格式严格(需用固定前缀如 Action: 工具名)。
创建方式
- 基础方式(
create_react_agent):
需要手动传入提示词模板(可从 LangChain Hub 获取标准 ReAct 模板)、大模型(LLM)和工具列表。
from langchain.agents import create_react_agent, AgentExecutor
from langchain.tools import tool
from langchain.chat_models import ChatOpenAI
from langchain import hub
# 定义工具
@tool
def search(query: str) -> str:
"""用于获取实时信息的搜索工具"""
return f"搜索结果:{query}"
tools = [search]
# 获取 ReAct 提示词模板
react_prompt = hub.pull("hwchase17/react")
# 创建 Agent
llm = ChatOpenAI(temperature=0)
agent = create_react_agent(llm=llm, tools=tools, prompt=react_prompt)
# 创建 AgentExecutor
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
result = agent_executor.run("北京今天的气温是多少?")
- 快捷方式(
initialize_agent):
封装了默认配置,直接指定agent_type为ZERO_SHOT_REACT_DESCRIPTION。
from langchain.agents import initialize_agent, AgentType
agent = initialize_agent(
tools=tools,
llm=llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True
)
# 使用 initialize_agent 生成的 Agent 直接调用 run()
result = agent.run("北京今天的气温是多少?")
二、Structured Chat Agent(结构化对话智能体)
核心逻辑
在 ReAct 基础上增强结构化输出能力,支持用 JSON 格式定义工具调用参数,更适合需要精确参数的工具(如 API 调用),同时保留对话流畅性。
特点:兼顾自然语言交互和结构化工具调用,适合多轮对话场景。
创建方式
通过 initialize_agent 指定 agent_type 为 STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION:
from langchain.agents import initialize_agent, AgentType
agent = initialize_agent(
tools=tools,
llm=llm,
agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION,
verbose=True
)
执行方式
与 ReAct Agent 一致,直接调用 run() 方法,支持多轮对话(需结合记忆组件 memory):
# 单轮执行
result = agent.run("查一下上海明天的天气,用摄氏度表示")
# 多轮对话(需配置 memory)
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
agent = initialize_agent(
tools=tools,
llm=llm,
agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION,
memory=memory,
verbose=True
)
result = agent.run("刚才查的城市,后天会下雨吗?") # 结合历史对话理解“刚才查的城市”
三、Self-Ask with Search Agent(自询问+搜索智能体)
核心逻辑
通过“自我提问”拆解复杂问题,逐步缩小范围,每步提问可能触发搜索,最终整合答案。
特点:擅长将大问题拆解为子问题(如“某公司创始人是谁?”→“该公司成立时间?”→“当时的创始人信息?”)。
创建方式
通过 initialize_agent 指定 agent_type 为 SELF_ASK_WITH_SEARCH:
from langchain.agents import initialize_agent, AgentType
agent = initialize_agent(
tools=tools, # 需包含搜索工具
llm=llm,
agent=AgentType.SELF_ASK_WITH_SEARCH,
verbose=True
)
执行方式
调用 run() 方法,Agent 会自动拆解问题并迭代搜索:
result = agent.run("《哈利波特》第一部电影的导演是谁?他还拍过哪些电影?")
四、Plan-and-Execute Agent(规划-执行智能体)
核心逻辑
先通过“规划阶段”将任务拆解为明确步骤(如“1. 查A数据;2. 计算B;3. 生成报告”),再按步骤执行,过程中可调整规划。
特点:适合长流程任务,避免盲目调用工具。
创建方式
使用 create_plan_and_execute_agent 函数,需传入规划大模型(planning_llm)、执行大模型(execution_llm)和工具:
from langchain.agents import create_plan_and_execute_agent, AgentExecutor
from langchain.chat_models import ChatOpenAI
# 规划阶段用更强大的模型(如 GPT-4),执行阶段用高效模型(如 GPT-3.5)
planning_llm = ChatOpenAI(temperature=0, model_name="gpt-4")
execution_llm = ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo")
agent = create_plan_and_execute_agent(
tools=tools,
planning_llm=planning_llm,
execution_llm=execution_llm,
)
执行方式
通过 AgentExecutor 运行,自动完成“规划→执行→调整”循环:
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
result = agent_executor.run("帮我规划一场3天的北京旅行,含景点、住宿和预算")
五、OpenAI Functions Agent(OpenAI 函数调用智能体)
核心逻辑
专为 OpenAI 模型(如 GPT-3.5/4)的 function_call 功能设计,通过模型原生支持的 JSON 格式触发工具调用,无需手动解析格式。
特点:工具调用更稳定(模型直接输出函数参数),适合依赖 OpenAI 模型的场景。
创建方式
使用 create_openai_functions_agent 函数,需传入工具和提示词模板:
from langchain.agents import create_openai_functions_agent, AgentExecutor
from langchain import hub
# 获取 OpenAI Functions 提示词模板
prompt = hub.pull("hwchase17/openai-functions-agent")
agent = create_openai_functions_agent(
llm=llm, # 必须是 OpenAI 模型(如 gpt-3.5-turbo)
tools=tools,
prompt=prompt
)
执行方式
通过 AgentExecutor 运行,模型会自动判断是否调用工具:
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
result = agent_executor.run("计算 2023 年到 2025 年的天数差")
六、SQL Agent(SQL 智能体)
核心逻辑
专门用于数据库交互,将自然语言问题转换为 SQL 查询,执行并返回自然语言结果,支持错误修正和元数据利用(如表结构)。
特点:无需手动编写 SQL,适合非技术人员查询数据库。
创建方式
使用 create_sql_agent 函数,需传入数据库连接和大模型:
from langchain.agents import create_sql_agent
from langchain.agents.agent_types import AgentType
from langchain.sql_database import SQLDatabase
# 连接数据库(示例为 SQLite)
db = SQLDatabase.from_uri("sqlite:///chinook.db")
agent = create_sql_agent(
llm=llm,
db=db,
agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True
)
执行方式
调用 run() 方法,直接传入自然语言查询:
result = agent.run("查询销量最高的前3首歌曲及其艺术家")
总结
| 智能体类型 | 核心场景 | 创建方式 | 执行方式 |
|---|---|---|---|
| ReAct Agent | 复杂推理、工具调用 | create_react_agent / initialize_agent |
AgentExecutor.run() / agent.run() |
| Structured Chat Agent | 多轮对话+结构化工具调用 | initialize_agent(指定类型) |
同上,支持 memory 多轮对话 |
| Self-Ask with Search | 分步事实性问答 | initialize_agent(指定类型) |
agent.run() |
| Plan-and-Execute Agent | 长流程任务规划 | create_plan_and_execute_agent |
AgentExecutor.run() |
| OpenAI Functions Agent | OpenAI 模型工具调用 | create_openai_functions_agent |
AgentExecutor.run() |
| SQL Agent | 数据库自然语言查询 | create_sql_agent |
agent.run() |
选择时需根据任务类型(如是否需要规划、是否依赖特定模型、是否操作数据库)和工具特性(如是否需要结构化参数)决定。
更多推荐



所有评论(0)