stream_events(..., version="v3") 使用 事件流式处理。事件流式处理返回一个具有类型化投影的运行对象,因此每个投影可以独立消费,而不是解析流式模式的元组。
:::python
可以流式处理的内容
:::python
:::js
:::python
stream.messages 生成 ChatModelStream 对象。每个消息流暴露 .text、.reasoning、.tool_calls 和 .output。同步投影可用于实时增量并可用于最终值:使用 str(message.text) 获取最终文本,使用 message.tool_calls.get() 获取最终工具调用。
:::
:::js
stream.messages 生成消息流。每个消息流暴露 .text、.reasoning、.toolCalls、.output 和 .usage。异步投影可用于实时增量或等待最终值。
:::
智能体消息
当您需要每个 LLM 调用的模型输出时,请使用stream.messages。
:::python
message.output 提供最终 AI 消息,包括提供者特定的内容块。在 TypeScript 中,如果您只需要 Token 计数或其他使用元数据,请使用 message.usage;在 Python 中,从 message.output.usage_metadata 读取使用情况。
推理内容
推理内容与文本内容使用相同的形状,但仅在选定的模型发出推理块时可用。 :::python工具调用
有两个有用的工具调用投影:message.tool_calls在模型生成工具调用时流式传输工具调用参数片段。stream.tool_calls在工具调用开始后流式传输工具执行的生命周期。
message.tool_calls 的每个片段都是一个 tool_call_chunk,它包含调用的 id、其 name,以及其 args 的新部分。调用的片段连接成其完整参数,message.tool_calls.get() 返回解析的工具调用。
仅包含参数新部分的片段需要
langchain-core>=1.6.13。在早期版本中,每个片段包含到目前为止的所有参数。流式处理子智能体
:::python 当create_agent 调用通过包装工具通常调用的另一个命名 create_agent 时,内部智能体的事件在嵌套命名空间中流动。您传递给 create_agent 的 name= 在流中标识该内部智能体,因此您可以按智能体过滤和标记。
命名子智能体在专用的 stream.subagents 投影上显示。每个句柄都暴露内部智能体自己的 .messages、.values、.tool_calls 和 .output,以及 .name(您传递的 name=)和 .cause(分派子智能体的工具调用)。由于这里只显示命名的 create_agent 运行,因此您不需要过滤普通子图。
createAgent 调用通过包装工具通常调用的另一个命名 createAgent 时,内部智能体的事件在嵌套命名空间中流动。您传递给 createAgent 的 name 在流中标识该内部智能体,因此您可以按智能体过滤和标记。
命名子智能体在专用的 stream.subagents 投影上显示。每个句柄都暴露内部智能体自己的 .messages、.toolCalls 和 .output,以及 .name(您传递的 name=)、.cause(分派子智能体的工具调用),以及嵌套的 .subagents。由于这里只显示命名的 createAgent 运行,因此您不需要过滤普通子图。
StateGraph 子图也显示在 stream.subgraphs 上 — 将 name= 设置在 .compile(name=...) 上以在 subagent.graph_name 中获取标签。
:::python
stream.subagents 是命名 create_agent 子智能体的聚焦视图,而 stream.subgraphs 涵盖所有嵌套图。使用与您的 UI 匹配的视图。
:::
:::js
stream.subagents 是命名 createAgent 子智能体的聚焦视图,而 stream.subgraphs 涵盖所有嵌套图。使用与您的 UI 匹配的视图。
:::
状态和最终输出
使用stream.values 获取状态快照,使用 stream.output 获取最终智能体状态。
:::python
多个投影
:::python 对于异步代码中的并发消费,使用astream_events 与 asyncio.gather:
stream.interleave(...) 代替:
自定义更新
当您的应用程序需要非内置投影时,请使用自定义流转换器,例如检索进度、工件或特定领域的事件。 :::python在中间件上注册转换器
:::python中间件注册的转换器需要
langchain>=1.3.2。中间件注册的转换器需要
langchain@1.4.3 或更高版本。AgentMiddleware 子类上设置 transformers 属性为一个工厂序列。每个工厂的形状为 Callable[[tuple[str, ...]], StreamTransformer],并以 factory(scope) 的形式被调用,其中 scope 是 mini-mux 作用域元组(根混频器为 (),子图则为非空)。每次调用返回一个新的转换器可以保持每个子图隔离。
streamTransformers 作为工厂元组传递给 createMiddleware。每个工厂的形状为 () => StreamTransformer<any>(零参数),每个作用域调用一次。每次调用返回一个新的转换器可以保持每个子图隔离。
create_agent 将中间件注册的工厂与其自己的 transformers= 参数传递的内容合并。编译后图的最终顺序是:
- 内置的
ToolCallTransformer。 - 中间件注册的工厂,按中间件顺序。
- 调用者提供的
transformers=来自create_agent。
PIIMiddleware 使用这个钩子从流式传输的线输出中删除个人身份信息(PII)。通过 apply_to_output=True,其注册的转换器在文本增量、工具调用参数、工具输出和状态快照离开运行之前清除检测到的 PII,关闭了 after_model 状态级删除原本会让原始 PII 通过到 stream_events(version="v3") 活跃读者的窗口。
createAgent 将中间件注册的工厂与其自己的 streamTransformers 选项传递的内容合并。编译后图的最终顺序是:
- 内置的
ToolCallTransformer。 - 中间件注册的工厂,按中间件顺序。
- 调用者提供的
streamTransformers来自createAgent。
相关
官方原文:src/oss/langchain/event-streaming.mdx · 非官方翻译,译文由 AI 生成,以英文原文为准。