从令牌流到代理流
Deep Agents、LangChain 和 LangGraph 的最新流式原语引入了类型化事件、作用域订阅、子代理可见性、多模态输出和弹性前端体验,支持构建生产级代理应用。
文章情报
要点
- 流式处理需要超越令牌,现代代理生成消息、工具调用、子代理活动、状态变更、审批和媒体,需要结构化事件流。
- 类型化事件和投影简化了前端开发,应用直接订阅消息、工具调用、状态、子代理或自定义通道,运行时处理组装、排序和重连。
- 作用域订阅使复杂代理 UI 可扩展,前端仅流式传输其渲染的代理树部分,支持高效子代理检查器、仪表盘和长时运行的生产工作负载。
- 同一个流式模型跨运行时和模态工作,支持本地和远程运行、React/Vue/Svelte/Angular SDK,以及文本、工具、图像、音频、视频和自定义应用事件。
为什么重要
这条新闻值得关注,因为流式处理需要超越令牌,现代代理生成消息、工具调用、子代理活动、状态变更、审批和媒体,需要结构化事件流。
技术影响
可能影响模型选型、推理成本、产品能力和评测基准。
LangChain 的最新流式原语从根本上改变了代理应用的构建方式,从简单的令牌流演进为基于结构化事件的全新架构。现代代理不仅生成文本,还涉及工具调用、子代理活动、状态变更、人工审批以及多模态内容输出,传统的一次模型调用、一次令牌流的 API 已无法满足需求。最新发布的 Deep Agents、LangChain 和 LangGraph 流式处理正是围绕应用事件设计的,每个事件都带有类型标签,并标明其在代理树中的来源位置;应用通过消息、工具调用或子代理状态等投影来迭代处理;同一模型支持本地运行、远程线程以及 React、Vue、Svelte 和 Angular SDK。此外,官方还发布了流式处理食谱,包含可运行的 Python 和 TypeScript 示例。
新的流式原语建立在四个核心思想之上:类型化事件而非原始块——每个事件都标记了其所描述的工作类型(消息、工具调用、状态变更、子代理状态)及其在代理树中的来源;投影而非解析——应用迭代其想要渲染的视图,运行时处理组装、排序和重连;作用域订阅——客户端仅请求其正在渲染的通道和代理树部分,因此子代理检查器不会拉取所有子代理的令牌;同一模型跨运行时——本地图运行、远程线程和 React/Vue/Svelte/Angular 组件都使用相同的协议,底层是投影,上层是钩子。
类型化事件协议是流式处理的基础,它提供通用的事件信封,而不是不透明的流元组。通道描述流式处理的内容,例如消息、图状态、工具执行生命周期、运行/子图/子代理生命周期、检查点以及自定义的应用定义投影。命名空间描述事件在代理树中的位置,根图、嵌套子图和 Deep Agents 子代理都可以发出相同通道类型的事件而不丢失其身份。这种分离是关键设计:通道是可重用的关注点,而命名空间标识产生事件的运行部分。
投影是应用开发者真正需要的 API。大多数应用代码不应迭代原始协议事件,而应请求它们想要渲染的内容。通过 astream_events 方法,运行对象暴露类型化投影,消息以类型化内容块(文本、推理、工具调用参数、用量数据)的形式到达,而不是应用需要重新拼接的字符串流。这对于现代模型输出至关重要,推理应与最终答案文本以不同方式渲染,工具调用参数需组装为结构化数据,多模态数据不应被强制通过纯文本接口。
子代理和子图方面,LangGraph 允许开发者将代理结构化为图节点,包括嵌套子图;Deep Agents 增加了高级委派模型,代理可将工作移交给子代理。新的原语区分了子图(任何嵌套图执行)和子代理(通过 Deep Agents 任务调用委派)。两者都作为轻量级句柄到达,可以读取身份、位置和状态,详细的流仅在 UI 请求时传输。这使得 UI 能够随代理复杂性扩展,例如仪表盘可以免费显示运行中的子代理列表,然后仅为选中的子代理打开消息和工具流。
自定义通道允许应用定义领域特定的投影,如引用、进度事件、结构化计划、UI 描述、媒体句柄等,通过流式转换器将协议事件过滤并推送到命名通道中。前端通过扩展选择器订阅。食谱中包含一个生成式 UI 示例,代理通过 custom:a2ui 通道发出声明性消息,React 应用订阅该扩展并实时渲染界面。
多模态流式处理是这一模型的自然扩展。协议围绕内容块而非纯字符串设计,文本、推理、工具活动、图像、音频、视频和自定义数据都适合相同的流式架构:类型化块、命名通道、命名空间和投影。
新的框架 SDK(@langchain/react、@langchain/vue、@langchain/svelte、@langchain/angular)以各种框架的惯用方式暴露相同的流式概念。核心心智模型共享:一个根钩子(useStream 或 Angular 中的 injectStream),顶层投影(消息、值、工具调用、中断)无需设置即可使用,组件级选择器(useMessages、useToolCalls 等)实现作用域订阅。这使得长时运行代理、复杂多代理 UI 和前端重连等生产场景变得简单可靠。