AI 网关架构2026年10月20日Flatkey Team

Amazon Bedrock 兼容 OpenAI 的 API:Base URL、鉴权、模型与代码(2026)

如何用 OpenAI SDK 调用 Amazon Bedrock:端点选择、短期与长期 API Key、模型 ID、curl/Python/Node 代码、Guardrails、价格与常见错误修复。

Amazon Bedrock 兼容 OpenAI 的 API:Base URL、鉴权、模型与代码(2026)

可以。Amazon Bedrock 提供兼容 OpenAI 的 API:把 OpenAI SDK 指向 https://bedrock-runtime.{region}.amazonaws.com/openai/v1,用 Bedrock API Key(或 AWS SigV4)鉴权,再传入 Bedrock 模型 ID(例如 openai.gpt-oss-120b-1:0)即可。 Bedrock 通过这种方式同时提供 Chat Completions 和 Responses API。AWS 建议新应用使用 bedrock-runtime 端点,bedrock-mantle 作为兼容选项保留。需要注意一点:bedrock-runtime 没有实现 GET /models。以下内容均来自官方 Bedrock Chat Completions 文档,核对日期为 2026 年 10 月 20 日。

本文涵盖两个端点、两种 API Key、模型 ID、curl/Python/Node 代码、Guardrails、价格、常见错误,以及什么情况下 Bedrock 比多供应商网关更合适。

速查表

项目 取值(截至 2026 年 10 月 20 日)
推荐 Base URL https://bedrock-runtime.{region}.amazonaws.com/openai/v1
兼容 Base URL https://bedrock-mantle.{region}.api.aws/v1(部分模型使用 /openai/v1)
支持的 OpenAI API Chat Completions、Responses(因模型而异),以及 Anthropic Messages API
鉴权 Bedrock API Key 作为 Authorization: Bearer …,或 AWS SigV4
模型 ID 示例 openai.gpt-oss-120b-1:0、openai.gpt-oss-20b-1:0、global.openai.gpt-5.6-sol
通过 /models 列出模型 仅 bedrock-mantle 支持;bedrock-runtime 上请用 ListFoundationModels
区域范围 Key 与端点均按区域划分

来源:Chat Completions API、推理端点、快速入门。

bedrock-runtime 与 bedrock-mantle:该用哪个端点

AWS 表示两个端点"使用同一个底层 Mantle 推理引擎",名称区分的是端点形态,而不是不同的引擎。区别在于功能:

bedrock-runtime(推荐) bedrock-mantle(兼容)
Base URL bedrock-runtime.{region}.amazonaws.com/openai/v1 bedrock-mantle.{region}.api.aws/v1
API InvokeModel、Converse、Chat Completions、Responses、Messages Chat Completions、Responses、Messages
GET /models 未实现(返回 404 UnknownOperationException) 支持
Guardrails、智能提示路由、跨区域推理 支持 以模型卡为准
服务端工具(如网页搜索)、后台推理、Projects、Workspaces 不支持 支持
配额 该端点独立的按模型配额 另一套按模型配额

AWS 的经验法则:先用 bedrock-runtime;只有当所需模型或功能只在 bedrock-mantle 上提供时才切换。在 bedrock-mantle 上,路径前缀因模型而异,前缀错误会报 "model … isn't supported on this route",请查看模型卡中的 Programmatic Access 表。

鉴权:Bedrock API Key 与 SigV4

Bedrock API Key 让 OpenAI SDK 可以用 Bearer Token 鉴权,而不必用 AWS 凭证签名请求(API Key 文档,2026 年 10 月 20 日):

Key 类型 有效期 权限来源 AWS 建议
短期 最长 12 小时(或会话时长,取较短者) 生成它的 IAM 主体的权限 生产环境
长期 直到设定的过期时间 一个附加了策略的专用 IAM 用户 仅用于探索

