OpenAI Chat Completions API를 사용하여 모델 간접 호출 - Amazon Bedrock

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

OpenAI Chat Completions API를 사용하여 모델 간접 호출

Amazon Bedrock 모델로 OpenAI Create chat completion API를 사용하여 모델 추론을 실행할 수 있습니다.

다음과 같은 방식으로 Chat Completions API를 호출할 수 있습니다.

  • Amazon Bedrock 런타임 엔드포인트를 사용하여 HTTP 요청을 수행합니다.

  • Amazon Bedrock 런타임 엔드포인트를 사용하여 OpenAI SDK 요청을 사용합니다.

주제 영역을 선택하여 자세히 알아보세요.

OpenAI Chat Completions API에 지원되는 모델 및 리전

Create chat completion API는 Amazon Bedrock 및 이러한 OpenAI 모델을 지원하는 AWS 리전√에서 지원되는 모든 모델에 사용할 수 있습니다. 지원되는 모델 및 리전에 대한 자세한 내용은 Amazon Bedrock에서 지원되는 파운데이션 모델 섹션을 참조하세요.

Chat Completions API를 사용하기 위한 사전 조건

Chat Completions API를 사용하기 위한 사전 조건을 보려면 원하는 방법의 탭을 선택한 후 다음 단계를 따릅니다.

OpenAI SDK
HTTP request

Chat Completions 생성

Create chat completion API에 대한 자세한 내용은 OpenAI 설명서의 다음 리소스를 참조하세요.

참고

Amazon Bedrock은 현재 다른 OpenAI Chat completion API 작업을 지원하지 않습니다.

OpenAI Create chat completion 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

직접 HTTTP 요청으로 채팅 완성을 생성하려면 다음을 수행합니다.

  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에서 Create chat completion 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 필드가 포함된 객체에 매핑되는 필드를 포함할 수 있습니다.

Amazon Bedrock Guardrails의 이러한 파라미터에 대한 자세한 내용은 가드레일 테스트 섹션을 참조하세요.

OpenAI Chat completion을 통한 가드레일을 사용하는 예를 보려면 원하는 방법의 탭을 선택한 후 다음 단계를 따릅니다.

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);