Files
loong-workflow/retrospectives/wechat-ops-20260929.md
T

5.5 KiB

项目复盘 — wechat-ops 个人微信 GUI 自动化值守 Agent

迭代周期:2026-09-29 一天(迭代0 环境搭建 → 迭代1 五功能 → 迭代2 DAG 就位) 方法:Loong Workflow 复盘清单(DATA / ANAL / ACT / LOOP / SAFE) 复盘人:kenyang + ZCode Agent


0. 项目快照

项 值
交付物 GitHub + Loong Gitea 双远端 wechat-ops(skILL 包 + 服务器部署版,md5 一致)
代码规模 agent.py ~650 行 + vision.py + setup-server.sh + 守卫脚本
运行状态 阿里云 2核2G,auto/draft 值守中,可用内存 ~720Mi
版本轨迹 v0.1.0 初版 → v0.2.x 安全加固 → v0.3.x ima 知识库 → v0.4.x Loong 工作流捆绑

1. 数据(DATA)

功能交付:迭代1 五项全部实现并验证(独立Prompt/记忆/群@检测/链接阅读/图标模板匹配);ima OpenAPI 当天逆向对接(官方文档缺字段不一致,实测修正)。

真实流量拦截记录(守卫闸门的实战证据):

  • 标题核验拦截误发:6+ 次(误定位到 第一财经/大刘家/杨家小极客/张秀英/纯臻群/刘家四兄弟姐妹)
  • 白名单外跳过:9+ 次(张秀英门店运营群、2组1号、Service Accounts 等)
  • 群 @ 闸门:未@消息全部仅记录不响应

事故清单(每条有日志/截图证据):

  1. 私聊消息误发 227 人群(坐标偏移+无核验,用户手动撤回)
  2. Escape 键打崩微信渲染→透明壳→自愈误判重启→登录会话丢失(被迫重扫码 3 次)
  3. 定时任务队列被清空且重复触发 20 秒循环(FT 收到 ~50 条测试消息)
  4. 工单误关 4 张(#6/#7/#8/#9 号映射错误,事后纠正)
  5. linux-server.md 被存根覆盖丢失 90 行(git 历史恢复)
  6. ima 官方文档字段与实际 API 不一致(id/name vs kb_id/kb_name)

2. 优点(可复用模式)

  1. 安全闸门代码化且实战有效:标题核验(空标题拒绝)、白名单、限速、静默、敏感词回退——全部误发被拦,零事故外泄。模式:闸门必须写成函数,不写成散文。
  2. 自愈状态机:托盘隐匿/透明壳/登录过期/过渡态保护,一夜之间无人工干预恢复值守。模式:每种故障先做"最坏情况审查"再加处理分支。
  3. 像素级兜底 + 自学习模板:FT 图标颜色候选 + 9×9 模板最小距离(校准:真身<10万,误配 270万+),核验成功后自学习存模板。
  4. 知识库两级接入:文件导出兜底 + OpenAPI 直连优先,当天完成无官方文档接口的逆向对接(实测修正字段名)。
  5. 诚实文化:幻觉试答拒绝发送;错误关票发状态修正评论;证据分级表述(已验证:证据 / 未验证:待确认)。
  6. 真实用户即时反馈:群里演示后,当晚有成员尝试部署、有成员购入服务器——开源定位(纯视觉替代付费 Proxy API)得到验证。

3. 缺点与根因(归因流程/工具,不归因个人)

# 缺点 根因(流程/工具缺口)
1 GUI 自动化固有脆弱:窗口自发隐匿、渲染透明壳、Escape 打崩渲染,全天 5+ 次异常 微信 Qt 客户端不可控;缺"故障注入"式预防测试,只有事后补丁
2 免费视觉模型定位误读(臻→甄、槽位名字偏差),需模板/模糊匹配补丁补偿 无离线评测集:视觉提示词从未做过基线测试,每个误读都是第一次见
3 定时任务重复触发 20 秒循环,根因未明(run_due_tasks 曾将未到期任务判为 due) 缺"决策日志→断言"的最小复现方法论;护栏先于根因分析上线,护栏自身又制造新循环
4 群发误投事故 无"发送目标 dry-run"预检步骤;核验闸门是事故后补的
5 工单误关 4 张(映射错误) 关票动作无"工单号↔标题"双重校验;单人无评审
6 文档被存根覆盖 90 行 文件同步用 cp 而非 git,缺 pre-commit 保护
7 测试污染真实会话(FT ~50 条消息) 无测试专用会话/账号隔离机制

4. 行动项(ACT,≤5,每条有文件路径与完成判据)

# 行动项 文件 完成判据
1 N-04:定时任务重复触发复现(利用 save_tasks([]) 溯源栈日志) scripts/agent.py run_due_tasks 同一任务 3 次评估仅触发 1 次发送
2 N-05:白名单 difflib≥0.6 模糊匹配(已实现待回归) + 群名 OCR 变体测试用例集 scripts/agent.py handle_trigger 「纯甄AI赋能1688」命中白名单
3 N-01:图片发送链路(表情包前置) scripts/agent.py send_image 测试图片送达 File Transfer
4 上架前置:守卫脚本增加"凭证/隐私 HARD 扫描"进 CI(双远端推送前自动跑) scripts/check-skill.sh + Loong Gitea workflow push 即自动扫描
5 ima 检索评测集:收集 10 条真实问题-期望文档对,做召回率基线 references/ima-eval.md(新建) 召回率报告存在且 ≥8/10

5. 闭环(LOOP)

  • 本文写入 loong-workflow 仓库 retrospectives/
  • ACT#1/#2 相关坑已沉淀 pitfalls-linux.md(#18/#19/#20)
  • 迭代2 DAG 已发布 Loong Gitea wiki(wechat-ops-iter2/dag),N-01 工单已建(#14)

6. 无指责声明(SAFE)

所有失误(群发误投、误关工单、文档覆盖、护栏制造循环)归因于:流程缺口(无 dry-run、无双人评审、无离线测试集、护栏先于根因分析),不归因于任何人的能力或态度。相应修复均已落入上述 ACT 项。

7. 一句话总结

一天内从裸机到开源值守 Agent,安全闸门零失效,但稳定性工程(故障注入测试、离线评测集、双人评审)仍是单人项目的最大短板——这三样是迭代2 的主攻方向。