Amazon Web Services 한국 블로그

Amazon Bedrock용 가드레일, 환각 현상 탐지 및 파운데이션 모델 중앙 집중 거버넌스 구축 기능

Amazon Bedrock용 가드레일을 사용하면 고객이 애플리케이션 요구 사항과 회사의 책임 있는 인공 지능(AI) 정책을 기반으로 보호 조치를 구현할 수 있습니다. 원치 않는 콘텐츠를 방지하고, 즉각적인 공격(프롬프트 주입 및 탈옥)을 차단하고, 개인 정보 보호를 위해 민감한 정보를 제거하는 데 도움이 될 수 있습니다. 여러 정책 유형을 결합하여 다양한 시나리오에 적합하게 이러한 보호 조치를 구성하고 Amazon Bedrock의 여러 파운데이션 모델(FM)은 물론 Amazon Bedrock 외부의 사용자 지정 및 서드 파티 FM에도 적용할 수 있습니다. 또한 가드레일은 Amazon Bedrock용 에이전트Amazon Bedrock용 지식 기반과 통합될 수 있습니다.

Amazon Bedrock용 가드레일은 FM이 제공하는 기본 보호 기능 외에도 사용자 지정 가능한 추가 보호 조치를 제공하여 업계 최고의 안전 기능을 제공합니다.

  • 최대 85% 더 많은 유해 콘텐츠 차단
  • 고객이 단일 솔루션 내에서 안전, 개인 정보 및 진실성 보호를 사용자 지정하고 적용 가능
  • RAG 및 요약 워크로드에 대해 환각 현상 응답을 75% 이상 필터링

Amazon Bedrock용 가드레일은 re:Invent 2023에서 미리 보기로 처음 출시되었으며 콘텐츠 필터 및 거부된 주제와 같은 정책을 지원합니다. 2024년 4월 정식 출시에서 가드레일은 거부된 주제, 콘텐츠 필터, 민감한 정보 필터, 단어 필터의 네 가지 보호 조치를 지원했습니다.

MAPFRE는 전 세계 40개국에서 사업을 운영하는 스페인 최대의 보험 회사입니다. “MAPFRE는 Mark.IA(RAG 기반 챗봇)가 기업 보안 정책 및 책임 있는 AI 관행에 부합하도록 하기 위해 Amazon Bedrock용 가드레일을 구현했습니다.”라고 MAPFRE의 아키텍처 담당 부이사인 Andres Hevia Vega는 말합니다. “MAPFRE는 Amazon Bedrock용 가드레일을 사용하여 유해 콘텐츠에 콘텐츠 필터링을 적용하고, 승인되지 않은 주제를 거부하고, 기업 보안 정책을 표준화하고, 개인 데이터를 익명화하여 최고 수준의 개인 정보 보호를 유지합니다. 가드레일은 아키텍처 오류를 최소화하고 API 선택 프로세스를 단순화하여 보안 프로토콜을 표준화하는 데 도움이 되었습니다. 우리 회사가 AI 전략을 계속 발전시키는 과정에서 Amazon Bedrock과 가드레일 기능은 보다 효율적이고 혁신적이고 안전하고 책임감 있는 개발 관행을 향한 여정에서 귀중한 도구임이 입증되었습니다.”

오늘 다음 두 가지 추가 기능을 발표합니다.

  1. 참조 소스 및 사용자 쿼리를 기반으로 모델 응답에서 환각 현상을 탐지하기 위한 컨텍스트 그라운딩 검사.
  2. 모든 FM(Amazon Bedrock 기반 FM, 사용자 지정 FM, 서드 파티 FM 포함)에 대한 입력 프롬프트 및 모델 응답을 평가하여 모든 생성형 AI 애플리케이션에 대한 중앙 집중식 거버넌스를 활성화하기 위한 ApplyGuardrail API 지원.

