Agent.Space 博客

一把 API Key 使用多个 AI 模型:迁移检查清单

用协议、工具调用、流式事件、状态、限流、评测、灰度与回滚清单,安全迁移到一把 API Key 管理多个 AI 模型。

用一把 API Key 访问多个 AI 模型,可以减少凭证数量并集中查看用量。这里的“一把 Key”是指每个 Environment 或 Workload Boundary 使用一把统一 Gateway 凭证,不是全公司共用一个无限权限的万能 Key。它也不会让 Model ID、API Protocol、Tool Call、Streaming Event、State、Rate Limit、Error 或 Output 自动变得可以互换。

安全迁移时,Key 和 Base URL 只是最小的一部分。先固定当前合同,再建立 Capability Matrix、运行代表性评测、用少量流量做 Canary(灰度),并保留 Rollback(回滚),直到新路径经受过真实负载。

一把 Key 简化了什么,又没有简化什么

统一 Key 可以简化:

  • 一个服务需要保存的凭证数量;
  • 在 Gateway 边界进行 Rotation 与 Revocation;
  • 从同一账户发现模型;
  • 集中查看 Request History 与消费;
  • 为 Gateway 明确支持的客户端做 Onboarding。

它不会自动统一:

  • OpenAI Responses 与 Anthropic Messages 的 Request Shape;
  • 不同模型的工具、上下文限制或 Structured Output;
  • Streaming 与 Error Event;
  • Conversation State 与 Cache 行为;
  • Provider Rate Limit 和数据控制;
  • Coding Agent 工具或 Workspace 内部的 Authorization;
  • 模型在你的代码仓库任务上的输出质量。

Agent.Space Developer API 指南记录了当前 Key 创建、模型发现和受支持的客户端路径。本文从完成 Setup 选择之后开始,只处理迁移安全,不再重复配置步骤。

第一步:固定当前合同

改动前,先记录生产环境依赖的行为:

  • Endpoint 与 Protocol;
  • Authentication Header 与 Key Owner;
  • 准确的 Model ID 与 Alias;
  • Request Parameter 与 Default;
  • System Instruction 与 Conversation-state Strategy;
  • Tool Definition、Call ID、Result 和 Side Effect;
  • Streaming Event Type 与顺序假设;
  • Timeout、Retry 与 Cancellation 行为;
  • Rate-limit Header 与 Backoff;
  • Usage Field、价格来源与预算提醒;
  • 应用当前处理的 Error Type;
  • Data Retention、Region 与 Logging 要求。

保存有代表性的原始 Request、去敏后的 Response 和预期业务结果。它们会成为迁移合同与回滚依据。Fixture 中不能保存真实 Secret。

OpenAI Responses ReferenceAnthropic Messages Reference说明了为什么只替换 Base URL 不够:两种 API 对 State、Content、Tool 与 Result 的表示方式不同。

第二步:建立 Capability Matrix

让每个计划暴露的模型占一行,每项必需能力占一列:

能力是否必需模型 A模型 B证据
客户端协议实时请求
工具调用Schema 与 Result 测试
Structured Output使用时必需Validation Result
StreamingEvent Capture
上下文长度取决于工作负载官方模型文档
图像/文件输入使用时必需代表性 Fixture
Cache取决于成本要求Usage Field
数据控制取决于 Policy当前 Provider Terms
Rate Limit取决于负载Console/Response Header

没有来源或测试证明时,填写“unknown”。模型出现在 Discovery 中,只能证明它可以被寻址,不能证明客户端的每项 Feature 都可用。

模型访问还要与 Agent harness 和 Workspace 层分开。一把 Key 可以为模型调用提供资金,但 Harness 仍然负责多步循环,Workspace 仍然负责文件、进程与持久项目状态。

第三步:把凭证与权限分开

减少上游 Key 的数量,不应该产生一把拥有无限权限的凭证。

  • 为每个 Environment 或 Workload Boundary 创建独立 Key;
  • 把 Key 放在服务端 Secret Store,不能放进浏览器代码或代码仓库;
  • 记录 Owner、Purpose、Creation Date 与 Rotation Plan;
  • 限制哪些服务能够读取 Key;
  • 把 Tool Authorization 分开:Model Gateway Credential 不应该自动获得数据库、Shell、部署或生产写权限;
  • 用一次真实的被拒绝请求验证 Revocation。

使用 Coding Agent Workspace 安全清单检查文件系统、网络、Secrets 和审批边界。Gateway Consolidation 不能代替 Agent Runtime 内部的最小权限。

