LangGraph Agent 模式详解:从自主决策到 Tool Calling 执行链

前面的文章我们已经学习了 LangGraph 的核心能力:

text 复制代码
State
Checkpoint
Memory
Interrupt
Tool
Stream
Subgraph

这些解决的是 Agent 如何运行、保存状态以及恢复执行。

但是一个真正的 Agent 工作流还有一个核心问题:

模型如何决定下一步做什么?工具调用后结果如何重新回到模型?


1. Workflow 和 Agent 的区别

固定 Workflow:

text 复制代码
用户问题
↓
检索节点
↓
生成节点
↓
结束

特点:

text 复制代码
开发者决定下一步执行什么

适合:

  • RAG
  • 数据处理
  • 固定业务流程

Agent:

text 复制代码
用户输入
↓
LLM 判断
↓
选择行动
↓
执行
↓
观察结果
↓
继续判断

特点:

text 复制代码
模型决定下一步做什么

核心思想:

text 复制代码
Reasoning

↓

Action

↓

Observation

↓

Reasoning

2. LangGraph Agent 基本结构

典型 Agent:

text 复制代码
START

↓

Agent节点

↓

是否需要调用工具?

      /        \

    否          是

    ↓           ↓

   END       ToolNode

                ↓

             Agent节点

与普通 Chain 最大区别:

text 复制代码
Agent存在循环

执行过程:

text 复制代码
Agent

↓

Tool

↓

Agent

↓

Tool

↓

...

直到模型认为任务完成。


3. Agent 节点负责什么?

Agent 节点通常调用模型:

python 复制代码
def agent_node(state):

    response = model.invoke(
        state["messages"]
    )

    return {
        "messages":[response]
    }

主要负责:

读取 State

例如:

python 复制代码
state["messages"]

包含:

text 复制代码
用户问题

历史消息

工具结果

调用模型

模型判断:

text 复制代码
是否需要工具?

调用哪个工具?

参数是什么?

返回 AIMessage

如果不需要工具:

text 复制代码
直接回答

如果需要工具:

text 复制代码
AIMessage.tool_calls

4. Tool Calling 完整流程

完整链路:

text 复制代码
用户输入

↓

Agent节点

↓

LLM生成 tool_calls

↓

ToolNode执行工具

↓

ToolMessage返回结果

↓

Agent继续推理

↓

最终回答

5. bind_tools 到底做什么?

例如:

python 复制代码
model_with_tools = model.bind_tools(
    tools
)

它不会执行工具。

作用只是告诉模型:

text 复制代码
有哪些工具

工具参数

工具用途

模型产生:

python 复制代码
AIMessage(
    tool_calls=[
        {
            "name":"get_weather",
            "args":{
                "city":"北京"
            }
        }
    ]
)

此时只是:

text 复制代码
提出调用请求

真正执行需要:

text 复制代码
ToolNode

6. ToolNode 如何工作?

ToolNode 负责:

text 复制代码
读取 tool_calls

↓

查找工具

↓

执行工具

↓

生成 ToolMessage

例如:

text 复制代码
调用:

get_weather("北京")

↓

返回:

北京今天晴天

然后:

text 复制代码
ToolMessage

回到 Agent。


7. Agent 为什么需要循环?

现实任务通常不是一步完成。

例如:

用户:

text 复制代码
分析苹果公司的股票情况

Agent:

第一次:

text 复制代码
查询股票价格

第二次:

text 复制代码
查询相关新闻

第三次:

text 复制代码
整理分析报告

所以 Agent 是:

text 复制代码
输入

↓

思考

↓

行动

↓

观察

↓

继续思考

↓

输出

8. Agent 为什么比 Workflow 复杂?

Workflow:

text 复制代码
A → B → C

路径固定。

Agent:

text 复制代码
A

↓

LLM决定

↓

可能B

可能C

可能D

问题:

调试困难

需要观察:

text 复制代码
messages

tool_calls

checkpoint

成本不可控

一次任务可能:

text 复制代码
LLM

↓

工具

↓

LLM

↓

工具

需要限制

生产环境通常需要:

text 复制代码
最大循环次数

超时控制

工具白名单

人工审批

结合:

text 复制代码
Checkpoint

Interrupt

Retry

Timeout

9. 企业级 Agent 通常是混合模式

实际项目:

text 复制代码
用户请求

↓

Router

↓

----------------

固定流程      Agent

RAG流程       复杂任务

----------------

↓

Tool

↓

Evaluator

↓

结果

也就是说:

text 复制代码
确定流程
使用 Workflow

不确定任务
使用 Agent

相关推荐
Dmz丶6 小时前
前端转 AI 100 天 Day 32:LLM 客户端工程化——重试、超时、降级、限流
python
曲径海盗6 小时前
【Python 学习第 39 天】for 循环
python·学习笔记·编程入门
万联WANFLOW6 小时前
Kimi K3.1 Pro 接口接入指南:模型选型、费用计算与零数据保留
java·spring boot·python·安全·spring·大模型
问心无愧05137 小时前
[护网杯 2018]easy_tornado
python·tornado
全栈弄潮儿7 小时前
Python实战第13期:模块与包
后端·python·编程语言
2401_885885048 小时前
芬兰语音通知接口怎样对接?语音提醒接入流程
android·前端·python·php·语音识别
Dev _8 小时前
Python解释器安装在系统级目录导致命令行用户‌没有权限‌向该目录写入文件
开发语言·python
一枕槐安4878 小时前
多模态RAG实战:PDF图文混合文档检索问答本地跑通
langchain·pdf·milvus·ai应用开发·多模态rag
ctlover9 小时前
langchain 中间件
中间件·langchain·1024程序员节
Dev _9 小时前
PyCharm旧进程仍在后台运行,导致新实例无法启动或连接
ide·python·pycharm