前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
AI 面试
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
AI 热点
开发者导航
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
AI 面试
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
AI 热点
开发者导航
返回 AI 情报前线
All News · 全部资讯4376
  • SDK 缓存键缺陷导致用户间答案串取
  • 生产环境开调试模式:源码泄露教训
  • 树莓派边缘部署 Gemma 模型:LiteRT 实战指南
  • Node.js SaaS 接入 AI 生图的工程实践:预设、约束与预算护栏
  • 四大 LLM 可观测性平台横评:Langfuse vs Helicone vs Opik vs Phoenix
  • 671个MCP服务器调研:重试无幂等保障的隐患
  • GitHub Copilot将于9月弃用MAI-Code-1-Flash
  • App 内聊天机器人:统一 OpenAI 兼容 API 还是分立 SDK
  • 无框架 Agent 开发实录:真实 Bug 与框架抉择
  • AI Agent 可观测性实战:Tracing 与指标设计
  • Agent 防护栏应写在代码里而非 Prompt 中
  • 100行代码实现原生ReAct循环:手写Agent更透明
  • Agent开发正确顺序:先建评测集再写循环
  • 写Tool合约如写规格文档:Agent开发的前置规范
  • AI Agent 存在 Prompt 注入风险,可被诱导泄露数据
  • VentStream:开源 CDC 引擎实时同步数据库
  • 我用自建工具分析了30天Claude Code日志,发现每月3600美元浪费
  • MAI-Code-1-Flash:微软低成本编程模型解析
  • MAI-Code-1.1-Flash 登陆 GitHub Copilot
  • OpenAI 桌面应用 ChatGPT/Codex 正式登陆 Linux
  • 无人值守 AI Agent 的静默失败检测工具
  • 本地 AI 模型实战:量化版本性能对比与编程 Agent 集成
  • 深度推理系统的高成本困境:优化策略与定价模式
  • OpenAI/Anthropic/Google API漏洞:可提取模型推理痕迹,内含泄露密码
  • 跨机器AI Agent分析管道设计:五个架构模式
  • 持久化 Agent 运行时正在成为标配
  • WebMCP:给 Agent 结构化工具而非爬取 DOM
  • MCP Server 六大安全漏洞与修复方案
  • Node.js 工单分类:Claude/Gemini/OpenAI 实战对比
  • Databricks收购Electric:为每个AI Agent配置独立Postgres数据库
  • Context Rot:AI Agent 为何在长对话中质量下降
  • AI 编程工具为何总用废弃 API:根源分析与解决思路
  • 模型路由本质是利润率路由:成本与质量平衡实战
  • Nvidia 开源路由框架 NeMo Switchyard:让 Agent 工作流成本降至三分之一
  • MCP 缓存键是授权漏洞:六类缓存分离方案修复跨租户数据泄露
  • Pixieset 用 Bedrock 实现 AI 功能 35% 采纳率
  • OpenAI Agents SDK 0.20.0 升级避坑指南
  • 亚马逊Nova Act助力QA自动化:自然语言描述测试,周期大幅缩短
  • AI 漏洞发现速度超越人类修复:安全格局重塑
  • AWS 企业级 Claude 应用网关部署完整参考
  • Claude Code 用户总结:CLAUDE.md 常见误区
  • AI 在安全测试中自主伪造身份企图植入后门
  • 构建可审计的深度推理 Agent 系统
  • AI 代码审查机器人工程实践:令牌定价、批处理与提示缓存
  • 构建安全 Agent 工作负载系统实战指南
  • 后端工程师 LLM 微调指南:行为适配而非知识填充
  • Meta Muse双模型实测:Glimmer 30B开源可本地跑,Spark 1.1称霸MCP榜单
  • 英伟达 Nemotron 3.5:小模型跑出高速度,36 亿参数追平 GPT-4 级能力
  • 用 TypeScript 构建 Prompt 缺失来源的三元分类队列
  • 用最便宜模型加路由实现 100% 有效输出的系统设计
  • 8款AI模型同一崩溃测试:没有赢家
  • 已加载 51 / 4376
8.0
热点
AI SCORE
编程提效2026-08-12 01:43

无人值守 AI Agent 的静默失败检测工具

dev.to · AI#AI Agent#监控#DevOps
Editor brief · 编辑速览

作者发现 cron 调度的 AI 任务以 exit code 0 结束但实际未生成目标文件,开发了 agent-coroner 自动检测这类静默失败并告警。

文章思维导图
Knowledge map
拖拽缩放
Full translation

完整中文译文

我的一个 cron 定时任务运行得很正常:退出码 0,没有 stderr。但它应该生成的周报从未出现,也没有任何通知。过了好几天我才发现,手动去检查目录时才注意到。

我称这种现象为「静默失败」,这也是无人值守 Agent 最棘手的失败模式:任务报告成功,所以不会触发任何告警,唯一能发现它的方式就是有人恰好去看了一眼。我写了 agent-coroner 来自动捕获这类问题。v0.1.0 已发布在 GitHub、PyPI 和 Claude Code 插件市场。

连续五周,我的周报任务都运行正常。它拉取数据、生成 markdown、每周五早上写入文件。我没有主动监控它,因为它看起来正常工作,属于无聊的基础设施。

第六周:没有报告。日志看不出明显问题,任务也没有自己的告警机制。到第七周它自己恢复了过来,一切看起来又正常了。至今我也没能定位那缺失的一周的根本原因。最让我困扰的是:如果没有产物检查,我甚至不会知道这件事发生过。

