Full State Stream
LLM 流式协议的编辑器模式——每次发送完整状态快照,前端直接 render(fullText),天然支持 undo/rewrite,适合 AI 编辑器和文档生成场景。
#type / concept
#status / evergreen
#tech / ai
#tech / architecture
[!info] related notes
- 所属 MOC: LLM Streaming MOC
- 对比: Delta Stream, Append Event Stream
- 综合对比: Delta Stream vs Append Stream
- 输出模型: LLM 输出四层模型
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 传全量。实际系统通常在两者之间取平衡。