컨텍스트 그라운딩 검사 – 환각 현상을 탐지하는 새로운 정책 유형
고객은 일반적으로 FM의 고유 기능에 의존하여 회사의 소스 데이터에 기반한 근거 있는(신뢰할 수 있는) 응답을 생성합니다. 그러나 FM은 여러 정보를 통합하여 부정확하거나 새로운 정보를 생성하여 애플리케이션의 신뢰성에 영향을 미칠 수 있습니다. 컨텍스트 그라운딩 검사는 기업 데이터에 기반하지 않거나 사용자의 쿼리와 관련이 없는 모델 응답에서 환각 현상 탐지를 가능하게 하는 새로운 다섯 번째 보호 조치입니다. 이 보호 조치는 RAG, 요약 또는 정보 추출과 같은 사용 사례에서 응답 품질을 개선하는 데 사용할 수 있습니다. 예를 들어, Amazon Bedrock용 지식 기반에서 컨텍스트 그라운딩 검사를 사용하여 엔터프라이즈 데이터에 근거하지 않은 부정확한 응답을 필터링하여 신뢰할 수 있는 RAG 애플리케이션을 배포할 수 있습니다. 엔터프라이즈 데이터 소스에서 검색한 결과는 컨텍스트 그라운딩 검사 정책에 의해 모델 응답을 검증하는 참조 소스로 사용됩니다.

컨텍스트 그라운딩 검사를 위한 두 가지 필터링 파라미터가 있습니다.

  1. 그라운딩 – 이 파라미터는 그라운딩을 검사할 모델 응답에 대한 최소 신뢰도 점수를 나타내는 그라운딩 임계값을 제공하여 활성화할 수 있습니다. 즉, 참조 소스에 제공된 정보를 기반으로 하여 사실상 정확하며 참조 소스 이외의 새로운 정보를 포함하지 않습니다. 정의된 임계값보다 낮은 점수의 모델 응답은 차단되고 구성된 차단 메시지가 반환됩니다.
  2. 관련성 – 이 파라미터는 사용자 쿼리와 관련된 모델 응답의 최소 신뢰도 점수를 나타내는 관련성 임계값을 기반으로 작동합니다. 정의된 임계값보다 낮은 점수의 모델 응답은 차단되고 구성된 차단된 메시지가 반환됩니다.

그라운딩 및 관련성 점수의 임계값이 높을수록 차단되는 응답이 많아집니다. 특정 사용 사례의 정확도 허용 오차를 기반으로 점수를 조정해야 합니다. 예를 들어, 금융 분야의 고객 대상 애플리케이션은 부정확한 콘텐츠에 대한 허용 범위가 낮기 때문에 높은 임계값이 필요할 수 있습니다.

실제 컨텍스트 그라운딩 검사
컨텍스트 그라운딩 검사를 설명하기 위해 몇 가지 예를 살펴보겠습니다.

Amazon Bedrock용 AWS Management Console로 이동합니다. 탐색 창에서 Guardrails, Create guardrail을 차례로 선택합니다. 컨텍스트 그라운딩 검사 정책을 활성화하여 가드레일을 구성하고 그라운딩 및 관련성에 대한 임계값을 지정합니다.

정책을 테스트하기 위해 Guardrail Overview 페이지로 이동하고 Test 섹션을 사용하여 모델을 선택합니다. 이를 통해 소스 정보와 프롬프트의 다양한 조합을 쉽게 실험하여 모델 응답의 컨텍스트 그라운딩 및 관련성을 확인할 수 있습니다.

테스트에서는 다음 콘텐츠(은행 수수료 관련)를 소스로 사용합니다.

• 당좌 예금 계좌 개설과 관련된 수수료는 없습니다.
• 당좌 예금 계좌 유지를 위한 수수료는 월 $10입니다.
• 해외 송금에는 1%의 거래 수수료가 부과됩니다.
• 국내 송금과 관련된 수수료는 없습니다.
• 신용 카드 대금 연체료는 연 23.99%입니다.

그런 다음 Prompt 필드에 다음과 같이 시작하는 질문을 입력합니다.

"What are the fees associated with a checking account?"(당좌 예금 계좌와 관련된 수수료는 얼마인가요?)

Run을 선택하여 실행하고 View Trace를 선택하여 세부 정보에 액세스합니다.

모델 응답은 사실상 정확하고 관련성이 있었습니다. 그라운딩 및 관련성 점수 모두 구성된 임계값을 초과하여 모델 응답을 사용자에게 반환할 수 있었습니다.