实用提示:

  • 在代码中生成短期 Key:Python 用 pip install aws-bedrock-token-generator,Node 用 npm install @aws/bedrock-token-generator,每次请求前调用一次;Token 仍有效时会直接返回缓存。
  • 长期 Key 只能在创建它的区域使用,跨区域调用会报 Credential should be scoped to a valid region。
  • 可通过 IAM 操作 bedrock:CallWithBearerToken 和 bedrock-mantle:CallWithBearerToken 限制 Key 的使用。
  • API 调用会记录在 CloudTrail 中,但 Key 本身不会被记录。
  • 使用 boto3 时,AWS_BEARER_TOKEN_BEDROCK 变量需要 boto3 1.39.0 或更高版本(快速入门)。

代码:用 OpenAI SDK 调用 Bedrock

curl(API Key)

export OPENAI_API_KEY="<bedrock-api-key>"
curl -X POST "https://bedrock-runtime.us-east-1.amazonaws.com/openai/v1/chat/completions" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{"model": "openai.gpt-oss-120b-1:0",
       "messages": [{"role": "user", "content": "Hello from Bedrock"}]}'

curl(SigV4,无需 API Key)

curl -X POST "https://bedrock-runtime.us-east-1.amazonaws.com/openai/v1/chat/completions" \
  -H "Content-Type: application/json" \
  --aws-sigv4 "aws:amz:us-east-1:bedrock" \
  --user "$AWS_ACCESS_KEY_ID:$AWS_SECRET_ACCESS_KEY" \
  -d '{"model": "openai.gpt-oss-120b-1:0", "messages": [{"role": "user", "content": "Hello"}]}'

Python:自动刷新短期 Key

from aws_bedrock_token_generator import provide_token   # pip install aws-bedrock-token-generator openai
from openai import OpenAI

REGION = "us-east-1"

def bedrock_client() -> OpenAI:
    # provide_token() returns a cached token or mints a fresh short-term key (<= 12h)
    return OpenAI(base_url=f"https://bedrock-runtime.{REGION}.amazonaws.com/openai/v1",
                  api_key=provide_token())

r = bedrock_client().chat.completions.create(
    model="openai.gpt-oss-120b-1:0",
    messages=[{"role": "user", "content": "Explain Bedrock API keys in one sentence."}],
)
print(r.choices[0].message.content, r.usage)

Node.js

import OpenAI from "openai";
import { getTokenProvider } from "@aws/bedrock-token-generator";

const provideToken = getTokenProvider();
const client = new OpenAI({
  baseURL: "https://bedrock-runtime.us-east-1.amazonaws.com/openai/v1",
  apiKey: await provideToken(),
});

const r = await client.chat.completions.create({
  model: "openai.gpt-oss-20b-1:0",
  messages: [{ role: "user", content: "Name two Bedrock endpoints." }],
});
console.log(r.choices[0].message.content);

列出模型

在 bedrock-runtime 上调用 client.models.list() 会返回 404。可以改用 aws bedrock list-foundation-models --region us-east-1,或把 SDK 指向 bedrock-mantle 来列出模型:

curl -s "https://bedrock-mantle.us-east-1.api.aws/v1/models" -H "Authorization: Bearer $OPENAI_API_KEY"

在 OpenAI 风格的请求中加入 Bedrock Guardrail

Guardrail 通过额外请求头传入,可选的请求体字段用于输入标记:

r = bedrock_client().chat.completions.create(
    model="openai.gpt-oss-20b-1:0",
    messages=[{"role": "user", "content": "What is the weather like today?"}],
    extra_headers={
        "X-Amzn-Bedrock-GuardrailIdentifier": "GR12345",
        "X-Amzn-Bedrock-GuardrailVersion": "DRAFT",
        "X-Amzn-Bedrock-Trace": "ENABLED",
    },
    extra_body={"amazon-bedrock-guardrailConfig": {"tagSuffix": "xyz"}},
)

请求头名称来自官方 Guardrail 示例。

哪些模型支持兼容 OpenAI 的 API?

