화면 이미지

Model Armor는 프롬프트 및 대답에서 지원되는 서식 있는 텍스트 문서에 삽입된 독립형 이미지와 이미지를 검사하여 이미지에 삽입된 위험으로부터 생성형 AI 애플리케이션을 보호합니다.

Model Armor는 다음 방법을 사용하여 이미지를 검사합니다.

사양 및 제한사항

Model Armor를 사용하여 이미지를 선별할 때는 다음 사양과 제한사항을 고려하세요.

  • 지원되는 이미지 형식: Model Armor는 JPEG, PNG, BMP 형식의 독립형 이미지를 검사합니다. 또한 지원되는 서식 있는 텍스트 파일에서 삽입된 이미지를 추출하고 검사합니다.
  • 크기 제한: 각 독립형 이미지는 4MB 이하여야 합니다. 서식 있는 텍스트 파일은 총 파일 크기가 4MB 이하여야 하며 삽입된 이미지가 최대 5개 포함되어야 합니다. 이러한 한도를 초과하면 Model Armor가 전체 파일 스캔을 건너뜁니다. 자세한 내용은 파일 크기 시스템 한도 및 문서에 삽입된 이미지 선별을 참조하세요.
  • 독립형 프롬프트: 독립형 이미지로 SanitizeUserPrompt 및 SanitizeModelResponse 메서드를 호출하면 Model Armor가 요청당 단일 이미지를 검사합니다. 단일 요청으로 여러 독립형 이미지를 선별하는 것은 지원되지 않습니다. 또한 Model Armor는 단일 요청에서 텍스트와 이미지를 결합하는 독립형 프롬프트를 지원하지 않습니다. 하지만 텍스트 및 이미지 모달리티를 모두 사용 설정하면 텍스트와 이미지가 모두 포함된 서식 있는 텍스트 문서를 검사할 수 있습니다.
  • 익명화: Sensitive Data Protection 익명화 템플릿을 구성하면 Model Armor는 텍스트 또는 독립형 이미지를 수정하지만 둘 다 수정하지는 않습니다. 이미지 형식(MODALITY_IMAGE)이 선택된 경우 서식 있는 텍스트 문서에 익명화가 지원되지 않습니다. 자세한 내용은 독립형 이미지의 민감한 정보 수정 및 문서에 삽입된 이미지 검사를 참조하세요.
  • 스트리밍: Model Armor 스트리밍 메서드는 텍스트 입력만 지원하며 이미지나 파일은 지원하지 않습니다.
  • 지원되는 통합: Model Armor REST API를 직접 호출하거나 Gemini Enterprise 통합을 통해 이미지를 검사할 수 있습니다. 다른 모든 Model Armor 통합은 텍스트만 검사하고 정제합니다. 자세한 내용은 지원되는 형식을 참조하세요.
  • 리전별 사용 가능 여부: 이미지 선별은 특정 멀티 리전에서만 지원됩니다. Model Armor가 이미지 검사를 지원하지 않는 엔드포인트에 이미지가 포함된 프롬프트를 전송하면 응답의 invocationResult 필드에 FAILURE가 표시됩니다. 이미지 선별을 지원하는 위치 목록은 리전별 지원되는 기능을 참조하세요.

이미지의 토큰 계산 및 가격 책정

Model Armor는 이미지 토큰이 텍스트 토큰과 동일한 요율로 청구되는 통합 토큰 기반 가격 책정 모델을 사용합니다.

Model Armor가 필터 처리 전에 입력을 거부하거나 건너뛰는 경우(예: 빈 입력 또는 파일 크기 또는 삽입된 이미지 한도를 초과하는 파일 및 이미지)에는 요금이 청구되지 않습니다. 그러나 입력이 초기 검증을 통과하면 다음 경우에도 계산된 토큰에 대한 요금이 청구됩니다.

  • 모든 감지기 건너뜀: 구성된 필터(감지기) 중 일부 또는 전부를 건너뛰고 EXECUTION_SKIPPED를 반환합니다(예: 4MB 한도 내의 이미지 페이로드를 감지기에서 파싱할 수 없거나 형식에 대해 필터를 건너뛰는 경우).
  • IMAGE 바이트 데이터 유형으로 래핑된 비이미지 파일: 비이미지 파일(예: ZIP, CSV, Microsoft Word 문서)이 IMAGE로 설정된 byteDataType와 함께 전송됩니다(최대 4MB). Model Armor는 필터가 EXECUTION_SKIPPED를 반환하더라도 독립형 이미지 토큰 계산을 사용하여 요청에 대한 요금을 청구합니다.

