跳转到主要内容

统一运行时流式重构计划

目标

mainsubagentacp 提供一个共享的流式传输管道,以便所有运行时都能获得相同的合并、分块、传递排序和崩溃恢复行为。

存在原因

  • 当前的行为分散在多个特定于运行时的整形路径中。
  • 格式化/合并错误可以在一个路径中修复,但在其他路径中仍然存在。
  • 传递一致性、重复抑制和恢复语义更难推理。

目标架构

单一管道,特定于运行时的适配器:
  1. 运行时适配器仅发出规范事件。
  2. 共享流组装器合并并完成文本/工具/状态事件。
  3. 共享通道投影器仅应用一次特定于通道的分块/格式化。
  4. 共享交付账本强制执行幂等发送/重放语义。
  5. 出站通道适配器执行发送并记录交付检查点。
规范事件契约:
  • turn_started
  • text_delta
  • block_final
  • tool_started
  • tool_finished
  • status
  • turn_completed
  • turn_failed
  • turn_cancelled

工作流

1) 规范流式契约

  • 在核心中定义严格的事件架构 + 验证。
  • 添加适配器契约测试以保证每个运行时发出兼容的事件。
  • 尽早拒绝格式错误的运行时事件并提出结构化诊断信息。

2) 共享流处理器

  • 用一个处理器替换特定于运行时的合并器/投影器逻辑。
  • 处理器负责文本增量缓冲、空闲刷新、最大分块拆分和完成刷新。
  • 将 ACP/main/subagent 配置解析移至一个辅助程序中,以防止偏差。

3) 共享通道投影

  • 保持通道适配器简单:接受已完成的块并发送。
  • 将 Discord 特定的分块怪癖仅移至通道投影器中。
  • 在投影之前保持管道与通道无关。

4) 交付账本 + 重放

  • 添加每次轮次/每个块 的交付 ID。
  • 在实际发送前后记录检查点。
  • 在重启时,幂等地重放待处理的块并避免重复。

5) 迁移与切换

  • 阶段 1:影子模式(新管道计算输出但由旧路径发送;对比)。
  • 阶段 2:逐个运行时切换(先 acp,然后 subagent,最后 main,或者根据风险反向进行)。
  • 阶段 3:删除遗留的运行时特定流式传输代码。

非目标

  • 在此重构中不更改 ACP 策略/权限模型。
  • 除投影兼容性修复外,不进行特定于通道的功能扩展。
  • 不进行传输/后端重新设计(除非为了事件对等性需要,否则 acpx 插件契约保持原样)。

风险与缓解措施

  • 风险:现有主/子代理路径中的行为回归。 缓解措施:影子模式比对 + 适配器合约测试 + 渠道端到端测试。
  • 风险:崩溃恢复期间重复发送。 缓解措施:持久的交付 ID + 交付适配器中的幂等重放。
  • 风险:运行时适配器再次出现分歧。 缓解措施:所有适配器必须通过的共享合约测试套件。

验收标准

  • 所有运行时通过共享流式传输合约测试。
  • Discord ACP/main/subagent 为微小的增量产生等效的间距/分块行为。
  • 崩溃/重启重放不会为同一交付 ID 发送重复的分块。
  • 旧的 ACP 投影仪/合并路径已移除。
  • 流式传输配置解析是共享的且与运行时无关。

本页面源自 openclaw/openclaw,由 BeaversLab 翻译,遵循 MIT 协议 发布。
Last modified on March 27, 2026