# 🚀 LiveKit Voice AI Agent v2 - 优化版

## 架构优化

```
┌─────────────────────────────────────────────────────────────┐
│                    Voice AI Agent v2                        │
├─────────────────────────────────────────────────────────────┤
│  输入层: LiveKit WebRTC AudioStream (16kHz, mono)          │
│       ↓                                                      │
│  VAD: TEN VAD (0.234ms/帧)                                  │
│       ├── min_speech_ms=300 (最短语音)                       │
│       ├── min_silence_ms=500 (静音检测)                      │
│       └── 能量检测兜底                                       │
│       ↓                                                      │
│  STT: FunASR SenseVoiceSmall (http://localhost:8080)        │
│       └── 流式识别 + 标点恢复                                │
│       ↓                                                      │
│  LLM: Agnes AI (agnes-2.5-flash)                            │
│       ├── 系统提示: 简洁友好 (≤80字)                         │
│       ├── 流式输出                                          │
│       └── 历史保留: 最近10轮                                  │
│       ↓                                                      │
│  TTS: Edge TTS (zh-CN-XiaoxiaoNeural)                       │
│       └── 流式生成 + 边播放边生成                            │
└─────────────────────────────────────────────────────────────┘

状态机:
IDLE → LISTENING → PROCESSING → SPEAKING → IDLE
                      ↑              ↓
                      └── INTERRUPTED ──┘
```

## 核心改进

### 1. 流式 VAD (Zero-Latency)
- TEN VAD 每帧实时检测 (256 samples = 16ms)
- 两级检测: VAD分数 + 能量检测
- 自动endpointing: 300ms语音 + 500ms静音

### 2. 打断检测
- **用户打断**: 说话时检测到语音 → 停止TTS
- **手动打断**: 调用 `agent.interrupt()`
- 状态: SPEAKING → INTERRUPTED → IDLE

### 3. 状态机驱动
```python
class AgentState(str, Enum):
    IDLE = "idle"
    LISTENING = "listening"
    PROCESSING = "processing"
    SPEAKING = "speaking"
    INTERRUPTED = "interrupted"
```

### 4. 音频管道
- 采集: `rtc.AudioStream` (LiveKit原生)
- 播放: `rtc.AudioSource` + `LocalAudioTrack`
- 格式: 16kHz, mono, int16

## 快速开始

### 启动 Agent
```bash
source ~/s2s-env/bin/activate
cd /Users/leo/.hermes/workspace/livekit-agents
python3 agent_server.py start
```

### 生成 Token
```bash
python3 gen_token.py voice-ai-test user1
```

### React Native 测试
```javascript
const SERVER_URL = 'ws://192.168.31.229:7880';
const TOKEN = 'eyJhbG...';

<LiveKitRoom serverUrl={SERVER_URL} token={TOKEN}>
  <VoiceAssistant />
</LiveKitRoom>
```

## 性能指标

| 组件 | 延迟 | 备注 |
|------|------|------|
| TEN VAD | 0.234ms/帧 | P50=0.226ms |
| FunASR STT | ~200ms | SenseVoiceSmall |
| Agnes AI LLM | ~500ms | agnes-2.5-flash |
| Edge TTS | ~100ms/句 | 流式 |
| **端到端** | **<1s** | VAD触发到TTS播放 |

## 文件结构

```
livekit-agents/
├── agent.py           # 核心 Agent (v2优化版)
├── agent_server.py    # Worker 启动入口
├── gen_token.py       # Token 生成工具
├── .env.dev           # 环境配置
├── react-native-example/
│   └── App.js         # React Native 示例
├── RN_QUICKSTART.md   # React Native 指南
└── STARTUP_INFO.md    # 启动信息
```
