child-psycho-companion/CLAUDE.md

103 lines
3.5 KiB
Markdown
Raw Permalink Normal View History

# Claude Code — 儿童心理陪伴玩偶项目
## 项目背景
基于小智 AI 生态的儿童心理陪伴玩偶项目。由客座教授(大头/胡老师)指导团队开发。
- 仓库http://xmhome.ow-my.com:3000/sileya-ai/child-psycho-companion
- 技术栈Python、MCPModel Context Protocol、MiniMax API、Docker
## 技术架构
### 核心模块
- `src/psycho_screener/screener.py` — 心理问题筛查bullying/depression/anxiety 等7类
- `src/psycho_screener/mcp_tool.py` — fastmcp 协议版本
- `src/psycho_screener/mcp_tool_native.py` — 原生 mcp SDK 版本
### 工具
- `mcp_simulator.py` — MCP 协议模拟器
- `xiaozhi_cli_client.py` — xiaozhi-esp32-server CLI 调试工具
- `test_xiaozhi_client.py` — pytest 测试套件
### 环境
- Docker 容器xiaozhi-esp32-server8000/8003、mcp-endpoint-server8004
- Python 3.x + .venv 虚拟环境
---
## 当前状态2026-04-06
### 已解决的问题
#### 1. WebSocket 认证问题 ✅
- **问题**:服务端从 HTTP header 读 `device-id`,客户端从 URL query param 传
- **根因**xiaozhi-server `connection.py` 第 227 行用 `self.headers.get("device-id")` 读 header客户端用 `?device-id=xxx` query 参数
- **修复**`xiaozhi_cli_client.py` 改用 `additional_headers={"Device-ID": DEVICE_ID, "Client-ID": DEVICE_ID}` 传递
- **状态**已修复并验证WebSocket 连接成功
#### 2. MCP Endpoint Token URL 编码 ✅
- **问题**token 中的 `+` 在 URL 中被 FastAPI 解码为空格,导致 base64 解码失败
- **根因**`api.minimaxi.com/v1` 返回 1008 policy violation
- **修复**`.config.yaml` 中 token 的 `+``%2B``=` → `%3D`
- **状态**:已修复,`MCP接入点连接成功`
#### 3. MCP 工具注册 ✅ 不需要真机
- **澄清**`psycho-screener` 是服务端 MCP通过 stdio 子进程运行,不需要 ESP32 真机
- **状态**`psycho_screen` 工具已在函数列表中注册
### 待解决问题
#### P0 — MiniMax LLM 401 错误(根因已定位)
- **现象**xiaozhi-server LLM 调用返回 401 "令牌已过期或验证不正确"
- **根因**:配置被 xinnan-tech manager-api 远程覆盖
- 本地 `.config.yaml` 配置了 MiniMax-M2.5
-`config_loader.py` 检测到 manager-api 配置后,调用 `get_server_config()` 从 xinnan-tech API 获取设备配置
- API 返回的默认模型是 `glm-4-flash`,覆盖了本地配置
- `glm-4-flash` 的 API key 与 MiniMax 不匹配,导致 401
- **解决方向**:升级到 xiaozhi-esp32-server 全模块安装(智控台),在智控台配置 MiniMax API Key
- **详见**`STATUS.md`
#### P1 — `screen_from_messages()` 未实现
- `screener.py` 的消息格式接口未完成
- 需要从 messages 数组提取儿童对话
---
## 下一步计划
### 近期(升级智控台)
1. 将 xiaozhi-esp32-server 从最简化安装升级为全模块安装(智控台)
2. 在智控台配置 MiniMax LLM + TTS
3. 验证玩偶对话功能完整链路
### 中期(功能完善)
1. 实现 `screen_from_messages()` 方法
2. WebSocket 认证调试
3. 案例库设计
详见 `STATUS.md`
---
## 运行命令
```bash
# 激活虚拟环境
cd /Users/bigemon/WorkSpace/child-psycho-companion
source .venv/bin/activate
# 测试玩偶对话
python xiaozhi_cli_client.py "今天小朋友打我,我好害怕"
# Docker 容器状态
docker ps | grep xiaozhi
# 查看 xiaozhi-server 日志
docker logs xiaozhi-esp32-server 2>&1 | tail -20
```
## Git 操作
```bash
git add . && git commit -m "描述" && git push origin main
```