首页 › G LangGraph Agent 编排 › G6 工程化与交付 › 01

G6-01 · Streaming 与 Middleware:让 Agent 可看可管

实战阶段约 180 分钟阶段:G6 工程化与交付

阶段:G6-工程化与交付 | 预计耗时:75 分钟 | 前置:G5 全部验收通过 代码:要你自己敲成 langgraph-learn/examples/g6_streaming.py 与 g6_middleware.py 一句话定位:Streaming 管"用户看得见"(体验),Middleware 管"管理员管得住"(治理)——两者都是从"能跑的 demo"到"敢交付的产品"的门槛

学习目标

  1. 掌握四种 stream_mode 各自的输出形态与适用场景
  2. 实现打字机效果(messages 模式)与进度可视化(updates 模式)
  3. 写一个自定义 Middleware(敏感词过滤/审计日志),理解"横切关注点"不进业务节点

核心知识

1. 四种 stream_mode(一表定位)

模式 输出什么 典型用途
values 每步后的完整 State 调试、存档
updates 每步的增量(谁改了什么) 进度条/步骤面板("正在检索…")
messages LLM 的token 流 打字机效果(聊天界面标配)
custom 节点里 get_stream_writer() 手写的 业务自定义进度(如"已识别 3/10 张发票")
for token, meta in graph.stream(inputs, cfg, stream_mode="messages"):
    print(token.content, end="", flush=True)      # 打字机

2. Middleware:不进节点的公共逻辑

日志、敏感词替换、限流、PII 过滤——如果写进每个节点 = 三处复制三处漏改。LangChain 1.x 的 middleware(create_agent 的 middleware=[...],LLM 调用前后/工具调用前后有钩子)让它们只写一处。 低配机路线的务实提醒:复杂中间件生态以当天官方文档为准,先用"节点外包一层函数"实现同样效果,等需求真复杂了再上标准 API——这是 G5-03 学的"不过早优化"。

实验任务

任务 1:四模式横评(30 分钟)

拿 G1-03 的 handmade ReAct 图,用同一问题分别以四种模式 stream,把每种输出的形状记进笔记(values 巨大、updates 按节点、messages 碎、custom 要写代码)。跑完后你能对着输出秒认模式——调试时就不会迷路。

任务 2:打字机聊天界面(25 分钟)

用 messages 模式写 20 行的命令行聊天循环(input → stream → 逐字打印),配上 G3-01 的 thread_id 记忆——这就是一个能演示的对话产品雏形,录屏存档。

任务 3:敏感词 Middleware(20 分钟)

维护一个 10 词黑名单:输出前扫描替换为 **。分别在"节点内"与"节点外(输出统一出口)"两种实现里选一处落地,并在笔记里写清为什么选它。

验收标准

衔接下一阶段

可看可管了 → G6-02 评测与交付:最后一道工程关——用数字证明它好使。

小测验(3 题)

答完立即判分,错题给解析;得分存本地。实验与实操题不上网测:回对话找老师验收。