概念

是一个具备自主决策能力的 “智能实体”,核心目标是通过规划、工具调用、反思等逻辑,自主完成复杂任务(如多步骤问答、问题拆解、动态工具选择等)。
它本质上是一个 “决策者”,内置了任务拆解、行动选择、结果评估的闭环逻辑(例如 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: 工具名)。

创建方式

  1. 基础方式(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("北京今天的气温是多少?")
  1. 快捷方式(initialize_agent):
    封装了默认配置,直接指定 agent_typeZERO_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_typeSTRUCTURED_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_typeSELF_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()

选择时需根据任务类型(如是否需要规划、是否依赖特定模型、是否操作数据库)和工具特性(如是否需要结构化参数)决定。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