前端进阶之旅前端进阶之旅
  • 基础篇HTML/CSS/JS 打底
  • 进阶篇原理与工程化
  • 高频篇面试最常问的那批
  • 精选篇按模块收敛的总结
  • 手写篇常考代码手写实现
  • 面经篇真实面试问题复盘
  • AI 篇NEWAI 时代的前端考点
  • 历年面经NEW按年份追踪真实考点
  • 每日一题每天一道,攒手感
  • 专项自测100 题快速查漏
  • 小程序题库小程序专项刷题
  • 算法题库NEW在线编码即时判题
  • 知识卡片NEW碎片时间过考点
  • 面试题大全常见问题解析
  • AI 答疑NEW随时提问,即时解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • AI 定制路线NEW按你的简历现排
  • AI 知识地图NEW串起全站知识点
  • 原理篇React / Vue 源码拆解
  • HTTP从报文一路讲到 HTTPS
  • 浏览器渲染、事件循环、进程
  • 计算机基础Linux、网络、操作系统
  • 设计模式23 种模式怎么用
  • Node学习指南从环境搭建到服务端
  • NPM工作流script、依赖与发布
  • Docker容器化部署上手
  • Canvas图形与动画实战
  • 前端系统进阶学习大型项目工程化
  • 前端综合文章长期沉淀的实践文
  • 思维导图知识点全景图
  • 学习路线按图索骥不跑偏
  • AI 热点NEWAI 每日动态
  • 公众号动态公众号历史文章
  • 博客动态站长的技术博客
  • 开发者导航常用工具与文档站
  • 基础篇HTML/CSS/JS 打底
  • 进阶篇原理与工程化
  • 高频篇面试最常问的那批
  • 精选篇按模块收敛的总结
  • 手写篇常考代码手写实现
  • 面经篇真实面试问题复盘
  • AI 篇NEWAI 时代的前端考点
  • 历年面经NEW按年份追踪真实考点
  • 每日一题每天一道,攒手感
  • 专项自测100 题快速查漏
  • 小程序题库小程序专项刷题
  • 算法题库NEW在线编码即时判题
  • 知识卡片NEW碎片时间过考点
  • 面试题大全常见问题解析
  • AI 答疑NEW随时提问,即时解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • AI 定制路线NEW按你的简历现排
  • AI 知识地图NEW串起全站知识点
  • 原理篇React / Vue 源码拆解
  • HTTP从报文一路讲到 HTTPS
  • 浏览器渲染、事件循环、进程
  • 计算机基础Linux、网络、操作系统
  • 设计模式23 种模式怎么用
  • Node学习指南从环境搭建到服务端
  • NPM工作流script、依赖与发布
  • Docker容器化部署上手
  • Canvas图形与动画实战
  • 前端系统进阶学习大型项目工程化
  • 前端综合文章长期沉淀的实践文
  • 思维导图知识点全景图
  • 学习路线按图索骥不跑偏
  • AI 热点NEWAI 每日动态
  • 公众号动态公众号历史文章
  • 博客动态站长的技术博客
  • 开发者导航常用工具与文档站
首页程序员面试题库Agent 死信队列 恢复 重放
AIAI Agent生产运行

Agent 任务反复失败进入死信队列后,恢复流程应该怎么设计而不是简单重投?

死信任务恢复的核心不是重投,而是先诊断失败类型,修复根因后,用幂等键和检查点实现可恢复重放,并设置人工审批入口。

前端进阶之旅 · 一题精讲更新于 2026.09.05
AI Agent#生产运行
先看核心答案
理解线索

死信恢复链路

  1. 错误分类区分瞬时错误与永久错误
  2. 根因修复根据分类修复配置或代码
  3. 幂等重放使用幂等键驱动重投

恢复流程的每一步都需有明确判断条件,边界是当任务对外部副作用不可控时,应降级为人工处理。

核心回答

先记住这个答案

死信任务恢复流程应分为三步:先按错误类别分类(如可重试的瞬时错误与不可重试的上下文错误),再修复根因(如调整工具schema或升级模型),最后以幂等键为约束进行重放,确保不产生重复副作用。同时,要保留完整执行轨迹,支持人工介入重放前的状态校验。

  • 死信恢复需先分类错误,区分可重试与不可重试
  • 重放必须用幂等键防止重复副作用
  • 含外部状态的任务要校验状态后才可重放

