- 流式图状态 — 使用
updates和values模式获取状态更新/值。 - 流式子图输出 — 包括父图和任何嵌套子图的输出。
- 流式 LLM 令牌 — 从任何地方捕获令牌流:节点内部、子图或工具。
- 流式自定义数据 — 直接从工具函数发送自定义更新或进度信号。
- 使用多种流模式 — 从
values(完整状态)、updates(状态增量)、messages(LLM 令牌 + 元数据)、custom(任意用户数据)或debug(详细跟踪)中选择。
支持的流模式
将以下一个或多个流模式作为列表传递给stream 或 astream 方法
| 模式 | 描述 |
|---|---|
值 | 在图的每个步骤后流式传输状态的完整值。 |
更新 | 在图的每个步骤后流式传输状态的更新。如果同一步骤中进行了多次更新(例如,运行了多个节点),则这些更新会单独流式传输。 |
自定义 | 从图节点内部流式传输自定义数据。 |
消息 | 从任何调用 LLM 的图节点流式传输 2 元组(LLM 令牌,元数据)。 |
调试 | 在图执行过程中尽可能多地流式传输信息。 |
基本用法示例
LangGraph 图公开了stream (同步) 和 astream (异步) 方法,以迭代器形式生成流式输出。
扩展示例:流式更新
扩展示例:流式更新
流式传输多种模式
您可以将列表作为stream_mode 参数传递,以同时流式传输多种模式。 流式输出将是 (mode, chunk) 元组,其中 mode 是流模式的名称,chunk 是该模式流式传输的数据。流式图状态
使用流模式updates 和 values 在图执行时流式传输图的状态。
updates在图的每个步骤后流式传输状态的更新。values在图的每个步骤后流式传输状态的完整值。
- 更新
- 值
使用此功能可仅流式传输每个步骤后由节点返回的状态更新。流式输出包括节点的名称以及更新。
流式子图输出
要在流式输出中包含来自子图的输出,您可以在父图的.stream() 方法中设置 subgraphs=True。这将流式传输来自父图和任何子图的输出。 输出将作为元组 (namespace, data) 流式传输,其中 namespace 是一个包含调用子图的节点路径的元组,例如 ("parent_node:<task_id>", "child_node:<task_id>")。扩展示例:从子图流式传输
扩展示例:从子图流式传输
调试
使用debug 流模式在图的整个执行过程中尽可能多地流式传输信息。流式输出包括节点的名称和完整状态。
LLM Tokens
使用messages 流模式,从图的任何部分(包括节点、工具、子图或任务)逐个令牌地流式传输大型语言模型 (LLM) 输出。 来自 messages 模式的流式输出是元组 (message_chunk, metadata),其中:message_chunk:来自 LLM 的令牌或消息段。metadata:一个包含图节点和 LLM 调用详细信息的字典。
如果您的 LLM 不作为 LangChain 集成提供,您可以使用 custom 模式流式传输其输出。有关详细信息,请参阅与任何 LLM 一起使用。
Python < 3.11 异步所需的手动配置 在 Python < 3.11 中使用异步代码时,您必须显式地将
RunnableConfig 传递给 ainvoke() 以启用正确的流式传输。有关详细信息,请参阅 Python < 3.11 的异步或升级到 Python 3.11+。按 LLM 调用过滤
您可以将tags 与 LLM 调用相关联,以根据 LLM 调用过滤流式令牌。
扩展示例:按标签过滤
扩展示例:按标签过滤
按节点过滤
要仅从特定节点流式传输令牌,请使用stream_mode="messages" 并根据流式元数据中的 langgraph_node 字段过滤输出
扩展示例:从特定节点流式传输 LLM 令牌
扩展示例:从特定节点流式传输 LLM 令牌
流式自定义数据
要从 LangGraph 节点或工具内部发送自定义用户定义数据,请遵循以下步骤- 使用
get_stream_writer访问流写入器并发出自定义数据。 - 调用
.stream()或.astream()时设置stream_mode="custom"以获取流中的自定义数据。您可以组合多种模式(例如,["updates", "custom"]),但至少其中一种必须是"custom"。
Python < 3.11 异步中没有
get_stream_writer 在 Python < 3.11 上运行的异步代码中,get_stream_writer 将不起作用。相反,将 writer 参数添加到您的节点或工具中并手动传递它。有关用法示例,请参阅 Python < 3.11 的异步。- 节点
- 工具
与任何 LLM 一起使用
您可以使用stream_mode="custom" 从任何 LLM API 流式传输数据——即使该 API 没有实现 LangChain 聊天模型接口。 这使您可以集成提供自己的流式接口的原始 LLM 客户端或外部服务,从而使 LangGraph 对于自定义设置具有高度灵活性。扩展示例:流式传输任意聊天模型
扩展示例:流式传输任意聊天模型
为特定聊天模型禁用流式传输
如果您的应用程序混合了支持流式传输的模型和不支持流式传输的模型,您可能需要为不支持流式传输的模型显式禁用流式传输。 在初始化模型时设置disable_streaming=True。- init_chat_model
- 聊天模型接口
Python < 3.11 的异步
在 Python 版本 < 3.11 中,asyncio 任务不支持context 参数。这限制了 LangGraph 自动传播上下文的能力,并以两种关键方式影响 LangGraph 的流式传输机制
- 您必须显式将
RunnableConfig传递到异步 LLM 调用中(例如,ainvoke()),因为回调不会自动传播。 - 您不能在异步节点或工具中使用
get_stream_writer— 您必须直接传递writer参数。
扩展示例:使用手动配置的异步 LLM 调用
扩展示例:使用手动配置的异步 LLM 调用
扩展示例:带流式写入器的异步自定义流式传输
扩展示例:带流式写入器的异步自定义流式传输
以编程方式连接这些文档到 Claude、VSCode 等,通过 MCP 获取实时答案。