SanitizeModelResponse 정책

이 페이지는 ApigeeApigee Hybrid에 적용됩니다.

Apigee Edge 문서 보기

SanitizeModelResponse 정책은 생성형 AI 모델의 응답을 정리하여 유해하거나 불쾌감을 주는 콘텐츠로부터 AI 클라이언트를 보호합니다. 이 정책은 Model Armor를 사용하여 유해하거나 불쾌감을 주는 콘텐츠에 대한 모델 응답을 평가하여 Apigee를 사용하는 AI 클라이언트와 워크로드에 네이티브 보호 기능을 사용 설정합니다. Model Armor는 대규모 언어 모델 (LLM)과 관련된 위험을 완화하기 위한 AI 보안 및 안전 조치를 제공하는 Google Cloud 서비스입니다.

이 정책은 SanitizeModelResponse 정책과 함께 사용됩니다.

이 정책은 확장 가능한 정책이며, 이 정책을 사용하면 Apigee 라이선스에 따라 비용 또는 사용률이 영향을 받을 수 있습니다. 정책 유형 및 사용 영향에 대한 자세한 내용은 정책 유형을 참조하세요.

시작하기 전에

SanitizeModelResponse 정책을 사용하려면 먼저 다음 작업을 완료해야 합니다.

  • Model Armor 템플릿을 만듭니다. SanitizeModelResponse 정책을 만들기 전에 이 단계를 완료해야 합니다.
  • Model Armor 서비스의 API 엔드포인트를 설정합니다.

필요한 역할

SanitizeModelResponse 정책을 적용하고 사용하는 데 필요한 권한을 얻으려면 관리자에게 Apigee 프록시를 배포하는 데 사용하는 서비스 계정에 다음 IAM 역할을 부여해 달라고 요청하세요.

역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

API 사용 설정

Enable the Model Armor APIs.

Enable the APIs

<SanitizeModelResponse> 요소

SanitizeModelResponse 정책을 정의합니다.

기본값 아래의 기본 정책 탭을 참조하세요.
필수 여부 필수
유형 복합 객체
상위 요소 해당 사항 없음
하위 요소 <DisplayName>
<IgnoreUnresolvedVariables>
<TemplateName>
<UserPromptSource>
<LLMResponseSource>

<SanitizeModelResponse> 요소는 다음 문법을 사용합니다.

구문

<SanitizeModelResponse async="false" continueOnError="false" enabled="true" name="sanitize-response">
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <DisplayName>sanitize-response-sample</DisplayName>
  <ModelArmor>
    <TemplateName>projects/{project}/locations/{location}/templates/{template-name}</TemplateName>
  </ModelArmor>
  <UserPromptSource>{jsonPath('$.contents[-1].parts[-1].text',request.content,true)}</UserPromptSource>
  <LLMResponseSource>{jsonPath($.candidates[-1].content.parts,response.content,true)}</LLMResponseSource>
</SanitizeModelResponse>

기본 정책

다음 예는 Apigee UI의 요청 흐름에 SanitizeModelResponse 정책을 추가할 때의 기본 설정을 보여줍니다.

<SanitizeModelResponse async="false" continueOnError="false" enabled="true" name="sanitize-response">
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <DisplayName>sanitize-response-sample</DisplayName>
  <ModelArmor>
    <TemplateName>projects/{project}/locations/{location}/templates/{template-name}</TemplateName>
  </ModelArmor>
  <UserPromptSource>{jsonPath('$.contents[-1].parts[-1].text',request.content,true)}</UserPromptSource>
  <LLMResponseSource>{jsonPath($.candidates[-1].content.parts,response.content,true)}</LLMResponseSource>
</SanitizeModelResponse>

Apigee UI를 사용하여 새 SanitizeModelResponse 정책을 삽입하면 가능한 모든 작업에 대한 스텁이 템플릿에 포함됩니다. 필수 요소에 대한 자세한 내용은 아래를 참조하세요.

이 요소에는 다음과 같이 모든 정책에 공통된 속성이 있습니다.

속성 기본값 필수 여부 설명
name 해당 없음 필수

정책의 내부 이름입니다. name 속성의 값에는 문자, 숫자, 공백, 하이픈, 밑줄, 마침표가 포함될 수 있습니다. 이 값은 255자(영문 기준)를 초과할 수 없습니다.

