Skip to content

流式处理

流式处理是 Agent 系统的关键特性——让用户在 AI 生成回复时就能看到部分输出,而不必等待完整回复。OpenClaw 的流式处理涉及 delta 缓冲、block 合并和多种回调。

流式架构

Delta 处理流程

每个从模型收到的 delta(文本片段)经过以下处理:

  1. 追加到 deltaBuffer
  2. 更新 inline code state(感知代码块)
  3. 检测 block state 标记(<thinking>, <final>
  4. 推送到 BlockChunker 进行合并
  5. 触发 onPartialReply 回调

Inline Code State

流式处理需要感知 Markdown 代码块状态,避免在代码块中间断开消息:

在代码块内部,分块器不会强制发射,而是等待代码块结束。

推理模式

Agent 支持三种推理模式:

模式行为用例
"off"丢弃 thinking 块默认,快速响应
"on"thinking 包含在最终输出显示完整推理过程
"stream"thinking 通过独立回调发送实时显示推理

回调接口

流式处理通过回调将数据传递给上层:

回调触发时机用途
onBlockReplyBlockChunker 合并后投递有意义的文本块
onPartialReply每个 delta 后打字机效果
onReasoningStreamthinking 内容 (mode=stream)实时显示推理
onBlockReplyFlush工具调用前 / 完成时强制刷新缓冲
onToolResult工具执行完成后通知上层

回调时序

关键时序规则:

  1. onPartialReply 在每个 delta 后立即触发(用于打字机效果)
  2. onBlockReply 在 BlockChunker 合并后触发(用于实际投递)
  3. onBlockReplyFlush 在工具调用前强制触发(保持消息边界)
  4. onToolResult 在工具执行完成后触发

工具调用边界

在工具调用前,流式处理会强制 flush 所有缓冲内容,确保用户在看到"正在执行工具..."之前,已经收到了所有待发送的文本。

这种边界保持策略让消息流对用户更加清晰——AI 的文字回复和工具操作之间有明确的分界。

小结

  • 流式处理包含三层:Delta 缓冲Block 合并回调分发
  • Inline Code State 感知代码块,避免在代码中间断开
  • 推理模式(off / on / stream)控制 thinking 块的可见性
  • 五个回调函数覆盖完整的流式生命周期
  • 工具调用前 强制 flush,保持消息边界清晰

下一章:插件系统概述

OpenClaw 源码学习教程