Model Armor는 입력 유형과 구성된 모달리티를 기반으로 이미지 및 문서의 토큰을 계산합니다.

  • 독립형 이미지: Model Armor는 처리된 각 이미지(최대 4MB)를 이미지당 기본 개수 5,000개 토큰과 이미지 크기 1MB당 1,000개 토큰을 사용하여 토큰으로 변환합니다. 크기 기반 토큰을 계산할 때 Model Armor는 이미지 크기를 다음 정수 MB로 반올림합니다.

    이미지당 토큰 수 = 5,000 + (1,000 × 이미지 크기(MB), 다음 정수 MB로 반올림)

    OCR을 통해 이미지에서 추출된 텍스트는 이미지 토큰 계산에 포함되며 별도의 텍스트 토큰 요금이 발생하지 않습니다.

  • 서식 있는 텍스트 문서: 토큰 계산은 템플릿에 구성된 형식에 따라 달라집니다.

    • 텍스트 형식(MODALITY_TEXT): Model Armor는 문서에서 추출된 텍스트에서 토큰을 계산합니다(토큰당 약 4자). 삽입된 이미지는 추출되거나 청구되지 않습니다.
    • 이미지 형식(MODALITY_IMAGE): Model Armor는 이미지 토큰 수식을 사용하여 처리된 각 임베딩 이미지에 대해 개별적으로 토큰을 계산합니다. 문서 텍스트는 청구되지 않습니다.
    • 텍스트 및 이미지 모달리티(MODALITY_TEXT 및 MODALITY_IMAGE): Model Armor는 추출된 문서 텍스트의 토큰과 처리된 각 임베딩 이미지의 토큰을 합산하여 총 토큰 수를 계산합니다.

다음 표에서는 Model Armor가 처리된 이미지의 토큰을 계산하는 방법의 예시를 보여줍니다.

이미지 크기 계산을 위해 반올림된 크기 토큰 계산 총 토큰 수
500 KB 1MB 5,000 + (1 × 1,000) 토큰 6,000개
1.9 MB 2MB 5,000 + (2 × 1,000) 토큰 7,000개
4MB 4MB 5,000 + (4 × 1,000) 토큰 9,000개

시작하기 전에

이미지를 선별하기 전에 다음 기본 요건을 완료하세요.

이미지 형식이 사용 설정된 템플릿 만들기 또는 업데이트

템플릿을 만들거나 업데이트할 때 MODALITY_IMAGE를 포함하도록 모달리티를 선택합니다( Google Cloud 콘솔에서 이미지 또는 모두, REST API를 사용하는 경우 templateMetadata에서 "modalities": ["MODALITY_IMAGE", "MODALITY_TEXT"]). 형식을 지정하지 않거나, modalities 필드를 비워 두거나, MODALITY_TEXT만 지정하면 Model Armor는 텍스트만 스캔하고 건너뛴 형식을 스캔하는 필터에 대해 EXECUTION_SKIPPED를 반환합니다.

필수 권한 얻기

프롬프트와 대답을 정제하는 데 필요한 Identity and Access Management 역할(예: roles/modelarmor.user)이 있는지 확인하고, 프로젝트 간에 고급 Sensitive Data Protection 모드를 사용하는 경우 Model Armor 서비스 에이전트에 필요한 DLP 역할을 부여합니다. 자세한 내용은 필수 권한 얻기를 참조하세요.

독립형 이미지 정제

사용자 프롬프트 또는 모델 응답에서 독립형 이미지를 검사하려면 byteDataType 필드를 IMAGE로 설정하고 byteData 필드에 base64로 인코딩된 이미지를 지원되는 형식(JPEG, PNG 또는 BMP)으로 제공합니다.

다음 명령어를 사용하여 이미지가 포함된 프롬프트를 정제합니다.

curl -X POST \
    -d "$(jq -n \
    --arg data "$(base64 -w 0 -i IMAGE)" \
    '{userPromptData: {byteItem: {byteDataType: "IMAGE", 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: 이미지(MODALITY_IMAGE)를 스캔하도록 구성된 템플릿의 ID입니다.
  • IMAGE: 지원되는 형식의 이미지 파일 경로입니다.

응답은 다음 예시와 유사합니다.