API 支持情况同时取决于模型和端点,请逐个查看模型卡(API 兼容性表)。以下为截至 2026 年 10 月 20 日 AWS 文档中的示例:

模型 runtime 上的 Chat Completions runtime 上的 Responses 说明
openai.gpt-oss-120b-1:0 / -20b-1:0 支持 不支持(Responses 仅在 mantle 上) 开放权重的 GPT OSS
global.openai.gpt-5.6-sol 支持 支持 出现在 AWS 快速入门中,全局推理配置
GPT-6 系列、GPT-5.x 以模型卡为准 以模型卡为准 列在兼容性表的 OpenAI 部分
Anthropic Claude 使用 Messages API(/anthropic) 不适用 ANTHROPIC_BASE_URL=https://bedrock-runtime.{region}.amazonaws.com/anthropic

兼容 OpenAI 调用的 Bedrock 价格

你按该模型正常的 Bedrock 单价付费,兼容 OpenAI 的接口本身不额外加价。以下示例来自 Bedrock 价格页,2026 年 10 月 20 日,每 100 万 token:

模型 区域 输入 输出
gpt-oss-20b 亚太(悉尼) $0.0721 $0.3090
gpt-oss-120b 亚太(悉尼) $0.1545 $0.6180
GPT OSS Safeguard 20B 美国东部/西部 $0.07 $0.20
GPT OSS Safeguard 120B 美国东部/西部 $0.15 $0.60

价格因区域而异,Bedrock 还提供 Priority、Flex 和 Batch 等层级。请在价格页使用区域选择器查看你实际要付的价格。

常见错误与修复

错误 原因 修复
/models 返回 404 UnknownOperationException bedrock-runtime 未实现 Models API 用 ListFoundationModels,或在 bedrock-mantle 上调用 /models
model … isn't supported on this route bedrock-mantle 上路径前缀错误 查看模型卡确认是 /v1 还是 /openai/v1
Credential should be scoped to a valid region 在其他区域使用长期 Key 在目标区域重新生成 Key
Unable to locate credentials 低于 1.39.0 的 boto3 会忽略 AWS_BEARER_TOKEN_BEDROCK pip install --upgrade boto3
GPT OSS 不支持 Responses API GPT OSS 仅在 bedrock-mantle 上支持 Responses 改用 Chat Completions 或切换端点
AccessDenied 未开通模型访问,或 CallWithBearerToken 被拒绝 开通模型访问并检查 IAM 策略

Bedrock、直连 OpenAI 与多供应商网关对比

需求 Bedrock 兼容 OpenAI 接口 直连供应商 API 多供应商网关(如 Flatkey)
留在 AWS 账号、IAM 和 CloudTrail 体系内 最佳 否 否
使用 AWS 抵扣金或企业折扣计划(EDP)承诺 可以 否 否
Guardrails 及 VPC 周边管控 有 各供应商不同 各网关不同
新模型发布当天即可用 因模型而异 通常最先 因网关而异
一个 Key 调用 OpenAI、Anthropic、Google、阿里、DeepSeek、月之暗面、智谱 仅限 Bedrock 托管的模型 否 可以
需要按区域管理 Key 需要 不需要 不需要

