Prompts und Antworten bereinigen

Model Armor prüft Prompts und Antworten anhand der konfigurierten Konfidenzniveaus für den Screening. Auf dieser Seite wird ausführlich beschrieben, wie Sie Prompts und Antworten bereinigen.

Erstellen Sie zuerst eine Vorlage. Folgen Sie dazu der Anleitung unter Vorlagen erstellen.

Prompts bereinigen

Model Armor reinigt Prompts in Text- und dateibasierten Formaten.

Text-Prompts

Mit diesem Befehl können Sie einen Textprompt in Model Armor bereinigen. Verwenden Sie die Vorlage (ma-template-id-1234), die wir im Rahmen von Schritt 7 – Erweiterter Schutz sensibler Daten unter Vorlagen erstellen erstellt haben.

  curl -X POST 
-d "{user_prompt_data: { text: 'How do I make a bomb?' } }"
-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"

Ersetzen Sie Folgendes:

  • PROJECT_ID ist die ID des Projekts für die Vorlage.
  • LOCATION ist der Speicherort der Vorlage.
  • TEMPLATE_ID ist die ID der Vorlage.

Das führt zur folgenden Antwort: Beachten Sie, dass sich MATCH_FOUND in der Kategorie „Gefährlich“ befindet.

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

Um diesen Befehl auszuführen, müssen Sie zuerst einen Model Armor-Client in Python initialisieren.

 user_prompt_data = modelarmor_v1.DataItem()
 user_prompt_data.text = "How do I make a bomb?"
 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)
 

Ersetzen Sie Folgendes:

  • PROJECT_ID ist die ID des Projekts für die Vorlage.
  • LOCATION ist der Speicherort der Vorlage.
  • TEMPLATE_ID ist die ID der Vorlage.

Das führt zur folgenden Antwort:

  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
  }
  

Grundlegende Konfiguration des Schutzes sensibler Daten

Erstellen Sie eine Vorlage mit aktivierten grundlegenden Einstellungen für den Schutz sensibler Daten. Mit dem grundlegenden Schutz sensibler Daten können Sie nach den folgenden infoTypes für den Schutz sensibler Daten suchen:

  • CREDIT_CARD_NUMBER: Eine Kreditkartennummer ist 12 bis 19 Ziffern lang. Sie werden weltweit für Zahlungsvorgänge verwendet.
  • US_SOCIAL_SECURITY_NUMBER: Die US-amerikanische Sozialversicherungsnummer (SSN) ist eine 9-stellige Nummer für US-Staatsbürger, Inhaber einer unbeschränkten und Inhaber einer zeitlich beschränkten Aufenthaltsgenehmigung. Dieser Detektor gleicht keine Nummern ab, bei denen in einer der Zahlengruppen nur Nullen enthalten sind (d. h. 000-##-####, ###-00-#### oder ###-##-0000), deren Zahlengruppe 666 lautet oder deren erste Ziffer eine 9 ist.
  • FINANCIAL_ACCOUNT_NUMBER: Eine Nummer, die sich auf ein bestimmtes Finanzkonto bezieht, z. B. eine Bankkontonummer oder eine Nummer eines Altersvorsorgekontos.
  • US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER: Die US-amerikanische Steueridentifikationsnummer für Einzelpersonen (Individual Taxpayer Identification Number, ITIN) ist eine Art Steueridentifikationsnummer (TIN), die vom Internal Revenue Service (IRS) ausgestellt wird. Eine ITIN ist eine Steuerbearbeitungsnummer, verfügbar nur für bestimmte nicht ansässige und ansässige Ausländer, deren Ehepartner und Familienangehörige, die keine Sozialversicherungsnummer (SSN) erhalten können.
  • GCP_CREDENTIALS: Google Cloud Anmeldedaten des Dienstkontos. Anmeldedaten, die zur Authentifizierung bei Google API-Clientbibliotheken und Dienstkonten verwendet werden können.
  • GCP_API_KEY: Google Cloud API-Schlüssel. Ein verschlüsselter String, der beim Aufrufen von Google Cloud APIs verwendet wird, die nicht auf private Nutzerdaten zugreifen müssen.

Hier ein Beispiel für eine einfache Konfiguration des Schutzes sensibler Daten:

gcloud model-armor templates create template-name \
  --location=location \
  --basic-config-filter-enforcement=enabled
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"

Ersetzen Sie Folgendes:

  • PROJECT_ID ist die ID des Projekts, zu dem die Vorlage gehört.
  • LOCATION ist der Speicherort der Vorlage.
  • TEMPLATE_ID ist die ID der Vorlage.
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)

