Human-in-the-Loop审批超时后任务为什么丢失?等待状态、恢复令牌与过期策略完整排查 文章摘要Human-in-the-Loop可以在Agent执行高风险工具前暂停流程,等待人工批准、修改或拒绝。但很多系统把“等待审批”实现成内存中的Future、HTTP长连接或短期Redis Key:审批人几小时后点击同意时,原Pod已经重启,回调找不到等待对象;或者任务虽然还在数据库中,恢复令牌已无法对应当前Checkpoint;再或者Plan已经修订,旧审批仍然放行了不同参数的副作用。审批超时也不等于拒绝。它可能意味着审批人未看到通知、时区不同、值班人变更或业务已经失去时效。生产系统必须明确等待状态、审批对象、恢复令牌、截止时间、升级路径、过期动作和状态版本。本文从Interrupt持久化、审批请求、Resume Token、乐观锁、一次性消费、Plan与Input绑定、过期扫描、通知重试、代理审批、多级审批、取消、图版本迁移和审计等方面给出完整排查与实现方案。一、最常见的丢失场景Agent运行:生成付款申请 ↓ 等待财务负责人审批代码:CompletableFutureDecisionfuture=newCompletableFuture();waitingMap.put(runId,future);Decisiondecision=future.get(24,TimeUnit.HOURS);几个小时后:Pod滚动发布 →waitingMap清空 →审批回调到达 →找不到Future →任务永远WAITING根因是:等待关系存在内存中 而不是持久状态中二、Human-in-the-Loop需要哪些持久对象至少:Agent Run Checkpoint Interrupt Approval Request Approval Decision Resume Token Notification Attempt Audit Event只存run.status=WAITING不够。三、审批请求模型publicrecordApprovalRequest(StringapprovalId,StringtenantId,StringrunId,StringthreadId,StringinterruptId,StringcheckpointId,StringstepId,intplanVersion,StringplanHash,StringinputHash,ApprovalTypetype,RiskLevelrisk,SetStringallowedActions,StringrequestedBy,InstantrequestedAt,InstantexpiresAt,ApprovalStatusstatus,longrowVersion){}四、审批状态publicenumApprovalStatus{PENDING,APPROVED,EDITED,REJECTED,EXPIRED,CANCELLED,SUPERSEDED,CONSUMED}为什么需要SUPERSEDED:Plan已经重新生成 旧审批请求失效五、审批不是Run级布尔值错误:run.approved=true这无法回答:批准了哪个Step;-批准了哪些参数;-基于哪个Plan;-是否允许修改;-何时过期;-是否已消费。审批必须绑定具体操作。六、Interrupt模型publicrecordAgentInterrupt(StringinterruptId,StringrunId,StringthreadId,StringcheckpointId,StringnodeName,InterruptTypetype,JsonNodepayload,StringpayloadHash,InterruptStatusstatus,InstantcreatedAt,InstantresumedAt){}七、Interrupt与Approval的关系一个Interrupt可能:触发一个审批;-触发多级审批;-请求用户补充信息;-请求人工修改参数;-请求选择分支。Approval是Human Input的一种,不应把所有Interrupt都叫审批。八、恢复令牌为什么不能只含runId错误URL:/approve?runId=R100攻击者或旧页面可能对当前不同状态生效。Resume Token至少绑定:token_id run_id interrupt_id checkpoint_id state_version expected_node allowed_action expires_at nonce九、Resume Token模型publicrecordResumeTokenCla

相关新闻

最新新闻

Day53-Docker:Dockerfile最佳实践 + 多阶段构建 + docker-compose编排

Day53-Docker:Dockerfile最佳实践 + 多阶段构建 + docker-compose编排

为什么你的 Spring Boot 镜像又大、又慢、还跑不起来把 Spring Boot 应用部署上线的老大难,往往不是代码 bug,而是"在我机器上能跑,到你环境起不来"——JDK 版本不一致、内网依赖拉不到、glibc 差异让 native 库直接崩。Docker 解决…

2026/8/19 23:15:26
微信宠物服务沟通记录怎么导出保存?WeXPort完整操作指南

微信宠物服务沟通记录怎么导出保存?WeXPort完整操作指南

摘要 养宠家庭与宠物医院、美容店、寄养机构、训练师的预约排期、疫苗记录、诊疗沟通、费用结算、注意事项确认几乎全部发生在微信中。这些记录一旦随清理或换机而丢失,将面临疫苗接种时间线断档、诊疗过程无据、寄养约定说不清、费用争议无凭证等问题。本文介绍如…

2026/8/19 23:15:26
【MATLAB例程,车联网8】MPC网联车辆节能跟驰控制:速度跟踪、间距约束与能耗优化。附MATLAB完整代码的下载链接

【MATLAB例程,车联网8】MPC网联车辆节能跟驰控制:速度跟踪、间距约束与能耗优化。附MATLAB完整代码的下载链接

完整代码,文末附下载连接。相关代码的讲解、定制等,可联系我 文章目录程序简介场景建模对比方法运行结果MATLAB源代码程序简介 本例程面向网联车辆纵向跟驰节能控制问题,构建前车速度变化、车间距约束、加速度平顺性和能耗指标的完整仿真场景…

2026/8/19 23:15:26
在LattePanda 3 Delta上构建Armbian风格的高效Linux系统

在LattePanda 3 Delta上构建Armbian风格的高效Linux系统

1. 项目概述:当LattePanda 3 Delta遇上Armbian如果你手头有一块LattePanda 3 Delta(以下简称LP3D),这块小巧但功能强大的x86单板计算机,你可能已经尝试过Windows 10/11,甚至一些Linux发行版。但你是否想过&…

2026/8/19 23:15:25
树莓派安全实践:从默认pi用户到系统安全加固全解析

树莓派安全实践:从默认pi用户到系统安全加固全解析

1. 树莓派OS中的“pi”用户:从默认账户到安全基石如果你刚拿到一块树莓派,兴奋地烧录好官方系统镜像,第一次启动后,系统大概率会引导你创建一个用户。但你可能不知道,在更早的版本里,或者在某些“无头”&am…

2026/8/19 23:15:25
GitHub 本周 Trending Top 5 深度调研:从图表工具到基础模型,谁在改变开发者生态?

GitHub 本周 Trending Top 5 深度调研:从图表工具到基础模型,谁在改变开发者生态?

GitHub 本周 Trending Top 5 深度调研:从图表工具到基础模型,谁在改变开发者生态?调研时间:2026-08-15 数据来源:GitHub 官方 API、各项目 README本周 GitHub Trending 榜单热闹非凡,Top 5 项目覆盖了 AI 开…

2026/8/19 23:10:25