child-psycho-companion/CLAUDE.md

103 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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
```