Skip to content

智能体 (Agents)

智能体 (Agent) 是 LangChain 最强大的功能之一。在 Chain 中,执行步骤是硬编码的(先A后B)。而在 Agent 中,LLM 充当推理引擎,根据用户的输入和当前状态,自主决定采取什么行动(使用哪个工具)以及行动的顺序。

核心概念

  • Agent: 负责推理。它接收用户输入,决定下一步做什么(返回一个 Action)。
  • Tools: Agent 可以调用的函数(如搜索、计算器、数据库查询)。
  • AgentExecutor: Agent 的运行时环境。它循环执行:调用 Agent -> 获取 Action -> 执行 Tool -> 将结果传回 Agent -> 重复,直到 Agent 决定结束。

注意: LangChain 官方正在逐步推荐使用 LangGraph 来构建更可控、更复杂的 Agent。但在本教程中,为了降低学习门槛,我们使用标准的 AgentExecutor

实战:构建一个具备搜索能力的 Agent

我们将创建一个可以查询互联网信息(模拟)并进行计算的 Agent。

准备工作

需安装: langchain, langchain-openai

python
from langchain_openai import ChatOpenAI
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_core.tools import tool
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

# 1. 定义工具
@tool
def multiply(a: int, b: int) -> int:
    """计算两个数字的乘积"""
    return a * b

@tool
def search_web(query: str) -> str:
    """模拟搜索引擎,返回关于 query 的信息"""
    return f"关于 {query} 的搜索结果:LangChain 是一个很棒的框架。"

tools = [multiply, search_web]

# 2. 初始化模型 (必须支持函数调用/工具调用)
llm = ChatOpenAI(model="gpt-3.5-turbo")

# 3. 创建 Prompt
# 这里的 placeholder 是必须的,用于填充聊天历史和 Agent 的推理步骤
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个全能助手。"),
    ("human", "{input}"),
    MessagesPlaceholder(variable_name="agent_scratchpad"),
])

# 4. 创建 Agent
agent = create_tool_calling_agent(llm, tools, prompt)

# 5. 创建执行器 (Executor)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

# 6. 运行
response = agent_executor.invoke({"input": "LangChain 是什么?如果是 5 乘以 5 等于多少?"})
print(response["output"])

执行流程解析

当运行上述代码时,Agent 会进行如下推理:

  1. 用户问了两个问题。
  2. Agent 决定先调用 search_web("LangChain")
  3. AgentExecutor 执行工具,获取结果。
  4. Agent 拿到结果,接着决定调用 multiply(5, 5)
  5. AgentExecutor 执行工具,获取 25。
  6. Agent 拿到所有信息,生成最终回复。

Agent 的能力边界取决于它能使用什么工具。下一章教你定制独门兵器:自定义工具 (Tools)

LangChain中文文档