Streaming 和 Observability
LangGraph 在 invoke 之外提供 stream,按模式推送超步更新、节点输出、LLM token 等,便于 UI 与调试。
1. 为何需要 Stream
| 批量 invoke | stream |
|---|---|
| 结束才见结果 | 实时进度、token |
| 难做中断展示 | 配合 interrupt UI |
2. 常见 stream 模式(概念)
| 模式 | 推送内容(语义) |
|---|---|
| values | 每超步后完整 state 快照 |
| updates | 每节点产生的 state 增量 |
| messages | LLM 消息流(与 LCEL 集成) |
| debug | 更细粒度调试事件 |
| custom | 节点内 getWriter() 自定义块 |
以当前 streamMode 文档为准,可多选组合。
3. 实现要点
- 引擎在超步/节点边界往 async queue 塞事件。
- 消费者 async iterator 拉取直到图结束或 interrupt。
- 与 checkpointer 独立:stream 不断言持久化,除非同时写 checkpoint。
4. streamEvents
与 LangChain v2 events 对齐的细粒度事件(chain_start、tool_end 等),适合全链路追踪。
注意与 stream 的 mode 区分,不要混用两套 API 于同一调用。
5. 可观测性
- LangSmith 等:传入
callbacks/ tracing 配置。 - 图级 metadata:
config.configurable传 thread、user。 - 日志:节点内结构化 log + superstep id。
6. interrupt 时的流
interrupt 暂停后 stream 结束当前迭代;resume 后新 stream 或继续 invoke 获取后续事件。
7. 总结
Stream = 把 Pregel 内部事件暴露给外部;UI 常用 updates + messages,调试用 debug。