원하는 경우 <DisplayName> 요소를 사용하여 관리 UI 프록시 편집기의 정책에 다른 자연어 이름을 사용하여 정책에 라벨을 지정합니다.

continueOnError 거짓 선택사항 정책이 실패할 경우 오류가 반환되도록 하려면 false로 설정합니다. 이는 대부분의 정책에서 예상되는 동작입니다. 정책이 실패해도 흐름 실행이 계속되도록 하려면 true로 설정합니다. 참조:
enabled 선택사항 정책을 시행하려면 true로 설정합니다. 정책을 중지하려면 false로 설정합니다. 정책이 흐름에 연결되어 있어도 정책이 시행되지 않습니다.
async   거짓 지원 중단됨 이 속성은 지원이 중단되었습니다.

다음 표에서는 <SanitizeModelResponse>의 하위 요소에 대한 대략적인 설명을 제공합니다.

하위 요소 필수 여부 설명
<DisplayName> 선택사항 정책의 이름입니다.

<IgnoreUnresolvedVariables> 선택사항 템플릿 이름 또는 모델 아머 페이로드에 사용된 변수가 확인되지 않으면 처리를 중지할지 여부를 지정합니다.
<TemplateName> 필수 LLM 응답을 정리하는 데 사용되는 Model Armor 템플릿입니다.

이 값은 다음 Apigee 흐름 변수를 사용하여 템플릿화할 수 있습니다.

projects/{organization.name}/locations/{system.region.name}/templates/{id}

<UserPromptSource> 필수 사용자 메시지 텍스트를 추출할 페이로드의 위치입니다. 문자열 텍스트 값만 지원됩니다.

이 필드는 변수 또는 JSON 경로 함수 사용을 비롯한 Apigee 메시지 템플릿 문법을 지원합니다.

예를 들면 다음과 같습니다.

{jsonpath('$.contents[-1].parts[-1].text',request.content,false)}
<LLMResponseSource> 필수 추출할 LLM 응답 텍스트의 페이로드 위치입니다. 문자열 텍스트 값만 지원됩니다.

이 필드는 변수 또는 JSON 경로 함수 사용을 비롯한 Apigee 메시지 템플릿 문법을 지원합니다.

예를 들면 다음과 같습니다.

{jsonpath('$.input.prompt.text',request.content,false)}

하위 요소 참조

이 섹션에서는 <SanitizeModelResponse>의 하위 요소를 설명합니다.

<DisplayName>

name 속성 외에 이 요소를 사용하여 관리 UI 프록시 편집기에서 자연스러운 다른 이름으로 정책의 라벨을 지정합니다.

<DisplayName> 요소는 모든 정책에 공통으로 적용됩니다.

기본값 해당 사항 없음
필수 여부 선택사항. <DisplayName>을 생략하면 정책의 name 속성 값이 사용됩니다.
유형 문자열
상위 요소 <PolicyElement>
하위 요소 없음

<DisplayName> 요소는 다음 문법을 사용합니다.

구문

<PolicyElement>
  <DisplayName>POLICY_DISPLAY_NAME</DisplayName>
  ...
</PolicyElement>

<PolicyElement>
  <DisplayName>My Validation Policy</DisplayName>
</PolicyElement>

<DisplayName> 요소에 속성 또는 하위 요소가 없습니다.

<IgnoreUnresolvedVariables>

변수가 확인되지 않은 경우 처리를 중지할지 여부를 결정합니다. 확인되지 않은 변수를 무시하고 계속 처리하려면 true로 설정합니다.

기본값 거짓
필수 여부 선택사항
유형 불리언
상위 요소 <SanitizeModelResponse>
하위 요소 없음

<TemplateName>

Model Armor 템플릿

기본값 해당 사항 없음
필수 여부 필수
유형 문자열
상위 요소 <SanitizeModelResponse>
하위 요소 없음

<TemplateName> 요소는 다음 구문을 사용합니다.

구문

<ModelArmor>
  <TemplateName>projects/{project}/locations/{location}/templates/{template-name}</TemplateName>
</ModelArmor>

이 예에서는 Apigee 흐름 변수를 사용하여 필수 정보를 채웁니다.

