把 Agent 真正发上线:Google Cloud《生产级 AI Agent 开发者指南》深读

Posted by iceyao on Saturday, May 23, 2026

原文:A dev’s guide to production-ready AI agents · Google Cloud · 2026-02-25 作者:Kanchana Patlolla(Technical Solutions Manager)· Anant Nawalgaria(Sr. Staff ML Engineer, Founder of Gen AI Intensive)

一句话导读:过去一年里,Agent 的难点已经从"能跑出 Demo"变成"能不能上线"。这篇 Google Cloud 的官方导读把答案拆成了 5 个阶段——但真正值钱的不是这 5 个阶段,而是它们对应着 5 处传统工程范式失效的地方。本文按这条骨架展开,每一节追问"为什么传统做法在这里行不通",并给一条可量化的判断标准。

从 Demo 到生产:AI Agent 的 5 个工程化阶段

引言:原型不再稀缺,能上线的 Agent 才稀缺

把时间倒回一年前——彼时讨论 Agent,话题还停在"能不能让 LLM 自己调几个工具完成任务"。今天再开同样的会,话题已经悄悄换了:能不能 7×24 给真实用户用?出错了能不能定位、能不能回滚、能不能解释?

Google Cloud 的这篇导读就是写给"卡在这道坎上"的开发者的。它没有给一份花哨的框架对比,而是把 Agent 工程化拆成了 5 个清晰阶段:定义 / 工具互操作 / 上下文工程 / 测试评估 / 生产部署。每一阶段都对应一组新概念,也对应着一处传统工程经验"差一点就够用、但其实远远不够"的盲区。

原文最值钱的判断只有一句:Agent 会推理、行动、自适应,因此不能用确定性代码的工程范式去管它。 接下来的内容,本质上都是在围绕这句话给具体动作。


一、Agent 是什么:把它从"函数"重新定义成"自主实体"

金句判断:把 Agent 当函数调用,是所有生产事故的起点。

原文给 Agent 的定义很简单:一个能推理、行动并随时间改进的自主实体(autonomous entity)。但定义本身不重要,重要的是它由哪些零件构成——这决定了你做架构图时能不能画对。

Google 给的解剖图分三层:

  • Brain(大脑):LLM 作为认知引擎,理解任务、生成响应、基于上下文决策。
  • 核心循环Think → Act → Observe,三步递归。每一次循环都可能改变下一步要走的路。
  • Orchestration Layer(编排层):协调通信和数据流的"神经系统",由五个组件构成——Session State(短期记忆)、Memory Service(长期记忆)、RAG(检索)、Tool Use(工具)、Security framework(安全边界)。

Agent 解剖:Brain · 核心循环 · 编排层

看图。中间这一整块编排层是绝大多数团队最容易低估的——只把 LLM 接上几个工具就以为做完了 Agent,结果上线后才发现:用户问到第 3 轮就开始失忆,跨日来访问会重复同样的失败动作,工具调用没有审计、出了问题查不到链路。 这些不是 LLM 的锅,是编排层缺失的锅。

为什么传统范式失效? 因为传统服务里"状态"是显式的(数据库行、Redis Key),而 Agent 里的"状态"是模型对历史上下文的理解。Session State 不是把对话拼起来就行——它要决定哪些信息保留、哪些压缩、哪些丢弃,这是个工程化的取舍问题,不是把数组追加完事。

落地动作清单:

  • 把 Brain / Loop / Orchestration 三层在你们的系统里画出来,不允许"我们暂时还没有 Memory,先这样"
  • Session State 与 Memory Service 必须分开抽象,不要让一个组件同时承担短期与长期
  • Security framework 在 Day 1 就要画进图里,不要等"上线前再补"——Agent 的越权风险是 LLM 注入 + 工具组合产生的,事后审计极难

