很多 AI Agent Demo 看起来很厉害:模型能理解任务、调用工具、修改文件、查网页、生成结果。但一到真实业务里就翻车:调用错工具、重复执行、越权操作、状态丢失、失败后乱重试,最后还需要人手工收拾。

这不是“模型不够聪明”能解释的。AI Agent 落地失败,通常是系统设计没跟上。模型只是 Agent 的决策层,真正决定稳定性的,是工具权限、状态管理、任务边界和失败处理。

Demo 能跑不代表能上线

Demo 场景通常很干净:输入明确,工具少,数据小,失败也无所谓。生产环境完全不同。

真实业务里会遇到:

  • 用户表达模糊;
  • 工具返回异常;
  • 数据权限复杂;
  • 中途状态变化;
  • 外部系统限流;
  • 部分步骤成功、部分失败;
  • 需要人工确认;
  • 日志和审计必须保留。

如果 Agent 没有设计这些边界,它就不是一个产品能力,只是一个会调用工具的聊天机器人。

第一个坑:工具权限太大

很多团队为了让 Agent 快速跑起来,会给它一个万能工具:执行命令、访问数据库、调用 API、写文件。短期开发方便,长期一定出问题。

工具权限应该分层:

权限层级例子策略
只读查询文档、读取日志、列文件默认允许
可逆写入写草稿、生成报告、创建临时文件限制目录和格式
业务写入创建工单、更新记录、发消息需要规则和审计
高风险动作删除、付款、发布、提交生产配置必须人工确认

不要让模型自己判断哪些动作高风险。工具层就应该限制。

这也是我写 Claude Code 接入 MCP 权限设计 时强调的:AI 能调用工具,不等于工具应该开放全部能力。

第二个坑:没有状态管理

Agent 不只是一次模型调用。只要任务超过一步,就需要状态。

状态至少包括:

  • 当前目标;
  • 已完成步骤;
  • 正在等待什么;
  • 哪些工具已经调用;
  • 哪些结果可信;
  • 哪些步骤失败;
  • 是否需要人工确认。

如果这些都只存在模型上下文里,任务越长越容易混乱。上下文被截断、摘要丢细节、工具结果太长,都会让 Agent 忘记自己做到哪一步。

更稳的方式是把关键状态写成结构化记录,比如:

goal:生成客户周报
completed:读取数据、生成摘要
waiting_for:用户确认是否发送邮件
failed_steps:空
needs_human_approval:true

模型可以读状态,但状态不应该完全依赖模型记忆。

第三个坑:失败重试没有上限

Agent 最容易失控的场景,是工具调用失败后不断重试。

常见表现:

  • API 401 后继续用同样参数请求;
  • 文件不存在后反复猜路径;
  • JSON schema 错误后重复生成无效参数;
  • 搜索不到结果后不断扩大范围;
  • 构建失败后连续改无关文件。

重试必须有策略:

失败类型应该怎么做
参数错误让模型修一次,仍失败就停
权限错误停下来要求人工处理
网络错误有限次数重试
数据缺失明确说明缺口
构建失败只修相关错误,不顺手重构

一个 Agent 如果没有重试上限,就不是自动化,而是风险循环。

第四个坑:任务边界不清楚

“帮我处理这个问题”不是一个可执行任务。Agent 需要知道什么算完成。

一个好的任务定义应该包括:

  • 输入是什么;
  • 输出是什么;
  • 能调用哪些工具;
  • 不能做什么;
  • 失败时怎么停;
  • 哪些动作必须确认;
  • 验收标准是什么。

比如:

读取最近 24 小时错误日志,归类 Top 5 错误,生成报告草稿。不要修改生产配置,不要重启服务。找不到日志时停止并说明缺口。

这比“帮我看下线上问题”清楚得多。

第五个坑:没有人工接管点

真正可用的 Agent 不是永远自动,而是知道什么时候停下来。

这些场景应该人工确认:

  • 发送消息给外部用户;
  • 修改客户数据;
  • 删除文件或记录;
  • 发布内容;
  • 提交代码;
  • 调用付费 API;
  • 权限不足或来源不确定。

人工接管点不是失败,而是安全设计的一部分。一个能停下来的 Agent,比一个一直自信执行的 Agent 更适合生产环境。

一个落地前检查清单

在把 Agent 接进业务前,先回答这些问题:

  1. 工具是否按只读、可逆写入、高风险动作分层?
  2. 每个工具是否有参数校验?
  3. 状态是否结构化保存?
  4. 每类失败是否有重试上限?
  5. 高风险动作是否需要人工确认?
  6. Agent 做过什么是否有日志?
  7. 输出是否能追溯到来源?
  8. 是否能安全中止或回滚?

如果这些问题答不上来,先不要上线。先做一个只读 Agent,验证价值,再逐步开放写入能力。

FAQ

AI Agent 落地失败主要是模型问题吗?

通常不是。更多是工具权限、状态管理、失败重试和任务边界没有设计好。

Agent 应该默认有写权限吗?

不建议。先从只读工具开始,确认价值和稳定性后,再逐步开放可逆写入。

为什么需要状态管理?

因为 Agent 是多步骤任务。只靠模型上下文记忆,很容易在长任务中丢失关键状态。

人工确认会不会降低效率?

会增加一步,但能防止高风险错误。低风险动作自动化,高风险动作确认,是更适合生产的设计。