<ModelArmor>
  <TemplateName>projects/{organization.name}/locations/{system.region.name}/templates/{id}</TemplateName>
</ModelArmor>

<UserPromptSource>

사용자 메시지 텍스트를 추출할 페이로드의 위치입니다. 문자열 텍스트 값만 지원됩니다.

이 필드는 변수 또는 JSON 경로 함수 사용을 비롯한 Apigee 메시지 템플릿 문법을 지원합니다. 예를 들면 다음과 같습니다.

{jsonpath('$.input.prompt.text',request.content,false)}
기본값 {jsonPath($.contents[-1].parts[-1].text,request.content,true)}
필수 여부 필수
유형 문자열
상위 요소 <SanitizeModelResponse>
하위 요소 없음

<LLMResponseSource>

추출할 LLM 응답의 페이로드 위치입니다. 문자열 텍스트 값만 지원됩니다.

이 필드는 변수 또는 JSON 경로 함수 사용을 비롯한 Apigee 메시지 템플릿 문법을 지원합니다. 예를 들면 다음과 같습니다.

{jsonpath('$.input.prompt.text',request.content,false)}
기본값 {jsonPath($.candidates[-1].content.parts,response.content,true)}
필수 여부 필수
유형 문자열
상위 요소 <SanitizeModelResponse>
하위 요소 없음

흐름 변수

흐름 변수를 사용하면 HTTP 헤더, 메시지 콘텐츠 또는 흐름에서 사용 가능한 컨텍스트를 기준으로 정책 및 흐름의 동적 런타임 동작을 구성할 수 있습니다. 흐름 변수에 관한 자세한 내용은 흐름 변수 참조를 참고하세요.

정책은 실행 중에 이러한 읽기 전용 변수를 설정할 수 있습니다.

변수 이름 설명
SanitizeModelResponse.POLICY_NAME.templateUsed 사용되는 모델 장갑 템플릿을 지정합니다. 예를 들면 다음과 같습니다. projects/myproject/locations/us-west1/templates/mytemplate
SanitizeModelResponse.POLICY_NAME.userPrompt 콘텐츠를 정리하기 위해 Model Armor를 호출할 때 사용되는 프롬프트 콘텐츠를 지정합니다.
SanitizeModelResponse.POLICY_NAME.modelResponse 콘텐츠를 정리하기 위해 Model Armor를 호출하는 데 사용되는 LLM 응답 콘텐츠를 지정합니다.
SanitizeModelResponse.POLICY_NAME.responseFromModelArmor 모델 아머의 JSON 응답을 지정합니다. Model Armor
SanitizeModelResponse.POLICY_NAME.filterMatchState 필터가 일치했는지 여부를 지정합니다. 유효한 값은 MATCH_FOUNDNO_MATCH_FOUND입니다.
SanitizeModelResponse.POLICY_NAME.invocationResult 일치 상태와 관계없이 호출의 결과를 나타내는 필드입니다. 다음을 포함할 수 있습니다.
  • 성공: 모든 필터가 실행되었습니다.
  • PARTIAL: 일부 필터가 건너뛰거나 실행에 실패했습니다.
  • 실패: 모든 필터가 건너뛰거나 실행에 실패했습니다.
