Nettoyer les requêtes et les réponses

Model Armor vérifie les requêtes et les réponses en fonction des niveaux de confiance de filtrage configurés. Cette page décrit en détail comment assainir les requêtes et les réponses.

Avant de commencer, créez un modèle en suivant les instructions de la section Créer des modèles.

Nettoyer les requêtes

Model Armor assainit les requêtes au format texte et fichier.

Requêtes textuelles

REST

Utilisez cette commande pour assainir une requête textuelle dans Model Armor. Utilisez le modèle (ma-template-id-1234) que nous avons créé à l'étape 7 : protection avancée des données sensibles de Créer des modèles.

  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"

Remplacez les éléments suivants :

  • PROJECT_ID correspond à l'ID du projet pour le modèle.
  • LOCATION est l'emplacement du modèle.
  • TEMPLATE_ID est l'ID du modèle.

Cela génère la réponse suivante. Notez que MATCH_FOUND se trouve dans la catégorie "Dangereux".

  {
  "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

Pour exécuter cette commande, commencez par initialiser un client Model Armor en Python.

 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)
 

Remplacez les éléments suivants :

  • PROJECT_ID correspond à l'ID du projet pour le modèle.
  • LOCATION est l'emplacement du modèle.
  • TEMPLATE_ID est l'ID du modèle.

Cela génère la réponse suivante.

  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
  }
  

Nettoyer les requêtes textuelles avec la détection multilingue activée

Activez la détection multilingue pour chaque requête en définissant l'indicateur enable_multi_language_detection sur true pour chaque requête individuelle. Vous pouvez également spécifier la langue source pour obtenir des résultats plus précis. Si la langue source n'est pas spécifiée, elle est automatiquement détectée pour permettre la prise en charge multilingue.

Utilisez la commande suivante pour assainir une invite de texte dans Model Armor avec la détection multilingue activée au niveau de la requête.

curl -X POST \
-d  "{user_prompt_data: { text: '[UNSAFE TEXT]' }, multi_language_detection_metadata: { enable_multi_language_detection: true , source_language: 'jp'} }" \
-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"

Remplacez les éléments suivants :

  • PROJECT_ID correspond à l'ID du projet pour le modèle.
  • LOCATION est l'emplacement du modèle.
  • TEMPLATE_ID est l'ID du modèle.

Configuration de base de la protection des données sensibles

Créez un modèle avec les paramètres de base de Sensitive Data Protection activés. La protection des données sensibles de base vous aide à filtrer un ensemble fixe d'infoTypes de protection des données sensibles.

Les infoTypes de protection des données sensibles suivants sont analysés dans la requête pour toutes les régions :

  • CREDIT_CARD_NUMBER : un numéro de carte de crédit comporte de 12 à 19 chiffres. Ils sont utilisés pour les transactions de paiement dans le monde entier.
  • FINANCIAL_ACCOUNT_NUMBER : numéro faisant référence à un compte financier spécifique. Par exemple, un numéro de compte bancaire ou de compte de retraite.
  • GCP_CREDENTIALS : identifiants du compte de service Google Cloud . Ils peuvent être utilisés pour l'authentification via les comptes de service ou les bibliothèques clientes des API Google.
  • GCP_API_KEY : clé API Google Cloud . Chaîne chiffrée utilisée lors de l'appel d'API Google Cloud qui n'ont pas besoin d'accéder à des données utilisateur privées.
  • PASSWORD : mots de passe en texte clair figurant dans les configurations, le code et autres textes.

Les InfoTypes de protection des données sensibles supplémentaires suivants sont analysés dans la requête pour les régions basées aux États-Unis :

  • US_SOCIAL_SECURITY_NUMBER : aux États-Unis, un numéro de sécurité sociale (SSN) composé de neuf chiffres est attribué aux citoyens américains, aux résidents permanents et aux résidents temporaires. Ce détecteur ne fera pas correspondre les numéros dont l'un des groupes de chiffres ne comporte que des zéros (c'est-à-dire 000-##-####, ###-00-####, ou ###-##-0000), les numéros dont le premier groupe de chiffres est 666, ou les numéros dont le premier chiffre est 9.
  • US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER : un numéro ITIN (Individual Taxpayer Identification Number) est un type de numéro d'identification fiscale (TIN, Tax Identification Number) émis par l'Internal Revenue Service (IRS). Un ITIN est un numéro de traitement fiscal spécifique, utilisé uniquement pour les étrangers non-résidents et résidents (ainsi que leurs conjoints et les personnes à leur charge) qui ne peuvent pas bénéficier d'un numéro de sécurité sociale (SSN).

