Files
Cyrene/docs/debug_log/2026-05-20-round4-subservices-database.md
T
AskaEth b123a36aae fix: 第四轮调试 — 回复去重/消息时序/UI布局/自主思考深度优化 + 文档重整
后端修复:
- main.go: 恢复 /api/v1/chat 路由中丢失的 handleChat 调用 (空响应回归)
- orchestrator.go: splitChatByLines 改为双换行分割, 避免单换行误拆
- chat_handler.go: multi_message 增加 !hasReview 守卫, 消息延迟 200→800ms
- thinker.go: RecordUserMessage 追踪活跃会话ID, 推送主动消息到正确会话
- thinker.go: 增强思考提示词 — 禁止在用户休息/离开时发送主动消息

前端修复:
- useWebSocket.ts: stream_segments 不再创建消息气泡, 消除重复回复
- MessageBubble.tsx: 动作消息居左对齐无头像, 时间戳移至气泡外侧 hover 显示
- ChatInput.tsx: 昔涟输入提示移至输入框上方, 波点动画效果
- MessageList/TypingIndicator/ChatContainer: 清理冗余 isTyping 传递
- MemoryPanel.tsx: 新增记忆面板组件

文档重整:
- docs/debug/ → docs/debug_log/ 重命名统一
- 新增 debug_log/README.md 索引
- .gitignore: 新增 android/ 排除规则

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 13:09:18 +08:00

8.3 KiB
Raw Blame History

持续性调试第4轮: 子服务调试 + 数据库完整性

日期: 2026-05-20 (UTC+8 14:28 CST) 状态: 全部通过 Go 版本: 1.26.2


1. 编译与启动

服务 端口 状态 编译 进程 PID
Gateway 8080 运行中 已有 19265
AI-Core 8081 运行中 已有 15037
IoT Debug Service 8083 运行中 已有 3063
Memory Service 8091 运行中 已有 2434
Tool Engine 8092 运行中 本轮新建 29391
Voice Service 8093 运行中 已有 7641

Tool Engine 为本轮唯一需要编译和启动的服务。编译命令:

cd backend && go build -o tool-engine/cmd/tool-engine ./tool-engine/cmd/

启动时传入环境变量: PORT=8092, IOT_SERVICE_URL=http://localhost:8083, DB_URL=postgres://..., DATA_DIR=/tmp/cyrene_data


2. 健康检查

2.1 Memory Service (8091)

{"status": "ok", "service": "memory-service"}

数据库连接正常 (IsReady() == true)pgvector extension 已加载。

2.2 Tool Engine (8092)

{"status": "ok", "service": "tool-engine"}

已注册 13 个工具: calculator, datetime, text, crypto, random, markdown, json_ops, file_ops, http_request, web_search, web_fetch, iot_query, iot_control。

IoT 客户端已连接到 http://localhost:8083

2.3 IoT Debug Service (8083)

{"status": "ok", "service": "iot-debug-service"}

模拟 8 个设备: 客厅灯, 卧室灯, 客厅空调, 卧室空调, 客厅窗帘, 温度传感器, 湿度传感器, 智能门锁。

传感器波动模拟每 30 秒运行一次。

2.4 Voice Service (8093)

{
  "status": "ok",
  "service": "voice-service",
  "stt": {"available": true, "model_loaded": true, "model_name": "ggml-small.bin"},
  "tts": {"available": false, "engine": "fallback (silent WAV)", "edge_tts": false}
}
  • STT (Whisper): 可用,模型已加载 (ggml-small.bin),支持 zh/en/ja/ko/auto
  • TTS (Edge-TTS): ⚠️ 降级 — edge-tts Python 包未安装,当前使用 fallback silent WAV。安装命令: pip install edge-tts

2.5 Gateway (8080)

{"status": "ok", "service": "cyrene-gateway", "ws_connections": 0}

3. Gateway 转发测试

3.1 Memory CRUD (通过 Gateway)

操作 端点 方法 结果
列出记忆 /api/v1/memory GET 返回已有记忆
创建记忆 /api/v1/memory POST {"status":"saved"}
搜索记忆 /api/v1/memory/search?q=测试 GET 匹配成功

认证令牌: admin_yeij0942 (JWT 验证通过)

3.2 注意事项

Memory Service 端点实际路径为 /api/v1/memories (复数)Gateway 通过 memory_handler.go 代理到正确路径。搜索功能将 Gateway 的 GET /api/v1/memory/search?q=xxx 转发为 POST /api/v1/memories/query


4. 工具引擎功能验证

4.1 计算器

POST /api/v1/tools/calculator/execute
{"arguments": {"expression": "2+3*4"}}{"output": "表达式: 2+3*4\n结果: 14"}

正确计算 (优先乘除)

4.2 日期时间

POST /api/v1/tools/datetime/execute
{"arguments": {"action": "now"}}{"output": "当前时间: 2026-05-20 14:27:13\n时区: Local\nUnix时间戳: 1779258433"}

时间戳正确

4.3 加密哈希

