Bedrock 接入 GPT 系列模型:一个 API 调所有大模型的时代真来了
上个月亚马逊云科技在 "What's Next with AWS 2026" 上宣布了一个大动作——把 GPT 系列模型引入 Amazon Bedrock。
这意味着什么?意味着你用一套 Bedrock API,可以调 Claude、Llama、Nova、GPT 全家桶。不用再管每个模型厂商的 API 格式差异、不用分别充值、不用维护多套鉴权。一个 IAM Role 搞定所有。
对于已经在 Bedrock 上跑业务的团队来说,多了个模型选择而已,代码几乎不用改。这才是平台的价值。
具体引入了什么
根据官方公告,进入 Bedrock 的模型包括:
| 模型 | 定位 | 状态 |
|---|---|---|
| GPT-5.5 | 通用对话/推理 | Limited Preview |
| Codex | 代码生成/理解 | Limited Preview |
| Managed Agents | Agent 编排 | Preview |
这些模型在 Bedrock 里和其他模型(Claude、Nova、Llama)是平级的,调用方式完全一样。
为什么这事儿重要
之前用大模型做业务,最头疼的问题之一就是——你得同时维护好几套 API。
Claude 走 Anthropic API 或者 Bedrock,GPT 走 OpenAI API,Llama 要么自己部署要么走 Bedrock。每个 API 格式不一样、鉴权不一样、计费不一样、限流策略不一样。
现在全部统一到 Bedrock 之后:
- 一套代码切换模型 — 改个 modelId 参数就行
- 统一 IAM 权限控制 — 谁能用什么模型、配额多少,全用 IAM Policy 管理
- 统一计费 — 一张 AWS 账单,不用管每个厂商的余额
- 统一可观测 — CloudWatch 看所有模型的延迟/错误/token 消耗
- 统一安全 — Bedrock Guardrails 对所有模型生效
快速上手
申请模型访问
# 查看可用模型列表
aws bedrock list-foundation-models \
--region us-east-1 \
--query "modelSummaries[?contains(modelId, 'openai')].{Id:modelId,Name:modelName,Status:modelLifecycle.status}"
# 输出示例:
# [
# {"Id": "openai.gpt-5-5-v1:0", "Name": "GPT-5.5", "Status": "ACTIVE"},
# {"Id": "openai.codex-v1:0", "Name": "Codex", "Status": "ACTIVE"}
# ]
如果是 Limited Preview 状态,需要先在控制台申请访问权限:
- Bedrock Console → Model access → 找到 GPT 系列 → Request access
调用方式
跟调 Claude 一模一样的 API:
import boto3
import json
bedrock_runtime = boto3.client('bedrock-runtime', region_name='us-east-1')
# 调用 GPT-5.5
response = bedrock_runtime.invoke_model(
modelId='openai.gpt-5-5-v1:0',
contentType='application/json',
accept='application/json',
body=json.dumps({
"messages": [
{"role": "system", "content": "你是一个专业的技术顾问。"},
{"role": "user", "content": "帮我设计一个高可用的消息队列方案"}
],
"max_tokens": 2048,
"temperature": 0.7
})
)
result = json.loads(response['body'].read())
print(result['choices'][0]['message']['content'])
流式调用
# 流式响应——适合聊天场景
response = bedrock_runtime.invoke_model_with_response_stream(
modelId='openai.gpt-5-5-v1:0',
contentType='application/json',
body=json.dumps({
"messages": [
{"role": "user", "content": "用 Python 写一个连接池管理器"}
],
"max_tokens": 4096,
"stream": True
})
)
for event in response['body']:
chunk = json.loads(event['chunk']['bytes'])
if 'choices' in chunk:
delta = chunk['choices'][0].get('delta', {})
if 'content' in delta:
print(delta['content'], end='', flush=True)
多模型对比
这是 Bedrock 统一 API 的核心优势——写一个函数,跑多个模型对比输出:
import time
MODELS = [
'anthropic.claude-3-5-sonnet-20241022-v2:0',
'openai.gpt-5-5-v1:0',
'amazon.nova-pro-v1:0',
'meta.llama3-1-70b-instruct-v1:0'
]
def compare_models(prompt, models=MODELS):
results = []
for model_id in models:
start = time.time()
try:
response = bedrock_runtime.invoke_model(
modelId=model_id,
contentType='application/json',
body=json.dumps({
"messages": [{"role": "user", "content": prompt}],
"max_tokens": 1024,
"temperature": 0.3
})
)
result = json.loads(response['body'].read())
elapsed = time.time() - start
# 统一提取输出(不同模型响应格式略有差异)
if 'choices' in result:
output = result['choices'][0]['message']['content']
elif 'content' in result:
output = result['content'][0]['text']
else:
output = str(result)
results.append({
'model': model_id,
'output': output,
'latency': f"{elapsed:.2f}s",
'tokens': result.get('usage', {})
})
except Exception as e:
results.append({'model': model_id, 'error': str(e)})
return results
# 跑一下对比
comparison = compare_models("用三句话解释 Kubernetes 的核心价值")
for r in comparison:
print(f"\n{'='*50}")
print(f"模型: {r['model']}")
print(f"延迟: {r.get('latency', 'N/A')}")
print(f"输出: {r.get('output', r.get('error', ''))}")
IAM 权限控制
可以精确控制谁能用什么模型:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowSpecificModels",
"Effect": "Allow",
"Action": [
"bedrock:InvokeModel",
"bedrock:InvokeModelWithResponseStream"
],
"Resource": [
"arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-*",
"arn:aws:bedrock:us-east-1::foundation-model/amazon.nova-*"
]
},
{
"Sid": "DenyExpensiveModels",
"Effect": "Deny",
"Action": "bedrock:InvokeModel",
"Resource": "arn:aws:bedrock:us-east-1::foundation-model/openai.gpt-5-5-v1:0",
"Condition": {
"StringNotEquals": {
"aws:PrincipalTag/team": "ml-research"
}
}
}
]
}
这样就能做到:普通开发者用 Claude 和 Nova(成本低),ML 研究团队可以额外用 GPT-5.5(成本高)。
Bedrock Guardrails 统一生效
安全护栏对所有模型一视同仁:
# 创建 Guardrail
bedrock = boto3.client('bedrock', region_name='us-east-1')
guardrail = bedrock.create_guardrail(
name='production-guardrail',
description='生产环境内容安全策略',
contentPolicyConfig={
'filtersConfig': [
{'type': 'SEXUAL', 'inputStrength': 'HIGH', 'outputStrength': 'HIGH'},
{'type': 'VIOLENCE', 'inputStrength': 'HIGH', 'outputStrength': 'HIGH'},
{'type': 'HATE', 'inputStrength': 'HIGH', 'outputStrength': 'HIGH'}
]
},
topicPolicyConfig={
'topicsConfig': [
{
'name': 'competitor-discussion',
'definition': '讨论竞争对手产品的优劣对比',
'type': 'DENY'
}
]
}
)
# 调用时指定 Guardrail——对 GPT/Claude/Nova 都生效
response = bedrock_runtime.invoke_model(
modelId='openai.gpt-5-5-v1:0',
contentType='application/json',
body=json.dumps({
"messages": [{"role": "user", "content": "对比一下各家云厂商的 GPU 实例"}],
"max_tokens": 1024
}),
guardrailIdentifier=guardrail['guardrailId'],
guardrailVersion='DRAFT'
)
不管底层用什么模型,Guardrails 都会拦截违规内容。这在企业场景里很重要——你不用担心换个模型就绕过了安全策略。
成本对比
统一平台后,可以按场景选性价比高的模型:
| 场景 | 推荐模型 | 大致成本(每百万token) |
|---|---|---|
| 简单分类/提取 | Nova Lite | ~$0.06 |
| 客服问答 | Claude 3 Haiku | ~$0.25 |
| 代码生成 | Codex | ~$1.50 |
| 复杂推理 | Claude 3.5 Sonnet | ~$3.00 |
| 创意写作 | GPT-5.5 | ~$5.00 |
用 Bedrock 的好处是切换成本为零——今天觉得 GPT-5.5 太贵,明天换成 Nova Pro 试试,改个参数就行。
我的判断
Bedrock 做的事情本质上是"模型中间件"——屏蔽底层差异,提供统一接口。
这对企业用户的价值很明确:不被任何一个模型厂商锁定。今天 Claude 效果好用 Claude,明天 GPT 降价了切 GPT,后天 Llama 开源新版本了试试 Llama。切换成本几乎为零。
GPT 进入 Bedrock 补上了一块拼图。之前 Bedrock 的短板就是没有 GPT 系列,有些客户因为这个原因不得不同时维护 OpenAI 的 API。现在不需要了。
相关链接:
- What's Next with AWS 2026 公告:https://aws.amazon.com/blogs/aws/top-announcements-of-the-whats-next-with-aws-2026/
- Amazon Bedrock 产品页:https://aws.amazon.com/bedrock/
- Bedrock 模型列表:https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html

浙公网安备 33010602011771号