真实场景:某客服 Agent 上线两周后被投诉"反复让用户重新提供订单号"。排查发现整个团队只实现了 Session State,而当用户从 App 切到网页(新会话)时,Memory Service 缺位导致状态彻底丢失。修复方案不是改 Prompt,而是补一层跨会话的用户级 Memory。


二、工具与互操作:从 N×M 集成到两条标准协议

金句判断:Agent 时代的"接口",不是 REST,而是 MCP 与 A2A。

工具用起来才有用。但如果每接一个新数据源、新外部服务都要重写一套适配层,那就是经典的 N×M 集成爆炸。原文把答案押在了两条新兴协议上:

协议 提出方 解决的问题
MCP(Model Context Protocol) Anthropic Agent ↔ 工具/数据源 的标准化连接,避免每个服务都做一次定制集成
A2A(Agent2Agent Protocol) Google Agent ↔ Agent 跨框架直接通信:能力发现、交互协商、结构化消息

MCP vs A2A:两条不同方向的标准化

注意看图——这两个协议方向是垂直的,不是替代关系

  • MCP 解决的是"Agent 怎么稳定地调一个工具",是垂直方向的 Agent ↔ World;
  • A2A 解决的是"Agent 怎么稳定地接另一个 Agent",是水平方向的 Agent ↔ Agent。

把它们看成同一层的竞品,是常见误读。

为什么传统范式失效? 传统微服务用 REST/gRPC + OpenAPI 描述,已经是工业级标准——但 LLM 不直接消费 OpenAPI。它需要的是自然语言可理解、能力可发现、调用语义带工具描述的协议形态。MCP 在这一层做了规范化,A2A 则更进一步,让"另一个 Agent"也能像"另一个工具"一样被发现和协商。

落地判断标准:

  • 你的 Agent 至少接 3 个外部工具,且工具集预计还会增长 → 上 MCP,值得
  • 你的 Agent 是单体、工具固定且不会再变 → 暂时不上,不值得
  • 你的系统未来一年会有 2 个以上独立 Agent 之间需要协作 → 提前关注 A2A 的发展,至少把 Agent 间通信抽象成 message 而不是函数调用

真实场景:一家中型 SaaS 厂商把"订单查询、退款、库存检查"三件事各做了一个独立 Agent,最初用 HTTP 调用串起来。两个月后发现每加一个新业务线(如售后投诉)就要重写一遍编排逻辑。改造成 A2A 风格之后,新业务线只需要让自己的 Agent 实现能力描述,就能被现有 Agent 自动发现和调用——编排逻辑从代码变成了数据


三、上下文工程:决定 Agent 是个"助手"还是"百科条目"

金句判断:通用模型不会成为你的助手,上下文工程才会。

原文用了一个很到位的比喻:如果 LLM 是大脑,那 Context Engineering(上下文工程)就是在正确的时机、把正确的信息喂给它的实践。它至少涵盖:

  • Prompt design —— 任务说明的结构化
  • Retrieval mechanisms —— RAG / 向量检索 / 关键字检索的混合策略
  • Tool selection —— 该轮交互暴露哪些工具,不暴露哪些
  • Conversation history —— 历史对话的保留、压缩、摘要

这件事做不好的反面非常具体:Agent 会遗忘、会重复、会抓不到重点

为什么传统范式失效? 传统软件的"配置"是静态的——一个用户进来加载一份配置,整个会话用完。但上下文工程是每一轮都在重做一次:这一轮要不要把这条历史包进去?要不要暴露这个工具?要不要插一段从向量库里拉回来的事实?每一次都是一次小型的"状态规划",这件事在传统系统里没有对应物。

落地动作清单:

  • 给每个 Agent 写一份"上下文预算":单轮总 Token 上限、Memory 摘要长度、暴露工具数量上限——当作 SLO 管
  • Tool selection 不要永远暴露全集:长工具列表会显著拉低工具选择质量。按场景分组、按对话阶段动态注入
  • Conversation history 一定要做摘要 + 关键事实抽取,不要直接 truncate;裸截断会让 Agent 在长会话里失去"为什么我们在做这件事"的认知