POST /api/v1/tools/crypto/execute
{"arguments": {"action": "hash", "algorithm": "sha256", "input": "hello"}}{"output": "哈希算法: sha256\n输入长度: 5 字节\n哈希值 (hex): 2cf24dba..."}

SHA256 哈希正确 (与 echo -n hello | sha256sum 一致)

4.4 调用日志存储

  • 数据库表 tool_call_logs 已创建并可使用
  • 调用日志异步写入(go routine 方式)

5. IoT 端点测试

操作 端点 方法 结果
列出设备 /api/v1/devices GET 返回 8 个设备
获取设备 /api/v1/devices/light-livingroom GET 含状态历史
切换灯光 /api/v1/devices/light-livingroom/toggle POST on→off/off→on
设置温度 /api/v1/devices/ac-livingroom/set POST 温度设为 28°C

设备状态历史正确记录,状态变更带时间戳。


6. 数据库完整性

6.1 表清单 (15/15)

# 表名 用途 服务
1 users 用户账户认证 Gateway
2 sessions 会话管理 Gateway
3 messages 消息存储 Gateway
4 memories 旧版记忆表 Gateway
5 memory_entries 新版记忆表 (pgvector) Memory Service
6 thinking_logs 自主思考日志 Memory Service
7 tool_call_logs 工具调用日志 Tool Engine
8 reminders 提醒 Gateway
9 daily_briefings 每日简报 Gateway
10 automation_rules 自动化规则 Gateway
11 automation_scenes 自动化场景 Gateway
12 files 文件管理 Gateway
13 knowledge_bases 知识库 Gateway
14 knowledge_documents 知识文档 Gateway
15 knowledge_chunks 知识分块 (含全文搜索) Gateway

6.2 新增 users 表结构

类型 约束
id INTEGER PK, NOT NULL
username VARCHAR(255) NOT NULL, UNIQUE
password_hash VARCHAR(255) NOT NULL
is_admin BOOLEAN NULLABLE
created_at TIMESTAMPTZ NULLABLE
updated_at TIMESTAMPTZ NULLABLE

索引: users_pkey (btree id), users_username_key (unique btree username), idx_users_username (btree username)

6.3 外键关系 (3)

子表 父表 引用列 约束名
messages session_id sessions id messages_session_id_fkey
knowledge_documents kb_id knowledge_bases id knowledge_documents_kb_id_fkey
knowledge_chunks doc_id knowledge_documents id knowledge_chunks_doc_id_fkey

6.4 索引统计

  • 总计: 58 个索引
  • 所有表均有主键索引 (btree)
  • 性能关键索引覆盖: user_id, session_id, created_at, category, priority, importance, status
  • 全文搜索: knowledge_chunks 有 GIN 索引 (idx_kc_tsv_gin)
  • 唯一约束: users(username), daily_briefings(user_id, date)
  • JSONB: tool_call_logs 使用 JSONB 存储参数

6.5 注意事项

  • memoriesmemory_entries 是两套独立的记忆表。memory_entries 是 Memory Service 通过 pgvector 管理的版本,包含向量嵌入和更丰富的元数据(importance, keywords, source, access_count 等)。memories 是 Gateway 的旧版表。
  • users 表使用 INTEGER 自增 ID,而非 UUID。Gateway 认证生成 admin_{username} 格式的 user_id,但不与数据库 id 直接关联。

7. 系统时间

UTC:      Wed May 20 06:28:13 UTC 2026
北京时间:   Wed May 20 14:28:13 CST 2026

时间正常,与预期一致。


8. 总结

通过

  • 所有 4 个子服务编译成功并运行
  • 所有健康检查返回 "ok"
  • Gateway 正确转发 Memory CRUD 请求
  • Tool Engine 13 个工具全部注册,计算器/日期/加密工具验证通过
  • IoT 设备模拟器 8 个设备正常工作,Toggle/Set 属性测试通过
  • 数据库 15 张表完整,58 个索引,3 个外键关系正确
  • users 表结构完整,含唯一用户名约束和管理员标记

待改进 ⚠️

  • Voice Service TTS 降级: edge-tts Python 包未安装,当前使用 silent WAV fallback。建议安装: pip install edge-tts
  • 双记忆表: memoriesmemory_entries 共存,可能造成混淆,建议迁移合并
  • users 表 ID 类型: 使用 INTEGER 自增和 VARCHAR user_id 的混合策略,未来可统一为 UUID

9. 端口占用全景

端口 服务 PID 二进制
8080 Gateway 19265 /home/aska/Code/Cyrene/backend/gateway/cmd/gateway
8081 AI-Core 15037 ./main
8083 IoT Debug 3063 /home/aska/Code/Cyrene/backend/iot-debug-service/main
8091 Memory 2434 /home/aska/Code/Cyrene/backend/memory-service/main
8092 Tool Engine 29391 /home/aska/Code/Cyrene/backend/tool-engine/cmd/tool-engine
8093 Voice 7641 /home/aska/Code/Cyrene/backend/voice-service/main