使用 Microsoft Foundry 部署可扩展代理
配合 第16课 – 部署可扩展代理 的辅助技能。 用于帮助学习者将代理从原型推进到可扩展的可观察 生产部署。所有建议均基于课程内容和 可运行的笔记本;不得自行发明 Foundry API。
触发条件
当学习者想要时激活此技能:
- 将代理部署到 Microsoft Foundry 作为<strong>托管代理</strong>,并使其具有版本管理/可观察性。
- 在 客户端托管、托管代理和代理工作流 部署模式之间做选择。
- 添加 <strong>模型路由</strong>、<strong>响应缓存</strong> 或 <strong>有边界并发</strong> 以控制延迟和成本。
- 添加<strong>评估门控</strong>,避免错误的代理版本投产。
- 为高风险操作添加<strong>人机审核</strong>步骤。
- 使用 OpenTelemetry 追踪为生产环境代理添加监测。
- 对已部署代理进行<strong>冒烟测试</strong>,作为快速的部署后门控。
核心思维模型
生产代理主要是模型(约80%)的<em>运行骨架</em>, 而非模型本身。将所有建议映射到下述关注点之一:
| 关注点 | 原型 → 生产 |
|---|---|
| 托管 | 笔记本 → 版本化托管服务 |
| 身份 | 你的 az login → 托管身份 + 有范围的 RBAC |
| 状态 | 内存中 → 外部线程/内存存储 |
| 故障 | 追踪错误 → 重试、回退、警报 |
| 成本 | “几分钱” → 追踪、路由、缓存、预算 |
| 质量 | 目测 → 自动评估门控 |
| 信任 | 你批准 → 策略 + 人机审核 |
部署模式(选择一种,或组合使用)
- <strong>客户端托管</strong> — 推理循环在你进程中运行。最大控制权;你负责扩展和状态管理。
- 托管代理(Foundry Agent Service) — Foundry 托管循环、存储线程、执行 RBAC/内容安全,门户显示代理。控制较少,运维复杂度大幅降低。
- <strong>代理工作流</strong> — 多代理/工具组成的图形,带分支、审批节点和持久化检查点。
生命周期(代理交付的循环)
创建 → 版本化 → 评估(门控)→ 托管部署 → 在线观察 → 收集故障 → 重复。 离线评估是门控,而非事后附加 — 未达到门限的版本不会交付。 在线可观察性将实际故障反馈 至离线测试集。
扩展与成本控制手段(优先顺序)
- <strong>模型选型适当</strong> — 使用能通过评估门控的最小模型。
- <strong>按复杂度路由</strong> — 简单请求用小而快的模型,复杂推理用大的模型(自定义分类器或 Foundry 模型路由器)。
- <strong>缓存</strong> — 对近似重复请求无需调用模型即可提供服务。
- 无状态设计 + 有界并发 — 状态外部化;带退避的重试。
关键模式复现
引导学习者关注笔记本中的以下内容 16-python-agent-framework.ipynb:
- <strong>请求处理器</strong>:缓存 → 按复杂度路由 → 追踪跨度 → 运行 → 缓存。
- <strong>评估门控</strong>:对离线测试集评分;返回
pass_rate >= threshold,仅当为真时才部署。 - <strong>人工审批</strong>:针对大额退款等操作用
@tool(approval_mode="always_require")。 - <strong>追踪</strong>:用
tracer.start_as_current_span(...)包裹每个请求,并设置routed.model、customer.id等属性。
已部署代理的冒烟测试
部署后,验证端点是否真正响应(部署成功也可能无响应)。 使用 AI Smoke Test 操作,通过 .github/workflows/smoke-test.yml 和 tests/ 中的目录。运行程序将每个 提示 POST 到 POST \{project_endpoint\}/agents/\{agent_name\}/endpoint/protocols/openai/responses 并断言回复文本。身份需在 Foundry 项目范围内拥有<strong>Azure AI User</strong>角色; 令牌受众必须是 https://ai.azure.com/。
多重门控:<strong>冒烟测试</strong>(可达且响应,每次部署)→ <strong>离线评估</strong>(足够好才投产,晋升前)→ <strong>在线评估</strong>(实际表现,持续进行)。
企业级控制
- RBAC:为每个托管代理分配最小权限的托管身份。
- 生产环境的 MCP:将每个 MCP 服务器视为不可信边界 — 固定版本、限定身份、验证输出、限流,绝不泄露密钥。
助手的安全护栏
- 优先使用全课程推荐的标准
FoundryChatClient(...)+provider.as_agent(...)模式。 - 不得承诺未经验证的实时 Azure 结果;建议使用冒烟测试工作流确认部署。
- 评估与成本建议保持绑定:评估设定质量底线,路由/缓存带来接近该底线的成本控制。