

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

# 가드레일 테스트
<a name="guardrails-test"></a>

가드레일을 만든 후에는 *규격 초안*(`DRAFT`) 버전을 사용할 수 있습니다. 규격 초안은 사용 사례에 대해 만족스러운 구성에 도달할 때까지 지속적으로 편집하고 반복할 수 있는 가드레일의 버전입니다. 가드레일의 규격 초안 또는 기타 버전을 테스트하고 벤치마킹하여 구성이 사용 사례 요구 사항을 충족하는지 확인할 수 있습니다. 규격 초안에서 구성을 편집하고 다양한 프롬프트를 테스트하여 가드레일이 프롬프트 또는 응답을 얼마나 잘 평가하고 가로채는지 확인합니다.

원하는 대로 구성을 마친 후 가드레일의 버전을 만들 수 있습니다. 이 버전은 버전을 만들 때 규격 초안의 구성에 대한 스냅샷 역할을 합니다. 가드레일을 수정할 때마다 버전을 사용하여 프로덕션 애플리케이션에 대한 가드레일 배포를 간소화할 수 있습니다. 규격 초안이나 새로 만들어진 버전에 대한 모든 변경 사항은 사용자가 애플리케이션에서 새 버전을 특별히 사용하지 않는 한 생성형 AI 애플리케이션에 반영되지 않습니다.

------
#### [ Console ]

**가드레일을 테스트하여 유해한 콘텐츠가 차단되는지 확인하는 방법**

