child-psycho-companion/CLAUDE.md

3.5 KiB
Raw Permalink Blame History

Claude Code — 儿童心理陪伴玩偶项目

项目背景

基于小智 AI 生态的儿童心理陪伴玩偶项目。由客座教授(大头/胡老师)指导团队开发。

技术架构

核心模块

  • 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


运行命令

# 激活虚拟环境
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 操作

git add . && git commit -m "描述" && git push origin main