LLM 输出四层模型

LLM 流式输出从原始 token 到最终 UI 状态的四层抽象:raw tokens → text deltas → semantic chunks → UI state。

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

[!info] related notes

LLM 输出四层模型

一句话定义

LLM 的流式输出可以抽象为四层:raw tokens → text deltas → semantic chunks → UI state,每一层解决不同粒度的问题,SSE 协议设计的核心是在第 2 层和第 3 层之间选择传输粒度。

核心机制

第 1 层:Raw Tokens

模型最原始的输出,每个 token 是一个词元(可能是半个汉字、一个英文单词、一个标点符号)。

token: "你"
token: "好"
token: "世"
token: "界"

这一层由 LLM Provider(OpenAI / Claude / Qwen)直接输出,应用层通常不直接消费。

第 2 层:Text Deltas

将原始 token 组织为文本增量。这是大多数 SSE 协议实际传输的内容。

delta: "你"
delta: "好"
delta: "世界"

特点:

  • 每个 delta 是同一段文本的追加内容
  • 前端操作:content += delta
  • 对应 Delta Stream 协议

第 3 层:Semantic Chunks

按语义边界组织的结构化块。一个 chunk 可能是一句话、一个 markdown 段落、一次 tool call、一段结构化数据。

{ "type": "text", "content": "你好世界" }
{ "type": "tool_call", "name": "search", "args": {...} }
{ "type": "extracted_info", "data": {...} }

特点:

  • 每个 chunk 有明确的语义类型
  • 前端按类型分发处理
  • 对应 Append Event Stream 协议

第 4 层:UI State

前端最终渲染的状态。包括消息列表、工具调用状态、结构化信息面板、加载状态等。

{
  messages: [...],
  toolCalls: [...],
  extractedInfo: {...},
  status: "streaming"
}

这一层由前端状态管理器(Zustand / Redux / XState)维护。

层级关系

Raw Tokens        ← LLM Provider 输出
    ↓ token 聚合
Text Deltas       ← Delta Stream 协议传输
    ↓ 语义切分
Semantic Chunks   ← Append Event Stream 协议传输
    ↓ 状态更新
UI State          ← Frontend State Manager 管理

关键洞察:SSE 协议设计的核心决策是——你的事件流在哪一层传输?

  • 在第 2 层传输 → Delta Stream(打字机效果)
  • 在第 3 层传输 → Append Event Stream(多步骤流程)
  • 在第 4 层传输 → Full State Stream(编辑器场景)

边界与易混淆点

  • SSE 不等于协议:SSE 是传输通道(第 0 层),四层模型是数据语义的设计。
  • Token ≠ Delta ≠ Chunk:一个 token 可能是半个字,一个 delta 可能包含多个 token,一个 chunk 可能包含多个 delta。
  • 不是每层都必须存在:简单场景可以直接从 token 到 UI state,跳过中间层。
创建于 2026/6/29 更新于 2026/7/15