真实场景:某金融顾问 Agent 在第 6 轮对话时开始反复推荐用户已经明确拒绝过的产品。回放轨迹发现:上下文窗口被前面的财报数据挤满,用户的偏好被截断在第 2 轮。修复方案是在 Memory Service 中显式存"用户拒绝清单",每轮注入。重要的不是窗口有多大,而是关键事实有没有被保住。


四、测试与评估:成功不在终点,而在轨迹

金句判断:评估 Agent 不要看它答对没有,要看它怎么走到答案的。

这是原文给我个人启发最大的一节。它提出了一个核心概念——Trajectory(轨迹)评估

两个 Agent 可能殊途同归,但路径的质量截然不同。

举个例子:用户问"我上个月在国内出差的差旅总额是多少"。

  • Agent A:先调"用户档案"确认所在地→再调"差旅记录"按月过滤→再 Sum→直接给答案。4 步,每一步都有理由。
  • Agent B:先调"全部消费记录"拉了 3000 条→再用 LLM 自己判断哪些是差旅→再判断哪些在国内→给答案。结果可能也对,但这条路径在数据稍微变化时会立刻崩。

如果只看最终答案,这两个 Agent 一样优秀。只有评估轨迹,才能区分它们的工程健康度。

原文给的良好评估应检查的维度:

  • Tool selection —— 选对了工具吗?
  • Reasoning quality —— 推理链合理吗?
  • Error recovery —— 出错时是否能识别并恢复?
  • Clarification —— 该提问澄清的时候,主动提问了吗?

并列出了三类测试方法:

  1. Unit tests —— 针对单个组件(如某个工具调用、某段 Prompt)
  2. Trajectory analysis —— 多步决策序列分析
  3. Staged rollouts —— Sandbox / Canary / Production 分阶段发布

为什么传统范式失效? 传统单元测试是"输入→断言输出"。但 Agent 的"中间过程"本身就是产品的一部分——一个绕了 10 步才完成 1 步任务的 Agent,即使答对了也不能上线,因为它的延时、token 成本、错误率都会被无谓放大。Trajectory 评估其实是把"过程指标"提升到了和"结果指标"同等地位。

落地判断标准(写在评估平台里):

  • 每条线上轨迹都要可回放(至少保留 30 天)
  • 评估集里至少 30% 是"故意带错"的输入,验证 error recovery
  • 关键工具调用必须有 ground-truth 轨迹基线,而不仅仅是 ground-truth 答案
  • LLM-as-Judge 用于轨迹打分时,要单独评估 reasoning 链路而不是只看输出

五、生产部署:Sandbox → Canary → Production,错误成本逐级递增

金句判断:Agent 的灰度发布不是"放点流量看看",而是分阶段验证不同维度的行为。

最后一节回到工程主战场——发布。Google 给出的标准动作是三段式漏斗:

Sandbox → Canary → Production:Agent 发布漏斗

每一阶段验证什么、对应什么基础设施,要求是不一样的:

阶段 流量比例 主要验证 必备基础设施
Sandbox 0%(合成/录制流量) 单元功能 / 工具调用正确性 / Prompt 注入对抗 Mock 工具、合成评估集、安全沙箱
Canary 1–10% 真实流量 Trajectory 质量 / 错误恢复 / 长尾 case 实时轨迹采集、影子流量对比、熔断回滚
Production 100% 可观测 / 回滚 / 容量 / SLO 持久化 Memory、Real-time logging、多级降级

原文还点名了生产级 Agent 必备的四件事:Session management、Persistent memory、带认证授权的 Tool integration、Real-time logging。这四件事都不是 Day 1 就能想清楚的——但缺一件就敢上线,迟早会出事。