{
  "sanitizationResult": {
    "filterMatchState": "MATCH_FOUND",
    "invocationResult": "SUCCESS",
    "filterResults": {
      "csam": {
        "csamFilterFilterResult": {
          "executionState": "EXECUTION_SUCCESS",
          "matchState": "NO_MATCH_FOUND"
        }
      },
      "pi_and_jailbreak": {
        "piAndJailbreakFilterResult": {
          "executionState": "EXECUTION_SUCCESS",
          "matchState": "MATCH_FOUND",
          "confidenceLevel": "HIGH"
        }
      },
      "sdp": {
        "sdpFilterResult": {
          "inspectResult": {
            "executionState": "EXECUTION_SUCCESS",
            "matchState": "MATCH_FOUND"
          }
        }
      }
    }
  }
}

독립형 이미지에서 민감한 정보 수정

Sensitive Data Protection 고급 모드를 사용하는 경우 Sensitive Data Protection 검사 템플릿과 Sensitive Data Protection 익명화 템플릿을 모두 사용하여 Model Armor 템플릿을 구성하면 Model Armor가 독립형 이미지의 민감한 발견 항목을 수정합니다. 익명화 템플릿에서 이미지 수정을 구성해야 합니다. Model Armor에서 Sensitive Data Protection을 구성하는 방법에 대한 자세한 내용은 Sensitive Data Protection 설정 구성을 참조하세요. 익명화 제한사항에 대한 자세한 내용은 사양 및 제한사항 및 문서에 삽입된 이미지 검사를 참조하세요.

다음 예시에서는 Sensitive Data Protection 수정이 사용 설정된 필터 구성을 보여줍니다.

{
  "filterConfig": {
    "sdpSettings": {
      "advancedConfig": {
        "inspectTemplate": "projects/PROJECT_ID/locations/LOCATION/inspectTemplates/INSPECT_TEMPLATE_ID",
        "deidentifyTemplate": "projects/PROJECT_ID/locations/LOCATION/deidentifyTemplates/DEIDENTIFY_TEMPLATE_ID"
      }
    }
  }
}

다음을 바꿉니다.

  • PROJECT_ID: Sensitive Data Protection 템플릿이 포함된 프로젝트의 ID입니다.
  • LOCATION: 템플릿의 위치입니다.
  • INSPECT_TEMPLATE_ID: 검사 템플릿의 ID입니다.
  • DEIDENTIFY_TEMPLATE_ID: 익명화 템플릿의 ID입니다.

이미지 수정이 사용 설정된 템플릿을 사용하여 독립형 이미지를 정제하면 응답에 수정된 이미지와 각 발견 항목의 경계 상자 좌표가 포함됩니다.

{
  "sanitizationResult": {
    "filterMatchState": "MATCH_FOUND",
    "invocationResult": "SUCCESS",
    "filterResults": {
      "csam": {
        "csamFilterFilterResult": {
          "executionState": "EXECUTION_SUCCESS",
          "matchState": "NO_MATCH_FOUND"
        }
      },
      "sdp": {
        "sdpFilterResult": {
          "redactResult": {
            "executionState": "EXECUTION_SUCCESS",
            "matchState": "MATCH_FOUND",
            "redactedImage": "[REDACTED_IMAGE]",
            "findings": [
              {
                "infoType": "EMAIL_ADDRESS",
                "likelihood": "LIKELY",
                "location": {
                  "contentLocations": [
                    {
                      "imageFindingLocation": {
                        "boundingBoxes": {
                          "top": 16,
                          "left": 121,
                          "width": 620,
                          "height": 90
                        }
                      }
                    }
                  ]
                }
              }
            ]
          }
        }
      }
    }
  }
}

문서에 삽입된 이미지 검사

템플릿에서 이미지 형식(MODALITY_IMAGE)을 사용 설정하고 서식 있는 텍스트 문서(PDF, WORD_DOCUMENT, EXCEL_DOCUMENT 또는 POWERPOINT_DOCUMENT)를 정제하면 Model Armor가 문서에 삽입된 이미지를 최대 5개까지 자동으로 추출하고 선별합니다. MODALITY_TEXT 및 MODALITY_IMAGE를 모두 사용 설정하면 Model Armor가 문서 텍스트와 삽입된 이미지를 모두 검사합니다.

MODALITY_IMAGE만 사용 설정하든 MODALITY_IMAGE 및 MODALITY_TEXT를 모두 사용 설정하든 Model Armor는 부분 스캔 없이 텍스트와 삽입된 이미지를 포함한 전체 문서 스캔을 건너뜁니다. 다음과 같은 경우 검사를 포함한 모든 구성된 필터에 대해 EXECUTION_SKIPPED를 반환하고 전체 filterMatchState를 NO_MATCH_FOUND로 반환합니다.

  • 문서가 4MB 파일 크기 한도 또는 이미지 5개 한도를 초과합니다.
  • Sensitive Data Protection 익명화 템플릿이 구성되었습니다. 이미지 형식이 사용 설정된 경우 서식 있는 텍스트 문서를 검사하려면 익명화 템플릿 없이 검사 템플릿만 구성합니다.