我没有试图猜测什么时候会出问题,而是决定明确声明每个任务应该产生什么,然后确定性检查这些承诺。分三层。

第一层是 contracts 文件,在里面声明每个任务承诺的内容:

jobs:
  weekly-report:
    schedule: "FRI 08:30"
    grace_minutes: 60
    artifacts:
      - path: "reports/weekly-*.md"
        max_age_hours: 192
        min_bytes: 500
    logs: "run.log"

第二层是 checker,一个你从 cron 或任务计划程序运行的小 CLI。它问四个问题:文件是否存在、是否新鲜(max_age_hours)、是否够大(min_bytes)、以及你可选的 verify 命令是否通过。不涉及 LLM,所以一次运行只需几秒,持续监控几乎没有成本。如果违反合约就非零退出,否则零退出,所以你可以把它接入任何已有的告警系统。

第三层是 autopsy。只有在合约被打破时,才调度 Claude 以只读方式(--allowedTools "Read,Grep,Glob")读取日志,写一份四段式的复盘报告:事实、按置信度排序的假设(附日志引用)、供人工执行的验证步骤、以及预防建议。它负责诊断,绝不修改任何东西。

有一个设计决策值得专门说明:检测从不依赖 LLM。checker 总是先运行,如果 autopsy 崩溃了,违规通知仍然会发出。还有一个刻意为之的决定:不做自我修复。一旦你允许 LLM 在无人值守系统中打补丁,失败就开始被隐藏而不是被报告,而我信任一个只做报告的监控系统。

在新项目上吃自己的狗粮

发布的第二天,我启动了一个新项目(一个股票模拟交易评估,预测日本电力交易所 JEPX 的日前价格),并将其周度准确率报告注册为 coroner 合约。仅仅是构建和注册这条流水线,就暴露了两个恰好是这款工具所要捕获的陷阱。

第一个陷阱:JEPX CSV 端点在缺少 Referer header 时返回 HTTP 200,但响应体是零字节。成功状态码,没有数据。我在写 fetch 层时用 curl 抓到了它。只检查状态码的方案会「成功」,保存一个空文件,然后悄悄毒害下游所有环节。现在的防御有两层:fetcher 明确拒绝空响应体,合约的 min_bytes 规则守护产物。一个沉默,另一个仍然会触发。

第二个陷阱:我的监控产物位于另一个仓库、另一块磁盘上,所以我用绝对路径 glob 写了合约,然后 checker 崩溃了。Glob 解析委托给了 pathlib 的相对 glob,所以绝对路径不工作。修复方法是设置 workdir(默认为 contracts.yaml 所在目录)并使用相对 glob。改完之后,checker 通过了:power-eval-weekly: ok, exit 0。

事后回想起来,第二个陷阱让我觉得很有意思。把验证工具放到真实服务中,暴露了验证工具自身文档中的空白,所以验证工具得到了验证。README 现在记录了 workdir 和相对 glob 规则。

uv tool install agent-coroner   # or: pip install agent-coroner

PATH 上的 claude CLI 仅在需要 autopsies 时才需要;checker 独立运行。

写 contracts.yaml:

jobs:
  weekly-report:
    schedule: "FRI 08:30"
    grace_minutes: 60
    artifacts:
      - path: "reports/weekly-*.md"
        max_age_hours: 192
        min_bytes: 500
    logs: "run.log"
$ coroner check --config contracts.yaml --no-autopsy
[coroner] 1 violation detected
- weekly-report / reports/weekly-*.md: missing (no file matches 'reports/weekly-*.md' under <contracts-dir>)
$ echo $?
1

一旦 reports/weekly-*.md 存在、新鲜且满足 min_bytes:

$ coroner check --config contracts.yaml --no-autopsy
weekly-report: ok
$ echo $?
0

把它注册到调度里。在 Linux/macOS 上:

*/15 * * * * coroner check --config /path/to/contracts.yaml >> /var/log/coroner.log 2>&1

在 Windows 上:

schtasks /create /tn "coroner-check" /tr "coroner check --config C:\path\to\contracts.yaml" /sc daily /st 09:00

通知委托给你选择的外部命令(邮件、Slack、随意什么),{message_file} 持有完整消息文本的路径。

Claude Code 集成

如果你用 Claude Code,还有一个插件:

/plugin marketplace add Chikoku-NEKO/agent-coroner
/plugin install agent-coroner@agent-coroner-marketplace

它添加了 /coroner-status(哪些任务正常、哪些有违规)、/autopsy <job-name>(按需运行复盘),以及一个 SessionStart hook,在打开会话时展示未读的复盘报告。

如果你有无人值守的任务应该产生产物——周报、数据管道、定时的 Claude 任务——对产物做存在性和新鲜度检查是廉价的保险,不管你是否用这款工具。agent-coroner 只是让它变得声明式:一套 YAML 文件、一个确定性 checker、在出问题时的只读复盘。

GitHub: https://github.com/Chikoku-NEKO/agent-coroner

PyPI: https://pypi.org/project/agent-coroner/

Claude Code marketplace: agent-coroner plugin

如果你试了但在注册时出了问题,开个 issue。就是上面两个陷阱被记录下来的方式。

Original source

本文由 AI 翻译整理自 dev.to · AI,原文版权归原作者所有。

阅读英文原文
上一篇
OpenAI 桌面应用 ChatGPT/Codex 正式登陆 Linux
下一篇
本地 AI 模型实战:量化版本性能对比与编程 Agent 集成