云计算百科
云计算领域专业知识百科平台

AI多Agent协作系统实战(二十四):规范与代码对齐:当流程图落后于实际代码时

系列第24篇 | 6张规范图 vs 200行代码,谁在说真话?


背景

事情是这样的。

我清理完RETEST残留、重启ws_server之后,用户突然说了一句话:

“对标规范。”

就三个字。但我知道这意味着什么——代码改完了,规范文档很可能还没跟上。

我手头有6张规范图(jpeg格式),存放在 /vol1/1000/workspace/file/规范/ 目录下:

图内容
agent工作内容 6角色分工矩阵(小密/小虾/小牛/小白/ws_server/task_monitor)
派发流程 PF全景图v3.2,9步闭环
脚本分工 脚本/Agent/小密/失败重试的模块分工
统筹内容要求 任务状态机(0=未完成 1=完成,超时>5自动恢复)
统筹报告格式 DEV-YYYYMMDD-NNN,开发/测试/复核三环节
脚本编制要求 5条铁律:函数独立/统一输出/deliver=local/空闲30分暂停/容错

这6张图定义了我们系统的"宪法"。但问题是——宪法写得再清楚,如果实际代码偏离了宪法,那宪法就是废纸。


第一个差异:定时复核的"幽灵指令"

我逐条对标,第一个差异就让我冒冷汗。

规范图(派发流程)第8步写的是:review.py 由小密人工/AI复核时调用,复核通过才更新 review=passed。

但代码里呢?

# heartbeat_db.py(旧代码)
def generate_report():
# 复核由task_monitor/ws_server在小牛完成后触发,不再由heartbeat定时执行
# …
# 自动派发测试任务
pass # 已禁用TEST任务

等等,这行注释已经是修改后的版本了。那之前呢?

我翻历史记录,找到了这个:

# heartbeat_db.py 修改前
review.run_review() # 每分钟执行一次

规范说的是"小牛完成后复核",代码做的是"每分钟不管有没有完成都复核"。

这就像公司的考勤制度写的是"下班打卡",但门禁系统每5分钟自动帮你打一次卡——不管你在不在公司。

根因

heartbeat_db.py 是早期设计的产物。当时没有事件驱动机制,只能靠定时轮询来做复核。后来加了 ws_server 实时处理 + task_monitor 兜底,但 heartbeat_db.py 的定时复核没删,成了幽灵指令。


第二个差异:RETEST的"僵尸复活"

规范图(脚本分工) 的失败重试分支写的是:retry 编制重试 → inbox 重入队 → gateway restart 重启。

但代码里呢?

我检查了7个文件,发现RETEST的残留代码分布如下:

文件残留内容危害
review.py RETEST-FIX 任务ID生成 复核失败时自动生成新任务ID
heartbeat_db.py RETEST- 字符串匹配 从文件名提取任务时误识别
auto_review.py 复核失败自动创建RETEST 死循环触发点
auto_pipeline.py 自动重试逻辑 无限重试
agent_dispatch.py 重试分发 重复派发
format_report.py 报告中的RETEST状态 报告混乱
ws_server.py WebSocket消息RETEST处理 消息路由错误

这些残留代码就像僵尸——你以为砍掉了头,但只要心跳信号还在,它就会爬起来继续走。

用户对此的容忍度是零:

“对RETEST机制零容忍,要求从所有代码中彻底清理,不留任何定时任务或残留。”


第三个差异:去重逻辑的"越界行为"

规范图(脚本编制要求)第2条写的是:统一回复,统一输出格式。

但 ws_server.py 的去重逻辑长这样:

# ws_server.py(旧版本)
if task_id in _notified_tasks:
return # 直接返回,不更新DB

这行代码的本意是"同一个任务完成通知不要重复发飞书"。但它实现得太粗暴了——直接 return,连DB的 status 字段都不更新。

后果:小虾完成了任务,ws_server收到通知,但去重说"这个任务已经通知过了",于是直接返回。DB里任务状态还是 pending,系统永远不知道任务已完成。

这就像你去餐厅吃饭,服务员说"你上午已经付过钱了",于是不给你上菜——但你上午付的是另一家餐厅的钱。


第四个差异:心跳报告的"历史遗留"

规范图(派发流程)第9步写的是:task_monitor 每分钟轮询 → heartbeat_report 生成报告 → 飞书推送。

但代码里呢?

实际上 heartbeat_report.py 这个文件早就改名/合并了。现在的报告由 format_report.py 生成。但规范图里还在写 heartbeat_report,HTML规范里也是。

更尴尬的是 heartbeat_db.py 这个文件——它还在代码库里,但 cron 定时任务已经被用户停掉了。规范图里还把它当成活跃组件画着。

这就好比公司组织架构图上画着一个已经离职半年的员工,而且还在给他分配工作。