REST 및 클라이언트 라이브러리를 사용하여 파일 기반 프롬프트를 전송하는 방법을 보여주는 코드 샘플은 파일 기반 프롬프트를 참조하세요.

부분 파일 검사

Model Armor는 이미지별이 아닌 전체 파일의 필터(감지기) 수준에서만 부분 결과(invocationResult: PARTIAL)를 반환합니다.

  • 이미지별 실패(전체 파일 건너뜀): 파일에 삽입된 일부 이미지가 성공적으로 스캔되었지만 파일의 다른 이미지를 하나 이상 추출하거나 스캔하지 못하면 Model Armor는 전체 파일을 건너뜁니다. 구성된 모든 필터에 대해 executionState: EXECUTION_SKIPPED를 반환하고 전체 filterMatchState는 NO_MATCH_FOUND입니다.
  • 감지기 수준 실패(부분 결과): 구성된 일부 필터가 파일 전체에서 성공하고 하나 이상의 다른 필터가 전체 파일에서 건너뛰는 경우(예: 감지기 제한 시간 초과로 인해) Model Armor는 다음 필드가 포함된 부분 결과를 반환합니다.
    • 호출 결과: invocationResult 필드가 SUCCESS 대신 PARTIAL로 설정되어 파일에 대해 구성된 필터 중 하나 이상을 건너뛰고 다른 필터는 검사를 완료했음을 나타냅니다.
    • 필터 실행 상태: 파일 보고서에서 건너뛴 필터입니다. executionState: EXECUTION_SKIPPED 파일 보고서 executionState: EXECUTION_SUCCESS에서 검사를 완료한 필터입니다.
    • 일치 상태: filterMatchState 필드는 검사를 완료한 필터의 발견 항목을 반영합니다. 완료된 필터에서 위반을 감지하면 filterMatchState가 MATCH_FOUND로 설정됩니다. 완료된 필터에서 위반이 감지되지 않으면 filterMatchState가 NO_MATCH_FOUND로 설정됩니다.

부분 검사 시 보안 고려사항

보안 관점에서 PARTIAL의 invocationResult 값은 구성된 필터 중 하나 이상이 파일을 평가할 수 없음을 나타냅니다. 건너뛴 필터의 대상인 잠재적인 보안 위협 또는 정책 위반이 파일에 여전히 존재할 수 있습니다.

기본적으로 검사를 완료한 필터에서 정책 위반을 감지하지 않으면 filterMatchState는 NO_MATCH_FOUND입니다. 애플리케이션에서 프롬프트가 AI 모델에 도달하기 전에 구성된 모든 필터가 검사를 완료해야 하는 경우 응답의 invocationResult 필드를 검사합니다. 값이 PARTIAL인 경우 프롬프트를 거부하거나 보조 검토를 위해 라우팅하는 등 조직의 위험 허용 범위에 따라 요청을 처리하도록 애플리케이션 로직을 구성합니다.

부분 검사 응답 예시

다음 예시에서는 파일에 대해 아동 성적 학대 콘텐츠(CSAM) 필터가 건너뛰어졌지만 구성된 다른 필터는 검사를 완료한 응답을 보여줍니다. Model Armor는 PARTIAL의 invocationResult, CSAM 필터의 EXECUTION_SKIPPED 상태, 나머지 필터의 EXECUTION_SUCCESS를 반환합니다.

{
  "sanitizationResult": {
    "filterMatchState": "NO_MATCH_FOUND",
    "invocationResult": "PARTIAL",
    "filterResults": {
      "csam": {
        "csamFilterFilterResult": {
          "executionState": "EXECUTION_SKIPPED",
          "matchState": "NO_MATCH_FOUND"
        }
      },
      "pi_and_jailbreak": {
        "piAndJailbreakFilterResult": {
          "executionState": "EXECUTION_SUCCESS",
          "matchState": "NO_MATCH_FOUND"
        }
      },
      "sdp": {
        "sdpFilterResult": {
          "inspectResult": {
            "executionState": "EXECUTION_SUCCESS",
            "matchState": "NO_MATCH_FOUND"
          }
        }
      }
    }
  }
}

다음 단계