Sanitizzare prompt e risposte

Model Armor controlla i prompt e le risposte in base ai livelli di affidabilità dello screening configurati. Questa pagina descrive in dettaglio come sanificare i prompt e le risposte.

Prima di iniziare, crea un modello seguendo le istruzioni riportate in Creare modelli.

Pulire i prompt

Model Armor pulisce i prompt in formato di testo e basato su file.

Prompt di testo

REST

Utilizza questo comando per sanificare un prompt di testo in Model Armor. Utilizza il modello (ma-template-id-1234) che abbiamo creato nell'ambito del passaggio 7 - Sensitive Data Protection avanzata di Crea modelli.

  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"

Sostituisci quanto segue:

  • PROJECT_ID è l'ID del progetto per il modello.
  • LOCATION è la posizione del modello.
  • TEMPLATE_ID è l'ID del modello.

Il risultato è la seguente risposta. Tieni presente che MATCH_FOUND rientra nella categoria Contenuti dannosi.

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

Per eseguire questo comando, devi prima inizializzare un client Model Armor in 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)
 

Sostituisci quanto segue:

  • PROJECT_ID è l'ID del progetto per il modello.
  • LOCATION è la posizione del modello.
  • TEMPLATE_ID è l'ID del modello.

Il risultato è la seguente risposta.

  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
  }
  

Sanitizzare i prompt di testo con il rilevamento multilingue attivato

Attiva il rilevamento multilingue su richiesta impostando il flag enable_multi_language_detection su true per ogni singola richiesta. Se vuoi, puoi specificare la lingua di origine per risultati più precisi. Se la lingua di origine non è specificata, viene rilevata automaticamente per fornire il supporto multilingue.

Utilizza il seguente comando per sanificare un prompt di testo in Model Armor con il rilevamento multilingue attivato a livello di richiesta.

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"

Sostituisci quanto segue:

  • PROJECT_ID è l'ID del progetto per il modello.
  • LOCATION è la posizione del modello.
  • TEMPLATE_ID è l'ID del modello.

Configurazione di base di Sensitive Data Protection

Crea un modello con le impostazioni di base di Sensitive Data Protection abilitate. La protezione dei dati sensibili di base ti aiuta a eseguire lo screening di un insieme fisso di infoType di Sensitive Data Protection.

I seguenti infoType di Sensitive Data Protection vengono scansionati nel prompt per tutte le regioni:

  • CREDIT_CARD_NUMBER: il numero di una carta di credito può contenere da 12 a 19 cifre. Si utilizzano per eseguire transazioni di pagamento a livello globale.
  • FINANCIAL_ACCOUNT_NUMBER: un numero che si riferisce a un conto finanziario specifico. Ad esempio, un numero di conto bancario o di conto pensionistico.
  • GCP_CREDENTIALS: Google Cloud credenziali dell'account di servizio. Credenziali che possono essere usate per l'autenticazione con librerie client API e service account di Google.
  • GCP_API_KEY: Google Cloud chiave API. Una stringa criptata utilizzata quando vengono chiamate API Google Cloud che non richiedono l'accesso a dati utente privati.
  • PASSWORD: cancella le password in chiaro nelle configurazioni, nel codice e in altri contenuti testuali.

I seguenti infoType di Sensitive Data Protection aggiuntivi vengono scansionati nel prompt per le regioni con sede negli Stati Uniti:

  • US_SOCIAL_SECURITY_NUMBER: Il codice SSN (States Social Security) statunitense è un numero di previdenza sociale di 9 cifre rilasciato a cittadini statunitensi, residenti permanenti e residenti temporanei. Questo rilevatore non ricercherà la corrispondenza con numeri composti da soli zeri in uno dei gruppi di cifre (ossia 000-##-####, ###-00-#### o ###-##-0000), con numeri contenenti 666 nel primo gruppo di cifre o con numeri la cui cifra iniziale è 9.
  • US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER: un numero di identificazione del contribuente individuale (ITIN) degli Stati Uniti è un tipo di numero di identificazione del contribuente (TIN) emesso dall'Internal Revenue Service (IRS). Si tratta di un numero utilizzato a fini fiscali disponibile solo per alcuni stranieri residenti e non residenti, i loro coniugi e familiari a carico che non possono ottenere un numero di previdenza sociale (SSN).

Ecco un esempio di configurazione di base di 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"

Sostituisci quanto segue:

  • PROJECT_ID è l'ID del progetto a cui appartiene il modello.
  • LOCATION è la posizione del modello.
  • TEMPLATE_ID è l'ID del modello.

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)

