第 5 章 · 智能体:十行代码拥有一个 AI 助手
5.1 智能体是什么?(定义)
智能体 :语言模型 + 工具的组合体。它能对任务自主推理、自己决定调用哪些工具、反复迭代直到完成任务。
简单说:模型只会"说",智能体既会"说"又会"做"。
模型 vs 智能体的区别看这个例子:
- 你问模型:"北京今天天气如何?" → 它只能编:"我记得北京今天......"(瞎猜)
- 你问智能体同样的问题 → 它发现有个
get_weather工具可用,调用工具查到真实天气,再回答你 ✅
5.2 智能体的工作原理:ReAct 循环
LangChain 智能体遵循 ReAct 模式(Reasoning + Acting,推理 + 行动):
1. 接收用户问题
2. 【推理】思考:要不要用工具?用哪个?
3. 【行动】调用工具(或直接回答)
4. 【观察】把工具返回的结果喂回给模型
5. 回到第 2 步,直到模型给出最终答案(停止条件)
这个"循环"就是智能体的心脏。模型每次循环消耗一次 API 调用,所以工具越多、任务越复杂,成本越高。
5.3 创建第一个智能体
create_agent 是 v1.0 的核心 API,就这一个函数,记住它:
python
from langchain.agents import create_agent
# 第一步:定义一个工具(普通 Python 函数)
# ⚠️ docstring(函数下方的三引号字符串)非常重要!
# 模型靠它判断"这个工具是干什么的、什么时候该用它"
def get_weather(city: str) -> str:
"""获取指定城市的天气。"""
return f"{city}今天晴,26度!"
# 第二步:组装智能体
agent = create_agent(
model="openai:gpt-4o-mini", # 大脑:用哪个模型
tools=[get_weather], # 手:能用哪些工具(函数列表)
system_prompt="你是一个乐于助人的中文助手", # 人设:系统提示
)
# 第三步:运行!注意输入格式是 {"messages": [消息列表]}
result = agent.invoke(
{"messages": [{"role": "user", "content": "北京今天天气怎么样?"}]}
)
# 结果也是一个字典,最新消息在 "messages" 列表的最后一个
print(result["messages"][-1].text)
运行时背后发生的事:模型看到问题 → 决定调用 get_weather(city="北京") → 框架自动执行你的函数 → 结果返回给模型 → 模型组织成自然语言回答。函数调用和结果回传全是自动的,你只管定义函数。
5.4 一个更完整的例子:理解每一步
python
from langchain.agents import create_agent
def add(a: int, b: int) -> int:
"""计算两个整数的和。"""
return a + b
def multiply(a: int, b: int) -> int:
"""计算两个整数的乘积。"""
return a * b
agent = create_agent(
model="openai:gpt-4o-mini",
tools=[add, multiply],
system_prompt="你是一个数学助手,遇到计算必须使用工具,不要心算。",
)
result = agent.invoke(
{"messages": [{"role": "user", "content": "计算 (3 + 5) 乘以 12"}]}
)
# 遍历所有消息,观察智能体到底干了什么
for msg in result["messages"]:
# .pretty_print() 是消息对象的内置方法,打印得比较好看
msg.pretty_print()
输出类似:
================================ Human Message ================================
计算 (3 + 5) 乘以 12
================================== Ai Message ==================================
Tool Calls:
add (call_abc123)
Call ID: call_abc123
Args: a: 3, b: 5
================================= Tool Message =================================
Name: add
8
================================== Ai Message ==================================
Tool Calls:
multiply (call_xyz789)
Call ID: call_xyz789
Args: a: 8, b: 12
================================= Tool Message =================================
Name: multiply
96
================================== Ai Message ==================================
(3 + 5) × 12 = 96
看!智能体自己拆解了任务:先加后乘,调了两次工具。这就是"推理 + 行动"循环。
5.5 create_agent 参数速查
| 参数 | 说明 |
|---|---|
model |
模型,字符串或模型对象 |
tools |
工具函数列表(空列表 = 纯聊天,无工具能力) |
system_prompt |
系统提示(字符串)。不传则模型自行推断任务 |
checkpointer |
记忆管理器,实现多轮对话(第 8 章讲) |
response_format |
结构化输出格式(第 7 章讲) |
middleware |
中间件列表,扩展智能体行为(第 16 章讲) |
context_schema |
定义运行时上下文的数据结构(第 6 章讲) |
📝 第 5 章练习
- 写一个带
get_stock_price(symbol: str)工具(返回写死的假数据即可)的智能体,问它"苹果和特斯拉的股价分别是多少",观察它是否并行调用了两次工具 - 给上面的数学智能体加一个
divide除法工具,问它"100 除以 0 是多少",看它怎么处理报错