Amazon Bedrock 在 AWS 管理的基礎架構上執行受支援的 OpenAI 模型。
本指南可協助你比較 OpenAI API 的功能支援情況,
並使用 OpenAI SDK 連線。如需設定部署組態,請參閱本頁連結的
AWS 文件。
模型能力與 API 相容性決定了應用程式能執行哪些操作。
AWS 負責管理 Bedrock 部署的模型存取、區域可用性、路由、計費
及維運控制項。
你可以透過兩個 Amazon Bedrock 端點使用 OpenAI 模型:
bedrock-runtime 和 bedrock-mantle。兩者都為受支援的模型提供與 OpenAI 相容的
Responses 和 Chat Completions API,但功能
涵蓋範圍有所不同。
請根據應用程式所需的能力選擇端點。
例如,託管網頁搜尋目前需要使用 Mantle。如需瞭解 Bedrock 專屬能力及端點選擇,請參閱
本頁的端點差異和 AWS 的端點比較。
你可以透過 Bedrock Runtime,以及
us-west-2(奧勒岡)的 Mantle 使用 GPT-6 Astra。本指南的範例在
us-east-2 使用 GPT-5.6 Sol;變更模型前,請先選擇 Astra 支援的區域。
如需存取與設定資訊,請參閱 AWS 的 GPT-6 Astra 公告及 Runtime 端點說明。
這些範例使用 OpenAI SDK 搭配 Mantle 端點。請為部署選擇 AWS
區域及模型 ID:
- 具備 Bedrock 提供者的用戶端程式庫會根據 AWS 區域
推導出該區域的 Mantle 基底 URL。JavaScript、Python、Go 和 Java 提供者在
本指南的
us-east-2 範例中使用
https://bedrock-mantle.us-east-2.api.aws/openai/v1。Ruby 範例則直接設定此 /openai/v1
端點,因為提供者的預設 /v1 路由
不支援此模型。
- 請使用帶有
openai. 前綴的 Bedrock 模型 ID,例如
openai.gpt-5.6-sol。
這些範例在 us-east-2 使用 openai.gpt-5.6-sol。若使用 Runtime,請依照 AWS 的 Responses API 端點說明選擇基底 URL 和推論設定檔。請先確認 Runtime 的要求,
再決定是否沿用 Mantle 模型 ID。
以下範例使用儲存於
AWS_BEARER_TOKEN_BEDROCK 的 Bedrock API 金鑰。如需產生及使用 Bedrock API 金鑰的資訊,請參閱 Amazon Bedrock API 金鑰。
使用任一 Java 範例前,請先安裝選用的 Java Bedrock 提供者:
12345<dependency>
<groupId>com.openai</groupId>
<artifactId>openai-java-bedrock</artifactId>
<version>4.57.0</version>
</dependency>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16import OpenAI from "openai";
import { bedrock } from "openai/providers/bedrock";
const client = new OpenAI({
provider: bedrock({
region: "us-east-2",
apiKey: process.env.AWS_BEARER_TOKEN_BEDROCK,
}),
});
const response = await client.responses.create({
model: "openai.gpt-5.6-sol",
input: "Write a haiku about cloud infrastructure.",
});
console.log(response.output_text);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18import os
from openai import OpenAI
from openai.providers import bedrock
client = OpenAI(
provider=bedrock(
region="us-east-2",
api_key=os.environ["AWS_BEARER_TOKEN_BEDROCK"],
)
)
response = client.responses.create(
model="openai.gpt-5.6-sol",
input="Write a haiku about cloud infrastructure.",
)
print(response.output_text)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32package main
import (
"context"
"fmt"
"os"
"github.com/openai/openai-go/v3"
"github.com/openai/openai-go/v3/bedrock"
"github.com/openai/openai-go/v3/responses"
)
func main() {
client, err := bedrock.NewClient(context.Background(), bedrock.Config{
AWSRegion: "us-east-2",
APIKey: os.Getenv("AWS_BEARER_TOKEN_BEDROCK"),
})
if err != nil {
panic(err)
}
response, err := client.Responses.New(context.Background(), responses.ResponseNewParams{
Model: "openai.gpt-5.6-sol",
Input: responses.ResponseNewParamsInputUnion{
OfString: openai.String("Write a haiku about cloud infrastructure."),
},
})
if err != nil {
panic(err)
}
fmt.Println(response.OutputText())
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.BedrockOpenAIOkHttpClient;
import com.openai.models.responses.ResponseCreateParams;
public final class AmazonBedrockCreateResponseExample {
private AmazonBedrockCreateResponseExample() {}
public static void main(String[] args) {
OpenAIClient client =
BedrockOpenAIOkHttpClient.builder()
.awsRegion("us-east-2")
.apiKey(System.getenv("AWS_BEARER_TOKEN_BEDROCK"))
.build();
ResponseCreateParams params =
ResponseCreateParams.builder()
.model("openai.gpt-5.6-sol")
.input("Write a haiku about cloud infrastructure.")
.build();
client.responses().create(params).output().stream()
.flatMap(item -> item.message().stream())
.flatMap(message -> message.content().stream())
.flatMap(content -> content.outputText().stream())
.forEach(text -> System.out.println(text.text()));
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24using System.ClientModel;
using OpenAI.Responses;
#pragma warning disable OPENAI001
string key = Environment.GetEnvironmentVariable("AWS_BEARER_TOKEN_BEDROCK")!;
ResponsesClient client = new(
new ApiKeyCredential(key),
new ResponsesClientOptions
{
Endpoint = new Uri("https://bedrock-mantle.us-east-2.api.aws/openai/v1"),
}
);
CreateResponseOptions options = new()
{
Model = "openai.gpt-5.6-sol",
};
options.InputItems.Add(
ResponseItem.CreateUserMessageItem("Write a haiku about cloud infrastructure.")
);
ResponseResult response = await client.CreateResponseAsync(options);
Console.WriteLine(response.GetOutputText());
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16require "openai"
client = OpenAI::Client.new(
provider: OpenAI::Providers.bedrock(
region: "us-east-2",
base_url: "https://bedrock-mantle.us-east-2.api.aws/openai/v1",
api_key: ENV.fetch("AWS_BEARER_TOKEN_BEDROCK")
)
)
response = client.responses.create(
model: "openai.gpt-5.6-sol",
input: "Write a haiku about cloud infrastructure."
)
puts(response.output_text)
1
2
3
4
5
6
7curl "https://bedrock-mantle.us-east-2.api.aws/openai/v1/responses" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AWS_BEARER_TOKEN_BEDROCK" \
-d '{
"model": "openai.gpt-5.6-sol",
"input": "Write a haiku about cloud infrastructure."
}'
對於長時間執行的應用程式,建議優先使用標準 AWS 憑證鏈,
而非靜態持有人 Token。JavaScript、Python、Go、Java 和 Ruby SDK
提供者會取得最新的 AWS 憑證,並在每次嘗試發送請求時使用
SigV4 簽署。憑證鏈可包含透過 aws login 設定的憑證、共用
設定檔、工作負載角色,以及執行個體或容器憑證。
採用此方式前,請先安裝 AWS 憑證鏈範例所需的
選用相依套件:
1234npm install @aws-sdk/credential-provider-node @smithy/hash-node @smithy/signature-v4
pip install 'openai[bedrock]'
go get github.com/openai/openai-go/v3/bedrock
bundle add aws-sdk-core
.NET SDK 目前未提供同等的 Bedrock 提供者或 AWS
SigV4 身分驗證原則。使用 .NET 時,請使用 Bedrock API 金鑰;
若應用程式需要 AWS 憑證鏈,則請透過 AWS 支援的用戶端
發送已簽署的 HTTP 請求。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18import OpenAI from "openai";
import { defaultProvider } from "@aws-sdk/credential-provider-node";
import { bedrock } from "openai/providers/bedrock/aws";
const client = new OpenAI({
provider: bedrock({
region: "us-east-2",
endpoint: "mantle",
credentialProvider: defaultProvider(),
}),
});
const response = await client.responses.create({
model: "openai.gpt-5.6-sol",
input: "Write a haiku about cloud infrastructure.",
});
console.log(response.output_text);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16from openai import OpenAI
from openai.providers import bedrock
client = OpenAI(
provider=bedrock(
region="us-east-2",
api_key=None,
)
)
response = client.responses.create(
model="openai.gpt-5.6-sol",
input="Write a haiku about cloud infrastructure.",
)
print(response.output_text)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37package main
import (
"context"
"fmt"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/openai/openai-go/v3"
"github.com/openai/openai-go/v3/bedrock"
"github.com/openai/openai-go/v3/responses"
)
func main() {
awsConfig, err := config.LoadDefaultConfig(context.Background())
if err != nil {
panic(err)
}
client, err := bedrock.NewClient(context.Background(), bedrock.Config{
AWSRegion: "us-east-2",
AWSCredentialsProvider: awsConfig.Credentials,
})
if err != nil {
panic(err)
}
response, err := client.Responses.New(context.Background(), responses.ResponseNewParams{
Model: "openai.gpt-5.6-sol",
Input: responses.ResponseNewParamsInputUnion{
OfString: openai.String("Write a haiku about cloud infrastructure."),
},
})
if err != nil {
panic(err)
}
fmt.Println(response.OutputText())
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.BedrockOpenAIOkHttpClient;
import com.openai.models.responses.ResponseCreateParams;
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;
public final class AmazonBedrockCreateResponseWithAwsCredentialsExample {
private AmazonBedrockCreateResponseWithAwsCredentialsExample() {}
public static void main(String[] args) {
OpenAIClient client =
BedrockOpenAIOkHttpClient.builder()
.awsRegion("us-east-2")
.awsCredentialsProvider(DefaultCredentialsProvider.create())
.build();
ResponseCreateParams params =
ResponseCreateParams.builder()
.model("openai.gpt-5.6-sol")
.input("Write a haiku about cloud infrastructure.")
.build();
client.responses().create(params).output().stream()
.flatMap(item -> item.message().stream())
.flatMap(message -> message.content().stream())
.flatMap(content -> content.outputText().stream())
.forEach(text -> System.out.println(text.text()));
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16require "openai"
client = OpenAI::Client.new(
provider: OpenAI::Providers.bedrock(
region: "us-east-2",
base_url: "https://bedrock-mantle.us-east-2.api.aws/openai/v1",
api_key: nil
)
)
response = client.responses.create(
model: "openai.gpt-5.6-sol",
input: "Write a haiku about cloud infrastructure."
)
puts(response.output_text)
請使用此對照表瞭解與 OpenAI API 的差異。功能可用性
取決於模型和端點;支援某個 API 並不代表支援
所有工具或回應模式。
| 能力 | OpenAI API | Amazon Bedrock |
|---|
| 文字生成 | 可用 | 可用 |
| 圖像輸入 | 可用 | 可用 |
| 檔案輸入 | 可用 | 可用 |
| 結構化輸出 | 可用 | 可用 |
| 函式呼叫 | 可用 | 可用 |
| 非同步工具呼叫 | 適用於支援此功能的模型 | 不可用 |
| 串流回應 | 可用 | 可用 |
| WebSocket 連線 | 可用 | 不可用 |
| 回合中調整方向 | 適用於支援此功能的模型 | 不可用 |
| 上下文視窗 | 依模型而定 | 依模型而定 |
| 推理強度 | 可用 | 可用 |
| 推理更新 | 支援的模型可用 | 不可用 |
| Pro 模式 | 支援的模型可用 | 不可用 |
| 持久化推理 | 支援的模型可用 | 支援的模型可用 |
| 提示詞快取 | 可用 | 可用 |
| 以程式呼叫工具 | 支援的模型可用 | 不可用 |
| 多智慧體 | 支援的模型提供 Beta 版 | 不可用 |
| 自訂工具 | 可用 | 可用 |
用戶端 tool_search | 可用 | 可用 |
| 託管式網頁搜尋 | 可用 | 僅限 Mantle |
| 託管式檔案搜尋 | 可用 | 不可用 |
| 電腦 | 可用 | 可用 |
| Shell 工具 | 可用 | 不可用 |
| 圖像生成工具 | 可用 | 不可用 |
| 遠端 MCP 伺服器 | 可用 | 不可用 |
Amazon Bedrock 不支援非同步工具呼叫(async: true)與推理更新
(configuration_update 輸入項目)。
回合中調整方向需要 WebSocket,而兩個 Bedrock 端點
都不提供此功能。
用戶端 tool_search 與託管式工具及遠端 MCP 伺服器支援
是不同的功能。Mantle 提供託管式網頁搜尋;託管式檔案搜尋與
遠端 MCP 伺服器則不可用。
支援的模型可在 Runtime 和 Mantle 上使用電腦功能。應用程式負責執行電腦操作,
並將結果傳回模型;此功能
不需要 Bedrock 託管的執行環境。
在 Amazon Bedrock 上,GPT-5.4 和 GPT-5.5 支援 100 萬 Token 的上下文視窗;
GPT-5.6 Sol、Terra、Luna 和 GPT-6 Astra 則支援 1,050,000 個 Token。各模型的限制請參閱 AWS 的 OpenAI 模型說明卡。
在 Runtime 和 Mantle 之間做選擇時,請留意以下 Responses API 差異:
| 功能 | Bedrock Runtime | Mantle |
|---|
| GPT-6 Astra | 可用 | 於 us-west-2(奧勒岡)可用 |
| 電腦 | 支援的模型可用 | 支援的模型可用 |
| 串流回應 | 可用 | 可用 |
背景模式(background: true) | 不可用 | 可用,但受資料保留設定限制 |
| 託管式網頁搜尋 | 無法使用 | 支援的模型可使用 |
使用 previous_response_id 接續回應 | 每個請求都必須包含 model | 可沿用上一個回應的模型 |
即使提供 previous_response_id,Runtime 仍要求提供 model。
背景模式與串流是不同的功能,也不代表非同步函式呼叫。
如需完整的端點規格,請參閱 AWS 的 Responses API 文件。如需網頁搜尋的權限與組態資訊,
請參閱 AWS 的網頁搜尋指南。
AWS 負責維護 Amazon Bedrock 的部署選項與可用性。請參考下列文件,選擇並設定部署方式:
AWS 區域不等同於 OpenAI 資料駐留的司法管轄區。如果工作負載有地點要求,請檢視推論設定檔的目的地區域與適用的 AWS 條款,而不僅是端點 URL 中的區域。
Amazon Bedrock 針對維運人員存取與資料保留採用各自獨立的控管機制:
- 零維運人員存取 (ZOA) 是指 AWS 維運人員在技術上沒有任何機制
可登入 Mantle 的底層運算系統,或存取其中的客戶資料。
請參閱 AWS 的 ZOA 設計。
- 零資料保留 (ZDR) 是指當實際生效的保留模式為
none 時,
AWS 不會將請求或回應資料寫入持久性儲存空間。
設定 store: false 並不保證符合 ZDR。對於實際生效的保留模式
為 none 的 Responses API 請求,AWS 會拒絕 store: true,
且無法使用背景模式。
對於 Amazon Bedrock 中的 OpenAI 模型,當實際生效的保留模式為 default 或 none 時,
AWS 不會與 OpenAI 分享請求或回應內容。
如需可用模式、適用資格,以及帳戶或專案組態的資訊,請參閱 AWS 的資料保留文件。如需各模型的保留要求與例外情況,請參閱 Amazon Bedrock 濫用偵測。
如果 AWS 在圖像輸入中偵測到疑似 CSAM,AWS 可能會將標記的輸入或輸出移至 ZOA 環境之外,並僅為判斷其是否為 CSAM 而儲存及審查該內容。AWS 也可能向國家主管機關通報。
您的 AWS 管理員負責控管帳戶、模型與功能的存取權。如需憑證建立與生命週期的資訊,請參閱 AWS 的 API 金鑰文件;如需身分與權限的資訊,請參閱 IAM 文件。本頁的 OpenAI SDK 範例示範如何
提供這些憑證;這些範例不會設定 AWS 權限。
Amazon Bedrock 的使用費用由 AWS 收取。Bedrock 在商用區域的定價與 OpenAI 直接提供的同等服務定價一致。請注意,在 Bedrock 中使用特定區域的服務,費率與 OpenAI API 的區域處理相同。Bedrock 的使用須遵守 Amazon 商業條款。
如需 OpenAI API 的直接定價,請參閱 API 定價。如需 Bedrock 的
費率、支援的服務層級與計費選項,請參閱 Amazon Bedrock 定價與適用的模型說明卡。
如需 ChatGPT Work 與 Codex 的設定方式,請參閱
搭配 Amazon Bedrock 使用 ChatGPT Work 與 Codex。