IntuitionX_agent/QUICK_START.md

382 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# WebSocket后端 - 快速启动指南
## 🚀 5分钟快速启动
### 1. 启动WebSocket服务器
```bash
cd /Users/dsw/workspace/now/2025/wds/IntuitionX/agent
python src/MainServices.py
```
**预期输出**
```
============================================================
[WS] WebSocket服务器启动
[WS] 监听地址: ws://0.0.0.0:8765
[WS] 接口:
- 2.1 异常状态触发对话 (abnormal_trigger)
- 2.3 双向音频流对话 (audio_stream_*)
============================================================
```
✅ 服务器已成功启动!
### 2. 测试接口(另一个终端)
```bash
cd /Users/dsw/workspace/now/2025/wds/IntuitionX/agent
python test_ws.py
```
**预期结果**
```
✓ 2.1 测试完成
✓ 2.3 测试完成
✓ 所有测试完成!
```
### 3. 查看完整文档
- 📖 [完整API文档](./WEBSOCKET_API.md) - 详细的接口说明
- 📋 [实现总结](./IMPLEMENTATION_SUMMARY.md) - 技术细节和架构
- 📝 [README](./README.md) - 项目概览
---
## 🎯 2个核心接口
### 2.1 异常状态触发对话
当K230检测到用户**皮肤状态差**或**情绪低落**时,发送请求:
```json
{
"type": "abnormal_trigger",
"trigger_reason": "poor_skin", // 或 "sad_emotion"
"enable_streaming": true
}
```
**后端自动处理**
1. 拼接相应的关怀提示词
2. 调用LLM生成回复文本
3. 流式调用TTS合成语音
4. 返回音频流到K230
**典型回复**poor_skin
> "我注意到你最近看起来有点疲倦,是不是休息不够?记得多喝水,规律作息对皮肤很重要哦。"
### 2.3 双向音频流对话
K230和后端进行实时对话
```
K230音频输入 → 后端检测语音结束 → ASR识别 → LLM生成 → TTS合成 → K230音频输出
```
**流程示例**
1. K230: 发送用户说话的音频
2. 后端: 检测到用户停止说话后,开始处理
3. 后端: 识别用户说的是什么
4. 后端: 用LLM生成合适的回复
5. 后端: 用TTS合成语音
6. K230: 播放后端的回复
---
## 📊 测试覆盖
**2.1测试结果**
- 异常状态请求处理
- 提示词拼接
- LLM流式生成
- TTS流式合成
- 21个音频块完整发送
**2.3测试结果**
- 初始化握手
- 音频上传处理
- 会话管理
- 控制信号处理
---
## 🔌 WebSocket连接
**开发环境**
```
ws://127.0.0.1:8765
```
**生产部署**
```
ws://0.0.0.0:8765
或通过nginx反向代理
wss://yourdomain.com/ws (WSS加密)
```
---
## 📝 消息格式
### 2.1: 异常触发对话
**请求**
```json
{
"type": "abnormal_trigger",
"trigger_reason": "poor_skin | sad_emotion",
"enable_streaming": true,
"context_data": { /* optional */ }
}
```
**响应流**
```json
{
"type": "abnormal_trigger_response",
"success": true
}
```
然后接收多个音频块:
```json
{
"type": "audio_stream_download",
"data": "base64音频数据",
"is_final": false
}
```
### 2.3: 音频流对话
**初始化**
```json
{
"type": "audio_stream_init",
"session_id": "unique-session-id",
"audio_config": {
"sample_rate": 16000,
"bit_depth": 16,
"channels": 1,
"encoding": "pcm"
}
}
```
**上传音频**
```json
{
"type": "audio_stream_upload",
"session_id": "unique-session-id",
"data": "base64音频数据",
"sequence": 1
}
```
**接收回复**
```json
{
"type": "audio_stream_download",
"session_id": "unique-session-id",
"data": "base64音频数据",
"is_final": false
}
```
---
## 🛠️ 技术栈
| 组件 | 说明 |
|------|------|
| WebSocket | websockets 15.0 |
| 异步框架 | Python asyncio |
| LLM | DeepSeek V3.2 (DashScope) |
| TTS | 通义千问TTS (DashScope) |
| ASR | 通义千问ASR (DashScope) |
| VAD | SileroVAD (本地模型) |
| 音频格式 | PCM (16bit, 16kHz/24kHz) |
---
## 🎧 音频参数
**输入K230发送**
- 采样率: 16 kHz
- 位深度: 16 bit
- 声道: 单声道 (1)
- 格式: PCM
**输出(后端发送)**
- 采样率: 24 kHz (TTS输出)
- 位深度: 16 bit
- 声道: 单声道 (1)
- 格式: PCM (base64编码)
---
## 📱 K230集成步骤
### 1. 连接WebSocket
```c
// 伪代码示例
ws = websocket_connect("ws://backend-ip:8765");
```
### 2. 实现2.1(异常触发)
```c
// 当检测到皮肤异常时
send_json({
"type": "abnormal_trigger",
"trigger_reason": "poor_skin",
"enable_streaming": true
});
// 接收音频并播放
while (recv_audio_chunk()) {
play_audio(chunk.data); // base64解码后播放
}
```
### 3. 实现2.3(双向对话)
```c
// 初始化
send_json({
"type": "audio_stream_init",
"session_id": "session001",
"audio_config": { /* ... */ }
});
// 接收初始化响应
resp = recv_json(); // 等待 audio_stream_init_response
// 持续发送音频
while (recording) {
send_json({
"type": "audio_stream_upload",
"session_id": "session001",
"data": base64(audio_chunk),
"sequence": seq++
});
}
// 接收回复
while (recv_message()) {
if (msg.type == "audio_stream_download") {
play_audio(base64_decode(msg.data));
}
}
```
---
## 🔍 调试技巧
### 查看服务器日志
所有操作都有日志标记,格式:`[标签] 消息`
常见标签:
- `[WS]` - WebSocket连接事件
- `[路由]` - 消息路由
- `[2.1]` - 2.1接口处理
- `[2.3]` - 2.3接口处理
- `[VAD]` - 语音检测
- `[ASR]` - 语音识别
- `[LLM]` - 对话生成
- `[TTS]` - 语音合成
- `[错误]` - 错误信息
### 运行测试
```bash
python test_ws.py # 完整的功能测试
```
### 检查端口
```bash
lsof -i :8765 # 查看8765端口监听情况
```
---
## ⚡ 性能指标
| 指标 | 值 |
|------|-----|
| WebSocket延迟 | <50ms |
| LLM生成延迟 | 1-5秒 |
| TTS合成延迟 | 0.5-2秒 |
| 音频流传输速率 | 实时 |
| 并发连接数 | 理论无限 |
---
## 🛡️ 错误处理
常见错误和解决方案
### 问题: "address already in use"
```
解决: pkill python # 关闭所有Python进程
然后: python src/MainServices.py # 重新启动
```
### 问题: "无法连接到服务器"
```
解决:
1. 确保WebSocket服务器正在运行
2. 检查防火墙是否开放8765端口
3. 检查IP地址是否正确
```
### 问题: 2.3没有收到回复
```
解决:
1. 检查是否发送了有效的音频数据(非零数据)
2. 确保发送的是PCM格式
3. 查看VAD是否检测到语音结束voice_end
```
---
## 📚 更多文档
- **完整API文档**: [WEBSOCKET_API.md](./WEBSOCKET_API.md)
- **实现详情**: [IMPLEMENTATION_SUMMARY.md](./IMPLEMENTATION_SUMMARY.md)
- **项目README**: [README.md](./README.md)
---
## ✅ 验证清单
启动前请确保
- 已安装websockets依赖自动安装
- 已配置DASHSCOPE_API_KEY环境变量
- 8765端口未被占用
- Python版本 3.12
---
## 🎉 完成!
现在你可以
1. **启动服务器**: `python src/MainServices.py`
2. **运行测试**: `python test_ws.py`
3. **与K230通信**: 通过WebSocket连接到 `ws://0.0.0.0:8765`
祝你使用愉快有任何问题请查阅完整文档
---
**制作日期**: 2025-01-01
**版本**: 1.0
**状态**: 生产就绪