Full State Stream

LLM 流式协议的编辑器模式——每次发送完整状态快照,前端直接 render(fullText),天然支持 undo/rewrite,适合 AI 编辑器和文档生成场景。

#type / concept #status / evergreen #tech / ai #tech / architecture

[!info] related notes

Full State Stream

一句话定义

Full State Stream 是 LLM 流式的编辑器模式——每次发送完整状态快照,前端直接 render(fullText),天然支持 undo / rewrite / 局部替换,适合 AI 编辑器和文档生成场景。

核心机制

数据模型

每个事件携带从头到当前的完整文本:

{ "type": "state", "content": "你" }
{ "type": "state", "content": "你好" }
{ "type": "state", "content": "你好世界" }

前端操作

// 直接用最新快照替换渲染
function onState(fullText: string) {
  render(fullText)
}

核心模型是:状态机的每次快照就是完整状态。前端不需要维护 buffer,每次直接用最新数据渲染。

更复杂的协议结构

对于编辑器场景,状态快照可以包含结构化信息:

{
  "type": "document.state",
  "data": {
    "content": "完整的文档文本...",
    "cursors": [{ "user": "ai", "position": 42 }],
    "highlights": [{ "range": [10, 20], "type": "new" }],
    "metadata": { "wordCount": 150 }
  }
}

最小场景

AI 编辑器的实时预览:

let currentDocument = ""

function onDocumentState(state: DocumentState) {
  currentDocument = state.content
  renderEditor(currentDocument)
  // 天然支持:undo 只需要记住上一个 state
  history.push(state)
}

适用场景

场景说明
Notion AI文档内 AI 写作,需要局部替换
AI editor富文本编辑器的 AI 辅助
文档生成器生成完整文档的实时预览
Code generation preview代码生成的实时展示

优势

  • 前端最简单:不需要 buffer,不需要 reducer,直接替换渲染
  • 天然支持 undo / rewrite:每个快照都是完整状态,回退只需用上一个快照
  • 适合复杂编辑:支持局部替换、光标定位、高亮变更区域

局限

  • 带宽爆炸:长文本下每次发送完整内容,带宽为 O(n²)
  • 延迟更高:通常需要等一个语义单元完成才发送快照
  • 不适合长文本 streaming:文本越长,每次传输的数据量越大
  • 服务端计算开销大:需要维护完整状态并序列化

边界与易混淆点

  • Full State ≠ 不能做增量:有些实现会用 diff 算法减少传输量,但协议层面仍然是”状态快照”语义。
  • 适合编辑器但不是编辑器专用:任何需要”随时可以拿到完整状态”的场景都可以用。
  • 和 Delta Stream 是两个极端:Delta 只传增量,State 传全量。实际系统通常在两者之间取平衡。
创建于 2026/6/29 更新于 2026/7/15