Skip to main content
LangGraph智能体可流式输出超过消息和工具调用。服务器端的流式转换器能在协议流向客户端时进行协议检查或重写,并在命名的自定义频道上发布结构化数据。前端通过两种选择器读取该频道:@[useExtension]用于获取最新载荷,@[useChannel]作为原始事件逃逸通道。 下例展示了一个客户支持智能体的转换器,该转换器会在事件到达浏览器前擦除PII(电子邮件、电话号码、SSN、卡号、IP地址),并在redaction-stats频道上发布实时擦除计数。侧边栏会动态渲染这些计数。

自定义频道的工作原理

自定义频道包含两端。在服务器端,@[StreamTransformer]会打开命名的@[StreamChannel]并推送载荷。在客户端,选择器会订阅匹配的custom:<name>频道并暴露载荷为响应式状态。 转换器的@[process]方法会在每个协议事件时执行。它可以原地修改事件(此处从messages、tools、values数据中擦除PII),并在有需要时推送侧通道更新。 客户端选择器(useExtension、useChannel)随v1前端SDK包(@langchain/react、@langchain/vue、@langchain/svelte、@langchain/angular)一起发布。 :::python
流式转换器和StreamChannel需要langgraph>=1.2。
::: :::js
流式转换器和StreamChannel需要@langchain/langgraph>=1.3.1。
::: :::python
在构建智能体时附加转换器:
::: :::js
在构建智能体时附加转换器:
::: 载荷类型由转换器决定。客户端示例下方会展示该结构:

配置useStream

按常规方式连接@[useStream]。自定义频道选择器会使用返回的相同@[stream]句柄。
代码示例使用 useStream<typeof myAgent> 进行类型安全的流状态管理。请参考 Python 或 JavaScript 后端的类型推断说明。

使用useExtension读取最新载荷

useExtension订阅一个custom:<name>频道,并返回转换器推送的最新载荷(已解包且类型化)。当UI只需要当前值时(如实时计数、进度百分比或状态徽章)这是最便捷的选择。 传入裸频道名称("redaction-stats"),而非custom:前缀:
返回值遵循各框架的响应式模型:React和Svelte返回普通值,Vue(latest.value)返回Ref,Angular返回latest()。初始值为undefined,直到首个载荷到达。 可选的第三个target参数会限定订阅命名空间,与useMessages(stream, node)对消息限定图节点命名空间方式相同。 见图执行了解命名空间定位。

使用useChannel缓冲原始事件

useChannel是原始事件逃逸通道。它订阅一个或多个频道,返回底层协议事件的有限缓冲区而非单个解包值。当需要历史记录(如事件日志或审计轨迹)或需要多个频道时使用。 传入完整频道ID("custom:redaction-stats"):
每个条目是原始协议事件,因此载荷位于event.params.data下。需自行解包:
通过选项参数控制缓冲区:
优先使用高阶选择器(useExtension、useMessages、useToolCalls、useValues)处理常见场景。它们返回类型化解包值,仅跟踪渲染内容。当明确需要原始事件流时使用useChannel。

选择useExtension和useChannel

两者读取同一自定义频道但返回不同内容: 常见模式是在同一频道上同时使用两者:useExtension驱动实时摘要(当前统计值),而useChannel支持滚动事件日志记录线程内所有更新。

应用场景

自定义频道适用于无法干净映射到消息、工具调用或图状态的任何服务器端信号:
  • 合规与擦除统计:已擦除PII、过滤内容或策略触发的计数(如示例所示)
  • 进度报告:长时间运行工具的百分比完成或步骤标签
  • 实时指标:运行期间累计的token使用量、延迟或成本
  • 来源与引用:智能体支撑答案时推送的检索文档到侧边栏
  • 领域事件:后端需要暴露但无需修改消息转录的结构化更新

相关文档

  • 概述 — LangGraph前端流API及架构
  • 图执行 — 命名空间限定选择器用于多节点流水线

官方原文:src/oss/langgraph/frontend/custom-stream-channels.mdx · 非官方翻译,译文由 AI 生成,以英文原文为准。
Last modified on November 3, 2026