Voici un exemple de configuration de base de la protection des données sensibles :

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"

Remplacez les éléments suivants :

  • PROJECT_ID correspond à l'ID du projet auquel appartient le modèle.
  • LOCATION est l'emplacement du modèle.
  • TEMPLATE_ID est l'ID du modèle.

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)

Remplacez les éléments suivants :

  • PROJECT_ID correspond à l'ID du projet auquel appartient le modèle.
  • LOCATION est l'emplacement du modèle.
  • TEMPLATE_ID est l'ID du modèle.

Utilisez le modèle créé pour filtrer vos requêtes. Exemple :

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"

Cet exemple renvoie la réponse suivante :

{
  "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"
                }
              }
            }
          ]
        }
       }
      }
    ]
  }
}

Configuration avancée de la protection des données sensibles

Model Armor vous permet d'examiner les requêtes et les réponses des LLM à l'aide de modèles Sensitive Data Protection, en utilisant le paramètre de configuration avancée Sensitive Data Protection. Cela vous permet d'utiliser les fonctionnalités de protection des données sensibles au-delà des infoTypes proposés dans le paramètre de base de protection des données sensibles.

Pour utiliser le filtre avancé de protection des données sensibles dans Model Armor, les modèles de protection des données sensibles doivent se trouver dans le même emplacement cloud que le modèle Model Armor (par exemple, us-central1 dans ce cas).

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"

Remplacez les éléments suivants :

  • PROJECT_ID correspond à l'ID du projet auquel appartient le modèle.
  • LOCATION est l'emplacement du modèle.
  • PROJECT_NUMBER correspond au nom de votre compte de service.

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)

Remplacez les éléments suivants :

  • PROJECT_ID correspond à l'ID du projet auquel appartient le modèle.
  • LOCATION est l'emplacement du modèle.
  • TEMPLATE_ID est l'ID du modèle.

Dans le projet contenant le modèle Sensitive Data Protection, accordez le rôle Utilisateur DLP (roles/dlp.user) et le rôle Lecteur DLP (roles/dlp.reader) à l'agent de service créé à l'étape 7 "Protection avancée des données sensibles" de Créer des modèles. Vous pouvez ignorer cette étape si le modèle Sensitive Data Protection se trouve dans le même projet que le modèle 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

Remplacez les éléments suivants :

  • PROJECT_ID par l'ID du projet auquel appartient le modèle.
  • PROJECT_NUMBER correspond au nom de votre compte de service.

Utilisez le modèle créé pour filtrer vos requêtes. Exemple :

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"

Remplacez les éléments suivants :

  • PROJECT_ID correspond à l'ID du projet auquel appartient le modèle.
  • LOCATION est l'emplacement du modèle.
  • TEMPLATE_ID est l'ID du modèle.

Cet exemple renvoie la réponse suivante :

{
  "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"]
        }
      }
      }
      ]
  }
}

Requêtes basées sur des fichiers

Utilisez cette commande pour assainir une requête utilisateur au format de fichier avec Model Armor. Les fichiers doivent être transmis au format encodé 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"

Remplacez les éléments suivants :

  • PROJECT_ID correspond à l'ID du projet auquel appartient le modèle.
  • LOCATION est l'emplacement du modèle.
  • TEMPLATE_ID est l'ID du modèle.

Nettoyer la réponse du modèle

Voici un exemple de commande permettant de nettoyer une réponse de modèle dans 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"

Cet exemple renvoie la réponse suivante :

 {
 "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

Pour exécuter cette commande, commencez par initialiser un client Model Armor en Python.

 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)
 

Remplacez les éléments suivants :

  • PROJECT_ID correspond à l'ID du projet pour le modèle.
  • LOCATION est l'emplacement du modèle.
  • TEMPLATE_ID est l'ID du modèle.

Nettoyer la réponse du modèle avec la détection multilingue activée

Activez la détection multilingue pour chaque requête en définissant le flag enable_multi_language_detection sur true pour chaque réponse individuelle. Vous pouvez également spécifier la langue source pour obtenir des résultats plus précis. Si la langue source n'est pas spécifiée, elle est automatiquement détectée pour permettre la prise en charge multilingue.

curl -X POST \
-d  "{model_response_data: { text: '[UNSAFE TEXT]' }, multi_language_detection_metadata: { enable_multi_language_detection: true , source_language: 'jp' } }" \
-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"

Remplacez les éléments suivants :

  • PROJECT_ID correspond à l'ID du projet auquel appartient le modèle.
  • LOCATION est l'emplacement du modèle.
  • TEMPLATE_ID est l'ID du modèle.

Étapes suivantes