为什么传统范式失效? 传统服务的灰度本质是"流量切分 + A/B 比较输出"。但 Agent 的灰度需要比较的是轨迹分布——同样一类问题,Canary 流量里 Agent 的平均决策步数是 5.8,Production 是 4.2,那即使最终答案准确率一样,也说明 Canary 这个版本"在变啰嗦",是个回归信号。这种信号传统蓝绿/灰度发布捕捉不到。

落地动作清单:

  • Sandbox 不只是 staging:要包含 Prompt 注入、工具滥用、对话越权等对抗集
  • Canary 要看分布而不只是看错误率:步数、token、tool call 数量都要监控分布漂移
  • 回滚机制要可在分钟级触发:Agent 的"坏行为"扩散速度可能比传统服务快很多——一次错误推理被多个用户当真就是事故
  • 每个工具调用都带审计日志:包含输入、输出、调用时机、当时的上下文摘要

真实场景:某团队在 Canary 阶段发现 Agent 平均工具调用次数从 3.1 涨到 5.7,错误率却没明显变化——以为不是问题。一周后正式 Production 之后,云厂商账单暴涨 30%,才回头查到是 Prompt 改动后 Agent 开始反复调用同一个昂贵的检索工具。轨迹分布是发布期的核心健康指标,不能只看错误率。


给"上线者"的浓缩落地清单

如果只能从这篇文章里带走一份 checklist,应该是这一份:

  • 架构层
    • 画出 Brain / Loop / Orchestration 三层,明确 Session State 与 Memory Service 的边界
    • Security framework 是 Day 1 决策,不是事后补救
  • 工具层
    • ≥3 个外部工具时考虑 MCP;多 Agent 协作时关注 A2A
    • 工具调用全链路可审计、可重放
  • 上下文层
    • 每个 Agent 一份"上下文预算"SLO
    • 历史摘要 + 关键事实抽取,禁止裸截断
    • 工具列表按对话阶段动态注入
  • 评估层
    • Unit + Trajectory + Staged,三层都要做
    • LLM-as-Judge 单独评估推理链
    • 评估集 ≥30% 故意带错的输入
  • 发布层
    • Sandbox 包含对抗集
    • Canary 监控轨迹分布漂移
    • 回滚分钟级触发
    • 工具调用全审计

学习路径地图:把 5 篇白皮书按你的角色分流

原文最后给了一份配套白皮书清单,但平铺一份"全部读完"对忙碌的工程师没有用。下面按角色分流:

  • 如果你刚开始接触 Agent(前端/后端转 AI 工程师)
    • 先读《Introduction to Agents》——把"Agent 不是函数"这件事建立起直觉
    • 然后读《Tools and Interoperability with MCP》——理解 LLM 如何"动手"
  • 如果你正在构建 Agent 但还没上线(已经有 Demo,要做生产化)
    • 重点读《Context Engineering: Sessions and Memory》——多数 Demo→Prod 失败都失败在这里
    • 配套读《Agent Quality》——把 Trajectory 评估纳入你的 CI 流程
  • 如果你已经在线上跑了 Agent,要稳定与扩展
    • 把《Prototype to Production》当 SOP 反复对齐
    • 回头补《Agent Quality》——线上事故大多对应一类未覆盖的轨迹模式

结语:Agent 工程不是新一门学科,是工程范式的一次升级

读完原文最大的收获,不是学会了 5 个新名词,而是意识到:Agent 工程并不是从零起步的全新学科——它是把传统软件工程里那些"显式"的部分(状态、配置、控制流),让出一部分给"涌现"。 让出之后,传统的工程纪律(可观测、可回滚、可审计、可评估)反而要求更高,而不是更低。

下次再有人说"Agent 不就是 LLM + 工具吗",你可以把这张图甩过去——五个阶段,每一阶段都有传统工程范式失效的地方。Demo 容易做,是因为前两阶段就够;上线难,是因为后三阶段才真正考工程功底。

「真诚赞赏,手留余香」

爱折腾的工程师

真诚赞赏,手留余香

使用微信扫描二维码完成支付