b123a36aae
后端修复: - 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>
3.6 KiB
3.6 KiB
Cyrene 第五轮修复报告 — IoT 边界情况 + 快速通道完善
报告日期:2026-05-22
分支:dev
涉及文件数:2 个
E2E 测试:全部通过
一、修复项
| # | 类别 | 问题 | 涉及文件 |
|---|---|---|---|
| 1 | 🟡 功能 | IoT 快速通道遗漏 "关掉"/"关上" 关键词 | intent_analyzer.go |
| 2 | 🟡 功能 | IoT 多设备命令上下文窗口过小(±15字节) | iot_provider.go |
二、详细说明
2.1 IoT 快速通道关键词补充
问题:isStrongIoTCommand() 的控制词列表缺少 "关掉"、"关上",导致 "关掉客厅灯" 等常见命令无法命中快速通道,浪费 2-3s LLM 意图分析。
修复:在 controlWords 中新增 "关掉", "关上"。
修复前: controlWords := []string{"打开", "关闭", "调到", "设置", ...}
修复后: controlWords := []string{"打开", "关闭", "关掉", "关上", "调到", "设置", ...}
验证:
"关掉客厅灯" → 修复前: LLM路径 5.12s → 修复后: 快速通道 2.57s (节省 2.55s)
2.2 IoT 多设备上下文窗口扩展
问题:多设备命令如 "帮我把卧室灯和卧室空调都关掉" 中,"卧室灯" 与 "关掉" 之间间隔超过 15 字节,导致操作判断错误(将 "off" 误判为 "query"),设备未被实际控制。
根因分析:
msgLower = "帮我把卧室灯和卧室空调都关掉" (42 bytes)
"卧室灯" 起始偏移 = 9
contextEnd = 9 + 9 + 15 = 33
nearbyContext = msgLower[0:33] = "帮我把卧室灯和卧室空调" ← 缺少 "都关掉"!
修复:
- 上下文窗口从 ±15 扩展至 ±30 字节
- 新增全文回退逻辑:附近上下文无法判断时,搜索整条消息
- 调整判断逻辑为先计算
hasOpen/hasClose布尔值,避免级联 if-else 误判
验证:
"帮我把卧室灯和卧室空调都关掉" →
修复前: IoT 子会话完成: 卧室灯当前状态: on; 已帮你关闭卧室空调~ (灯仅查询,未关闭)
修复后: IoT 子会话完成: 卧室空调已经是关闭状态啦~; 已帮你关闭卧室灯~ (两个设备都正确匹配)
三、E2E 验证
| 场景 | 输入 | 预期 | 结果 |
|---|---|---|---|
| "关掉" 快速通道 | 关掉客厅灯 | fast path, <3s | 2.57s, fast path ✅ |
| 多设备打开 | 打开客厅灯和卧室灯 | 两设备均匹配 | 已帮你打开客厅灯♪; 卧室灯已经是打开状态啦~ ✅ |
| 多设备关闭 | 帮我把卧室灯和卧室空调都关掉 | 两设备均 match "off" | 卧室空调关闭 + 已帮你关闭卧室灯~ ✅ |
| 设备状态查询 | 看看家里设备状态怎么样 | 返回全部设备 | 家里设备状态:8 台设备 ✅ |
| 长消息拆分 | 讲星星故事 | action + 多段 chat | 1 action + 2 chat (69+16 chars at sentence break) ✅ |
| 审查消息格式 | 所有场景 | action/chat 分离 | msg_type 正确 ✅ |
四、构建流程修正
本次调试中发现 DevTools 构建产物名为 main.exe 而非 ai-core.exe。后续所有编译应通过 DevTools 的 /api/services/:id/build 接口执行,避免手动构建到错误文件名。
五、性能总结
| 场景 | Round 4 | Round 5 | 改善 |
|---|---|---|---|
| "打开" IoT 命令 | ~3.4s | ~2.6s | -0.8s |
| "关掉" IoT 命令 | ~6.2s (LLM路径) | ~2.6s (快速通道) | -3.6s |
| 多设备 IoT 命令 | 仅执行第一个 | 全部执行 | 功能修复 |
| 一般聊天 | ~3.9s | ~3.9s | 持平 |