第四步:规范模型发现与路由

把实时 Model Discovery 当成账户当前可以请求哪些模型的事实来源。除了 UI 中的 Friendly Name,还要保存 Provider 返回的 Model ID。

迁移时避免 Silent Alias。如果 default-coding-model 从一个底层模型切换到另一个,应记录最终解析出的 ID,并让这项变更可 Review。否则,质量或成本变化会看起来像随机漂移。

明确写出 Routing 行为:

  • 每类工作由哪个模型处理?
  • 哪些 Error 允许 Fallback?
  • Fallback 能否跨 Model Family 或 Protocol?
  • Fallback 会不会重复执行有副作用的工具?
  • 最终解析出的模型由哪一种 Balance 或 Account 支付?
  • 用户怎样知道实际运行了另一个模型?

Agent.Space 当前把 Share-funded 与 Flex-funded 模型分开,并且不会自动让一种余额为另一种余额兜底。Share 与 Flex 指南解释了这条边界。应通过产品资料和 Request History 核验当前 Funding 与 Availability,不能自行设计一条不存在的 Failover Rule。

第五步:运行代表性评测与成本检查

从真实工作中建立一组去敏后的 Evaluation Set:

  • 代码仓库问答;
  • 带测试的范围明确的代码改动;
  • 包含正确与错误参数的工具调用;
  • 长上下文任务;
  • 需要审批的任务;
  • 可以恢复的 Provider Error;
  • 一次尝试执行禁止操作的任务。

运行模型前先定义验收。可用标准包括:测试通过、指定文件发生变化、受保护文件保持不变、Tool Schema 校验通过、不会重复副作用,以及人工接受最终 Diff。

记录 Resolved Model、Protocol、Call、Retry、Latency、Usage Category、估算成本、Tool Failure 与人工介入。不能因为两个模型都返回过一次看似合理的文字,就称它们“兼容”。

第六步:灰度切换并保留回滚

Canary 是让一小部分符合条件的流量进入新路径,同时保留之前的路径。

先选择可回退、风险低的工作。根据预先声明的阈值比较灰度结果:

  • 任务验收率;
  • Tool-call Validation Failure;
  • Retry 与 Timeout Rate;
  • Latency Distribution;
  • 每个已验收任务成本;
  • Rate-limit Event;
  • 安全或 Policy Violation;
  • 人工介入次数。

保留能够恢复旧 Endpoint、Credential、Model Mapping 和 Adapter 的回滚开关。在迁移前测试它,而不是等第一次事故发生。对有副作用的工具,重试和回滚必须保持幂等,不能重复部署、支付或执行破坏性写入。

第七步:完成观察后再停用旧 Key

灰度扩量后,至少观察一个有代表性的使用周期。确认定时任务、低频工具、备用 Region 和恢复路径都已经使用过新 Route。

之后再有计划地停用旧访问:

  1. 停止把新流量发送到旧路径;
  2. 搜索配置和 Secret Store 中是否还有引用;
  3. 在旧 Key 的 Owner 处撤销它;
  4. 验证使用旧 Key 的请求确实失败;
  5. 保留不含 Secret 的审计元数据与迁移记录;
  6. 确认不再需要回滚后,删除过时 Adapter 与 Fallback Code。

让一个不再使用的凭证为了“以防万一”继续有效,只会保留旧攻击面,并不会提供经过验证的恢复路径。

可直接使用的 Go/No-go 清单

  • 当前 Request、Response、Model、Tool、Error、Usage 和 Limit 已记录;
  • 每项必需能力都有官方证据或通过了代表性测试;
  • 新 Key 已限制范围、保存在服务端、有明确名称并可撤销;
  • Tool 与 Workspace Authorization 仍符合最小权限;
  • Model ID 通过实时发现获得,最终解析 ID 会被记录;
  • Routing 与 Fallback 行为明确,有副作用操作保持幂等;
  • 同一套 Evaluation Set 通过约定的质量与安全阈值;
  • 成本按完整任务计算,而不是只算一条 Response;
  • 少量 Canary 已经在真实并发下运行;
  • Rollback 已测试;
  • 只有观察窗口完成后才撤销旧凭证。

只有每一项必需条件都有证据时才 Go。一把 Key 的真正价值,是在不掩盖模型与协议差异的前提下简化运维。如果要查看当前双协议入口和账户可用选项,可以在设计 Cutover 前打开 Agent.Space Developer API