使用 OpenAI 聊天补全 API 调用模型 - Amazon Bedrock

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 OpenAI 聊天补全 API 调用模型

您可以将 OpenAI 创建聊天补全 API 与 Amazon Bedrock 模型配合使用,以便运行模型推理。

您可通过以下方式调用创建聊天补全 API:

  • 通过 Amazon Bedrock 运行时端点发出 HTTP 请求。

  • 将 OpenAI SDK 请求和 Amazon Bedrock 运行时端点配合使用。

选择一个主题以了解更多信息:

OpenAI 聊天补全 API 支持的模型和区域

您可以将创建聊天补全 API 用于 Amazon Bedrock 和 AWS 区域支持的所有 OpenAI 模型。有关支持的模型和区域的更多信息,请参阅Amazon Bedrock 中支持的根基模型

使用聊天补全 API 的先决条件

要查看使用聊天补全 API 的先决条件,请选择与您的首选方法对应的选项卡,然后按照以下步骤操作:

OpenAI SDK
  • 身份验证 – OpenAI SDK 仅支持使用 Amazon Bedrock API 密钥进行身份验证。生成 Amazon Bedrock API 密钥以对您的请求进行身份验证。要了解有关 Amazon Bedrock API 密钥以及如何生成密钥的信息,请参阅生成 Amazon Bedrock API 密钥以轻松对 Amazon Bedrock API 进行身份验证

  • 端点 – 查找与 Amazon Bedrock 运行时端点和配额中要使用的 AWS 区域对应的端点。如果使用 AWS SDK,在设置客户端时,您只需指定区域代码,无需指定整个端点。

  • 安装 OpenAI SDK – 有关更多信息,请参阅 OpenAI 文档中的

HTTP request

创建聊天补全

有关创建聊天补全 API 的详细信息,请参阅 OpenAI 文档中的以下资源:

注意

Amazon Bedrock 目前不支持其他 OpenAI 聊天补全 API 操作。

要了解如何使用 OpenAI 创建聊天补全 API,请选择与您的首选方法对应的选项卡,然后按照以下步骤操作:

OpenAI SDK (Python)

要使用 OpenAI SDK 创建聊天补全,请执行以下操作:

  1. 导入 OpenAI SDK,并使用以下字段设置客户端:

    • base_url – 将 Amazon Bedrock 运行时端点添加为 /openai/v1 的前缀,格式如下:

      https://${bedrock-runtime-endpoint}/openai/v1
    • api_key – 指定 Amazon Bedrock API 密钥。

    • default_headers – 如果需要包含任何标头,可将其作为键值对包含在此对象中。也可在进行特定 API 调用时在 extra_headers 中指定标头。

  2. 在客户端上使用 chat.completions.create() 方法,并在请求正文中至少指定 modelmessages

以下示例会在 us-west-2 中调用创建聊天补全 API。将 $AWS_BEARER_TOKEN_BEDROCK 替换为实际的 API 密钥。