SanitizeModelResponse.POLICY_NAME.raiFilterResult.executionState RAI 필터 실행 결과입니다. 유효한 값은 EXECUTION_SUCCESSEXECUTION_SKIPPED입니다.
SanitizeModelResponse.POLICY_NAME.raiFilterResult.matchState RAI 필터 일치 상태입니다. 유효한 값은 MATCH_FOUNDNO_MATCH_FOUND입니다.
SanitizeModelResponse.POLICY_NAME.sdpFilterResult.inspectResult.executionState Sdp 필터 검사 결과 실행 상태 유효한 값은 EXECUTION_SUCCESSEXECUTION_SKIPPED입니다.
SanitizeModelResponse.POLICY_NAME.sdpFilterResult.inspectResult.matchState Sdp 필터 검사 결과 일치 상태 유효한 값은 MATCH_FOUNDNO_MATCH_FOUND입니다.
SanitizeModelResponse.POLICY_NAME.sdpFilterResult.deidentifyResult.executionState SDP 필터는 결과 실행 상태를 식별합니다. 유효한 값은 EXECUTION_SUCCESSEXECUTION_SKIPPED입니다.
SanitizeModelResponse.POLICY_NAME.sdpFilterResult.deidentifyResult.matchState SDP 필터가 결과 일치 상태를 식별합니다. 유효한 값은 MATCH_FOUNDNO_MATCH_FOUND입니다.
SanitizeModelResponse.POLICY_NAME.piAndJailbreakFilterResult.executionState 프롬프트 삽입 및 탈옥 필터 결과 실행 상태입니다. 유효한 값은 EXECUTION_SUCCESSEXECUTION_SKIPPED입니다.
SanitizeModelResponse.POLICY_NAME.piAndJailbreakFilterResult.matchState 프롬프트 삽입 및 탈옥 필터 결과가 상태와 일치합니다. 유효한 값은 MATCH_FOUNDNO_MATCH_FOUND입니다.
SanitizeModelResponse.POLICY_NAME.csamFilterFilterResult.executionState 아동 성적 학대 콘텐츠 필터 실행 상태입니다. 유효한 값은 EXECUTION_SUCCESSEXECUTION_SKIPPED입니다.
SanitizeModelResponse.POLICY_NAME.csamFilterFilterResult.matchState 아동 성적 학대 콘텐츠 필터 일치 상태입니다. 유효한 값은 MATCH_FOUNDNO_MATCH_FOUND입니다.
SanitizeModelResponse.POLICY_NAME.maliciousUriFilterResult.executionState 악성 URI 필터 실행 상태입니다. 유효한 값은 EXECUTION_SUCCESSEXECUTION_SKIPPED입니다.
SanitizeModelResponse.POLICY_NAME.maliciousUriFilterResult.matchState 악성 URI 필터 일치 상태입니다. 유효한 값은 MATCH_FOUNDNO_MATCH_FOUND입니다.
SanitizeModelResponse.POLICY_NAME.sanitizationMetadata.errorCode Model Armor 응답에 있는 경우 맞춤 재정의된 오류 코드입니다.
SanitizeModelResponse.POLICY_NAME.sanitizationMetadata.errorMessage Model Armor 응답에 있는 경우 맞춤 재정의된 오류 코드입니다.
SanitizeModelResponse.POLICY_NAME.csamFilterMatched/code> 아동 성적 학대 콘텐츠 필터가 일치하는지 여부를 나타내는 불리언 값입니다.
SanitizeModelResponse.POLICY_NAME.maliciousURIs 악성 URI 필터에서 감지한 악성 URI 목록을 추가합니다.
SanitizeModelResponse.POLICY_NAME.maliciousURIsDetected 악성 URI 필터가 일치하는지 여부를 나타내는 불리언 값입니다.
SanitizeModelResponse.POLICY_NAME.matchesFound 필터가 일치하는지 여부를 나타내는 불리언 값입니다.
SanitizeModelResponse.POLICY_NAME.promptInjectionDetected 프롬프트 삽입 필터가 일치하는지 여부를 나타내는 불리언 값입니다.
SanitizeModelResponse.POLICY_NAME.promptInjectionConfidence 프롬프트 삽입 감지의 신뢰도 수준입니다.
SanitizeModelResponse.POLICY_NAME.raiMatchesFound RAI 필터가 일치하는지 여부를 나타내는 불리언 값입니다.
SanitizeModelResponse.POLICY_NAME.requestSentToModelArmor Model Armor에 요청이 전송되었는지 여부를 나타내는 불리언 값입니다.
SanitizeModelResponse.POLICY_NAME.sanitizeOperation 정책에서 실행하는 작업을 지정합니다. 유효한 값은 SANITIZE_USER_PROMPTSANITIZE_MODEL_RESPONSE입니다.

오류 참조

이 섹션에서는 반환되는 오류 코드 및 오류 메시지와 <SanitizeModelResponse> 정책과 관련해서 Apigee에서 설정된 오류 변수에 대해 설명합니다. 오류를 처리하기 위해 오류 규칙을 개발 중인 경우, 이 정보는 중요합니다. 자세한 내용은 정책 오류에 대해 알아야 할 사항오류 처리를 참고하세요.

