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 是多少",看它怎么处理报错
相关推荐
破烂三角裤7 小时前
AI 没有记忆?我给儿童故事 Agent 搭了一套“长期记忆”系统
langchain
云和数据.ChenGuang9 小时前
光哥说Python 异常深度解析:从异常模型到工程化实践
java·前端·人工智能·python·langchain
Maiko Star12 小时前
【HM-LC】LangChain RAG查询优化详解:查询重写、混合检索与重排序实战
langchain·rag
2501_9130613413 小时前
MCP核心能力
langchain
小林ixn14 小时前
从线性 RAG 到 Agentic RAG:用 LangGraph 搭一个会判断、会纠错、会兜底的检索闭环
langchain·llm·agent
kyrie_sakura14 小时前
大模型学习19 大模型学习 - LangChain2_Retrieval(RAG-文档处理-向量处理检索-Milvus)
学习·langchain·milvus
承渊政道16 小时前
【大模型应用开发:基于GPT-4和ChatGPT】(使用LangChain框架和插件增强LLM的功能)
chatgpt·langchain·llm·框架·大模型应用开发
日日大王学编程17 小时前
LangGraph 基本用法详解:从入门到实战
python·语言模型·langchain
奔跑的熊猫17 小时前
VSCode + FastAPI +AI Agent+langchain第一个程序
langchain·fastapi
Maiko Star19 小时前
*【HM-LC】Milvus向量库详解:Collection、索引、混合检索与LangChain实战
langchain·milvus