기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
애플리케이션에 자동 추론 검사 통합
가드레일에 자동 추론 정책을 배포한 후( 참조애플리케이션에 자동 추론 정책 배포) 런타임에 이를 사용하여 LLM 응답을 검증하고 피드백에 따라 조치를 취할 수 있습니다. 이 페이지에서는 검증 API를 호출하고, 결과를 프로그래밍 방식으로 해석하고, 잘못된 응답을 다시 작성하고, 명확한 질문을 하는 등의 일반적인 통합 패턴을 구현하는 방법을 설명합니다.
자동 추론 검사는 감지 모드에서만 작동하며 콘텐츠를 차단하는 대신 조사 결과와 피드백을 반환합니다. 애플리케이션은 응답을 제공하거나, 다시 작성하거나, 설명을 요청하거나, 기본 동작으로 돌아가는 등 조사 결과를 사용하여 수행할 작업을 결정할 책임이 있습니다.
자동 추론 검사로 콘텐츠를 평가하는 방법
자동 추론 검사는 제출하는 콘텐츠를 "if/then" 관계인 논리적 암시로 변환한 다음 정책 규칙에 대한 영향을 확인합니다. 변환은 두 가지 종류의 논리적 문을 생성합니다.
-
온프레미스 - "if" 측: 추론을 위한 컨텍스트를 설정하는 선행 조건 및 시나리오 팩트(예: 사용자가 자신의 상황에 대해 말한 사실 또는 응답이 응답에 의존하는 조건). 온프레미스는 선택 사항입니다.
-
클레임 - 'then' 측: 정책 규칙에 대해 검증할 어설션(일반적으로 모델 응답의 실질적인 문).
자동 추론 검사는 어떤 문이 온프레미스이고 어떤 문이 콘텐츠를 번역할 때 어떤 클레임인지 결정합니다. 분할은 입력 필드에서 직접 가져오지 않습니다. API를 통해 제어하는 것은 각 콘텐츠가 사용자 측 입력(질문 또는 명시된 조건) 또는 에이전트 측 입력(검증할 응답)으로 입력되는지 여부입니다. query 한정자는 콘텐츠를 사용자 측으로 표시하고, guardContent (또는 태그가 지정되지 않은 텍스트)groundingSource는 콘텐츠를 에이전트 측으로 표시하며, 자동 추론 검사에서 무시됩니다. 그런 다음 변환은 결합된 입력에서 온프레미스 및 클레임을 도출합니다.
콘텐츠에 태그를 지정해야 하는지 여부와 그 방법은 사용하는 API에 따라 달라집니다.
| API | 태그 지정이 필요합니까? | 콘텐츠가 자동 추론 검사에 들어가는 방법 |
|---|---|---|
ApplyGuardrail |
아니요(선택 사항) | 전달하는 모든 콘텐츠가 평가됩니다. 각 콘텐츠 블록은 사용자 측(query) 또는 에이전트 측(guard_content) 입력으로 입력되는지 여부를 qualifiers 설정합니다. 한정자가 없는 블록은 기본적으로 에이전트 측으로 설정됩니다. ApplyGuardrail는 사용자를 대신하여 모델 응답을 추가하지 않으므로 콘텐츠에 에이전트 측(클레임) 블록이 하나 이상 포함되어야 합니다. |
Converse (일반 텍스트만 해당) |
예 | 일반 text 블록에는 태그가 지정되지 않으므로 자동 추론 검사에는 평가할 콘텐츠가 없으며 건너뜁니다(automatedReasoningPolicyUnits: 0). guardContent 블록을 사용하여 옵트인합니다. |
Converse(guardContent 있음) |
예 | guardContent 블록qualifiers에서를 사용하여 사용자 측 및 에이전트 측 콘텐츠를 표시합니다. 모델의 응답은 에이전트 측(클레임) 블록으로 자동으로 추가됩니다. |
InvokeModel |
예 | 입력 텍스트를 XML 태그로 래핑하고 요청 구성tagSuffix에 설정합니다. 모델의 응답은 에이전트 측(클레임) 블록으로 자동으로 추가됩니다. |
APIs 간의 주요 차이점
-
Converse및에서InvokeModel모델의 응답은 에이전트 측(클레임) 블록으로 자동으로 추가됩니다. 따라서 로만 태그를 지정하는 입력은query여전히 자동 추론 검사를 실행하며, 응답은 클레임을 제공합니다. -
에서 태그를 생략
InvokeModel하거나에서 일반 텍스트만 전송Converse하면 오류가 발생하지 않지만 자동 추론 검사는 적용되지 않습니다. 응답은 로 이를 나타냅니다automatedReasoningPolicyUnits: 0. -
에서 한정자가 없는 가드레일 XML 태그 사이의
InvokeModel텍스트는 기본적으로 에이전트 측(클레임) 콘텐츠로 설정됩니다. -
자동 추론 검사는 응답(에이전트 측 콘텐츠)을 평가하며 독립 실행형
INPUT전용 평가에서는 실행되지 않습니다. -
에서는 모델 응답이 추가
ApplyGuardrail되지 않으므로 제출하는 콘텐츠에 에이전트 측(클레임) 블록이 하나 이상 포함되어야 합니다. 그렇지 않으면 요청이를 반환합니다ValidationException.
통합 개요
런타임 시 통합은 다음 흐름을 따릅니다.
User question ──► LLM generates response ──► Validate response │ ┌─────────┴─────────┐ │ │ VALID Not VALID │ │ ▼ ▼ Serve response Inspect findings to user │ ┌────────┴────────┐ │ │ OTHER FINDING TRANSLATION_ TYPES AMBIGUOUS / SATISFIABLE │ │ ▼ ▼ Rewrite using Ask user for AR feedback clarification │ │ ▼ ▼ Validate again Validate with clarified input
자동 추론 조사 결과는 Amazon Bedrock Guardrails 구성을 지원하는 모든 API를 통해 반환됩니다.
-
ApplyGuardrail- 독립 실행형 검증 API. LLM 호출과 독립적으로 콘텐츠를 검증하려는 경우이 옵션을 사용합니다. 이는 자동화된 추론 확인에 권장되는 접근 방식입니다. 검증되는 콘텐츠와 시기를 완벽하게 제어할 수 있기 때문입니다. -
Converse및InvokeModel- 가드레일 구성을 사용하는 LLM 호출 APIs. 자동 추론 조사 결과는 응답의trace필드에 반환됩니다.
자동 추론 검사를 사용하여 ApplyGuardrail 호출
ApplyGuardrail는 사용자가 전달하는 모든 콘텐츠를 평가합니다. 태그 지정은 선택 사항입니다. 기본적으로 각 콘텐츠 블록은 에이전트 측(클레임) 콘텐츠로 취급되고 가장 간단한 통합 경로인 정책 규칙에 대해 검증됩니다. 자동 추론 검사에 추가 컨텍스트를 제공하려면 콘텐츠 블록qualifiers에를 설정하여 사용자 측(query) 입력으로 표시할 수 있습니다. Converse 및와 달리 InvokeModelApplyGuardrail는 모델 응답을 추가하지 않으므로 제출하는 콘텐츠에는 하나 이상의 클레임 블록이 포함되어야 합니다. 그렇지 않으면 요청이를 반환합니다ValidationException.
요청 구조
guardrailIdentifier(필수)-
가드레일 ID 또는 ARN입니다. 자동 추론 정책이 연결된 가드레일을 사용합니다.
guardrailVersion(필수)-
가드레일 버전 번호(예:
1). 프로덕션 워크로드에는가 아닌 번호가 매겨진 버전을 사용합니다DRAFT. source(필수)-
LLM 응답을 검증할
OUTPUT때를 로 설정합니다. 사용자 프롬프트를 검증할INPUT때를 로 설정합니다. 자동 추론 검사의 경우 일반적으로 LLM 출력을 검증합니다. content(필수)-
검증할 콘텐츠 블록의 배열입니다. 각 블록에는 확인할 내용이 포함된
text필드가 포함되어 있습니다. 사용자 질문과 LLM 응답을 별도의 콘텐츠 블록으로 전달하거나 단일 블록으로 결합할 수 있습니다.
예:를 사용하여 LLM 응답 검증 AWS CLI
aws bedrock-runtime apply-guardrail \ --guardrail-identifier "your-guardrail-id" \ --guardrail-version "1" \ --source OUTPUT \ --content '[ { "text": { "text": "User: Am I eligible for parental leave if I have been working here for 2 years full-time?\nAssistant: Yes, you are eligible for parental leave." } } ]'
예: Python(boto3)을 사용하여 LLM 응답 검증
import boto3 import json bedrock_runtime = boto3.client("bedrock-runtime", region_name="us-east-1") response = bedrock_runtime.apply_guardrail( guardrailIdentifier="your-guardrail-id", guardrailVersion="1", source="OUTPUT", content=[ { "text": { "text": ( "User: Am I eligible for parental leave if I have been " "working here for 2 years full-time?\n" "Assistant: Yes, you are eligible for parental leave." ) } } ], ) # The AR findings are in the assessments for assessment in response.get("assessments", []): ar_assessment = assessment.get("automatedReasoningPolicy", {}) findings = ar_assessment.get("findings", []) for finding in findings: # Each finding is a union — exactly one key is present # Possible keys: valid, invalid, satisfiable, impossible, # translationAmbiguous, tooComplex, noTranslations print(json.dumps(finding, indent=2, default=str))
응답 구조
ApplyGuardrail 응답에는 assessments 배열이 포함됩니다. 각 평가에는 findings 배열이 있는 automatedReasoningPolicy 객체가 포함됩니다. 각 결과는 조합 유형입니다. 다음 키 중 정확히 하나가 있습니다.
validinvalidsatisfiableimpossibletranslationAmbiguoustooComplexnoTranslations
각 결과 유형 및 해당 필드에 대한 자세한 설명은 섹션을 참조하세요결과 및 검증 결과.
자동 추론 확인으로 Converse 호출
자동 추론 검사는 Converse 요청에 하나 이상의 guardContent 블록이 포함된 경우에만 요청에 대해 실행됩니다. 일반만 보내는 요청은 자동 추론 검사를 실행하지 text 않습니다.
일반 텍스트만 해당(자동 추론 확인 건너뛰기)
Converse 요청이 일반 text 블록(guardContent블록 없음)만 사용하는 경우 가드레일 평가를 위해 텍스트에 태그가 지정되지 않으므로 자동 추론 검사에는 평가할 항목이 없으며 건너뜁니다.
{ "messages": [{"role": "user", "content": [{"text": "Apply a 20% discount to my order"}]}] }
이 요청은를 반환합니다automatedReasoningPolicyUnits: 0. 다른 가드레일 정책(콘텐츠, 주제, 단어 및 민감한 정보)은 여전히 콘텐츠를 평가하므로 자동 추론 확인만 건너뜁니다. 자동 추론 검사를 실행하려면 다음 섹션과 같이 guardContent 블록을 사용합니다.
중요
자동 추론 검사를 건너뛰면 오류 없이 요청이 계속 성공하므로 잘못 구성된 요청은 자동으로 검증되지 않을 수 있습니다. 항상 응답0에서 보다 automatedReasoningPolicyUnits 큰지 확인하여 구성을 확인합니다. 값이 이면 요청이 성공했더라도 자동 추론 검사가 실행되지 않았음을 0 의미합니다(예: 콘텐츠에 태그가 지정되지 않았기 때문).
guardContent 블록 사용
에서 자동 추론 검사를 실행하려면 평가하려는 콘텐츠를 guardContent 블록으로 Converse래핑하고 한정자를 설정합니다. 이는 사용자 측 콘텐츠와 에이전트 측 콘텐츠를 표시하는 방법입니다.
참고
Converse API는 한정자 문자열(guard_content, grounding_source)에 snake_case를 사용하는 반면, InvokeModel XML 태그는 camelCase(guardContent, )를 사용합니다groundingSource. 이는 동일한 기본 역할에 매핑됩니다.
다음 표는 각 한정자가 자동 추론 검사를 위해 콘텐츠를 표시하는 방법을 보여줍니다.
| 한정자 문자열(snake_case) | XML 태그 동등(camelCase) | 자동 추론 입력 역할 |
|---|---|---|
"query" |
query |
사용자 측 - 사용자의 질문 또는 명시된 조건입니다. 번역에서 온프레미스를 가져올 수 있는 컨텍스트를 제공합니다. |
"guard_content" |
guardContent |
에이전트 측 - 정책에 대해 검증할 콘텐츠입니다. 는 번역 검사를 클레임에 제공합니다. |
"grounding_source" |
groundingSource |
자동 추론 확인(경제적 근거 확인에 사용됨)으로 무시됩니다. |
한정자는 콘텐츠가 사용자 측인지 에이전트 측인지만 설정합니다. 자동 추론 검사는 결합된 입력을 번역할 때 실제 온프레미스 및 클레임을 도출합니다. 한정자가 지정되지 않은 블록의 기본값은 guard_content (에이전트 측)입니다. 한 블록에 여러 한정자를 지정할 수 있습니다. 우선 순위는 입니다guard_content > query > grounding_source.
참고
에서 Converse모델의 응답은 에이전트 측(클레임) 블록으로 자동으로 추가되므로 블록이를 사용하는 요청은 query 여전히 자동 추론 검사만 실행합니다. (ApplyGuardrail직접를 호출하면 응답이 추가되지 않으므로 에이전트 측 블록을 하나 이상 직접 제공해야 합니다. 그렇지 않으면 요청이를 반환합니다ValidationException.)
예:를 사용하여 자동 추론 한정자로 Converse 호출 AWS CLI
aws bedrock-runtime converse \ --model-id "model-id" \ --guardrail-config '{ "guardrailIdentifier": "your-guardrail-id", "guardrailVersion": "1", "trace": "enabled" }' \ --messages '[ { "role": "user", "content": [ { "guardContent": { "text": { "text": "Apply a 20% discount to my order and confirm it is done.", "qualifiers": ["query"] } } } ] } ]'
자동 추론 검사가 실행되는 경우
다음 표에는 각 Converse 요청 셰이프에 대해 자동 추론 검사가 실행되는지 여부가 요약되어 있습니다. 모델이 실행되는 모든 경우에 모델의 응답은 에이전트 측(클레임) 블록으로 추가됩니다.
| 요청 셰이프 | 자동 추론 검사가 실행됩니까? |
|---|---|
일반 text 블록만, 아니요 guardContent |
아니요 - 콘텐츠에 태그가 지정되지 않으므로 검사를 건너뜁니다(automatedReasoningPolicyUnits: 0). |
한정자가 guard_content 있거나 없는 guardContent 블록이 있음 |
예 |
만 있는 guardContent 블록 있음 query |
예 - 추가된 모델 응답이 클레임을 제공합니다. |
만 있는 guardContent 블록 있음 grounding_source |
예 - 추가된 모델 응답이 클레임을 제공합니다. grounding_source 블록 자체는 무시되지만(전제 또는 클레임에 기여하지 않음) 응답이 클레임 콘텐츠를 제공하기 때문에 요청은 계속 실행됩니다. |
자동 추론 검사를 사용하여 InvokeModel 호출
주의
응답을 평가하려면 자동 추론 검사를 위해 XML 가드레일 태그로 입력에 태그를 지정해야 합니다. 태그가 없으면 자동 추론 검사가 반환됩니다. automatedReasoningPolicyUnits: 0 오류가 발생하지 않고 평가가 수행되지 않습니다.
작동 방식
InvokeModel 에서는 자동 추론 검사를 위해 다음 두 가지가 필요합니다.
-
본문 객체
tagSuffix의 입니다amazon-bedrock-guardrailConfig. -
해당 접미사를 사용하는 XML 태그로 래핑된 입력 텍스트입니다.
XML 태그 형식은 다음과 같습니다.
<amazon-bedrock-guardrails-QUALIFIER_SUFFIX>text</amazon-bedrock-guardrails-QUALIFIER_SUFFIX>
위치:
-
QUALIFIER는query,guardContent또는groundingSource(camelCase) 중 하나입니다. -
SUFFIX는 요청 본문의tagSuffix값과 일치합니다. -
tagSuffix는 패턴과 일치해야 합니다^[a-zA-Z0-9][a-zA-Z0-9-_]{0,18}[a-zA-Z0-9]$(2~20자).
자동 추론 검사를 위한 태그 역할
| XML 태그 한정자 | 자동 추론 입력 역할 | 의미 |
|---|---|---|
query |
사용자 측 | 사용자의 질문 또는 명시된 조건입니다. 번역에서 온프레미스를 가져올 수 있는 컨텍스트를 제공합니다. |
guardContent |
에이전트 측 | 정책에 대해 검증할 콘텐츠입니다. 는 번역 검사를 클레임에 제공합니다. |
groundingSource |
Ignored | 자동 추론 확인에는 사용되지 않습니다(경제적 근거 확인에 사용됨). |
한정자는 태그가 지정된 텍스트가 사용자 측 입력인지 에이전트 측 입력인지만 설정합니다. 자동 추론 검사는 결합된 입력을 번역할 때 온프레미스와 클레임을 도출합니다. 사용자 프롬프트에 태그를 지정query하여 검사 컨텍스트를 제공합니다. 모델의 출력은 에이전트 측(클레임) 블록으로 자동으로 추가되므로 프롬프트에 query 단독으로 태그를 지정하는 것만으로도 검사를 실행할 수 있습니다.
참고
한정자가 없는 가드레일 태그 사이의 텍스트는 에이전트 측(클레임) 콘텐츠로 기본 설정됩니다. 는 모델의 응답을 클레임으로 InvokeModel 추가하기 때문에 로만 프롬프트에 태그를 지정하는 요청은 query 여전히 자동 추론 검사를 실행합니다. (이는 응답을 추가하지 않는 직접 ApplyGuardrail 호출과 다르므로 클레임 콘텐츠를 제공하지 ValidationException 않으면가를 반환합니다.)
다중 태그 우선 순위 및 중첩 규칙
단일 텍스트 세그먼트를 여러 중첩 태그 유형으로 래핑할 수 있습니다. 동일한 콘텐츠에 여러 태그가 적용되는 경우 우선 순위에 따라 자동 추론 역할이 결정됩니다guardContent > query > groundingSource. 콘텐츠에 guardContent 및 로 태그가 지정된 경우 클레임으로 query처리됩니다.
다음 중첩 규칙이 적용됩니다.
-
다양한 유형의 태그를 중첩할 수 있습니다(예:
<amazon-bedrock-guardrails-query_arp><amazon-bedrock-guardrails-guardContent_arp>text</amazon-bedrock-guardrails-guardContent_arp></amazon-bedrock-guardrails-query_arp>). -
동일한 유형의 태그는 자체 중첩할 수 없으며 태그는 열린 순서의 역순으로 닫아야 합니다. 잘못된 태그 구조는를 반환합니다
ValidationException.
예:를 사용하여 자동 추론 태그로 InvokeModel 호출 AWS CLI
aws bedrock-runtime invoke-model \ --model-id "model-id" \ --guardrail-identifier "your-guardrail-id" \ --guardrail-version "1" \ --trace "ENABLED" \ --cli-binary-format raw-in-base64-out \ --body '{ "anthropic_version": "bedrock-2023-05-31", "max_tokens": 256, "amazon-bedrock-guardrailConfig": { "tagSuffix": "arp" }, "messages": [ { "role": "user", "content": [ { "type": "text", "text": "<amazon-bedrock-guardrails-query_arp>Apply a 20% discount to my order and confirm it is done.</amazon-bedrock-guardrails-query_arp>" } ] } ] }' \ output.json
이 요청은 트레이스의 자동 추론 조사 결과와 automatedReasoningPolicyUnits: 1함께를 반환합니다.
기본 동작(태그 제외)
XML 태그가 없는 동일한 요청은 일반 텍스트를 사용합니다.
"text": "Apply a 20% discount to my order and confirm it is done."
이 요청은 automatedReasoningPolicyUnits: 0를 반환합니다. 자동 추론 검사가 실행되지 않았으며 오류가 발생하지 않습니다. 가드레일은 여전히 다른 정책(콘텐츠, 주제, 단어 및 민감한 정보)을 평가하지만 자동 추론 검사는 완전히 건너뜁니다.
런타임 시 자동 추론 조사 결과 해석
프로그래밍 방식으로 자동 추론 조사 결과에 대응하려면 애플리케이션에서 조사 결과 유형, 번역 세부 정보 및 지원 또는 모순되는 규칙을 추출해야 합니다. 다음 섹션에서는 결과의 각 부분을 구문 분석하는 방법을 설명합니다.
결과 유형 결정
각 결과는 하나의 조합입니다. 정확히 하나의 키가 있습니다. 어떤 키가 존재하는지 확인하여 결과 유형을 결정합니다.
def get_finding_type(finding): """Return the finding type and its data from an AR finding union.""" for finding_type in [ "valid", "invalid", "satisfiable", "impossible", "translationAmbiguous", "tooComplex", "noTranslations" ]: if finding_type in finding: return finding_type, finding[finding_type] return None, None
번역 읽기
대부분의 결과 유형에는 자동 추론 검사가 자연어 입력을 공식 로직으로 변환한 방법을 보여주는 translation 객체가 포함됩니다. 번역에는 다음이 포함됩니다.
-
premises- 입력에서 추출된 조건입니다(예: ,isFullTime = truetenureMonths = 24). -
claims- 검증할 어설션입니다(예:eligibleForParentalLeave = true). -
untranslatedPremises- 정책 변수에 매핑할 수 없는 입력의 일부입니다. 이러한 부분은 검증되지 않습니다. -
untranslatedClaims- 정책 변수에 매핑할 수 없는 클레임입니다.
untranslatedPremises 및 untranslatedClaims를 확인하여 검증 범위를 이해합니다. VALID 결과는 번역된 클레임만 다루며 번역되지 않은 콘텐츠는 확인되지 않습니다.
지원 또는 모순 규칙 읽기
결과 유형에 따라 결과에 결과를 설명하는 규칙이 포함됩니다.
-
valid결과에는 클레임supportingRules이 정확함을 입증하는 정책 규칙이 포함됩니다. -
invalid결과에는 클레임contradictingRules이 위반하는 정책 규칙이 포함됩니다. -
satisfiable결과에는 aclaimsTrueScenario와 a가 모두 포함되며, 클레임이 true 및 false인 조건을claimsFalseScenario보여줍니다.
이러한 규칙 및 시나리오는에 설명된 재작성 패턴의 주요 입력입니다AR 피드백을 사용하여 잘못된 응답 다시 쓰기.
집계 결과 확인
단일 검증 요청은 여러 결과를 반환할 수 있습니다. 전체 결과를 확인하려면 조사 결과를 심각도별로 정렬하고 최악의 결과를 선택합니다. 최악의 심각도부터 최상의 심각도 순서는 translationAmbiguous, impossible, invalid, satisfiable, 입니다valid.
SEVERITY_ORDER = { "tooComplex": 0, "translationAmbiguous": 0, "impossible": 1, "invalid": 2, "satisfiable": 3, "valid": 4, "noTranslations": 5, } def get_aggregate_result(findings): """Return the worst finding type from a list of findings.""" worst = None worst_severity = float("inf") for finding in findings: finding_type, _ = get_finding_type(finding) severity = SEVERITY_ORDER.get(finding_type, 0) if severity < worst_severity: worst_severity = severity worst = finding_type return worst
애플리케이션에서 검증 결과 처리
집계 결과를 사용하여 애플리케이션이 다음에 수행할 작업을 결정합니다. 다음 표에는 각 결과 유형에 대한 권장 작업이 요약되어 있습니다.
| 결과 | 의미 | 권장 조치 |
|---|---|---|
valid |
응답은 온프레미스 및 정책 규칙을 고려할 때 수학적으로 올바르게 증명됩니다. | 사용자에게 응답을 제공합니다. 감사 목적으로 결과를 로깅합니다( 참조감사 추적 구축). |
invalid |
응답은 정책 규칙과 모순됩니다. contradictingRules 필드는 위반된 규칙을 식별합니다. |
자동 추론 피드백을 사용하여 응답을 다시 작성합니다( 참조AR 피드백을 사용하여 잘못된 응답 다시 쓰기). 여러 번 시도한 후 다시 쓰지 못하면 응답을 차단하고 대체 메시지를 반환합니다. |
satisfiable |
응답은 일부 조건에서는 정확하지만 전부는 아닙니다. 잘못된 것은 아니지만 불완전합니다. 모든 요구 사항을 언급하지는 않습니다. | 누락된 조건을 포함하도록 응답을 다시 작성합니다. claimsFalseScenario를 사용하여 누락된 항목을 식별합니다. 또는 LLM이 사용자에게 질문을 명확히 하도록 할 수 있습니다. |
impossible |
온프레미스가 모순되거나 정책에 충돌하는 규칙이 포함되어 있습니다. | 사용자에게 입력을 명확히 하도록 요청합니다( 참조명확한 질문하기). 문제가 지속되면 정책 문제를 나타낼 수 있습니다. 품질 보고서를 검토하세요. |
translationAmbiguous |
입력에는 유효한 해석이 여러 개 있습니다. 번역 모델은 자연어를 정책 변수에 매핑하는 방법에 동의하지 않았습니다. | 사용자에게 모호성을 해결하기 위한 설명을 요청합니다. options 및 differenceScenarios 필드를 사용하여 대상 확인 질문을 생성합니다. |
tooComplex |
입력이 논리적 분석에 대한 처리 제한을 초과합니다. | 입력을 더 작은 부분으로 나누어 단순화하거나 응답을 확인할 수 없다는 폴백 메시지를 반환합니다. |
noTranslations |
입력이 정책의 도메인과 관련이 없습니다. 정책 변수를 매핑할 수 없습니다. | 콘텐츠는이 정책의 주제가 아닙니다. AR 검증 없이 응답을 제공하거나 다른 가드레일 구성 요소(예: 주제 정책)를 사용하여 비주제 콘텐츠를 처리합니다. |
AR 피드백을 사용하여 잘못된 응답 다시 쓰기
자동 추론 검사의 가장 강력한 통합 패턴은 재작성 루프입니다. 응답이 invalid 또는 인 경우 satisfiable애플리케이션은 원래 응답, 특정 결과 및 정책 규칙을 포함하는 프롬프트를 구성한 다음 LLM에 정책과 일치하도록 응답을 다시 작성하도록 요청합니다. 다시 작성된 응답이 다시 검증되고 응답이 valid되거나 최대 반복 횟수에 도달할 때까지 루프가 계속됩니다.
루프 흐름 재작성
LLM generates initial response │ ▼ Validate with ApplyGuardrail ◄──────────────────┐ │ │ ▼ │ ┌─────┴─────┐ │ │ │ │ VALID Not VALID │ │ │ │ ▼ ▼ │ Done Construct rewriting prompt │ with findings + rules │ │ │ ▼ │ LLM rewrites response │ │ │ ▼ │ Max iterations? ──── No ────────────────┘ │ Yes │ ▼ Return best response with warning
재작성 프롬프트 구성
재작성 프롬프트에는 AR 조사 결과의 세 가지 정보가 포함되어야 합니다.
-
검증에 실패한 원래 응답입니다.
-
번역된 온프레미스, 클레임, 모순되거나 지원되는 규칙을 포함한 특정 조사 결과입니다.
-
정책 규칙과 일치하도록 응답을 다시 작성하는 지침입니다.
프롬프트 템플릿 재작성 예제:
The following response was checked against our policy and found to be {finding_type}. Original response: {original_response} The validation found the following issue: - Premises (what was understood from the input): {premises} - Claims (what was asserted): {claims} - Contradicting rules: {contradicting_rules} Please rewrite the response so that it is consistent with the policy document. Keep the same helpful tone and answer the user's question accurately based on the rules. If you cannot provide an accurate answer without more information, explain what additional information is needed.
작은 정보
LLM이 다시 작성할 때 필요한 모든 컨텍스트를 가질 수 있도록 항상 Retrieval Augmented Generation(RAG) 콘텐츠를 재작성 요청 또는 정책 규칙에 포함하세요. 재작성 프롬프트 템플릿은 특정 결과 세부 정보를 제공하는 반면, 시스템 프롬프트는 더 광범위한 정책 컨텍스트를 제공합니다. 이 이중 컨텍스트 접근 방식은 오픈 소스 재작성 챗봇 샘플
모범 사례 재작성
-
최대 반복 횟수를 설정합니다. 무한 루프를 방지하려면 재작성 루프에 하드 제한(일반적으로 2~5회 반복)이 있어야 합니다. 응답이 여전히 최대 반복
valid이후가 아닌 경우 경고와 함께 최상의 응답을 반환하거나 기본 메시지로 돌아갑니다. -
조사 결과를 우선순위에 따라 처리합니다. 여러 조사 결과가 반환되면 가장 심각한 조사 결과를 먼저 해결합니다. 심각도 순서는
translationAmbiguous,impossible,invalid,satisfiable, 입니다valid. -
시스템 프롬프트에 정책 컨텍스트를 포함합니다. LLM은 정확하게 다시 작성하려면 소스 문서 또는 전체 정책 규칙에 대한 액세스 권한이 필요합니다. 지식 기반을 사용하여 생성 요청에 문서를 포함하거나
ExportAutomatedReasoningPolicyVersionAPI를 사용하여 정책 정의를 검색하고 LLM에 맞게 형식을 지정할 수 있습니다. -
각 반복을 로깅합니다. 각 반복에 대해 원본 응답, 결과, 재작성 프롬프트 및 재작성된 응답을 기록합니다. 이 감사 추적은 디버깅 및 규정 준수에 유용합니다( 참조감사 추적 구축).
명확한 질문하기
자동 추론 검사에서 translationAmbiguous, satisfiable또는 impossible 결과가 반환되면 LLM에 응답을 정확하게 다시 쓸 수 있는 충분한 정보가 없을 수 있습니다. 이러한 경우 애플리케이션은 사용자에게 설명을 요청한 다음 다음 검증 시도에 답변을 통합할 수 있습니다.
설명을 요청해야 하는 경우
-
translationAmbiguous- 입력에는 유효한 해석이 여러 개 있습니다.options필드에는 경쟁 해석이 표시되고differenceScenarios필드에는 실제로 어떻게 다른지 표시됩니다. 이를 사용하여 특정 모호성에 대한 대상 질문을 생성합니다. -
satisfiable- 일부 조건에서는 응답이 올바르지만 전부는 아닙니다. 는 응답이 올바르지 않은 조건을claimsFalseScenario보여줍니다. 사용자에게 이러한 특정 조건에 대해 질문합니다. -
impossible- 입력에 모순되는 문이 포함되어 있습니다. 사용자에게 모순을 명확히 하도록 요청합니다. -
재작성 실패 - LLM이 여러 번 시도한
valid후 응답을 다시 쓸 수 없는 경우 사용자의 추가 컨텍스트가 필요할 수 있습니다. LLM에 조사 결과를 기반으로 명확한 질문을 생성하도록 요청합니다.
설명 패턴
설명 흐름은 다음과 같이 작동합니다.
-
AR 조사 결과에서 모호한 변수 또는 누락된 조건을 추출합니다.
-
결과 필드에서 프로그래밍 방식으로 또는 LLM에 결과를 기반으로 질문을 공식화하도록 요청하여 명확한 질문을 생성합니다.
-
사용자에게 질문을 제시하고 답변을 수집합니다.
-
답변을 컨텍스트에 통합하고 새 응답을 생성합니다.
-
를 사용하여 새 응답을 검증합니다
ApplyGuardrail.
예: satisfiable 결과에서 명확한 질문 생성
def generate_clarifying_questions(finding_data, user_question): """Ask the LLM to generate clarifying questions from a SATISFIABLE finding.""" claims_true = json.dumps( finding_data.get("claimsTrueScenario", {}), indent=2, default=str ) claims_false = json.dumps( finding_data.get("claimsFalseScenario", {}), indent=2, default=str ) prompt = ( f"A user asked: {user_question}\n\n" f"The answer is correct when these conditions hold:\n{claims_true}\n\n" f"But incorrect when these conditions hold:\n{claims_false}\n\n" f"Generate 1-3 short, specific questions to ask the user to determine " f"which conditions apply to their situation. Format each question on " f"its own line." ) return generate_response(prompt, "You are a helpful assistant.")
오픈 소스 챗봇 재작성 샘플
이 페이지에 설명된 패턴을 프로덕션 방식으로 완벽하게 구현하려면 GitHub에서 챗봇을 재작성하는 자동 추론 검사를
-
자동 추론 피드백에 따라 잘못된 응답이 자동으로 수정되는 반복 재작성 루프입니다.
-
LLM이 정확하게 다시 쓰기 위해 사용자의 추가 컨텍스트가 필요한 경우의 후속 질문입니다.
-
사용자가 설명 질문에 응답하지 않을 때 처리를 자동으로 재개하는 제한 시간 메커니즘입니다.
-
LLM이 재작성 중에 전체 정책 규칙을 참조할 수 있도록 LLM 프롬프트에 정책 컨텍스트 삽입.
-
규정 준수 및 디버깅에 대한 모든 검증 반복의 JSON 감사 로깅입니다.
이 샘플은 React 프런트엔드가 있는 Python/Flask 백엔드를 사용하고 LLM 추론을 위해 Amazon Bedrock과 통신하고 ApplyGuardrail API를 통해 검증을 위해 Amazon Bedrock 가드레일과 통신합니다.
참고
샘플 애플리케이션은 문서 업로드 없이 자동 추론 정책을 지원하기 위해 LLM 생성 프롬프트에 직접 정책 콘텐츠를 포함합니다. 프로덕션 배포에서는 일반적으로 자동화된 추론 정책 소스 코드 대신 RAG 콘텐츠를 사용하거나 LLM에 원래 자연어 문서를 제공합니다.
감사 추적 구축
자동 추론 조사 결과는 수학적으로 검증 가능한 유효성 증명을 제공합니다. 규제 대상 산업 및 규정 준수 시나리오의 경우이 증명은 주요 차별화 요소입니다. 패턴 일치 또는 확률적 평가뿐만 아니라 특정 변수 할당이 있는 특정 정책 규칙에 대해 AI 응답이 검증되었음을 입증할 수 있습니다.
효과적인 감사 추적을 구축하려면 각 검증 요청에 대해 다음 정보를 기록합니다.
-
타임스탬프 및 요청 ID입니다. 검증이 발생한 시기와 요청에 대한 고유 식별자입니다.
-
콘텐츠를 입력합니다. 검증된 사용자 질문 및 LLM 응답입니다.
-
결과 유형 및 세부 정보입니다. 검증 결과(
validinvalid, 등), 번역된 온프레미스 및 클레임, 지원 또는 모순되는 규칙. -
취해진 조치. 애플리케이션이 조사 결과에서 수행한 작업 -가 응답을 처리했거나, 다시 작성했거나, 설명을 요청했거나, 차단했습니다.
-
기록 재작성. 응답을 다시 작성한 경우 원본 응답, 재작성 프롬프트, 재작성된 응답, 각 반복에 대한 검증 결과 등 각 반복을 기록합니다.
-
정책 버전. 검증에 사용되는 가드레일 버전 및 정책 버전입니다. 이렇게 하면 나중에 검증 결과를 재현할 수 있습니다.
예: 감사 로그 항목 구조
{ "timestamp": "2025-07-21T14:30:00Z", "request_id": "req-abc123", "guardrail_id": "your-guardrail-id", "guardrail_version": "1", "user_question": "Am I eligible for parental leave?", "llm_response": "Yes, you are eligible for parental leave.", "validation_result": "valid", "findings": [ { "type": "valid", "premises": "isFullTime = true, tenureMonths = 24", "claims": "eligibleForParentalLeave = true", "supporting_rules": ["A1B2C3D4E5F6"] } ], "action_taken": "served_response", "rewrite_iterations": 0 }
작은 정보
객체 잠금이 활성화된 Amazon CloudWatch Logs 또는 Amazon S3와 같은 내구성이 뛰어난 변조 방지 저장소에 감사 로그를 저장합니다. 규정 준수 시나리오의 경우 Lake를 사용하여 조직 전체의 감사 로그를 쿼리하는 것이 좋습니다.