Model Armor는 구성된 선별 신뢰도 수준에 대한 프롬프트와 응답을 확인합니다. 이 페이지에서는 프롬프트와 대답을 정리하는 방법을 자세히 설명합니다.
시작하기 전에 템플릿 만들기의 안내에 따라 템플릿을 만듭니다.
프롬프트 정리
Model Armor는 텍스트 및 파일 기반 형식의 프롬프트를 정리합니다.
텍스트 프롬프트
REST
이 명령어를 사용하여 Model Armor에서 텍스트 프롬프트를 정리합니다. 템플릿 만들기의 7단계 - Advanced Sensitive Data Protection에서 만든 템플릿 (ma-template-id-1234)을 사용합니다.
curl -X POST
-d "{user_prompt_data: { text: '[UNSAFE TEXT]' } }"
-H "Content-Type: application/json"
-H "Authorization: Bearer $(gcloud auth print-access-token)"
"https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID:sanitizeUserPrompt"
다음을 바꿉니다.
PROJECT_ID
는 템플릿 프로젝트 ID입니다.LOCATION
은 템플릿의 위치입니다.TEMPLATE_ID
는 템플릿의 ID입니다.
그러면 다음과 같은 응답이 반환됩니다. MATCH_FOUND
은(는) 위험 카테고리에 있습니다.
{ "sanitizationResult": { "filterMatchState": "MATCH_FOUND", "invocationResult": "SUCCESS", "filterResults": { "csam": { "csamFilterFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, "malicious_uris": { "maliciousUriFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, "rai": { "raiFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "MATCH_FOUND", "raiFilterTypeResults": { "sexually_explicit": { "matchState": "NO_MATCH_FOUND" }, "hate_speech": { "matchState": "NO_MATCH_FOUND" }, "harassment": { "matchState": "NO_MATCH_FOUND" }, "dangerous": { "matchState": "MATCH_FOUND" } } } }, "pi_and_jailbreak": { "piAndJailbreakFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "MATCH_FOUND" } }, "sdp": { "sdpFilterResult": { "inspectResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } } } } } }
Python
이 명령어를 실행하려면 먼저 Python에서 Model Armor 클라이언트를 초기화합니다.
user_prompt_data = modelarmor_v1.DataItem() user_prompt_data.text = "[UNSAFE TEXT]" request = modelarmor_v1.SanitizeUserPromptRequest( name="projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID", user_prompt_data=user_prompt_data, ) response = client.sanitize_user_prompt(request=request)
다음을 바꿉니다.
PROJECT_ID
는 템플릿 프로젝트 ID입니다.LOCATION
은 템플릿의 위치입니다.TEMPLATE_ID
는 템플릿의 ID입니다.
그러면 다음과 같은 응답이 반환됩니다.
sanitization_result { filter_match_state: MATCH_FOUND filter_results { key: "rai" value { rai_filter_result { execution_state: EXECUTION_SUCCESS match_state: MATCH_FOUND rai_filter_type_results { key: "dangerous" value { confidence_level: HIGH match_state: MATCH_FOUND } } } } } filter_results { key: "pi_and_jailbreak" value { pi_and_jailbreak_filter_result { execution_state: EXECUTION_SUCCESS match_state: MATCH_FOUND confidence_level: HIGH } } } filter_results { key: "malicious_uris" value { malicious_uri_filter_result { execution_state: EXECUTION_SUCCESS match_state: NO_MATCH_FOUND } } } filter_results { key: "csam" value { csam_filter_filter_result { execution_state: EXECUTION_SUCCESS match_state: NO_MATCH_FOUND } } } invocation_result: SUCCESS }
기본 Sensitive Data Protection 구성
Sensitive Data Protection 기본 설정이 사용 설정된 템플릿을 만듭니다. Basic Sensitive Data Protection은 고정된 Sensitive Data Protection infoType 집합을 검사하는 데 도움이 됩니다.
프롬프트에서 모든 리전에 대해 다음 Sensitive Data Protection infoType을 스캔합니다.
CREDIT_CARD_NUMBER
: 신용카드 번호는 12~19자리 숫자입니다. 전 세계에서 결제 거래에 사용됩니다.FINANCIAL_ACCOUNT_NUMBER
: 특정 금융 계좌를 나타내는 숫자입니다. 예: 은행 계좌 번호 또는 은퇴 계좌 번호GCP_CREDENTIALS
: Google Cloud 서비스 계정 사용자 인증 정보입니다. Google API 클라이언트 라이브러리 및 서비스 계정으로 인증하는 데 사용할 수 있는 사용자 인증 정보입니다.GCP_API_KEY
: Google Cloud API 키입니다. 비공개 사용자 데이터에 액세스할 필요가 없는 Google Cloud API를 호출할 때 사용되는 암호화된 문자열입니다.PASSWORD
: 구성, 코드, 기타 텍스트의 일반 텍스트 비밀번호입니다.
다음과 같은 추가적인 Sensitive Data Protection infoType이 프롬프트에서 미국 기반 리전에 대해 스캔됩니다.
US_SOCIAL_SECURITY_NUMBER
: 미국 사회보장번호 (SSN)는 미국 시민권자, 영주권자, 임시 거주자에게 발급되는 9자리 번호입니다. 이 감지기는 숫자 그룹의 모든 0이 있는 번호 (즉, 000-##-####, ###-00-#### 또는 ###-##-0000), 첫 번째 숫자 그룹에 666이 있는 번호, 첫 번째 숫자가 9인 숫자와 대조하지 않습니다.US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER
: 미국의 개인 납세자 식별 번호 (ITIN)는 미국 국세청(IRS)에서 발급하는 세금 식별 번호 (TIN) 유형입니다. ITIN은 사회보장번호 (SSN)를 받을 수 없는 특정 비거주 및 거주 외국인, 배우자 및 부양 가족에게만 제공되는 세금 처리 번호입니다.
다음은 Sensitive Data Protection 구성의 예시입니다.
gcloud
gcloud model-armor templates create template-name \ --location=location \ --basic-config-filter-enforcement=enabled
REST
export FILTER_CONFIG_SDP_BASIC='{ "filterConfig": { "sdpSettings": { "basicConfig": { "filterEnforcement": "ENABLED" } } } }' curl -X POST \ -d $FILTER_CONFIG_SDP_BASIC \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates?TEMPLATE_ID=sdp_basic"
다음을 바꿉니다.
PROJECT_ID
는 템플릿이 속한 프로젝트의 ID입니다.LOCATION
은 템플릿의 위치입니다.TEMPLATE_ID
는 템플릿의 ID입니다.
Python
request = modelarmor_v1.CreateTemplateRequest( parent="projects/PROJECT_ID/locations/LOCATION", template_id="TEMPLATE_ID", template={ "name": "projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID", "filter_config": { "sdp_settings": { "basic_config": { "filter_enforcement": "ENABLED" } } }, } ) response = client.create_template(request=request)
다음을 바꿉니다.
PROJECT_ID
는 템플릿이 속한 프로젝트의 ID입니다.LOCATION
은 템플릿의 위치입니다.TEMPLATE_ID
는 템플릿의 ID입니다.
생성된 템플릿을 사용하여 프롬프트를 검사합니다. 예를 들면 다음과 같습니다.
curl -X POST \ -d "{ user_prompt_data: { 'text': 'can you remember my ITIN : ###-##-####'} }" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/sdp_basic:sanitizeUserPrompt"
이 예시에서는 다음 응답을 반환합니다.
{ "sanitizationResult": { "filterMatchState": "MATCH_FOUND", "invocationResult": "SUCCESS", "filterResults": [ { "csamFilterFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, { "sdpFilterResult": { "inspectResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "MATCH_FOUND", "findings": [ { "infoType": "US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER", "likelihood": "LIKELY", "location": { "byteRange": { "start": "26", "end": "37" }, "codepointRange": { "start": "26", "end": "37" } } } ] } } } ] } }
고급 Sensitive Data Protection 구성
Model Armor를 사용하면 Sensitive Data Protection 고급 구성 설정을 사용하여 Sensitive Data Protection 템플릿을 사용하여 LLM 프롬프트 및 응답을 선택할 수 있습니다. 이렇게 하면 기본 Sensitive Data Protection 설정에서 제공하는 infoType 외에 Sensitive Data Protection 기능을 사용할 수 있습니다.
Model Armor에서 Sensitive Data Protection 고급 필터를 사용하려면 Sensitive Data Protection 템플릿이 Model Armor 템플릿과 동일한 클라우드 위치에 있어야 합니다(예: us-central1
).
gcloud
gcloud model-armor templates create template-name --location=LOCATION \ --advanced-config-inspect-template="path/to/template" \
REST
export FILTER_CONFIG_SDP_ADV='{ "filterConfig": { "sdpSettings": { "advancedConfig": { "deidentifyTemplate": "projects/PROJECT_ID/locations/LOCATION/deidentifyTemplates/deidentify-ip-address", "inspectTemplate": "projects/PROJECT_ID/locations/LOCATION/inspectTemplates/inspect-ip-address" } } } }' curl -X POST \ -d $FILTER_CONFIG_SDP_ADV \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates?template_id=sdp_advanced" # Result of CreateTemplate { "name": "projects/PROJECT_ID/locations/LOCATION/templates/all-filters-test", "createTime": "2024-12-16T17:08:19.626693819Z", "updateTime": "2024-12-16T17:08:19.626693819Z", "filterConfig": { "sdpSettings": { "advancedConfig": { "deidentifyTemplate": "projects/PROJECT_ID/locations/LOCATION/deidentifyTemplates/deidentify-ip-address", "inspectTemplate": "projects/PROJECT_ID/locations/LOCATION/inspectTemplates/inspect-ip-address" } } } }, service_agent_email: "service-PROJECT_NUMBER@gcp-sa-modelarmor.iam.gserviceaccount.com"
다음을 바꿉니다.
PROJECT_ID
는 템플릿이 속한 프로젝트의 ID입니다.LOCATION
은 템플릿의 위치입니다.PROJECT_NUMBER
은 서비스 계정의 이름입니다.
Python
request = modelarmor_v1.CreateTemplateRequest( parent="projects/PROJECT_ID/locations/LOCATION", template_id="TEMPLATE_ID", template={ "name": "projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID", "filter_config": { "sdp_settings": { "advanced_config": { "inspect_template": "projects/PROJECT_ID/locations/LOCATION/inspectTemplates/inspect-ip-address", "deidentify_template": "projects/PROJECT_ID/locations/LOCATION/deidentifyTemplates/deidentify-ip-address" } } }, } ) response = client.create_template(request=request)
다음을 바꿉니다.
PROJECT_ID
는 템플릿이 속한 프로젝트의 ID입니다.LOCATION
은 템플릿의 위치입니다.TEMPLATE_ID
는 템플릿의 ID입니다.
Sensitive Data Protection 템플릿이 포함된 프로젝트에서 템플릿 만들기의 7단계(고급 민감한 정보 보호)의 일부로 생성된 서비스 에이전트에 DLP 사용자 역할(roles/dlp.user
) 및 DLP 리더 역할(roles/dlp.reader
)을 부여합니다. Sensitive Data Protection 템플릿이 Model Armor 템플릿과 동일한 프로젝트에 있으면 이 단계를 건너뛸 수 있습니다.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-modelarmor.iam.gserviceaccount.com --role roles/dlp.user gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-modelarmor.iam.gserviceaccount.com --role roles/dlp.reader
다음을 바꿉니다.
PROJECT_ID
를 템플릿이 속한 프로젝트의 ID로 바꿉니다.PROJECT_NUMBER
은 서비스 계정의 이름입니다.
생성된 템플릿을 사용하여 프롬프트를 검사합니다. 예를 들면 다음과 같습니다.
curl -X POST \ -d "{ user_prompt_data: { 'text': 'is there anything malicious running on 1.1.1.1?'} }" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID:sanitizeUserPrompt"
다음을 바꿉니다.
PROJECT_ID
는 템플릿이 속한 프로젝트의 ID입니다.LOCATION
은 템플릿의 위치입니다.TEMPLATE_ID
는 템플릿의 ID입니다.
이 예시에서는 다음 응답을 반환합니다.
{ "sanitizationResult": { "filterMatchState": "MATCH_FOUND", "invocationResult": "SUCCESS", "filterResults": [ { "csamFilterFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, { "sdpFilterResult": { "deidentifyResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "MATCH_FOUND", "data": { "text": "is there anything malicious running on [IP_ADDRESS]?" }, "transformedBytes": "7", "infoTypes": ["IP_ADDRESS"] } } } ] } }
파일 기반 프롬프트
이 명령어를 사용하여 Model Armor로 파일 형식의 사용자 프롬프트를 정리합니다.
파일은 Base64
인코딩 형식으로 전달해야 합니다.
curl -X POST \ -d "$(jq -n \ --arg data "$(base64 -w 0 -i sample.pdf)" \ '{userPromptData: {byteItem: {byteDataType: "PDF", byteData: $data}}}')" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID:sanitizeUserPrompt"
다음을 바꿉니다.
PROJECT_ID
는 템플릿이 속한 프로젝트의 ID입니다.LOCATION
은 템플릿의 위치입니다.TEMPLATE_ID
는 템플릿의 ID입니다.
모델 응답 정리
다음은 Model Armor에서 모델 응답을 정리하는 명령어 예입니다.
REST
curl -X POST
-d "{model_response_data: { text: 'It might hurt and cause pain' } }"
-H "Content-Type: application/json"
-H "Authorization: Bearer $(gcloud auth print-access-token)"
"https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID:sanitizeModelResponse"
이 예시에서는 다음 응답을 반환합니다.
{ "sanitizationResult": { "filterMatchState": "MATCH_FOUND", "invocationResult": "SUCCESS", "filterResults": { "rai": { "raiFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "MATCH_FOUND", "raiFilterTypeResults": { "dangerous": { "confidenceLevel": "MEDIUM_AND_ABOVE", "matchState": "MATCH_FOUND" }, "sexually_explicit": { "matchState": "NO_MATCH_FOUND" }, "hate_speech": { "matchState": "NO_MATCH_FOUND" }, "harassment": { "matchState": "NO_MATCH_FOUND" } } } }, "pi_and_jailbreak": { "piAndJailbreakFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, "csam": { "csamFilterFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, "malicious_uris": { "maliciousUriFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, } } }
Python
이 명령어를 실행하려면 먼저 Python에서 Model Armor 클라이언트를 초기화합니다.
model_response_data = modelarmor_v1.DataItem() model_response_data.text = "It might hurt and cause pain" request = modelarmor_v1.SanitizeModelResponseRequest( name="projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID", model_response_data=model_response_data, ) response = client.sanitize_model_response(request=request)
다음을 바꿉니다.
PROJECT_ID
는 템플릿 프로젝트 ID입니다.LOCATION
은 템플릿의 위치입니다.TEMPLATE_ID
는 템플릿의 ID입니다.
다음 단계
- Model Armor 개요에 대해 알아봅니다.
- Model Armor 주요 개념에 대해 알아보세요.
- Model Armor 하한선 설정에 대해 알아보세요.
- Model Armor 템플릿에 대해 알아봅니다.
- Model Armor 문제 해결하기