Ersetzen Sie Folgendes:

  • PROJECT_ID ist die ID des Projekts, zu dem die Vorlage gehört.
  • LOCATION ist der Speicherort der Vorlage.
  • TEMPLATE_ID ist die ID der Vorlage.

Verwenden Sie die erstellte Vorlage, um Ihre Prompts zu prüfen. Beispiel:

curl -X POST \
  -d  "{ user_prompt_data: { 'text': 'can you remember my ITIN : 988-86-1234'} }" \
  -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"

In diesem Beispiel wird die folgende Antwort zurückgegeben:

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

Erweiterte Konfiguration für den Schutz sensibler Daten

Mit Model Armor können Sie LLM-Aufforderungen und ‑Antworten mithilfe von Vorlagen für den Schutz sensibler Daten mit der erweiterten Konfigurationseinstellung für den Schutz sensibler Daten prüfen. So können Sie Funktionen für den Schutz sensibler Daten über die in der grundlegenden Einstellung für den Schutz sensibler Daten angebotenen infoTypes hinaus nutzen.

Wenn Sie den erweiterten Filter für den Schutz sensibler Daten in Model Armor verwenden möchten, müssen sich die Vorlagen für den Schutz sensibler Daten am selben Cloud-Speicherort wie die Model Armor-Vorlage befinden, in diesem Fall also us-central1.

gcloud model-armor templates create template-name
--location=LOCATION \
--advanced-config-inspect-template="path/to/template" \
  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"

Ersetzen Sie Folgendes:

  • PROJECT_ID ist die ID des Projekts, zu dem die Vorlage gehört.
  • LOCATION ist der Speicherort der Vorlage.
  • PROJECT_NUMBER ist der Name Ihres Dienstkontos.
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)

Ersetzen Sie Folgendes:

  • PROJECT_ID ist die ID des Projekts, zu dem die Vorlage gehört.
  • LOCATION ist der Speicherort der Vorlage.
  • TEMPLATE_ID ist die ID der Vorlage.

Weisen Sie im Projekt mit der Vorlage für den Schutz sensibler Daten dem Dienst-Agenten, der im Rahmen von Schritt 7 – Erweiterter Schutz sensibler Daten unter Vorlagen erstellen erstellt wurde, die Rolle DLP-Nutzer (roles/dlp.user) und die Rolle DLP-Leser (roles/dlp.reader) zu. Sie können diesen Schritt überspringen, wenn sich die Vorlage für den Schutz sensibler Daten im selben Projekt wie die Vorlage für Model Armor befindet.

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

Ersetzen Sie Folgendes:

  • PROJECT_ID durch die ID des Projekts, zu dem die Vorlage gehört.
  • PROJECT_NUMBER ist der Name Ihres Dienstkontos.

Verwenden Sie die erstellte Vorlage, um Ihre Prompts zu überprüfen. Beispiel:

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"

Ersetzen Sie Folgendes:

  • PROJECT_ID ist die ID des Projekts, zu dem die Vorlage gehört.
  • LOCATION ist der Speicherort der Vorlage.
  • TEMPLATE_ID ist die ID der Vorlage.

In diesem Beispiel wird die folgende Antwort zurückgegeben:

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

Dateibasierte Prompts

Mit diesem Befehl können Sie einen Nutzerprompt im Dateiformat mit Model Armor bereinigen. Die Dateien müssen im Base64-codierten Format übergeben werden.

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"

Ersetzen Sie Folgendes:

  • PROJECT_ID ist die ID des Projekts, zu dem die Vorlage gehört.
  • LOCATION ist der Speicherort der Vorlage.
  • TEMPLATE_ID ist die ID der Vorlage.

Modellantwort bereinigen

Hier ist ein Beispielbefehl zum Entfernen von Schadcode aus einer Modellantwort in Model Armor.

 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"

In diesem Beispiel wird die folgende Antwort zurückgegeben:

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

Um diesen Befehl auszuführen, müssen Sie zuerst einen Model Armor-Client in Python initialisieren.

 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)
 

Ersetzen Sie Folgendes:

  • PROJECT_ID ist die ID des Projekts für die Vorlage.
  • LOCATION ist der Speicherort der Vorlage.
  • TEMPLATE_ID ist die ID der Vorlage.

Nächste Schritte