## 动画触发时机：两种哲学

情绪标签在流式输出中先于正文到达，何时切换动画？

### 时序关系

thinking 开始 → [情绪:joy/0.7] → 你好！今天... → 天气不错... → done
A

### 情绪 = 预告（立即切换）

情绪标签一解析到就立刻切换动画，不等待正文。就像人开口前表情先变化。

thinking → 解析到 joy/0.7 → 立即切换 celebrate.vrma → 正文流式输出 → idle

#### 优点

- 表情预告，更自然
- thinking 状态下也能换动画

#### 缺点

- 可能和实际说话内容有时间差

B

### 情绪 = 演绎风格（延迟到 speaking）

情绪标签只记录，等正文开始输出（petState→speaking）时才应用动画。

thinking → 解析到 joy/0.7（记录） → 正文开始 → 切换 celebrate.vrma → idle

#### 优点

- 动画和语音同步
- 和当前逻辑最接近

#### 缺点

- thinking 期间空白表情
- 实际就是现状

### 我的推荐：A

情绪标签在 token 流中最先到达，立刻切换动画意味着 pet 的表情/身体语言在正文到达前就已经变化——就像人说话前先有表情。而且这从根本上解决了「thinking 状态无法被 emotion 驱动」的问题。

实际上这个选择会导向一个更简洁的架构：emotion 驱动动画，petState 只提供默认 fallback。