如果你完全基于 AWS,Bedrock 兼容 OpenAI 的 API 是最干净的选择。如果还需要 Bedrock 没有托管的模型,可以保留同一套 OpenAI SDK 代码,只换 Base URL。通过 Flatkey,一个 Key(https://router.flatkey.ai/v1)即可调用 GPT、Claude、Gemini、Qwen、DeepSeek、Kimi 和 GLM:

import os
from openai import OpenAI

ROUTES = {
    "bedrock": OpenAI(base_url="https://bedrock-runtime.us-east-1.amazonaws.com/openai/v1",
                      api_key=os.environ["AWS_BEARER_TOKEN_BEDROCK"]),
    "flatkey": OpenAI(base_url="https://router.flatkey.ai/v1",
                      api_key=os.environ["FLATKEY_API_KEY"]),
}

def ask(route, model, prompt):
    r = ROUTES[route].chat.completions.create(model=model, messages=[{"role": "user", "content": prompt}])
    return r.choices[0].message.content

print(ask("bedrock", "openai.gpt-oss-120b-1:0", "hi"))
print(ask("flatkey", "qwen3.8-max", "hi"))         # same SDK, different provider
print(ask("flatkey", "claude-sonnet-5-5", "hi"))

截至 2026 年 10 月 20 日,Flatkey 上 gpt-6-sol 页面显示每 100 万 token 输入 $1.20、输出 $6.00,这是相对 $2 / $10 标价的促销价。请与你在 Bedrock 上同一模型的价格对比。延伸阅读:兼容 OpenAI 的 API Base URL、直连供应商账号与 AI API 网关对比、企业级 AI API 网关检查清单。

迁移清单:从 OpenAI 应用迁到 Bedrock

  1. 选定区域,并在 Bedrock 控制台确认已开通模型访问。
  2. 把 OPENAI_BASE_URL 换成 https://bedrock-runtime.{region}.amazonaws.com/openai/v1。
  3. 把 Key 换成短期 Bedrock API Key 生成器,不要把长期 Key 部署到生产环境。
  4. 把模型名映射为 Bedrock ID,例如 gpt-oss-120b → openai.gpt-oss-120b-1:0。
  5. 删除 client.models.list() 调用,或改到 bedrock-mantle 上执行。
  6. 按模型卡逐个测试流式输出、工具调用和结构化输出。
  7. 在策略要求的地方加上 Guardrail 请求头。
  8. 检查所选端点的配额(限流处理)。
  9. 按模型和团队追踪支出(成本归属)。

常见问题

Amazon Bedrock 支持 OpenAI API 吗?

支持。Bedrock 在 https://bedrock-runtime.{region}.amazonaws.com/openai/v1 上实现了 OpenAI Chat Completions 和 Responses API,现有 OpenAI SDK 代码只需更换 Base URL、API Key 和模型 ID 即可运行。

Bedrock 兼容 OpenAI 的 Base URL 是什么?

推荐使用 https://bedrock-runtime.{region}.amazonaws.com/openai/v1,例如 https://bedrock-runtime.us-east-1.amazonaws.com/openai/v1。兼容端点是 https://bedrock-mantle.{region}.api.aws/v1。

如何让 OpenAI SDK 通过 Bedrock 鉴权?

把 Amazon Bedrock API Key 作为 api_key 传入,以 Authorization: Bearer 发送。AWS 建议生产环境使用短期 Key(最长 12 小时)。bedrock-runtime 也支持 SigV4 签名。

为什么在 Bedrock 上 models.list() 会失败?

bedrock-runtime 端点没有实现 OpenAI 的 GET /models 操作,会返回 404 UnknownOperationException。请使用 ListFoundationModels,或在 bedrock-mantle 上调用 /models。

在 Bedrock 上能用 GPT OSS 调用 Responses API 吗?

在 bedrock-runtime 上不行。GPT OSS 在该端点只支持 Chat Completions,其 Responses API 仅在 bedrock-mantle 上提供。

兼容 OpenAI 的端点会额外收费吗?

AWS 没有为该接口列出单独费用。你按所在区域和层级支付该模型的标准 Bedrock token 价格。

总结

要在 AWS 上使用 OpenAI SDK:把 Base URL 设为 bedrock-runtime.{region}.amazonaws.com/openai/v1,使用短期 Bedrock API Key,映射好模型 ID,并去掉 models.list()。如果你的技术栈还需要 Bedrock 之外的模型,同样的 SDK 写法也能通过 Flatkey 路由用一个 Key 实现。

最后更新:2026 年 10 月 20 日 · Flatkey Team。内容引自文中链接的 AWS 官方文档。