Sostituisci quanto segue:

  • PROJECT_ID è l'ID del progetto a cui appartiene il modello.
  • LOCATION è la posizione del modello.
  • TEMPLATE_ID è l'ID del modello.

Utilizza il modello creato per esaminare i tuoi prompt. Ecco un esempio:

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"

Questo esempio restituisce la seguente risposta:

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

Configurazione avanzata di Sensitive Data Protection

Model Armor ti consente di esaminare i prompt e le risposte dei modelli LLM utilizzando i modelli di Sensitive Data Protection tramite l'impostazione di configurazione avanzata di Sensitive Data Protection. In questo modo puoi utilizzare le funzionalità di Sensitive Data Protection oltre agli infoType offerti nell'impostazione di base di Sensitive Data Protection.

Per utilizzare il filtro avanzato di Sensitive Data Protection in Model Armor, i modelli di Sensitive Data Protection devono trovarsi nella stessa posizione cloud del modello Model Armor, ad esempio us-central1 in questo caso.

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"

Sostituisci quanto segue:

  • PROJECT_ID è l'ID del progetto a cui appartiene il modello.
  • LOCATION è la posizione del modello.
  • PROJECT_NUMBER è il nome del tuo account di servizio.

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)

Sostituisci quanto segue:

  • PROJECT_ID è l'ID del progetto a cui appartiene il modello.
  • LOCATION è la posizione del modello.
  • TEMPLATE_ID è l'ID del modello.

Nel progetto contenente il modello Sensitive Data Protection, concedi il ruolo Utente DLP (roles/dlp.user) e il ruolo Lettore DLP (roles/dlp.reader) all'agente di servizio creato nell'ambito del passaggio 7 - Sensitive Data Protection avanzata di Crea modelli. Puoi saltare questo passaggio se il modello Sensitive Data Protection si trova nello stesso progetto del modello 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

Sostituisci quanto segue:

  • PROJECT_ID con l'ID del progetto a cui appartiene il modello.
  • PROJECT_NUMBER è il nome del tuo account di servizio.

Utilizza il modello creato per esaminare i prompt. Ecco un esempio:

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"

Sostituisci quanto segue:

  • PROJECT_ID è l'ID del progetto a cui appartiene il modello.
  • LOCATION è la posizione del modello.
  • TEMPLATE_ID è l'ID del modello.

Questo esempio restituisce la seguente risposta:

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

Prompt basati su file

Utilizza questo comando per sanificare un prompt utente nel formato file con Model Armor. I file devono essere passati nel formato codificato 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"

Sostituisci quanto segue:

  • PROJECT_ID è l'ID del progetto a cui appartiene il modello.
  • LOCATION è la posizione del modello.
  • TEMPLATE_ID è l'ID del modello.

Sanitizzazione della risposta del modello

Ecco un esempio di comando per sanificare una risposta del modello in 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"

Questo esempio restituisce la seguente risposta:

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

Per eseguire questo comando, devi prima inizializzare un client Model Armor in 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)
 

Sostituisci quanto segue:

  • PROJECT_ID è l'ID del progetto per il modello.
  • LOCATION è la posizione del modello.
  • TEMPLATE_ID è l'ID del modello.

Sanitizza la risposta del modello con il rilevamento multilingue attivato

Attiva il rilevamento multilingue in base alla richiesta impostando il flag enable_multi_language_detection su true per ogni risposta individuale. Se vuoi, puoi specificare la lingua di origine per risultati più precisi. Se la lingua di origine non è specificata, viene rilevata automaticamente per fornire il supporto 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"

Sostituisci quanto segue:

  • PROJECT_ID è l'ID del progetto a cui appartiene il modello.
  • LOCATION è la posizione del modello.
  • TEMPLATE_ID è l'ID del modello.

Passaggi successivi