LangGraph 提供三种不同粒度的流式输出:stream(mode="values") 在每个节点完成后返回完整的状态快照,适合调试和后端编排;stream(mode="updates") 只返回变化的键值对,开销最小,适合进度指示器;astream_events() 暴露最细粒度的事件流,包括每个 LLM token、工具调用生命周期和自定义事件,是前端实时渲染的首选。
通过 astream_events() 配合 version="v2" 参数,可以捕获 on_chat_model_stream 事件,逐个获取 LLM 生成的 token。结合 FastAPI 的 StreamingResponse 和 Server-Sent Events(SSE),可以将 token 实时推送到前端浏览器,实现类似 ChatGPT 的打字机效果。关键是要在 LLM 初始化时设置 streaming=True,并在反向代理层禁用缓冲(如 Nginx 的 X-Accel-Buffering: no)。
astream_events() 不仅支持消息流,还可以订阅节点开始/结束、工具调用、自定义事件等多种事件类型。开发者可以通过 StreamWriter 向自定义通道推送领域特定的事件(如引用来源、进度指标、UI 描述),前端根据不同通道渲染不同的 UI 元素——主聊天面板显示回答文本,侧边栏显示子 Agent 活动,顶部进度条显示执行进度。
LangGraph Cloud 原生支持流式端点,客户端 SDK 提供方法来消费这些流。对于自托管场景,可以通过 WebSocket 或 SSE 封装 LangGraph 的异步接口,实现生产级的实时响应。流式和检查点机制是正交的——无论是否流式输出,状态都会在每个节点完成后被持久化。