런타임 오류

오류 코드 HTTP 상태 원인
steps.sanitize.model.response.FilterMatched 400 이 오류는 사용자 메시지가 모델 아머 템플릿 검사를 통과하지 못할 때 발생합니다.
steps.sanitize.model.response.SanitizationResponseParsingFailed 500 이 오류는 모델 아머 응답을 파싱할 수 없는 경우 발생합니다.
steps.sanitize.model.response.FailedToExtractUserPrompt 500 이 오류는 기본값의 자동 사용자 프롬프트 추출에 실패한 경우 발생합니다.
steps.sanitize.model.response.FailedToExtractLLMResponse 500 이 오류는 기본값의 자동 모델 응답 추출에 실패한 경우 발생합니다.
steps.sanitize.model.response.InternalError 500 이 오류는 내부 서버 오류가 있는 경우 발생합니다.
steps.sanitize.model.response.ModelArmorTemplateNameExtractionFailed 500 이 오류는 템플릿 이름을 확인할 수 없는 경우에 발생합니다.
steps.sanitize.model.response.AuthenticationFailure 500 이 오류는 서비스 계정에 Model Armor API를 호출할 권한이 없는 경우에 발생합니다.
steps.sanitize.model.response.ModelArmorAPIFailed 500 이 오류는 Model Armor API에서 오류가 발생하면 발생합니다.
steps.sanitize.model.response.ModelArmorCalloutError 500 이 오류는 Model Armor API 호출이 실패하면 발생합니다.
steps.sanitize.modelarmor.ServiceUnavailable 500 이 오류는 Model Armor 서비스를 사용할 수 없는 경우 발생합니다.

배포 오류

이 오류는 이 정책이 포함된 프록시를 배포할 때 발생할 수 있습니다.

오류 이름 원인
The ModelArmor/TemplateName element is required. <ModelArmor>의 <TemplateName> 요소가 없는 경우 발생합니다.
The TemplateName element value is required. <TemplateName> 값이 비어 있으면 발생합니다.

오류 변수

이러한 변수는 이 정책이 런타임 시 오류를 트리거할 때 설정됩니다. 자세한 내용은 정책 오류에 대해 알아야 할 사항을 참조하세요.

변수 장소
fault.name="FAULT_NAME" FAULT_NAME은 위의 런타임 오류 표에 나열된 오류 이름입니다. 오류 이름은 오류 코드의 마지막 부분입니다. fault.name Matches "UnresolvedVariable"
SanitizeModelResponse.POLICY_NAME.failed POLICY_NAME은 오류를 발생시킨 정책의 사용자 지정 이름입니다. SanitizeModelResponse.sanitize-response.failed = true

오류 응답 예시

{
  "fault": {
    "faultstring": "SanitizeModelResponse[sanitize-response]: unable to resolve variable [variable_name]",
    "detail": {
      "errorcode": "steps.sanitizemodelresponse.UnresolvedVariable"
    }
  }
}

오류 규칙 예시

<FaultRule name="SanitizeModelResponse Faults">
    <Step>
        <Name>SMR-CustomSetVariableErrorResponse</Name>
        <Condition>(fault.name = "SetVariableFailed")</Condition>
    </Step>
    <Condition>(sanitizemodelresponse.failed = true)</Condition>
</FaultRule>

Model Armor 템플릿 오류 코드 및 오류 메시지

Model Armor 템플릿은 SanitizeModelResponse 정책의 API 요청에서 발생하는 오류 코드 및 오류 메시지 재정의를 지원합니다. 사용자가 재정의를 설정하면 모델 아머 오류 코드와 오류 메시지가 흐름 변수를 채웁니다.

예를 들어 모델 아머 오류 코드와 메시지가 포함된 응답은 다음과 같이 표시될 수 있습니다.

{
"sanitizationResult": {
  "filterMatchState": "MATCH_FOUND",
  "filterResults": {...},
  "sanitizationMetadata": {
    "errorCode": "890",
    "errorMessage": "get out"
  },
  "invocationResult": "SUCCESS"
  }
}

스키마

각 정책 유형은 XML 스키마(.xsd)로 정의됩니다. 참고로 GitHub에서 정책 스키마를 사용할 수 있습니다.