Agent 开发

Agent 上生产环境要考虑什么?状态保存恢复、重试、成本怎么控?

91学AI·2026/7/26·15 阅读

考察点

这道题筛的是「真把 Agent 上过生产、被线上教育过」的人。面试官想看你有没有意识到 Agent 和无状态 API 的本质区别——多步、长耗时、有副作用,以及围绕这三点的工程体系:状态恢复、容错、观测、成本。追问常往「checkpoint 存哪、怎么设计」「token 成本大头在哪、怎么降」「prompt injection 怎么防」走。

参考答案

状态保存与恢复

Agent 跑一个任务可能是几分钟到几小时,进程挂了、机器重启了,不能让用户的任务从头再来。核心设计是显式状态加 checkpoint:把 agent 的状态——消息历史、中间产物、当前执行到哪一步——序列化,每完成一个原子步骤写一次快照,恢复时按最近的 checkpoint 续跑。LangGraph 的 checkpointer、Temporal 的 workflow 都是这个思路,自己实现就用 Postgres 或 Redis 加持久层,按 thread_id 和 run_id 索引。

比状态恢复更容易被忽视的是工具幂等:恢复重跑意味着某些步骤会执行第二次,发过邮件不能再发、写过库不能再写。做法是给每个副作用操作带 idempotency key,执行前先查执行记录,命中就直接返回上次的结果。纯查询类工具没这个问题,副作用类工具必须逐个过一遍。还有人机协同场景:任务在「等待人工审批」状态可能挂起几小时甚至几天,状态必须落在持久存储里,不能只放内存。

重试与容错

重试要分层,混在一起必然乱。LLM API 层:429 限流和 5xx 走指数退避加 jitter,重试三到五次,持续失败要 failover 到备用模型或备用 key。工具层:先区分错误类型——网络超时这类可重试错误可以自动重试,参数非法这类业务错误要原样返回给模型,让它自己换策略,盲目重试业务错误就是制造死循环。步骤层:整个节点失败可以基于 checkpoint 重跑。

一条铁律:所有外部调用必须有 timeout。Agent 系统最常见的雪崩就是一个工具 hang 住,拖住整个 loop,再叠加并发把连接池耗尽。全局兜底就是迭代上限和预算上限,这在死循环那道题里已经讲过,生产上是必选项不是可选项。

可观测性

生产环境的 Agent 没有 trace 就是黑盒。每次 run 要记录每一步的模型输入输出、工具调用参数与返回、耗时、token 消耗、终止原因。在此之上沉淀结构化指标:任务成功率、平均步数、P95 延迟、单任务平均成本。这些指标既是排障工具,也是成本和质量的监控抓手——步数分布突变往往意味着某个工具在悄悄故障。

成本控制

先拆账再优化。Agent 的成本大头通常不是你以为的「模型贵」,而是长上下文的重复计费:ReAct 循环每一轮都把全部历史重新喂进去,第 n 步的输入 token 约等于历史长度乘以 n,一个跑三十步的任务,输入 token 可能是最终上下文的十几倍。针对这个结构,有效手段有:

  • 模型路由:规划和最终生成用强模型,query 改写、结果格式化、简单分类这些步骤切到小模型。我们实际项目里这一步省掉了六成以上的成本,质量几乎无感。
  • 上下文管理:工具输出截断、历史消息压缩、子任务用 subagent 隔离上下文,都是直接砍输入 token。
  • 缓存:长系统提示和固定前缀开 prompt caching,Anthropic 和 OpenAI 都支持,命中后这部分输入大幅降价;重复的检索结果做结果缓存。
  • 预算硬顶:单任务成本上限,接近上限触发降级策略,把「剩余预算」写进上下文让模型自己省着花。
  • 离线批处理任务走 Batch API,延迟可接受的场景价格能便宜一半。

上线前的其余清单

安全:工具权限最小化,危险操作(删数据、发外部消息)强制人工审批;把检索结果和工具返回当不可信输入处理,防 prompt injection,敏感操作前对内容做注入模式扫描。评估门禁:eval 集达标才允许发版,每次改 prompt、换模型、调流程必跑回归。灰度:按用户或流量比例灰度,新旧版本对比核心指标。合规:用户数据进第三方模型 API 要有合规确认,日志里的个人信息要脱敏。这些不是锦上添花,任何一条缺失,线上事故只是时间问题。

可能的追问

  • checkpoint 具体存哪、怎么设计? 中小规模 Postgres 或 SQLite 就够,高并发用 Redis 加持久层;关键是 state schema 要做版本兼容,加字段时老快照得能反序列化。
  • 怎么防 prompt injection? 指令和不可信内容在上下文里明确隔离;敏感工具调用前要求用户二次确认;对工具输出做注入模式扫描;最坏情况假设下限制工具的爆炸半径。
  • 分钟级的长任务用同步 API 还是异步队列? 必须异步:提交任务即返回 run_id,客户端轮询或 webhook 拿结果。HTTP 长连接扛不住分钟级任务,网关超时、连接断开都会让你前功尽弃。

评论 (0)

暂无评论,快来抢沙发吧!

91学AI

© 2026 91学AI · 按岗位学 AI 与大数据. All rights reserved.