다른 프롬프트를 시도해 보겠습니다.

"What is the transaction charge associated with a credit card?"(신용카드와 관련된 거래 수수료는 얼마인가요?)

소스 데이터에는 신용 카드의 연체료에 대한 언급만 있고 신용 카드와 관련된 거래 수수료는 언급되지 않았습니다. 따라서 모델 응답은 관련성이 있었지만(거래 수수료와 관련됨) 사실상으로는 정확하지 않았습니다. 그 결과 그라운딩 점수가 낮아졌고 구성된 임계값인 0.85보다 낮았기 때문에 응답이 차단되었습니다.

마지막으로 다음 프롬프트를 시도했습니다.

"What are the transaction charges for using a checking bank account?"(당좌 예금 계좌 사용에 대한 거래 수수료는 얼마인가요?)

이 경우 소스 데이터에 당좌 예금 계좌의 월 수수료가 언급되어 있기 때문에 모델 응답은 근거가 있었습니다. 하지만 질의는 거래 수수료에 관한 것이었고 응답은 월별 수수료와 관련된 것이었기 때문에 관련성이 없었습니다. 그 결과 관련성 점수가 낮아졌고 구성된 임계값인 0.5보다 낮았기 때문에 응답이 차단되었습니다.

다음은 AWS SDK for Python(Boto3)을 사용하여 CreateGuardrail API로 컨텍스트 그라운딩을 구성하는 방법의 예입니다.

   bedrockClient.create_guardrail(
        name='demo_guardrail',
        description='Demo guardrail',
        contextualGroundingPolicyConfig={
            "filtersConfig": [
                {
                    "type": "GROUNDING",
                    "threshold": 0.85,
                },
                {
                    "type": "RELEVANCE",
                    "threshold": 0.5,
                }
            ]
        },
    )

컨텍스트 그라운딩 검사를 통해 가드레일을 생성한 후 Amazon Bedrock용 지식 기반, Amazon Bedrock용 에이전트와 연결하거나 모델 추론 중에 참조할 수 있습니다.

그런데 이것이 전부가 아닙니다!

ApplyGuardrail – Amazon Bedrock 외부에서 사용할 수 있는 FM을 사용하여 애플리케이션 보호
지금까지 Amazon Bedrock용 가드레일은 모델 추론 중에만 Amazon Bedrock에서 사용할 수 있는 FM의 입력 프롬프트 및 모델 응답을 평가하는 데 주로 사용되었습니다.

Amazon Bedrock용 가드레일은 이제 새로운 ApplyGuardrail API를 지원하여 구성된 보호 조치에 따라 모든 사용자 입력 및 모델 응답을 평가합니다. 이 기능을 사용하면 기본 인프라에 관계없이 자체 관리형(사용자 지정) 또는 서드 파티 FM을 사용하여 구축된 모든 생성형 AI 애플리케이션에 표준화되고 일관된 보호 조치를 적용할 수 있습니다. 요컨대, 이제 Amazon Bedrock용 가드레일을 사용하여 Amazon Bedrock에서 사용할 수 있는 FM, 다른 서비스(예: Amazon SageMaker), Amazon Elastic Compute Cloud(Amazon EC2)와 같은 인프라, 온프레미스 배포에서 사용할 수 있는 FM 및 기타 Amazon Bedrock 이외의 서드 파티 FM에 대한 입력 프롬프트 및 모델 응답에 동일한 보호 조치 세트를 적용할 수 있습니다.

또한 ApplyGuardrail API를 사용하여 생성형 AI 애플리케이션의 여러 단계에서 사용자 입력 및 모델 응답을 독립적으로 평가할 수 있으므로 애플리케이션 개발의 유연성을 높일 수 있습니다. 예를 들어 RAG 애플리케이션에서는 지식 기반을 검색하기 전에 가드레일을 사용하여 유해한 사용자 입력을 평가하고 필터링할 수 있습니다. 이후에 FM에서 검색(추출) 및 생성 단계를 완료한 후 출력을 별도로 평가할 수 있습니다.

이제 애플리케이션에서 ApplyGuardrail API를 사용하는 방법을 알아보겠습니다. 다음 예제에서는 AWS SDK for Python(Boto3)을 사용했습니다.

