我的 Cron 显示 OK,但什么也没做
上周二,我的 OpenClaw agent 运行了一次安全审计。
控制面板显示绿灯。状态显示为:ok。没有错误,也没有警报。
但 agent 什么也没做。
agent 在任务执行期间崩溃了。发生了一个 MiniMax 过载错误。外部框架没有捕获到它。尽管 agent 失败了,框架却认为任务已成功完成。
直到三天后我手动检查会话转录(transcript)时,才发现了这个错误。
我需要一种方法来发现这些“静默崩溃”。为此,我编写了一个 30 行的审查脚本来解决这个问题。
问题所在
框架可以检测网络超时和身份验证失败,但无法检测 agent 轮次(turn)内部发生的情况。当子 agent 崩溃时,系统通常会产生一条特定的消息:“[assistant turn failed before producing content]”。
对于框架来说,这看起来就像是一条正常的回复。状态依然保持为 "ok"。这是一种静默失败(silent failure),也是最难发现的错误类型。
解决方案
我添加了一个脚本,用于检查实际的转录内容,而不仅仅是状态码。
该脚本会查找那个特定的失败字符串,并使用正则表达式从文本中提取出准确的错误消息。
这使得脚本能够显示真实原因,例如:
overloaded_errorrate_limit_exceededcontext_length_exceeded
一旦看到了错误详情,我就找到了根本原因。崩溃是由于模型回退链(model fallback chain)引起的。我移除了导致级联故障的免费回退模型。移除它之后,我的 cron 运行得更快、更可靠了。
结果
现在该脚本每晚都会运行。它会检查前一天的转录内容。如果发现静默崩溃,它会向我的 Telegram 发送警报。
我不再需要等上好几天才能发现错误,每天早上我都能看到它们。
教训
控制面板显示绿灯并不意味着你的 agent 正常工作了。框架状态和 agent 输出是两回事。
如果你运行自动化 agent,不要仅仅依赖状态码。要检查转录内容。构建一个工具来帮你检查转录内容。静默失败往往会造成最大的损失。
Optional learning community: https://t.me/GyaanSetuAi