

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

# OpenAI Chat Completions API를 사용하여 모델 간접 호출
<a name="inference-chat-completions"></a>

Amazon Bedrock 모델로 [OpenAI Create chat completion API](https://platform.openai.com/docs/api-reference/chat/create)를 사용하여 모델 추론을 실행할 수 있습니다.

다음과 같은 방식으로 Chat Completions API를 호출할 수 있습니다.
+ Amazon Bedrock 런타임 엔드포인트를 사용하여 HTTP 요청을 수행합니다.
+ Amazon Bedrock 런타임 엔드포인트를 사용하여 OpenAI SDK 요청을 사용합니다.

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

**Topics**
+ [OpenAI Chat Completions API에 지원되는 모델 및 리전](#inference-chat-completions-supported)
+ [Chat Completions API를 사용하기 위한 사전 조건](#inference-chat-completions-prereq)
+ [Chat Completions 생성](#inference-chat-completions-create)
+ [채팅 완성에 가드레일 포함](#inference-chat-completions-guardrails)

## OpenAI Chat Completions API에 지원되는 모델 및 리전
<a name="inference-chat-completions-supported"></a>

채팅 완료 생성 API는 Amazon Bedrock 및 이러한 OpenAI 모델을 지원하는 AWS 리전에서 지원되는 모든 모델에 사용할 수 있습니다. 지원되는 모델 및 리전에 대한 자세한 내용은 [Amazon Bedrock에서 지원되는 파운데이션 모델](models-supported.md) 섹션을 참조하세요.

## Chat Completions API를 사용하기 위한 사전 조건
<a name="inference-chat-completions-prereq"></a>

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

------
#### [ OpenAI SDK ]
+ **인증** - OpenAI SDK는 Amazon Bedrock API 키를 사용한 인증만 지원합니다. Amazon Bedrock API 키를 생성하여 요청을 인증합니다. Amazon Bedrock API 키 및 생성 방법에 대해 알아보려면 빌드 장의 API 키 섹션을 참조하세요.
+ **엔드포인트** - Amazon Bedrock 런타임 엔드포인트 및 할당량에 사용할 AWS 리전에 해당하는 엔드포인트를 찾습니다. [https://docs.aws.amazon.com/general/latest/gr/bedrock.html#br-rt](https://docs.aws.amazon.com/general/latest/gr/bedrock.html#br-rt) AWS SDK를 사용하는 경우 클라이언트를 설정할 때 전체 엔드포인트가 아닌 리전 코드만 지정하면 될 수 있습니다.
+ **OpenAI SDK 설치** - 자세한 내용은 OpenAI 설명서의 [라이브러리](https://platform.openai.com/docs/libraries)를 참조하세요.

------
#### [ HTTP request ]
+ **인증** - 자격 AWS 증명 또는 Amazon Bedrock API 키로 인증할 수 있습니다.

  자격 AWS 증명을 설정하거나 Amazon Bedrock API 키를 생성하여 요청을 인증합니다.
  + 자격 AWS 증명 설정에 대한 자세한 내용은 [AWS 보안 자격 증명을 사용한 프로그래밍 방식 액세스를](https://docs.aws.amazon.com/IAM/latest/UserGuide/security-creds-programmatic-access.html) 참조하세요.
  + Amazon Bedrock API 키 및 생성 방법에 대해 알아보려면 빌드 장의 API 키 섹션을 참조하세요.
+ **엔드포인트** - Amazon Bedrock 런타임 엔드포인트 및 할당량에 사용할 AWS 리전에 해당하는 엔드포인트를 찾습니다. [https://docs.aws.amazon.com/general/latest/gr/bedrock.html#br-rt](https://docs.aws.amazon.com/general/latest/gr/bedrock.html#br-rt) AWS SDK를 사용하는 경우 클라이언트를 설정할 때 전체 엔드포인트가 아닌 리전 코드만 지정하면 될 수 있습니다.

------

## Chat Completions 생성
<a name="inference-chat-completions-create"></a>

Create chat completion API에 대한 자세한 내용은 OpenAI 설명서의 다음 리소스를 참조하세요.
+ [요청 본문 파라미터](https://platform.openai.com/docs/api-reference/chat/create)
+ [응답 본문 파라미터](https://platform.openai.com/docs/api-reference/chat/object)

**참고**  
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`에서 헤더를 지정할 수 있습니다.

1. `chat.completions.create()` 메서드를 클라이언트와 함께 사용하고 요청 본문에 `model` 및 `messages`를 최소한으로 지정합니다.

다음 예제에서는 `us-west-2`에서 채팅 완성 생성 API를 직접적으로 호출합니다. *\$1AWS\$1BEARER\$1TOKEN\$1BEDROCK*을 실제 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
   ```

1. `Authorization` 헤더에서 AWS 자격 증명 또는 Amazon Bedrock API 키를 지정합니다.

1. 요청 본문에서 요청 본문에 최소한 `model` 및 `messages`를 지정합니다.

다음 예제에서는 curl을 사용하여 `us-west-2`에서 Create chat completion API를 호출합니다. *\$1AWS\$1BEARER\$1TOKEN\$1BEDROCK*을 실제 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!"
        }
    ]
}'
```

------

## 채팅 완성에 가드레일 포함
<a name="inference-chat-completions-guardrails"></a>

모델 입력 및 응답에 보호 장치를 포함하려면 다음 [추가 파라미터](https://github.com/openai/openai-python#undocumented-request-params)를 요청 본문의 필드로 포함하여 모델 간접 호출을 실행할 때 [가드레일](guardrails.md)을 적용합니다.
+ `extra_headers` - 요청에 추가 헤더를 지정하는 다음 필드가 포함된 객체에 매핑됩니다.
  + `X-Amzn-Bedrock-GuardrailIdentifier`(필수) - 가드레일의 ID입니다.
  + `X-Amzn-Bedrock-GuardrailVersion`(필수) - 가드레일의 버전입니다.
  + `X-Amzn-Bedrock-Trace`(선택 사항) - 가드레일 추적을 활성화할지 여부입니다.
+ `extra_body` - 객체에 매핑됩니다. 해당 객체에 다음 `amazon-bedrock-guardrailConfig` 필드가 포함된 객체에 매핑되는 필드를 포함할 수 있습니다.
  + `tagSuffix`(선택 사항) - [입력 태그 지정](guardrails-tagging.md)을 위해 이 필드를 포함합니다.

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

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

------