from openai import OpenAI client = OpenAI( base_url="https://bedrock-runtime.us-west-2.amazonaws.com/openai/v1", api_key="$AWS_BEARER_TOKEN_BEDROCK" # Replace with actual API key ) completion = client.chat.completions.create( model="openai.gpt-oss-20b-1:0", messages=[ { "role": "developer", "content": "You are a helpful assistant." }, { "role": "user", "content": "Hello!" } ] ) print(completion.choices[0].message)
HTTP request

要使用直接 HTTP 请求创建聊天补全,请执行以下操作:

  1. 通过将 Amazon Bedrock 运行时端点添加为 /openai/v1/chat/completions 的前缀来指定 URL,格式如下:

    https://${bedrock-runtime-endpoint}/openai/v1/chat/completions
  2. Authorization 标头中指定您的 AWS 凭证或 Amazon Bedrock API 密钥。

  3. 至少在请求正文中指定 modelmessages

以下示例会使用 curl 在 us-west-2 中调用创建聊天补全 API。将 $AWS_BEARER_TOKEN_BEDROCK 替换为实际的 API 密钥:

curl -X POST https://bedrock-runtime.us-west-2.amazonaws.com/openai/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $AWS_BEARER_TOKEN_BEDROCK" \ -d '{ "model": "openai.gpt-oss-20b-1:0", "messages": [ { "role": "developer", "content": "You are a helpful assistant." }, { "role": "user", "content": "Hello!" } ] }'

在聊天补全中添加护栏

要在模型输入和响应中加入保护措施,请在运行模型调用时通过在请求正文中添加以下额外参数作为字段来应用护栏

  • extra_headers – 映射到包含以下字段的对象,这些字段在请求中指定了额外的标头:

    • X-Amzn-Bedrock-GuardrailIdentifier(必填)– 护栏的 ID。

    • X-Amzn-Bedrock-GuardrailVersion(必填)– 护栏的版本。

    • X-Amzn-Bedrock-Trace(可选)– 是否启用护栏跟踪。

  • extra_body – 映射到对象。在该对象中,您可以包含 amazon-bedrock-guardrailConfig 字段,该字段映射到包含以下字段的对象:

    • tagSuffix(可选)– 包含此字段以用于输入标记

有关 Amazon Bedrock 护栏中这些参数的更多信息,请参阅测试护栏

要查看在 OpenAI 聊天补全中使用护栏的示例,请选择首选方法的选项卡,然后按照以下步骤操作:

OpenAI SDK (Python)
import openai from openai import OpenAIError # Endpoint for Amazon Bedrock Runtime bedrock_endpoint = "https://bedrock-runtime.us-west-2.amazonaws.com/openai/v1" # Model ID model_id = "openai.gpt-oss-20b-1:0" # Replace with actual values bedrock_api_key = "$AWS_BEARER_TOKEN_BEDROCK" guardrail_id = "GR12345" guardrail_version = "DRAFT" client = openai.OpenAI( api_key=bedrock_api_key, base_url=bedrock_endpoint, ) try: response = client.chat.completions.create( model=model_id, # Specify guardrail information in the header extra_headers={ "X-Amzn-Bedrock-GuardrailIdentifier": guardrail_id, "X-Amzn-Bedrock-GuardrailVersion": guardrail_version, "X-Amzn-Bedrock-Trace": "ENABLED", }, # Additional guardrail information can be specified in the body extra_body={ "amazon-bedrock-guardrailConfig": { "tagSuffix": "xyz" # Used for input tagging } }, messages=[ { "role": "system", "content": "You are a helpful assistant." }, { "role": "assistant", "content": "Hello! How can I help you today?" }, { "role": "user", "content": "What is the weather like today?" } ] ) request_id = response._request_id print(f"Request ID: {request_id}") print(response) except OpenAIError as e: print(f"An error occurred: {e}") if hasattr(e, 'response') and e.response is not None: request_id = e.response.headers.get("x-request-id") print(f"Request ID: {request_id}")
OpenAI SDK (Java)
import com.openai.client.OpenAIClient; import com.openai.client.okhttp.OpenAIOkHttpClient; import com.openai.core.http.HttpResponseFor; import com.openai.models.chat.completions.ChatCompletion; import com.openai.models.chat.completions.ChatCompletionCreateParams; // Endpoint for Amazon Bedrock Runtime String bedrockEndpoint = "http://bedrock-runtime.us-west-2.amazonaws.com/openai/v1" // Model ID String modelId = "openai.gpt-oss-20b-1:0" // Replace with actual values String bedrockApiKey = "$AWS_BEARER_TOKEN_BEDROCK" String guardrailId = "GR12345" String guardrailVersion = "DRAFT" OpenAIClient client = OpenAIOkHttpClient.builder() .apiKey(bedrockApiKey) .baseUrl(bedrockEndpoint) .build() ChatCompletionCreateParams request = ChatCompletionCreateParams.builder() .addUserMessage("What is the temperature in Seattle?") .model(modelId) // Specify additional headers for the guardrail .putAdditionalHeader("X-Amzn-Bedrock-GuardrailIdentifier", guardrailId) .putAdditionalHeader("X-Amzn-Bedrock-GuardrailVersion", guardrailVersion) // Specify additional body parameters for the guardrail .putAdditionalBodyProperty( "amazon-bedrock-guardrailConfig", JsonValue.from(Map.of("tagSuffix", JsonValue.of("xyz"))) // Allows input tagging ) .build(); HttpResponseFor<ChatCompletion> rawChatCompletionResponse = client.chat().completions().withRawResponse().create(request); final ChatCompletion chatCompletion = rawChatCompletionResponse.parse(); System.out.println(chatCompletion);