Langchain-06 什么是Agent

第 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 章练习

  1. 写一个带 get_stock_price(symbol: str) 工具(返回写死的假数据即可)的智能体,问它"苹果和特斯拉的股价分别是多少",观察它是否并行调用了两次工具
  2. 给上面的数学智能体加一个 divide 除法工具,问它"100 除以 0 是多少",看它怎么处理报错
相关推荐
水管在开花.2 小时前
Agent范式与LangGraph-②零基础保姆级教程
人工智能·面试·langchain·agent
LFly_ice3 小时前
Langchain-05 消息
langchain
淼澄研学3 小时前
大语言模型文本生成5大技术陷阱与LangChain RAG实操方案
人工智能·语言模型·langchain
Maiko Star4 小时前
[LangChain RAG] 05 LCEL 链与 Memory:从竖线组链到多轮对话
langchain
哒咩哒咩1295 小时前
Agent 智能体开发全攻略:从 ReAct 到企业级架构
python·langchain·fastapi
淼澄研学6 小时前
LangChain构建Prompt模板解决Python长尾报错实操
python·langchain·prompt
l1258657 小时前
# LangGraph Tool Calling Agent 深度实战:从零构建 ReAct 循环与工具调用链
人工智能·python·自然语言处理·langchain·agent
l12586515 小时前
# LangGraph Memory机制深度解析:短期记忆与长期记忆的工程实践
前端·人工智能·python·langchain·bootstrap
LFly_ice18 小时前
LangChain-03 环境准备
langchain