IntuitionX_agent/QUICK_START.md

7.0 KiB
Raw Permalink Blame History

WebSocket后端 - 快速启动指南

🚀 5分钟快速启动

1. 启动WebSocket服务器

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. 测试接口(另一个终端)

cd /Users/dsw/workspace/now/2025/wds/IntuitionX/agent
python test_ws.py

预期结果

✓ 2.1 测试完成
✓ 2.3 测试完成
✓ 所有测试完成!

3. 查看完整文档


🎯 2个核心接口

2.1 异常状态触发对话

当K230检测到用户皮肤状态差情绪低落时,发送请求:

{
  "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: 异常触发对话

请求

{
  "type": "abnormal_trigger",
  "trigger_reason": "poor_skin | sad_emotion",
  "enable_streaming": true,
  "context_data": { /* optional */ }
}

响应流

{
  "type": "abnormal_trigger_response",
  "success": true
}

然后接收多个音频块:

{
  "type": "audio_stream_download",
  "data": "base64音频数据",
  "is_final": false
}

2.3: 音频流对话

初始化

{
  "type": "audio_stream_init",
  "session_id": "unique-session-id",
  "audio_config": {
    "sample_rate": 16000,
    "bit_depth": 16,
    "channels": 1,
    "encoding": "pcm"
  }
}

上传音频

{
  "type": "audio_stream_upload",
  "session_id": "unique-session-id",
  "data": "base64音频数据",
  "sequence": 1
}

接收回复

{
  "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

// 伪代码示例
ws = websocket_connect("ws://backend-ip:8765");

2. 实现2.1(异常触发)

// 当检测到皮肤异常时
send_json({
  "type": "abnormal_trigger",
  "trigger_reason": "poor_skin",
  "enable_streaming": true
});

// 接收音频并播放
while (recv_audio_chunk()) {
  play_audio(chunk.data);  // base64解码后播放
}

3. 实现2.3(双向对话)

// 初始化
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] - 语音合成
  • [错误] - 错误信息

运行测试

python test_ws.py  # 完整的功能测试

检查端口

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

📚 更多文档


验证清单

启动前请确保:

  • 已安装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 状态: 生产就绪