简介:本教程面向开发者与技术负责人,系统讲解企业级Agent从Demo走向生产所需的生产运行时建设方法。你将学会区分执行外壳与运行时的职责边界,掌握状态持久化、断点恢复、权限校验、人机协作、可观测与运维六类核心能力的落地步骤,并能据此评估与搭建适合自身业务的Agent运行时框架,避开长任务执行中的常见陷阱。
本教程要帮助读者完成一件具体的事:把停留在演示阶段的 Agent 原型,改造为能够承载真实业务的生产级 Agent 系统。这里的”改造”不是换一个更强的模型,也不是把提示词写得更精巧,而是补齐一整套运行时能力。
读完本文,你应当能够:
适合阅读本文的读者包括:正在做 Agent 产品的开发者、负责技术选型的架构师、需要评估 Agent 能否上生产的运维与技术负责人,以及希望把 AI 能力嵌入现有业务系统的企业用户。
以下场景都适合对照本教程进行检查与建设:
如果你的 Agent 只是单轮问答、无状态、失败重试成本几乎为零,那本文的大部分内容可以先收藏,等业务复杂后再回来。
在动手之前,请确认具备以下基础条件:
请注意,本教程不依赖任何特定厂商产品,所有模块都可以用通用组件实现。如果你使用云服务,可用对象存储、消息队列、日志服务、监控告警、身份认证等通用类目能力来支撑。
这是整个建设工作的第一步,也是最容易被跳过的一步。
做什么:把当前 Agent 代码按职责拆成两部分。一部分是”执行外壳”,负责组装提示词、调用模型、解析工具调用、执行循环;另一部分是”运行时”,负责状态、调度、恢复、权限、观测。
为什么这么做:执行外壳变化快——模型换了、提示词改了、工具增删了,外壳都要跟着动。运行时变化慢——它处理的是任务生命周期、失败恢复这类与模型无关的问题。如果两者混在一起,每次调提示词都可能破坏状态管理逻辑。
注意什么:划分时可以用一个简单标准判断——“这段代码会不会因为换模型而重写?”会,就属于外壳;不会,就属于运行时。
做什么:为 Agent 的每次执行定义一个显式的状态对象,并用检查点机制定期落盘。
一个通用的状态结构包含以下字段(伪代码示意):
TaskState:task_id # 任务唯一标识step_index # 当前执行到第几步plan # 当前的任务计划completed_steps # 已完成步骤及结果pending_approval # 等待人工确认的内容artifacts # 已生成的中间产物引用token_usage # 累计消耗owner # 任务归属用户status # running / paused / failed / done
为什么这么做:业务级 Agent 的失败,很多不是”模型答错”,而是”执行到第 8 步进程挂了”。如果没有状态落盘,重启后只能从头再来,既浪费成本,又可能重复调用外部接口产生脏数据。
注意什么:
做什么:让运行时具备两个能力——从任意检查点恢复执行;以及恢复后不会重复产生副作用。
为什么这么做:恢复是”能不能继续”的问题,幂等是”继续得对不对”的问题。只有恢复没有幂等,重启后可能给用户发了两遍通知、写了两遍订单。
实施要点:
task_id + step_index + action_name;step_index 跳过已完成步骤,不要依赖”模型重新推理一遍判断做到哪了”。验证方式:故意在任务执行到中途时杀掉进程,观察重启后是否从断点继续,并检查外部系统是否有重复记录。
做什么:明确三类交互的语义——等待确认、用户插话、任务取消。
为什么这么做:Agent 还在跑,用户又发来一句”前面那个方向不对,换个方案”,系统如果没有明确策略,体验会非常混乱:可能两个任务并行跑,也可能把用户的新指令丢进旧上下文里造成语义错乱。
建议的策略:
| 交互类型 | 推荐处理方式 |
|---|---|
| 等待审批 | 任务置为 paused,状态落盘,等待审批结果写入后唤醒 |
| 用户插话(新方向) | 默认排队,可由用户显式选择”打断当前任务” |
| 用户取消 | 触发优雅停止,保存当前检查点,标记状态为 cancelled |
| 长时间无响应 | 设置过期时间,超时后转入待恢复队列或通知用户 |
注意什么:等待审批时,状态里必须保存”到底在等用户确认哪一步、哪个具体动作”,否则用户隔半小时回来点确认,系统已经不知道确认的是什么了。
做什么:为每个任务绑定身份,并让工具调用在身份约束下执行。
为什么这么做:Agent 会代表用户访问数据,如果它执行时用的是系统级高权限凭证,一次越权查询就可能泄露其他用户的数据。
实施要点:
做什么:让每一次任务执行都可追踪、可回放、可告警。
为什么这么做:生产环境的问题往往出现在长尾场景,没有观测就只能靠用户投诉来发现问题。
最少需要采集的信息:
运维动作:对失败率、超时率、平均步骤数设置阈值告警;对卡在 paused 状态过久的任务主动提醒;版本升级前保留旧版本检查点的兼容读取能力。
如果使用配置化方式管理运行时行为,建议关注以下几类配置项,并理解其风险:
每一项配置都建议先在测试环境用小流量验证,再逐步放开。
完成上述建设后,用下面几个测试来判断是否达标:
五项都通过,说明运行时已经具备承载业务的基础能力。
问题 1:恢复后模型”忘记”了之前做了什么。
原因通常是状态里只存了步骤索引,没存步骤结论。解决方法是把每一步的关键结论摘要一并落盘,恢复时作为上下文注入。
问题 2:重试导致下游出现重复数据。
说明幂等键没有生效或下游不支持幂等。解决方法是把幂等控制上移到运行时层,由运行时保证同一操作只发起一次有效调用。
问题 3:任务长期卡在等待状态。
检查审批超时配置是否生效,以及是否有唤醒机制。建议为所有 waiting 状态设置统一的超时转移策略。
问题 4:成本随任务时长快速上升。
排查是否存在上下文无限增长。做法是对历史步骤做摘要压缩,只保留与当前决策相关的信息。
问题 5:升级后旧任务无法恢复。
说明状态结构发生了不兼容变更。建议为状态对象加版本号,并保留旧版本的读取兼容层。
从演示到生产,Agent 之间隔着的不是更强的模型,而是一套能托住复杂、不稳定、可中断、可恢复的执行过程的运行时。本教程给出的路径是:先划分执行外壳与运行时的边界,再依次补齐状态与检查点、断点恢复与幂等、人机协作策略、权限边界、可观测与运维这五块能力,最后通过故障注入与回放测试验证效果。
业务级 Agent 的竞争力,本质上不只在于那个更聪明的执行循环,而在于能否把状态、权限、恢复、观测和人机协作做成一套稳定、可复用的底层能力。建议读者从当前项目中最痛的一环入手,先落地一块能力并验证,再逐步扩展,避免一次性重写带来的风险。