在 Amazon Bedrock 上通过跨区域推理从加拿大访问 OpenAI GPT 模型
在 Amazon Bedrock 上构建生成式 AI 应用的加拿大企业,通常需要能在加拿大 AWS 区域访问最新的基础模型(FM),例如 OpenAI GPT-6.1、OpenAI GPT-6 和 GPT-5.6。借助 Amazon Bedrock 的跨区域推理(CRIS),你现在可以在加拿大访问这些模型。OpenAI GPT-5.6 系列(Sol、Terra 和 Luna)、GPT-6 系列(Astra、Sol 和 Luna)以及 GPT-6.1 Sol 已在加拿大(中部)和加拿大西部(卡尔加里)区域上线。推理在北美境内处理,数据驻留控制措施将在后文说明。
跨区域推理是一种容量调度机制。应用调用源区域的 Amazon Bedrock Runtime 端点,Amazon Bedrock 随后把请求路由到受支持的目标区域进行处理。这样一来,你能接入更大的容量池,帮助应用在需求高峰期间维持吞吐量,同时无需在应用里管理目标区域的路由。
本文将介绍在加拿大可用的 GPT-5.6、GPT-6 和 GPT-6.1 模型,以及为它们提供服务的跨区域推理配置文件。然后演示如何设置权限,并通过 OpenAI Responses API、Chat Completions API 和 Amazon Bedrock Converse API 调用这些模型。针对 Responses API,我们会给出流式传输和工具调用的示例。最后介绍如何申请提高配额、查看源区域可用的可观测性信号,以及用完后如何清理资源。
加拿大可用的模型
通过跨区域推理,你可以在加拿大的 Amazon Bedrock 中访问三个 OpenAI 模型系列。下表汇总了每个模型及其定位。
| 模型 | 定位 |
|---|---|
| GPT-6.1 Sol | 推理和编码能力强,适合兼顾性能与成本的任务 |
| GPT-6 Astra | 适合复杂的端到端推理和智能体(agentic)任务 |
| GPT-6 Sol | 推理和编码能力强,经济性适合日常重复使用 |
| GPT-6 Luna | 面向大批量重复任务,推理速度快、成本低,每次请求可调节推理力度 |
| GPT-5.6 Sol | 适合高推理、编码和智能体工作负载 |
| GPT-5.6 Terra | 性能和成本均衡,适合日常生产环境 |
| GPT-5.6 Luna | 速度快、价格低,适合对延迟敏感的大批量应用 |
这些模型接受文本和图像输入,返回文本,支持 100 万 token 的上下文窗口、推理模式和工具调用。GPT-6.1 Sol 支持相同的上下文窗口和工具调用,其模型卡中还记录了额外的输入和输出模态(modalities)。GPT-5.6、GPT-6 和 GPT-6.1 还支持 Amazon Bedrock 上的提示缓存(prompt caching),详见提示缓存章节。
这些模型可通过 OpenAI Responses API、OpenAI Chat Completions API 以及 bedrock-runtime 端点上的 Amazon Bedrock Converse API 调用。定价信息请参阅 Amazon Bedrock 定价页面。各模型在哪些区域可用,请参阅《Amazon Bedrock 用户指南》中的模型卡。
从加拿大使用跨区域推理配置文件
Amazon Bedrock 的推理配置文件(inference profile)是一种逻辑标识符,用来替代原始模型 ID 传入。每个配置文件定义一个模型,以及 Amazon Bedrock 可以将请求路由到的一组区域。从加拿大可以使用两种配置文件类型:
- 美国地理范围(前缀
us.):将请求路由到你的加拿大源区域和美国区域。当你的工作负载要求推理处理必须留在北美(加拿大和美国)境内时,选择此配置文件。 - 全球范围(前缀
global.):将请求路由到模型已部署的受支持商业 AWS 区域。这样在发起请求时可以利用更广泛的容量池。
各模型和源区域的端点可用性有所不同,如下表所示。
| 模型 | 美国地理配置文件 | 全球配置文件 |
|---|---|---|
| GPT-6.1 Sol | ca-central-1, ca-west-1 | ca-central-1, ca-west-1 |
| GPT-6 Astra / Sol / Luna | ca-central-1, ca-west-1 | ca-central-1, ca-west-1 |
| GPT-5.6 Sol / Terra / Luna | ca-central-1, ca-west-1 | ca-central-1 |
配置文件包含的模型和可用性可能会变化。GPT-5.6 系列的全球配置文件目前只能从 ca-central-1 使用。如果从 ca-west-1 发起请求,请使用 GPT-5.6 的美国地理配置文件。部署之前,请先确认源区域中可用的配置文件,可以通过 AWS 命令行界面(AWS CLI)或控制台查看(见下一节),也可以查阅跨区域推理支持文档。
入门
以下步骤介绍如何从加拿大源区域调用这些模型,包括环境配置和代码示例。
前提条件
开始之前,请确认已满足以下条件:
- 已启用 Canada (Central) ca-central-1 或 Canada West (Calgary) ca-west-1 作为源区域的 AWS 账户。
- 拥有可调用推理配置文件的 AWS Identity and Access Management (IAM) 角色或用户(参见「设置权限」)。
- 如果组织强制执行服务控制策略(SCP),需要有一条允许源区域推理配置文件的 SCP(参见「SCP 注意事项」)。
- Python 3.9 或更高版本,并已安装 openai、boto3 和 aws-bedrock-token-generator 包。
设置权限
如果只是快速试用,可以附加 AWS 托管策略 AmazonBedrockLimitedAccess。如果是正式部署且对访问控制要求更严格,建议使用最小权限的自定义策略。下面的示例授予从 ca-central-1 访问 GPT-6 Astra 全球配置文件的权限:
如果通过 API 密钥方式认证(即 OpenAI SDK 使用的 bearer token),还需要额外授予 bedrock:CallWithBearerToken 权限。使用 Responses API 时,要在 arn:aws:bedrock:ca-central-1:*:project/default 上添加 bedrock:InvokeModel 权限。
SCP 注意事项
如果组织通过 SCP(服务控制策略)限制可用区域,可以使用 bedrock:InferenceProfileArn 条件键,让 CRIS 流量通过,同时拦截对未批准区域的直接调用。下面的 SCP 会拒绝在已批准源区域之外调用 Amazon Bedrock 推理,除非请求使用的是 CRIS 推理配置文件:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyBedrockOutsideCanadaUnlessCris",
"Effect": "Deny",
"Action": ["bedrock:InvokeModel*"],
"Resource": "*"
"Condition": {
"StringNotEquals": {
"aws:RequestedRegion": ["ca-central-1", "ca-west-1"]
},
"ArnNotLike": {
"bedrock:InferenceProfileArn": [
"arn:aws:bedrock:*:*:inference-profile/us.openai.*",
"arn:aws:bedrock:*:*:inference-profile/global.openai.*"
]
}
]
}
有了这个条件,即使某些目标区域本身被 SCP 拒绝,Amazon Bedrock 仍可路由到配置文件指定的目标区域。要让请求成功,所选配置文件中的每个目标区域都必须处于允许状态。更多细节参见「在多账户环境中设置跨区域推理」。
验证已激活的推理配置文件
调用模型之前,可以用 AWS CLI 查看源区域中哪些配置文件处于激活状态。下面这条命令会列出 ca-central-1 中已激活的 OpenAI 配置文件。如果要从 Calgary 区域检查,把 ca-central-1 换成 ca-west-1 即可。
aws bedrock list-inference-profiles \
--region ca-central-1 \
--type-equals SYSTEM_DEFINED \
--query "inferenceProfileSummaries[?contains(inferenceProfileId, 'openai')].[inferenceProfileId,status]" \
--output table
Amazon Bedrock 控制台也能看到同样的信息。打开控制台,把区域选为 Canada (Central) 或 Canada West (Calgary),在 Inference 下选择 Cross-Region inference,然后查看可用的配置文件。
下面的截图展示了 Canada (Central) 区域在 Amazon Bedrock 控制台中列出的、处于激活状态的 OpenAI 推理配置文件。
图 1:Amazon Bedrock 控制台(Canada (Central))中处于激活状态的 OpenAI 跨区域推理配置文件
通过 Amazon Bedrock Runtime 调用模型
在 bedrock-runtime 端点上,GPT-5.6、GPT-6 和 GPT-6.1 支持三种访问方式:OpenAI Responses API、OpenAI Chat Completions API,以及 Amazon Bedrock Converse API。兼容 OpenAI 的 API 通过端点的 /openai/v1 路径调用。该端点接受两种鉴权方式:AWS Signature Version 4(SigV4)签名,或 Amazon Bedrock API 密钥。
下面的示例使用 Amazon Bedrock token generator for Python,根据你当前的 AWS 凭证生成一个短期 Amazon Bedrock API 密钥,这样应用就不必保存静态密钥。
OpenAI Responses API
如果应用已经在用 OpenAI SDK 的 Responses API,只需把客户端指向区域性的 Amazon Bedrock Runtime 端点,并把推理配置文件 ID 作为模型传入即可。
from aws_bedrock_token_generator import provide_token
from openai import OpenAI
region = "ca-central-1" # Use "ca-west-1" for Calgary
client = OpenAI(
base_url=f"https://bedrock-runtime.{region}.amazonaws.com/openai/v1",
api_key=provide_token(region=region),
)
response = client.responses.create(
model="global.openai.gpt-6-astra",
input="What are the key considerations for AI```python
response = client.responses.create(
model="global.openai.gpt-6-astra",
input="What are the key considerations for AI governance in Canadian financial services?",
max_output_tokens=1024,
)
print(response.output_text)
流式输出时,把 stream=True 设上,然后遍历响应事件,文本一到就打印出来:
stream = client.responses.create(
model="global.openai.gpt-6-luna",
input="List five generative AI use cases for Canadian healthcare.",
max_output_tokens=512,
stream=True,
)
for event in stream:
if event.type == "response.output_text.delta":
print(event.delta, end="", flush=True)
OpenAI Chat Completions API
OpenAI Chat Completions 格式走的是同一个端点。
response = client.chat.completions.create(
model="global.openai.gpt-5.6-terra",
messages=[{"role": "user", "content": "Summarize recent AI regulatory trends in Canada."}],
max_completion_tokens=1024,
reasoning_effort="low",
)
print(response.choices[0].message.content)
支持的完整参数列表(包括推理强度等级)见 Amazon Bedrock 用户指南 中的模型卡。
Amazon Bedrock Converse API
如果应用通过 AWS SDK 调用 Amazon Bedrock,就用 Converse API。Boto3 会按标准 AWS 凭证链解析凭证。
import boto3
bedrock = boto3.client("bedrock-runtime", region_name="ca-central-1")
response = bedrock.converse(
modelId="us.openai.gpt-5.6-terra",
messages=[{"role": "user", "content": [{"text": "Summarize recent AI regulatory trends in Canada."}]}],
inferenceConfig={"maxTokens": 1024},
)
# GPT-5.6 and GPT-6 may return a reasoningContent block alongside the text.
# Select the block that contains the text output.
text_output = next(
block["text"]
for block in response["output"]["message"]["content"]
if "text" in block
)
print(text_output)
GPT-6 Sol、GPT-6 Luna 和 GPT-6.1 Sol 的调用方式相同,只需更换推理配置文件 ID。下面的例子中,GPT-6 Sol 使用美国地理配置文件,GPT-6 Luna 使用全局配置文件。两者都在 ca-central-1 区域验证通过。
# GPT-6 Sol, GPT-6 Luna, and GPT-6.1 Sol are called the same way. Swap the inference
# profile ID, and choose a "us." (US geographic) or "global." profile to match your
# data boundary.
# For example, GPT-6.1 Sol via the US geographic profile: modelId="us.openai.gpt-6.1-sol"
# GPT-6 Sol via the US geographic profile: strong reasoning and coding for complex work.
response = bedrock.converse(
modelId="us.openai.gpt-6-sol",
messages=[{"role": "user", "content": [{"text": "Summarize recent AI regulatory trends in Canada."}]}],
inferenceConfig={"maxTokens": 512},
)
# 通过 global 配置档案调用 GPT-6 Luna:适合分类等大批量任务的低成本高速推理
response = bedrock.converse(
modelId="global.openai.gpt-6-luna",
messages=[{"role": "user", "content": [{"text": "Classify this ticket as BILLING, TECHNICAL, or OTHER: ..."}]}],
inferenceConfig={"maxTokens": 256},
)
工具调用
这些模型支持客户端工具调用(函数调用)。在 tools 参数中定义工具,模型会返回结构化的工具调用请求,由你的应用执行。
response = client.responses.create(
model="global.openai.gpt-6-astra",
input="What's the current exchange rate from CAD to USD?",
tools=[{
"type": "function",
"name": "get_exchange_rate",
"parameters": {
"type": "object",
"properties": {
"from_currency": {"type": "string"},
"to_currency": {"type": "string"}
}
}],
)
# 模型返回的是工具调用请求,
……而不是文本。
for item in response.output:
if item.type == "function_call":
print(f"Tool: {item.name}, Args: {item.arguments}")
提示词缓存
GPT-5.6、GPT-6 和 GPT-6.1 在 Amazon Bedrock 上支持提示词缓存(prompt caching),可以降低重复提示词前缀的成本和延迟。隐式缓存无需改动代码:Amazon Bedrock 会自动缓存长度在 1,024 个 token 及以上的合格前缀。后续请求读取缓存 token 时按折扣价计费,并且不占用每分钟 token 配额。缓存 token 会出现在响应的 usage 对象和 Amazon CloudWatch 指标中,方便追踪用量。缓存写入的定价、最小前缀长度,以及显式缓存断点的支持情况,请参阅提示词缓存文档和各模型卡片。
配额管理
bedrock-runtime 端点上的跨区域推理配额按模型以每分钟 token 数(TPM)计量。每个配额把输入和输出 token 合并计入同一个上限。美国地理配置档案和 global 配置档案有各自独立的配额分配,切换配置档案就会切换到不同的配额池。
token 消耗合并计算输入 token、缓存写入输入 token 和输出 token。输出 token 会乘以模型的消耗速率(burndown rate),所以输出密集的任务消耗配额的速度会比原始 token 数看起来更快。
正式上线前,应尽早申请配额提升,并监控配额使用率。用有代表性的提示词、输出长度、流式行为、并发量和峰值流量做测试。
申请配额提升的步骤如下:
- 在
ca-central-1或ca-west-1区域打开 Service Quotas 控制台。 - 选择 Amazon Bedrock,然后为目标模型选择名为 "Cross-Region InvokeModel tokens per minute" 的配额。
- 选择 Request increase at account level,输入目标值并提交申请。
token 用量和成本的追踪细节,请参阅在 Amazon Bedrock 中追踪用量和成本。
可观测性
这些模型通过 Amazon Bedrock Runtime API 运行,因此通过推理配置档案发出的请求,在可观测性工具中的呈现方式与按需请求相同。调用日志和 Amazon CloudWatch 指标记录在你的源区域,无论请求实际在哪个区域处理都是如此。可观测性数据集中在一处。
AWS CloudTrail 会记录每个请求,并在 additionalEventData.inferenceRegion 字段中记录由哪个目标区域提供服务。例如:
"additionalEventData": {
"inferenceProfileArn": "arn:aws:bedrock:ca-central-1:111122223333:inference-profile/global.openai.gpt-6-astra",
"inferenceRegion": "us-west-2"
}
Amazon CloudWatch 指标按推理配置档案发布,涵盖调用次数、token 数、延迟、限流和错误。模型调用日志会把完整的请求和响应负载投递到 Amazon Simple Storage Service(Amazon S3)或 Amazon CloudWatch Logs。要在 Amazon Bedrock 控制台上启用它,选择 Settings,然后选择 Model invocation logging;也可以调用 PutModelInvocationLoggingConfiguration API。该功能默认关闭。AWS Data Exports 可以按模型和配置档案细分支出。