Rohit 发布了一篇万字长文,系统梳理生产级 AI Agent 与实验性 Demo 的本质工程差距。
为什么 40% 的 Agent 项目失败
不是因为模型不行,是因为:
- 风险控制不足
- 架构设计差
- 商业价值不清晰
聊天机器人生成文本是被动的,Agent 主动执行操作——这个架构差异带来了实质性的基础设施风险。Demo 在本地 notebook 里一下午能跑,部署一个弹性的生产 Agent 需要严谨的工程能力。
原则一:显式威胁建模
Confused Deputy Problem 是 Agent 的核心漏洞:Agent 持有普通用户不具备的高权限(API Key、数据库访问),攻击者通过自然语言操纵 Agent 上下文,就能利用这些权限做未授权操作。
防御映射:在部署前,必须精确记录 Agent 能读写修改哪些系统、识别敏感数据流和潜在攻击向量,用这个显式威胁模型作为所有安全控制的绝对基础。
原则二:对抗 Prompt Injection
Prompt Injection 是生产部署中出现最多的漏洞,OWASP 数据显示超过 73%。不同于 SQL Injection(参数化查询基本解决了),Prompt Injection 可能是 LLM 处理自然语言的固有局限——研究表明仅 5 个精心制作的文档就能通过 RAG 投毒 90% 地操纵 AI 响应。
真实事件:Agent 处理带隐藏指令的外部文档后泄露患者记录,或执行未授权的金融操作。
防御需要深度分层:
- 输入过滤:在 Agent 看到 prompt 之前就用确定性代码或分类模型过滤
- 清洗:对用户输入和外部摄入内容做清洗,不可商量
- 语义分析:超越简单字符串匹配,理解意图
- 拒绝列表 + 允许列表:严格封禁攻击特征,窄化允许主题域
关键:System Prompt 是非确定性的、容易被绕过的。真正的安全必须完全存在于 LLM 推理循环之外。
原则三:严格类型化 Schema
LLM 不理解你的 API,它只是做 pattern matching。Tool 必须被当作严格的契约,而不是松散的便利。
每个 Tool 需要用 Pydantic(Python)或 Zod(Node)做显式类型化输入验证,服务端强制执行这些契约后再执行代码。永远不要信任 LLM 自己格式化的数据。
检查清单:正确的工具名称、必需参数存在、数据类型完全匹配 Schema、值在允许范围内。
原则四:错误处理与恢复
失败时不要直接崩溃。返回结构化错误响应,让 Agent 能读懂错误、修正格式、重试操作。
Idempotency Key 防止 Agent 在超时恢复时重复扣款。Schema 要版本化,允许 API 安全演进而不破坏旧工作流。
原则五:最小权限 + 人肉审批
最小权限原则无处不在:注册前验证用户权限、参数验证对应用户的允许操作、在严格沙盒环境执行。
高影响操作(数据库删除、生产配置变更、对外发送邮件)必须有人肉审批链。维护不可变的审计日志。
零信任架构:默认不信任任何 Agent,不管它在网络什么位置。
原则六:智能上下文压缩
不要把巨大的原始对话历史直接塞进 prompt。用 Intent Detector 动态决定何时检索记忆,然后把检索到的片段总结成紧凑上下文注入。
数据检索开销和处理巨大上下文窗口可以轻易消耗 40-50% 的总执行时间。目标:历史上下文 10:1 压缩率,同时保留决策相关细节。
原则七:内存系统分离
短期记忆:快速内存结构和滑动窗口,用于活跃对话。跨 Session 完全重置。用 Redis 做亚毫秒级操作。
长期记忆:跨 Session 持久化,让 Agent 能回忆过去的交互和特定用户偏好。架构上需要:向量数据库(语义记忆)、关系数据库(结构化知识)、时序数据库(复杂事件序列)。
工作内存和持久内存架构上必须分离,加密和保留策略严格应用,每次读写操作都要重新验证租户和角色约束。
原则八:可靠性和容错
- 重试 + 指数退避:从 1 秒开始,最大 32 秒,加随机 jitter 防止惊群问题。区分可重试错误(429/503)和不可重试错误(400/403)
- 熔断器:60 秒内 10 个错误则熔断打开,快速失败不向后端服务发流量
- 优雅降级:主 LLM 不可用时自动降级到更小/本地/便宜的模型;向量搜索失败时切换到基础关键词搜索
- Checkpointing:在逻辑边界保存 Agent 状态,从最后一个 checkpoint 恢复而非重新开始
原则九:可观测性
Agent 可观测性问四个核心问题:
- Agent 行为是否符合预期?
- 是否调用了正确的工具?
- 是否在可接受时间内以高精度响应?
- 是否做出了逻辑正确的决策?
用 OpenTelemetry 做供应商中立的统一遥测采集。追踪:模型参数、精确提示词、生成的补全、细分 token 使用量、特定工具调用、提供商元数据。
Agent 特定指标:Agent 在编排状态之间转移的时间、从数据库检索的确切上下文及原因、只被考虑 vs 实际选择的工具、传给工具的实际原始参数值。
成本追踪:Agent 轻松每个任务做数百次昂贵的 LLM 调用。Tag 所有 trace 按模型成本聚合,按用户 Session 汇总,追踪历史趋势,对定价异常设告警。
原则十:持续评估
三层评估:
- 离线评估:本地开发期间
- 回归测试:代码变更后部署流水线中
- 在线监控:实时生产环境
LLM as a Judge:用强大的前沿模型持续评估 Agent 输出。配置合理的 Judge 模型与人类专家判断一致性可达 85%。
评估标准:事实准确性、用户有用性、文本简洁性、安全性、品牌调性。
总结:10 条原则
- 显式威胁建模
- 严格类型化契约
- 高安全执行环境
- 智能紧凑上下文
- 重度治理的知识检索
- 严格确定性编排
- 优雅架构的内存系统
- 健壮可靠机制
- 全面深度可观测性
- 绝对持续评估
Rohit 的最后一句话:「为失败而建,在每一层栈上工程真正的弹性。」 把 AI Agent 当作复杂的分布式系统来管理,而不是简单的「发了就不管」的 API 调用——这是生产级和 Demo 级的本质差距。