auto-reply-debug-session-20260714.md
2.47 KB
微信自动回复调试实录(2026-07-14)
错误序列与修复
| # | 错误现象 | 根因 | 修复 |
|---|---|---|---|
| 1 | 回复是 hermes --resume xxx |
generate() 取 stdout 最后一行,最后一行是 CLI 命令 | 加噪音过滤 |
| 2 | 回复是 Resume this session with: |
噪音过滤漏了 hermes 元数据 | 加更多噪音关键词 |
| 3 | 回复是分隔线 ─── |
分隔线没过滤 | 加分隔线检测 |
| 4 | 回复混杂整段 prompt+上下文 | hermes chat 将 prompt 回显到 stdout | 改用文件 I/O:hermes 写文件,orch 读文件 |
| 5 | 回复很短(21/25/47 字符) | 取最后一行丢弃了前面的完整报告 | 取所有有效行拼接 |
| 6 | 回复是 ===报告=== 分隔符 |
分隔符方案不可靠,hermes 不总是输出 | 弃用,改用文件 I/O |
| 7 | 同一条消息反复触发 | 去重只在成功路径持久化 | 全路径持久化 msgId |
| 8 | admin 任务超时后回退 member 闲聊 | fallback 逻辑不适合任务模式 | 任务失败调用 reply-failure-report skill |
| 9 | 发给 jimmy 的消息发给了陌生人 | rcontact 模糊匹配 | 要求精确匹配,多结果时确认 |
| 10 | 失败报告假承诺"我重试一次" | reply-failure-report prompt 太宽松 | skill v2.0 明确禁止假承诺 |
架构演进
v1: orch → hermes chat → stdout 解析 → 发送
问题:stdout 含 prompt+工具+结果,无法可靠提取
v2: orch → hermes chat → 文件 I/O → 发送
问题:裸 prompt,没有 Plan→Execute→Verify→Report
v3: orch → hermes chat -s reply-task-executor → 文件 I/O → 发送
当前:skill 驱动,四步 Loop,文件 I/O,去重全路径
当前架构
orch 接收消息
→ 去重检查(msgId)
→ admin + 任务关键词 → 两段式
→ ack 秒回
→ hermes chat -s reply-task-executor --yolo -t terminal,file,web
→ Plan → Execute → Verify → Report → write_file
→ orch 读文件 → _verify_draft → 发送
→ admin + 闲聊 → 单段式
→ member → hermes -z
→ 其他人 → review
关键设计决策
- 文件 I/O > stdout 解析:不再尝试从 stdout 提取回复
- Skill > 硬编码:逻辑在 skill 里,代码只是执行引擎
- Loop > 一步黑盒:admin 任务必须走 Plan→Execute→Verify→Report
- 去重全路径:成功/失败/跳过都持久化 msgId
- 失败不 silence:用 reply-failure-report skill 诚实地告诉对方