预览功能: 尝试对消息、工具调用、状态和最终输出进行事件流式输出的类型化智能体投影。从 LangChain 事件流式输出开始,或探索流式输出 cookbook 中的可运行示例。
概述
LangChain 的流式输出系统让你可以将智能体运行中的实时反馈展示给你的应用程序。 LangChain 流式输出的功能:- 流式输出智能体进度 — 在每个智能体步骤后获取状态更新。
- 流式输出 LLM Token — 在语言模型生成 Token 时进行流式输出。
- 流式输出思考/推理 Token — 在模型推理生成时展示推理过程。
- 流式输出自定义更新 — 发出用户定义的信号(例如
"Fetched 10/100 records")。 - 流式输出多种模式 — 从
updates(智能体进度)、messages(LLM Token + 元数据)或custom(任意用户数据)中选择。
支持的流式模式
将以下一个或多个流式模式作为列表传递给stream 或 astream 方法:
智能体进度
要流式输出智能体进度,使用stream 或 astream 方法并设置 stream_mode="updates"。这会在每个智能体步骤后发出一个事件。
例如,如果你有一个调用了一次工具的智能体,你应该看到以下更新:
- LLM 节点:包含工具调用请求的
AIMessage - 工具节点:包含执行结果的
ToolMessage - LLM 节点:最终 AI 响应
流式输出智能体进度
输出
LLM Token
要在 LLM 生成 Token 时进行流式输出,使用stream_mode="messages"。下面你可以看到智能体流式输出工具调用和最终响应的输出。
流式输出 LLM Token
自定义更新
要在工具执行期间流式输出更新,可以使用get_stream_writer。
流式输出自定义更新
输出
如果你在工具内添加了
get_stream_writer,你将无法在 LangGraph 执行上下文之外调用该工具。流式输出多种模式
你可以通过将流式模式作为列表传递来指定多种流式模式:stream_mode=["updates", "custom"]。
每个流式块是一个包含 type、ns 和 data 键的 StreamPart 字典。使用 chunk["type"] 来确定流式模式,使用 chunk["data"] 来访问负载。
常见模式
以下是展示流式输出常见用例的示例。流式输出思考/推理 Token
一些模型在产生最终答案之前会执行内部推理。你可以通过过滤标准内容块中type 为 "reasoning" 的内容来流式输出这些思考/推理 Token。
要从智能体流式输出思考 Token,使用
stream_mode="messages" 并过滤推理内容块:
输出
content_blocks 属性将提供商特定的格式(Anthropic thinking 块、OpenAI reasoning 摘要等)规范化为标准的 "reasoning" 内容块类型。
要直接从聊天模型流式输出推理 Token(不使用智能体),请参阅聊天模型的流式输出。
流式输出工具调用
你可能希望同时流式输出:- 工具调用生成时的部分 JSON
- 被执行的已完成、已解析的工具调用
stream_mode="messages" 将流式输出智能体中所有 LLM 调用生成的增量消息块。要访问包含已解析工具调用的完整消息:
- 如果这些消息被跟踪在状态中(如
create_agent的 model 节点),使用stream_mode=["messages", "updates"]通过状态更新访问完整消息(如下演示)。 - 如果这些消息未被跟踪在状态中,使用自定义更新或在流式循环中聚合块(下一节)。
带人机协作的流式输出
要处理人机协作中断,我们在上面的示例基础上构建:- 我们使用人机协作中间件和检查点配置智能体
- 我们收集在
"updates"流式模式期间生成的中断 - 我们使用命令响应这些中断
从子智能体流式输出
当智能体中的任何点有多个 LLM 时,通常需要消除消息生成来源的歧义。 为此,在创建每个智能体时传递一个name。在 "messages" 模式下流式输出时,此名称可通过 lc_agent_name 键在元数据中获取。
禁用流式输出
在某些应用程序中,你可能需要为给定模型禁用单个 Token 的流式输出。这在以下场景中很有用: 在初始化模型时设置streaming=False。
并非所有聊天模型集成都支持
streaming 参数。如果你的模型不支持它,请使用 disable_streaming=True 代替。此参数通过基类在所有聊天模型上可用。v2 流式输出格式
需要 LangGraph >= 1.1。
stream() 或 astream() 传递 version="v2" 以获取统一的输出格式。每个块是一个包含 type、ns 和 data 键的 StreamPart 字典——无论流式模式或模式数量如何,形状都相同:
invoke() —— 它返回一个具有 .value 和 .interrupts 属性的 GraphOutput 对象,将状态与中断元数据清晰分离:
相关内容
- 前端流式输出 — 使用
useStream构建 React UI 以实现实时智能体交互 - 聊天模型的流式输出 — 直接从聊天模型流式输出 Token,无需使用智能体或图
- 聊天模型的推理 — 配置和访问聊天模型的推理输出
- 标准内容块 — 了解用于推理、文本和其他内容类型的规范化内容块格式
- 带人机协作的流式输出 — 在处理人工审查中断时流式输出智能体进度
- LangGraph 流式输出 — 高级流式输出选项,包括
values、debug模式和子图流式输出
连接这些文档到 Claude、VSCode 等工具,通过 MCP 获取实时答案。

