child-psycho-companion/STATUS.md

6.4 KiB
Raw Blame History

项目状态报告

最后更新2026-04-06


一、当前部署架构

┌─────────────────────────────────────────────────────┐
│  MacBook Pro (本地)                                  │
│                                                     │
│  ┌─ xiaozhi-esp32-server (Docker) ─────────────┐  │
│  │  端口: 8000 (WS) / 8003 (HTTP)               │  │
│  │  config: /opt/xiaozhi-esp32-server/data/     │  │
│  │                                                  │  │
│  │  ⚠️ 当前: manager-api → xinnan-tech 云端      │  │
│  │     云端配置覆盖本地 .config.yaml              │  │
│  │     导致 LLM 型号: glm-4-flash (应为MiniMax)  │  │
│  └──────────────────────────────────────────────┘  │
│                                                     │
│  ┌─ xiaozhi_cli_client.py ──────────────────────┐  │
│  │  WebSocket CLI 调试工具                        │  │
│  │  ✅ WebSocket 认证问题已修复                   │  │
│  │  ⚠️ TTS 音频跳过(无播放),文本回复正常       │  │
│  └──────────────────────────────────────────────┘  │
│                                                     │
│  ┌─ child-psycho-companion ─────────────────────┐  │
│  │  psycho-screener MCP 工具                     │  │
│  │  ✅ 已注册到 xiaozhi-server                   │  │
│  │  ✅ psycho_screen 工具在工具列表中             │  │
│  └──────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────┘

二、问题排查记录

2.1 WebSocket 连接 已解决

项目 详情
症状 连接成功但 device-id 为 None
根因 服务端从 HTTP header 读 device-id,客户端从 URL query param 传
文件 xiaozhi_cli_client.py
修复 additional_headers={"Device-ID": DEVICE_ID, "Client-ID": DEVICE_ID}

2.2 MCP Endpoint Token 已解决

项目 详情
症状 ERROR: token解密失败 1008
根因 URL 中 + 被解码为空格base64 解析失败
文件 xiaozhi-server/data/.config.yaml
修复 +%2B=%3D

2.3 MiniMax LLM 401 未解决(根因已定位)

项目 详情
症状 LLM 返回 401 "令牌已过期或验证不正确"
根因 config_loader.py 优先从 manager-api 获取配置,云端返回 glm-4-flash,覆盖本地 MiniMax 配置
证据 请求日志中 model: "glm-4-flash"(而非 MiniMax-M2.5
解法 升级到全模块安装,在智控台配置 MiniMax

三、MiniMax LLM 401 深度分析

当前配置加载逻辑

1. load_config() 读取 .config.yaml
2. 检测到 manager-api 有配置url + secret
3. 调用 get_server_config() 从 xinnan-tech API 获取设备配置
4. API 返回配置的 model: "glm-4-flash"
5. 覆盖本地 LLM 配置
6. xiaozhi-server 用 glm-4-flash + GLM API key 调 LLM → 401

MiniMax API 验证结果

端点 状态 备注
api.minimaxi.com/v1/chat/completions 200 MiniMax key 有效
api.minimaxi.com/anthropic 200 MiniMax Token Plan
容器内 urllib 直接调用 成功 key 和网络均正常
容器内 httpx 直接调用 成功 key 和网络均正常
xiaozhi-server openai 库调用 401 因用的是 glm-4-flash 模型

四、下一步计划

方案:升级到 xiaozhi-esp32-server 全模块安装(智控台)

为什么选这个方案

  1. 路径最短:当前已是最简化安装,升级到全模块架构改动最小
  2. MiniMax 原生支持智控台有原生日志配置页TTS 有 MinimaxTTS 选项
  3. 社区最大8k ,文档完善,有中文社区支持
  4. 功能完整:智控台提供完整 Web UI设备管理、模型配置、OTA 升级等

部署要求

项目 最低配置 推荐配置
CPU 2核 4核
内存 4GB 8GB
Docker
数据库 自动拉起 MySQL + Redis 同左

部署步骤

  1. 下载 docker-compose_all.ymlconfig_from_api.yaml
  2. 配置 MySQL + Redis 容器
  3. 启动 xiaozhi-esp32-server-web智控台端口 8002
  4. 访问 http://<IP>:8002 注册超级管理员
  5. 从智控台复制 server.secret 到本地 .config.yaml
  6. 在智控台配置 MiniMax API KeyLLM + TTS
  7. 重启容器验证

MiniMax 集成方式

LLM:智控台 → 模型配置 → 新增

type: openai
model_name: MiniMax-M2.5
url: https://api.minimaxi.com/v1
api_key: sk-cp-Sd2G0paJUZWdQhKrISIICVqQnuiE4qvT-yMszahI7s0Sau02Pa1XZCXNsj2Z91n-xNV8hIG-xL8lENaEgFNQBZr7S6Y8_R7OASOScenpJIxxWOb6vc7sF38

TTS:智控台 → 模型配置 → 语音合成 → 选择 MinimaxTTS


五、备选方案(备查)

方案 特点 MiniMax 难度 备注
xinnan-tech 官方全模块 8k,功能最全 极易 推荐首选
joey-zhou Java 版 Web UI 最完整716 中等 3 容器Java 技术栈
MiniMax-OpenPlatform 版 MiniMax 官方深度定制 零配置 强耦合 MiniMax灵活性差

六、依赖信息

Docker 容器

xiaozhi-esp32-server  ghcr.nju.edu.cn/xinnan-tech/xiaozhi-esp32-server:server_latest

MiniMax API

  • Key 类型Token Plansk-cp- 开头)
  • LLM 端点:https://api.minimaxi.com/v1
  • Anthropic 端点:https://api.minimaxi.com/anthropic

mcp-endpoint-server

  • 端口8004
  • Token已 URL 编码):usxQ%2BQ7GkvPsndgGVZDZBCE1%2Bcp6w1dJKkmoj7EJCqM%3D