P349 · 多 Agent 协作

把停止监督放在工作任务之外

Keep the Stop Supervisor Outside the Worker

让独立监督者管理总时限和停止决定,任务卡住时仍能发出停止信号。

编辑审核

以下示例与示意结果由本站编写,用于说明方法,不是模型实测结果。

使用场景

已授权无人值守任务 worker-a 卡在长调用里,配置心跳没有继续。教学启动前已明确监督期限、当前进程身份和可使用的停止策略;缺心跳不是自动证明遭入侵或所有工作失败。

具体做法

把时限与停止决定放在不依赖 worker-a 继续运行的控制路径。监督器绑定本任务身份与原授权,检查心跳时效,到约定条件用允许的停止方式。记录最后心跳、超时决定、实际停止确认及日志;停止未确认保留 unknown,停止成功也不是任务成功。

反例

让阻塞中的 worker-a 自己发现超时并停止;或者缺一条心跳就终止所有同名进程,报告分析已完成。

改进写法

教学外部监督器观察 worker-a 的指定心跳,按启动前约定的期限与进程身份决定停止。只使用获准策略,保留轨迹并核对停止结果;没有确认则写 unknown,已停止写 stalled待查而非成功。不要把其他任务或用户服务当本次对象,也不从缺心跳推断遭入侵。

为什么这样改

工作者失去控制路径时无法可靠执行自己的监督逻辑。独立控制路径仍能判断期限,但明确身份与状态防止监督变成无边界杀进程或假完成。

如何验证

教学模拟 worker 阻塞,监督器仍能记录心跳失效;停止确认与任务结果分别列。进程已被替换、读取不可用或停止失败时不能使用旧身份宣称已终止。

检查不依赖同一阻塞队列,日志保留但没有敏感内容外泄。本篇不终止真实任务。

适用边界

心跳只说明存活,不证明有意义进展或未受攻击。期限、平台停止和进程树机制需实际实现;冻结来源的 30 秒和 SIGKILL是实例,不是普遍安全默认。

原文与版本

如何收录这些方法