死信恢复机制:诊断-修复-重放

死信队列里保存的不仅是消息体,还应包含任务ID、执行历史、失败原因和上下文快照;其中任务ID用于定位任务,而幂等键需按步骤或操作粒度另行设计。恢复时不能盲目重投,因为Agent任务通常有多轮LLM调用和工具副作用,简单重投会重复执行那些已成功的工具调用,造成重复扣款或重复写库。

正确的机制是把重放视作一次新执行,但通过幂等键和检查点状态,让已完成的副作用在执行中保持幂等或跳过。具体做法是:工作流引擎先读取死信消息中的task_id,从检查点仓储恢复已提交的工具结果,然后从失败的节点继续执行,而不是从头开始。

场景:航班改签Agent因下游接口超时进入死信

假设一个航班改签Agent的任务包括查询航班、预订新航班、取消旧航班、发送通知。当取消旧航班的API因下游系统超时连续失败3次后,任务进入死信队列。此时,新航班已预订成功,但取消操作未完成,如果简单重投整个任务,会再次预订同一航班(无座位)或重复扣款。

处理方式是:运维人员先查看死信元数据,发现错误码503属于下游瞬时故障,于是将下游服务扩容并设置重试窗口。然后开发者调用恢复API,传入task_id,工作流引擎从检查点得知“预订新航班”已完成,于是跳过该节点,仅从"取消旧航班"节点开始重放,并使用cancel_order_id作为幂等键。最终任务成功完成,无重复副作用。

失败边界:哪些情况不能自动恢复

以下情况禁止自动重放:一是错误分类为永久失败,比如模型持续输出非法JSON或工具参数schema不兼容,因为不修复配置无法成功;二是任务涉及外部系统且检查点未保存接口返回的事务ID,无法保证幂等,此时重放可能产生重复支付。

处理方式是对永久失败升级为工单,由人工修复提示词或工具定义后重新入队;对不确定幂等性的任务,先进入待人工审批队列,由操作员确认是否重放,且重放时强制使用新的上下文和明确的幂等键。

回答前,多想一步

容易答错的地方

死信就是重投
许多人以为把死信消息放回原队列即可,但Agent任务是多步骤的,重头执行会重复成功步骤的副作用。纠正:必须追踪任务步骤状态,跳过已完成且幂等的部分。
所有错误都可重试
例如工具Schema变更导致参数错误,重试多少次都一样失败。正确做法是按错误类别分类,只有瞬时错误(超时、限流)可重试,永久错误需要先修复。
试着用自己的话回答

面试官还会怎么问?

如何设计幂等键以支持死信重放?

幂等键应包含任务ID和步骤标识,如task_id + ':' + step_id,并为每个工具调用生成唯一操作ID。当重复执行时,通过此键检测已有结果,直接返回缓存结果,避免副作用。

检查点在死信恢复中起什么作用?

检查点保存了每个节点的输入输出和已完成的副作用ID,恢复时先恢复状态,再从失败点继续,而不是从头开始。

人工审批需要对每个死信都做吗?

不需要,仅当任务涉及不可回滚副作用(如支付、发送邮件)或模型输出反复不合规时才需人工决策,其他可自动恢复。

从一道题,走向一组知识

把知识连起来

生产运行

LLM 提供商标的速率被打满时,Agent 队列消费者应如何把背压传导回生产端?

同属「生产运行」专题,接着看 Agent 队列 背压 限流 生产者 在具体场景中的处理方式。

生产运行

为 Agent 的多步任务设计幂等键时,键应该包含哪些字段才能兼顾重试与人工重跑?

同属「生产运行」专题,接着看 Agent 幂等键 设计 重试 在具体场景中的处理方式。

参考资料

  • Building effective agents

示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。

本题目录
  1. 先记住这个答案
  2. 死信恢复机制:诊断-修复-重放
  3. 场景:航班改签Agent因下游接口超时进入死信
  4. 失败边界:哪些情况不能自动恢复
  5. 容易答错的地方
  6. 面试官还会怎么问
  7. 把知识连起来
读懂,再试着讲出来

先看核心答案,再读代码。最后展开追问,检查自己有没有遗漏边界。

试着回答追问
浏览全部面试题理解原理,也关注真实的使用场景。回到顶部 ↑