1. Amazon Bedrock 콘솔을 사용할 권한이 있는 IAM 자격 증명 AWS Management Console 으로에 로그인합니다. 그 다음 [https://console.aws.amazon.com/bedrock](https://console.aws.amazon.com/bedrock)에서 Amazon Bedrock 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **가드레일**을 선택합니다. 그런 다음 **가드레일** 섹션에서 가드레일을 선택합니다.

1. 오른쪽에 테스트 창이 나타납니다. 테스트 창에는 다음과 같은 옵션이 있습니다.

   1. 기본적으로 가드레일의 규격 초안은 테스트 창에서 사용됩니다. 가드레일의 다른 버전을 테스트하려면 테스트 창 상단에서 **규격 초안**을 선택한 다음 버전을 선택합니다.

   1. **모델 선택**을 선택하여 모델을 선택합니다. 선택한 후 **적용**을 선택합니다. 모델을 변경하려면 **변경**을 선택합니다.

   1. **프롬프트** 상자에 프롬프트를 입력합니다.

   1. 모델 응답을 유도하려면 **실행**을 선택합니다.

   1. 모델은 **최종 응답** 상자에 응답을 반환합니다(응답은 가드레일에 의해 수정될 수 있음). 가드레일이 프롬프트 또는 모델 응답을 차단하거나 필터링하면 **가드레일 점검** 아래에 가드레일이 감지한 위반 횟수를 알려주는 메시지가 표시됩니다.

   1. 프롬프트 또는 응답에서 필터를 통과하여 인식 및 허용되었거나 필터로 인해 차단된 주제 또는 유해 카테고리를 확인하려면 **추적 보기**를 선택합니다.

   1. **프롬프트** 및 **모델 응답** 탭을 사용하여 가드레일에 의해 필터링되었거나 차단된 주제 또는 유해 카테고리를 확인할 수 있습니다.

**텍스트 플레이그라운드**에서도 가드레일을 테스트할 수 있습니다. 프롬프트를 테스트하기 전에 **구성** 창에서 플레이그라운드를 선택하고 **가드레일**을 선택합니다.

------
#### [ API ]

모델 간접 호출에 가드레일을 사용하려면 [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html) 또는 [InvokeModelWithResponseStream](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModelWithResponseStream.html) 요청을 보냅니다. 또는 대화형 애플리케이션을 구축하는 경우 [Converse API](guardrails-use-converse-api.md)를 사용할 수 있습니다.

**요청 형식**

스트리밍 유무에 관계없이 모델을 간접적으로 호출하기 위한 요청 엔드포인트는 다음과 같습니다. *modelId*를 사용할 모델의 ID로 바꿉니다.
+ `InvokeModel` – POST /model/*modelId*/invoke HTTP/1.1
+ `InvokeModelWithResponseStream` – POST /model/*modelId*/invoke-with-response-stream HTTP/1.1

두 API 작업의 헤더는 다음 형식입니다.

```
Accept: accept
Content-Type: contentType
X-Amzn-Bedrock-Trace: trace
X-Amzn-Bedrock-GuardrailIdentifier: guardrailIdentifier
X-Amzn-Bedrock-GuardrailVersion: guardrailVersion
```

파라미터는 아래에 설명되어 있습니다.
+ 응답에서 추론 본문의 MIME 유형을 `Accept`로 설정합니다. 기본값은 `application/json`입니다.
+ 요청에서 입력 데이터의 MIME 유형을 `Content-Type`으로 설정합니다. 기본값은 `application/json`입니다.
+ `X-Amzn-Bedrock-Trace`를 `ENABLED`로 설정하면 가드레일에 의해 어떤 콘텐츠가 차단되었는지와 그 이유를 확인할 수 있는 추적 기능이 활성화됩니다.
+ `X-Amzn-Bedrock-GuardrailIdentifier`를 요청과 모델 응답에 적용하려는 가드레일의 가드레일 식별자로 설정합니다.
+ `X-Amzn-Bedrock-GuardrailVersion `을 요청 및 모델 응답에 적용하려는 가드레일의 버전으로 설정합니다.

다음 예제에는 일반적인 요청 본문 형식이 나와 있습니다. `tagSuffix` 속성은 *입력 태그 지정*에만 사용됩니다. `streamProcessingMode`를 사용하여 동기식 또는 비동기식으로 스트리밍할 때 가드레일을 구성할 수도 있습니다. 이는 `InvokeModelWithResponseStream`에서만 작동합니다.

```
{
    <see model details>,
    "amazon-bedrock-guardrailConfig": {
        "tagSuffix": "string", 
        "streamProcessingMode": "SYNCHRONOUS" | "ASYNCHRONOUS"
    }
}
```

**주의**  
다음과 같은 상황에서는 오류가 발생하게 됩니다.  
요청 본문에 `amazon-bedrock-guardrailConfig` 필드가 없는 상태로 가드레일을 활성화한 경우
요청 본문에 `amazon-bedrock-guardrailConfig` 필드를 지정한 상태로 가드레일을 비활성화한 경우
`contentType`이 `application/json`가 아닌 상태로 가드레일을 활성화한 경우

다양한 모델에 대한 요청 본문을 확인하려면 [파운데이션 모델의 추론 요청 파라미터 및 응답 필드](model-parameters.md) 섹션을 참조하세요.

**참고**  
Cohere Command 모델에서, 가드레일을 사용하는 경우 `num_generations` 필드에 세대를 하나만 지정할 수 있습니다.

가드레일과 추적을 활성화할 경우 스트리밍 여부에 관계없이 모델을 간접적으로 호출할 때의 일반적인 응답 형식은 다음과 같습니다. 각 모델에 대한 나머지 `body`의 형식을 보려면 [파운데이션 모델의 추론 요청 파라미터 및 응답 필드](model-parameters.md) 섹션을 참조하세요. *contentType*은 요청에서 지정한 것과 동일합니다.
+ `InvokeModel`

  ```
  HTTP/1.1 200
  Content-Type: contentType
  
  {
      <see model details for model-specific fields>,
      "completion": "<model response>",
      "amazon-bedrock-guardrailAction": "INTERVENED | NONE",
      "amazon-bedrock-trace": {
          "guardrail": {
              "modelOutput": [
                  "<see model details for model-specific fields>"
              ],
              "input": {
                  "sample-guardrailId": {
                      "topicPolicy": {
                          "topics": [
                              {
                                  "name": "string",
                                  "type": "string",
                                  "action": "string"
                              }
                          ]
                      },
                      "contentPolicy": {
                          "filters": [
                              {
                                  "type": "string",
                                  "confidence": "string",
                                  "filterStrength": "string",
                                  "action": "string"
                              }
                          ]
                      },
                      "wordPolicy": {
                          "customWords": [
                              {
                                  "match": "string",
                                  "action": "string"
                              }
                          ],
                          "managedWordLists": [
                              {
                                  "match": "string",
                                  "type": "string",
                                  "action": "string"
                              }
                          ]
                      },
                      "sensitiveInformationPolicy": {
                          "piiEntities": [
                              {
                                  "type": "string",
                                  "match": "string",
                                  "action": "string"
                              }
                          ],
                          "regexes": [
                              {
                                  "name": "string",
                                  "regex": "string",
                                  "match": "string",
                                  "action": "string"
                              }
                          ]
                      },
                      "invocationMetrics": {
                          "guardrailProcessingLatency": "integer",
                          "usage": {
                              "topicPolicyUnits": "integer",
                              "contentPolicyUnits": "integer",
                              "wordPolicyUnits": "integer",
                              "sensitiveInformationPolicyUnits": "integer",
                              "sensitiveInformationPolicyFreeUnits": "integer",
                              "contextualGroundingPolicyUnits": "integer"
                          },
                          "guardrailCoverage": {
                              "textCharacters": {
                              "guarded": "integer",
                              "total": "integer"
                              }
                          }
                      }
                  }
              },
              "outputs": ["same guardrail trace format as input"]
          }
      }
  }
  ```
+ `InvokeModelWithResponseStream` - 각 응답은 예외가 발생할 경우 텍스트가 `bytes` 필드에 있는 `chunk`를 반환합니다. 가드레일 추적은 마지막 청크에 대해서만 반환됩니다.

  ```
  HTTP/1.1 200
  X-Amzn-Bedrock-Content-Type: contentType
  Content-type: application/json
  
  {
      "chunk": { 
        "bytes": "<blob>"
      },
    "internalServerException": {},
    "modelStreamErrorException": {},
    "throttlingException": {},
    "validationException": {},
    "amazon-bedrock-guardrailAction": "INTERVENED | NONE",
    "amazon-bedrock-trace": {
      "guardrail": {
        "modelOutput": ["<see model details for model-specific fields>"],
        "input": {
          "sample-guardrailId": {
            "topicPolicy": {
              "topics": [
                {
                  "name": "string",
                  "type": "string",
                  "action": "string"
                }
              ]
            },
            "contentPolicy": {
              "filters": [
                {
                  "type": "string",
                  "confidence": "string",
                  "filterStrength": "string",
                  "action": "string"
                }
              ]
            },
            "wordPolicy": {
              "customWords": [
                {
                  "match": "string",
                  "action": "string"
                }
              ],
              "managedWordLists": [
                {
                  "match": "string",
                  "type": "string",
                  "action": "string"
                }
              ]
            },
            "sensitiveInformationPolicy": {
              "piiEntities": [
                {
                  "type": "string",
                  "match": "string",
                  "action": "string"
                }
              ],
              "regexes": [
                {
                  "name": "string",
                  "regex": "string",
                  "match": "string",
                  "action": "string"
                }
              ]
            },
            "invocationMetrics": {
              "guardrailProcessingLatency": "integer",
              "usage": {
                "topicPolicyUnits": "integer",
                "contentPolicyUnits": "integer",
                "wordPolicyUnits": "integer",
                "sensitiveInformationPolicyUnits": "integer",
                "sensitiveInformationPolicyFreeUnits": "integer",
                "contextualGroundingPolicyUnits": "integer"
              },
              "guardrailCoverage": {
                "textCharacters": {
                  "guarded": "integer",
                  "total": "integer"
                }
              }
            }
          }
        },
        "outputs": ["same guardrail trace format as input"]
      }
    }
  }
  ```

가드레일을 활성화하면 응답은 다음 필드를 반환합니다.
+ `amazon-bedrock-guardrailAction` – 가드레일의 `INTERVENED` 여부를 지정합니다(개입이 없을 경우 `NONE`).
+ `amazon-bedrock-trace` – 추적을 활성화한 경우에만 나타납니다. 추적 목록이 포함되어 있으며, 각 추적은 가드레일이 차단한 콘텐츠에 대한 정보를 제공합니다. 추적에는 다음 필드가 포함됩니다.
  + `modelOutput` - 차단된 모델의 출력이 포함된 객체입니다.
  + `input` - 프롬프트에 대한 가드레일의 평가와 관련된 다음과 같은 세부 정보를 포함합니다.
    + `topicPolicy` - 위반된 각 주제 정책에 대한 평가 목록인 `topics`를 포함합니다. 각 주제에는 다음 필드가 포함됩니다.
      + `name` - 정책의 이름입니다.
      + `type` - 주제를 거부할지 여부를 지정합니다.
      + `action` - 주제가 차단되었음을 지정합니다.
    + `contentPolicy` - 위반된 각 콘텐츠 필터에 대한 평가 목록인 `filters`를 포함합니다. 각 필터에는 다음 필드가 포함됩니다.
      + `type` - 콘텐츠 필터의 카테고리입니다.
      + `confidence` - 출력이 유해한 카테고리에 속하는 것으로 분류될 수 있는 신뢰도 수준입니다.
      + `action` - 콘텐츠가 차단되었음을 지정합니다. 이 결과는 가드레일의 필터 세트 강도에 따라 달라집니다.
    + `wordPolicy` – 필터링된 사용자 지정 단어와 관리형 단어의 모음 및 해당 단어에 대한 평가를 포함합니다. 각 목록에는 다음 필드가 포함됩니다.
      + `customWords` - 필터와 일치하는 사용자 지정 단어 목록입니다.
        + `match` - 필터와 일치하는 단어 또는 문구입니다.
        + `action` - 단어가 차단되었음을 지정합니다.
      + `managedWordLists` - 필터와 일치하는 관리형 단어 목록입니다.
        + `match` - 필터와 일치하는 단어 또는 문구입니다.
        + `type` - 필터와 일치하는 관리형 단어의 유형을 지정합니다. 예를 들어 욕설 필터와 일치하는 경우 `PROFANITY` 유형입니다.
        + `action` - 단어가 차단되었음을 지정합니다.
    + `sensitiveInformationPolicy` - 다음과 같은 객체가 포함되며, 위반된 개인 식별 정보(PII) 및 정규식 필터에 대한 평가가 포함됩니다.
      + `piiEntities` - 위반된 각 PII 필터에 대한 평가 목록입니다. 각 필터에는 다음 필드가 포함됩니다.
        + `type` – 발견된 PII 유형입니다.
        + `match` - 필터와 일치하는 단어 또는 문구입니다.
        + `action` - 단어가 `BLOCKED` 상태인지 또는 식별자로 대체되었는지(`ANONYMIZED`) 여부를 지정합니다.
      + `regexes` - 위반된 각 정규식 필터에 대한 평가 목록입니다. 각 필터에는 다음 필드가 포함됩니다.
        + `name` - 정규식 필터의 이름입니다.
        + `regex` – 발견된 PII 유형입니다.
        + `match` - 필터와 일치하는 단어 또는 문구입니다.
        + `action` - 단어가 `BLOCKED` 상태인지 또는 식별자로 대체되었는지(`ANONYMIZED`) 여부를 지정합니다.
  + `outputs` - 가드레일의 모델 응답 평가에 대한 세부 정보 목록입니다. 목록의 각 항목은 `input` 객체의 형식과 일치하는 객체입니다. 자세한 내용은 `input` 필드를 참조하세요.

------