基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
AIHT
内容
精选全部 AI 动态热点榜AI 日报收藏
分类
模型行业编程产品技术观点开源
更多
Agent 接入
返回首页开发者导航
AIHT
精选 / 资讯详情
8.0
热点
AI SCORE
技术实践2026-10-22 22:45

排查智能体故障,别只修改提示词

dev.to · AI#智能体#分布式系统#可靠性
Editor brief · 编辑速览

文章把智能体视为带有不确定性组件的分布式系统,将故障分为工具边界、返回数据、模型决策、副作用和循环控制五类。超时、数据截断、重复写入等问题,需要超出提示词层面的工程处理。

文章思维导图
Knowledge map
拖拽缩放
AI deep read

AI 深度解读

Agent 出错后,补一条 system prompt 很容易,判断错因却更重要。这篇文章转述 Tommy Tran 在 ACM Queue 于 2026 年 10 月 15 日发表的论文:Agent 是一个包含不确定性组件的分布式系统,许多故障应该由执行框架处理。

它值得读的地方,是把「模型犯傻」拆成了可定位、可治理的问题。不过,证据来自注入故障的玩具 Agent,不能直接推导出生产环境里大多数失败的占比。

先看故障发生在哪,再决定要不要改提示词

Agent 的运行过程是一个循环:模型提出动作,执行框架(harness)调用工具,结果再交回模型。框架承担协调工作,依赖的服务和网络却不受它控制。原文认为,这与分布式系统过去 40 年处理的问题有大量重合。

作者把故障入口分成五类:

  • 工具边界会发生超时、429 和连接中断。
  • 返回载荷可能是截断的 JSON、HTML 错误页,或者已经变更的数据结构。
  • 模型可能选错工具、编造参数,或者没验证就宣布成功。
  • 副作用可能已经发生,但确认消息丢失,重试便重复执行。
  • 循环本身可能失控,例如两个工具来回调用、整晚重试失效 API,或者耗尽上下文。

其中,第三类直接指向模型行为。其他几类通常需要先检查调用、校验和执行控制。

例如,原文用余额从 "balance": 1000 被截断成 "balance": 1 说明风险:数据看起来仍然能被理解,模型便可能继续推理。请求返回了内容,不代表业务数据完整。执行框架需要设置明确的验收条件,不能把所有返回内容直接交给模型解释。

Agent 循环的故障入口与对应治理模式

重试、去重和停止条件,应该由谁负责

模型负责决定做什么,执行框架负责控制一次动作怎样可靠地执行。

原文最具体的建议,是让框架生成幂等键(idempotency key)。它相当于操作凭证:同一个动作重发多次,接收方据此识别重复请求,避免重复退款等副作用。

下面这段代码解决的是同一步骤重试时,幂等键必须保持一致的问题:

def run_side_effect(task_id, step_id, tool, args):
    key = f"{task_id}:{step_id}:{tool}"  # same on every retry of this step
    return call_with_retries(tool, {**args, "idempotency_key": key})

要看的是 key 的来源:它由框架控制的 task_id、step_id 和 tool 组成,并覆盖参数中的 idempotency_key。如果让模型自己填,重试时换一个值,去重就可能失效。

但这段代码有边界。模型重新规划、再次提出动作时,会获得新的 step id;原文把它视为新决策,而非旧请求重发。因此,它解决的是步骤内重试去重,不能自动消除跨步骤的业务重复操作。接收方也必须实际支持幂等处理。

第二条建议是给任务同时设置时间、token 和步骤上限,并在每个新步骤开始前检查。原文举的例子是:让任务在第 20 步带着明确原因失败,避免整晚调用已经失效的 API。20 是示例,不是通用推荐值。

第三条是把瞬时错误的重试留在框架里,通过退避和随机抖动控制请求间隔。模型只接收最终结果或类型明确的失败,否则每次重试都消耗 token,还会把上下文塞满错误叙述。

依赖持续不可用时,熔断器可以返回 {"error": "circuit_open", "retry_after_s": 30},让模型知道当前依赖暂时不能使用,再决定后续路径。

我的判断

我认同这套职责划分。对会调用工具、修改外部状态的 Agent,只改提示词无法保证请求不重复,也无法阻止无限重试。与单纯增加重试相比,幂等控制和执行预算能限制故障扩散。

但「多数失败不是幻觉」在这份材料里,仍缺少足够完整的统计支撑。原文提到固定故障配置下的实验,以及其他模式带来的额外 6 个百分点,却没有展示完整结果、指标定义和基线,无法据此判断收益大小。

实验也给出了反例:故障随机出现时,熔断器反而降低了任务成功率;依赖真正持续宕机时,它才更有价值。可见,治理机制需要匹配故障形态,不能整套照搬。

原文借 tau-bench 强调,单次成功率容易掩盖连续执行的不可靠:需要连续成功八次时,整体表现会更脆弱。这个提醒成立,但材料没有给出对应成功率,也没有展开各次失败是否相关,不能直接计算八次执行的结果。

能拿来做什么

  • 在 Node 工具调用层区分网络错误、载荷错误和模型决策错误,给响应增加结构校验,再决定是否把结果交回模型。
  • 为会写入外部状态的工具固定步骤内的幂等键,并确认服务端支持去重;同时单独检查重新规划后重复提交同一业务动作的情况。
  • 给日常 AI 编程任务配置时间、token 和步骤预算,让终止原因进入日志,方便区分正常失败与循环失控。
  • 评估 Agent 时保留连续多次运行的结果,并注入超时、429、异常载荷和确认丢失等故障;除了成功率,也检查是否产生重复副作用。
Original source

本文由 AI 通读原文后重新编写,观点部分为站内判断,细节以原文为准,来源 dev.to · AI,原文版权归原作者所有。

阅读原文
上一篇
精简表结构上下文,单次调用做SQL生成
下一篇
Flint发布400亿参数本地编程模型

资讯速览

dev.to · AI · 2026-10-22 22:45

AI 评分 8.0 / 10

相关标签

#智能体#分布式系统#可靠性

继续阅读

  • 英伟达 Minerva 整合 AI 集群可观测性
  • 精简表结构上下文,单次调用做SQL生成
  • Flint发布400亿参数本地编程模型
  • 用n8n搭建带异常告警的资讯筛选流
  • 用会话时间线找出编程Agent耗时瓶颈