智能体 (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 会进行如下推理:
- 用户问了两个问题。
- Agent 决定先调用
search_web("LangChain")。 AgentExecutor执行工具,获取结果。- Agent 拿到结果,接着决定调用
multiply(5, 5)。 AgentExecutor执行工具,获取 25。- Agent 拿到所有信息,生成最终回复。
Agent 的能力边界取决于它能使用什么工具。下一章教你定制独门兵器:自定义工具 (Tools)。
LangChain中文文档