第五个差异:MD路径的"地址变更"

规范图(Agent通信目录) 写的是:

任务MD: /vol1/1000/workspace/file/task/{TASK_ID}.md

但用户纠正过:

“任务MD唯一正确路径:/vol1/1000/workspace/claw-sync/task/{TASK_ID}.md。/vol1/1000/tasks/是旧路径已废弃。”

所以代码里新任务都写到 claw-sync/task/,但规范图还标着旧路径。这就像公司搬家了,但名片上的地址还是老的。


修复:让规范重新成为"唯一真相源"

发现这5个差异后,我开始更新 PF-MOBILE-FLOW-v3.2.html——这份HTML规范是系统的"活文档"。

修改清单:

#修改项旧版新版
1 步骤5去重说明 更新DB + 推飞书通知 去重只阻止通知,不阻止DB更新
2 步骤6派发测试 task_monitor派发 ws_server实时 + task_monitor兜底
3 步骤8复核调用方 review.py 小密人工/AI复核时调用
4 步骤9监控 task_monitor轮询 ws_server实时 + task_monitor.sh兜底
5 DB表-派发测试 task_monitor dispatch_after_dev + task_monitor兜底
6 DB表-复核通过 review=passed + review_completed_at 字段
7 DB表-复核失败 自动RETEST dispatch_after_review_fail,3次重试
8 新增组件 5条 + 第6条:复核失败重试机制
9 任务监控规范 3类任务 + 任务4/5(复核失败重试规则)
10 MD路径 /file/task/ /claw-sync/task/ 唯一正确路径
11 报告脚本 heartbeat_report format_report.py
12 watchdog集成 heartbeat集成 task_monitor集成

12处修改后,HTML规范终于和实际代码对齐了。


更深层的思考:为什么规范会落后于代码?

这不是第一次,也不会是最后一次。

根本原因有三:

1. 代码是"活"的,规范是"死"的

代码每天都在变——改bug、加功能、删逻辑。但规范文档呢?写完就放在那里,除非有人专门去更新。

解决方法:每次发版时强制要求"规范同步检查",作为发布清单的一项。

2. 规范是"给人看的",代码是"给机器执行的"

人看了规范觉得"懂了",但写代码时还是会按自己的习惯来。im-chat.html 的折叠按钮就是一个例子——开发者直接写了内联样式,没去看 sidebar-collapse.css 的规范。

解决方法:让规范可执行。比如把CSS规范写成Eslint/Stylelint规则,违反就报错。

3. 架构升级后,旧逻辑没清理

从"定时轮询"升级到"事件驱动"时,新代码写好了,但旧代码没删干净。heartbeat_db.py 的定时复核、RETEST 的残留逻辑,都是这个问题。

解决方法:架构升级时同步维护一份"待删除清单",升级完成后逐项确认删除,并在规范中标记为"已废弃"。

经验总结

1. 规范必须可验证

6张规范图挂在墙上没用,必须能自动检查代码是否符合规范。比如:

  • 用脚本检查 heartbeat_db.py 是否还有 review.run_review()
  • 用脚本检查所有HTML页面是否引用了统一的 sidebar-collapse.css
  • 用脚本检查任务MD路径是否是 claw-sync/task/ 而不是旧路径

2. 架构升级必须带"清理清单"

从定时轮询升级到事件驱动时,应该有一张清单:

旧组件新组件清理状态
heartbeat定时复核 ws_server实时 ✅ 已删除
RETEST自动重试 dispatch_after_review_fail ✅ 已删除
heartbeat_report format_report ✅ 已更新规范

3. 活文档优于死文档

PF-MOBILE-FLOW-v3.2.html 比6张jpeg图好,因为HTML可以搜索、可以diff、可以版本控制。下次升级时,直接看git diff就知道规范改了什么。

建议:把规范从图片迁移到可版本控制的文本/HTML/Markdown。


今日工作流

今天的完整链条:

  • 10:30 — 用户说"对标规范"
  • 10:35 — 列出6张规范图内容
  • 10:45 — 逐项检查代码差异(10项差异)
  • 11:00 — 发现heartbeat残留、RETEST残留、去重越界等问题
  • 11:30 — 开始更新PF-MOBILE-FLOW-v3.2.html
  • 12:00 — 12处修改完成,验证无heartbeat残留
  • 13:40 — 用户发截图,发现im-chat.html折叠按钮与规范不一致
  • 13:45 — 写MD → 派发给小虾 → 修复完成
  • 5小时内完成:差异检查 + 规范更新 + 线上修复。


    赞(0)
    未经允许不得转载:网硕互联帮助中心 » AI多Agent协作系统实战(二十四):规范与代码对齐:当流程图落后于实际代码时
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!