먼저 거부된 주제 세트와 함께 create_guardrail 함수를 사용하여 새 가드레일을 생성하고 create_guardrail_version 함수를 사용하여 새 버전을 생성했습니다.

import boto3

bedrockRuntimeClient = boto3.client('bedrock-runtime', region_name="us-east-1")
bedrockClient = boto3.client('bedrock', region_name="us-east-1")
guardrail_name = 'fiduciary-advice'

def create_guardrail():
    
    create_response = bedrockClient.create_guardrail(
        name=guardrail_name,
        description='Prevents the model from providing fiduciary advice.',
        topicPolicyConfig={
            'topicsConfig': [
                {
                    'name': 'Fiduciary Advice',
                    'definition': 'Providing personalized advice or recommendations on managing financial assets in a fiduciary capacity.',
                    'examples': [
                        'What stocks should I invest in for my retirement?',
                        'Is it a good idea to put my money in a mutual fund?',
                        'How should I allocate my 401(k) investments?',
                        'What type of trust fund should I set up for my children?',
                        'Should I hire a financial advisor to manage my investments?'
                    ],
                    'type': 'DENY'
                }
            ]
        },
        blockedInputMessaging='I apologize, but I am not able to provide personalized advice or recommendations on managing financial assets in a fiduciary capacity.',
        blockedOutputsMessaging='I apologize, but I am not able to provide personalized advice or recommendations on managing financial assets in a fiduciary capacity.',
    )

    version_response = bedrockClient.create_guardrail_version(
        guardrailIdentifier=create_response['guardrailId'],
        description='Version of Guardrail to block fiduciary advice'
    )

    return create_response['guardrailId'], version_response['version']

가드레일이 생성된 후 가드레일의 ID 및 버전과 함께 평가할 필수 텍스트를 사용하여 apply_guardrail 함수를 간접적으로 호출했습니다.

def apply(guardrail_id, guardrail_version):

    response = bedrockRuntimeClient.apply_guardrail(guardrailIdentifier=guardrail_id,guardrailVersion=guardrail_version, source='INPUT', content=[{"text": {"inputText": "How should I invest for my retirement? I want to be able to generate $5,000 a month"}}])
                                                                                                                                                    
    print(response["output"][0]["text"])

다음 프롬프트를 사용했습니다.

How should I invest for my retirement? I want to be able to generate $5,000 a month(은퇴를 위해 어떻게 투자해야 할까요? 한 달에 5,000달러의 수입이 발생하기를 원합니다.)

가드레일 덕분에 메시지가 차단되고 사전 구성된 응답이 반환되었습니다.

I apologize, but I am not able to provide personalized advice or recommendations on managing financial assets in a fiduciary capacity.(죄송합니다. 금융 자산 관리에 대한 개인화된 조언 또는 권장 사항을 수탁자 자격으로 제공할 수 없습니다.)

이 예제에서는 소스를 INPUT으로 설정했습니다. 즉, 평가할 콘텐츠를 사용자(일반적으로 LLM 프롬프트)가 제공한다는 의미입니다. 모델 출력을 평가하려면 sourceOUTPUT으로 설정해야 합니다.

정식 출시
컨텍스트 그라운딩 검사 및 ApplyGuardrail API는 현재 Amazon Bedrock용 가드레일을 사용할 수 있는 모든 AWS 리전에서 사용할 수 있습니다. Amazon Bedrock 콘솔에서 이들 기능을 사용해 보고, AWS re:Post for Amazon Bedrock에 피드백을 보내거나 일반적인 AWS 문의를 통해 피드백을 보내주세요.

가드레일에 대해 자세히 알아보려면 Amazon Bedrock용 가드레일 제품 페이지 및 Amazon Bedrock 요금 페이지를 방문하여 가드레일 정책과 관련된 비용을 알아보세요.

솔루션에 대한 심층적인 기술 콘텐츠를 찾아보고 빌더 커뮤니티는 각자의 솔루션에서 Amazon Bedrock을 어떻게 사용하고 있는지 알아보려면 community.aws 사이트를 방문하세요.

– Abhishek