기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
애플리케이션에 자동 추론 검사 통합
가드레일에 자동 추론 정책을 배포한 후( 참조애플리케이션에 자동 추론 정책 배포) 런타임에 이를 사용하여 LLM 응답을 검증하고 피드백에 따라 조치를 취할 수 있습니다. 이 페이지에서는 검증 API를 호출하고, 결과를 프로그래밍 방식으로 해석하고, 잘못된 응답을 다시 작성하고, 명확한 질문을 하는 등의 일반적인 통합 패턴을 구현하는 방법을 설명합니다.
자동 추론 검사는 감지 모드에서만 작동하며 콘텐츠를 차단하는 대신 조사 결과와 피드백을 반환합니다. 애플리케이션은 응답을 제공하거나, 다시 작성하거나, 설명을 요청하거나, 기본 동작으로 돌아가는 등 조사 결과를 사용하여 수행할 작업을 결정할 책임이 있습니다.
통합 개요
런타임 시 통합은 다음 흐름을 따릅니다.
User question ──► LLM generates response ──► ApplyGuardrail validates 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필드에 반환됩니다. -
InvokeAgent및RetrieveAndGenerate- 가드레일 구성을 사용하는 에이전트 및 지식 기반 APIs.
이 페이지에서는 아래에 설명된 재작성 및 설명 패턴을 구현할 수 있는 가장 유연한 기능을 제공하므로 ApplyGuardrail API에 중점을 둡니다. 다른 APIs. https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails-use.html
오픈 소스 재작성 챗봇 샘플
이 페이지에 설명된 패턴을 완전히 프로덕션 방식으로 구현하려면 GitHub에서 챗봇을 재작성하는 자동 추론 검사를
-
AR 피드백에 따라 잘못된 응답이 자동으로 수정되는 반복 재작성 루프입니다.
-
LLM이 정확하게 다시 쓰기 위해 사용자의 추가 컨텍스트가 필요한 경우의 후속 질문입니다.
-
사용자가 설명 질문에 응답하지 않을 때 처리를 자동으로 재개하는 제한 시간 메커니즘입니다.
-
LLM이 재작성 중에 전체 정책 규칙을 참조할 수 있도록 LLM 프롬프트에 정책 컨텍스트 삽입.
-
규정 준수 및 디버깅에 대한 모든 검증 반복의 JSON 감사 로깅입니다.
이 샘플은 React 프런트엔드가 있는 Python/Flask 백엔드를 사용하고 LLM 추론을 위해 Amazon Bedrock과 통신하고 ApplyGuardrail API를 통해 검증을 위해 Amazon Bedrock 가드레일과 통신합니다.
참고
샘플 애플리케이션은 문서 업로드 없이 자동 추론 정책을 지원하기 위해 LLM 생성 프롬프트에 직접 정책 콘텐츠를 포함합니다. 프로덕션 배포에서는 일반적으로 자동화된 추론 정책 소스 코드 대신 RAG 콘텐츠를 사용하거나 LLM에 원래 자연어 문서를 제공합니다.
자동 추론 검사를 사용하여 ApplyGuardrail 호출
ApplyGuardrail API를 사용하여 가드레일에 대한 콘텐츠를 검증합니다. API는 하나 이상의 콘텐츠 블록을 수락하고 자동 추론 조사 결과를 포함하는 평가를 반환합니다.
요청 구조
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
각 결과 유형 및 해당 필드에 대한 자세한 설명은 섹션을 참조하세요결과 및 검증 결과.
런타임 시 AR 조사 결과 해석
프로그래밍 방식으로 자동 추론 조사 결과에 대응하려면 애플리케이션에서 조사 결과 유형, 번역 세부 정보 및 지원 또는 모순되는 규칙을 추출해야 합니다. 다음 섹션에서는 결과의 각 부분을 구문 분석하는 방법을 설명합니다.
결과 유형 결정
각 결과는 하나의 조합입니다. 정확히 하나의 키가 있습니다. 어떤 키가 존재하는지 확인하여 결과 유형을 결정합니다.
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결과에는claimsTrueScenario클레임이 true 및 false인 조건을claimsFalseScenario보여주는 a와 a가 모두 포함됩니다.
이러한 규칙 및 시나리오는에 설명된 재작성 패턴의 주요 입력입니다AR 피드백을 사용하여 잘못된 응답 다시 쓰기.
집계 결과 확인
단일 검증 요청은 여러 결과를 반환할 수 있습니다. 전체 결과를 확인하려면 조사 결과를 심각도별로 정렬하고 최악의 결과를 선택합니다. 최악의 심각도부터 최상의 심각도 순서는 TRANSLATION_AMBIGUOUS, 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 피드백을 사용하여 응답을 다시 작성합니다( 참조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.")
감사 추적 구축
자동 추론 조사 결과는 수학적으로 검증 가능한 유효성 증명을 제공합니다. 규제 산업 및 규정 준수 시나리오의 경우이 증명은 주요 차별화 요소입니다. 패턴 일치 또는 확률적 평가뿐만 아니라 특정 변수 할당이 있는 특정 정책 규칙에 대해 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를 사용하여 조직 전체의 감사 로그를 쿼리하는 것이 좋습니다.