Norme relative alla funzionalità SanitizeUserPrompt

Policy estensibile

Questa pagina si applica ad Apigee e ad Apigee hybrid.

Visualizza la documentazione di Apigee Edge.

La policy SanitizeUserPrompt protegge le applicazioni di AI dai contenuti dannosi sanificando i prompt degli utenti inviati ai modelli di AI generativa. La policy utilizza Model Armor per valutare i prompt degli utenti alla ricerca di contenuti dannosi, abilitando la protezione nativa per i workload AI che utilizzano Apigee. Model Armor è un servizio Google Cloud che offre misure di sicurezza e protezione dell'AI per mitigare i rischi associati ai modelli linguistici di grandi dimensioni (LLM).

Questa policy funziona in combinazione con la policy SanitizeModelResponse.

Questa policy è una policy estensibile e il suo utilizzo potrebbe avere implicazioni in termini di costi o utilizzo, a seconda della licenza Apigee. Per informazioni sui tipi di policy e sulle implicazioni di utilizzo, consulta Tipi di policy.

Prima di iniziare

Prima di utilizzare la policy SanitizeUserPrompt, completa le seguenti attività:

  • Crea un template Model Armor. Completa questo passaggio prima di creare una policy SanitizeUserPrompt.
  • Imposta l'endpoint API per il servizio Model Armor.
  • Crea una policy SanitizeModelResponse. Completa questa attività prima di eseguire il deployment della policy SanitizeUserPrompt.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per applicare e utilizzare la policy SanitizeUserPrompt, chiedi all'amministratore di concederti i seguenti ruoli IAM sul account di servizio che utilizzi per eseguire il deployment dei proxy Apigee:

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Abilita API

Abilita l'API Model Armor, se non è già abilitata.

Ruoli richiesti per abilitare le API

Per abilitare le API, devi disporre dell'autorizzazione serviceusage.services.enable. Se hai creato il progetto, probabilmente hai già questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore Service Usage (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.

Abilitare l'API

Elemento <SanitizeUserPrompt>

Definisce una policy SanitizeUserPrompt.

Valore predefinito Consulta la scheda Policy predefinita di seguito
Obbligatorio? Obbligatorio
Tipo Oggetto complesso
Elemento principale N/D
Elementi secondari <DisplayName>
<IgnoreUnresolvedVariables>
<ModelArmor>
<UserPromptSource>
<FunctionResponseSource>

L'elemento <SanitizeUserPrompt> utilizza la seguente sintassi:

Sintassi

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

Policy predefinita

L'esempio seguente mostra le impostazioni predefinite quando aggiungi una policy SanitizeUserPrompt al flusso di richieste nell'interfaccia utente di Apigee:

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

Quando inserisci una nuova policy SanitizeUserPrompt utilizzando l'interfaccia utente di Apigee, il modello contiene stub per tutte le possibili operazioni. Consulta di seguito le informazioni sugli elementi obbligatori.

Questo elemento ha i seguenti attributi comuni a tutti i criteri:

Attributo Predefinito Obbligatorio? Descrizione
name N/D Obbligatorio

Il nome interno del criterio. Il valore dell'attributo name può contenere lettere, numeri, spazi, trattini, trattini bassi e punti. Questo valore non può superare i 255 caratteri.

Se vuoi, utilizza l'elemento <DisplayName> per etichettare il criterio nell'editor proxy dell'interfaccia utente di gestione con un nome diverso in linguaggio naturale.

continueOnError falso Facoltativo Imposta su false per restituire un errore quando un criterio non va a buon fine. Questo è un comportamento previsto per la maggior parte dei criteri. Imposta su true per continuare l'esecuzione del flusso anche dopo un fallimento del criterio. Vedi anche:
enabled true Facoltativo Imposta su true per applicare il criterio. Imposta su false per disattivare il criterio. Il criterio non verrà applicato anche se rimane collegato a un flusso.
async   falso Ritirato Questo attributo è stato ritirato.

La tabella seguente fornisce una descrizione generale degli elementi secondari di <SanitizeUserPrompt>:

Elemento secondario Obbligatorio? Descrizione
<DisplayName> Facoltativo Il nome della policy.

<IgnoreUnresolvedVariables> Facoltativo Specifica se l'elaborazione si interrompe se la variabile utilizzata per il nome del template o il payload di Model Armor non viene risolta.
<ModelArmor> Obbligatorio Contiene le informazioni necessarie per specificare il template Model Armor.
<UserPromptSource> Facoltativo La posizione del payload per l'estrazione del testo del prompt dell'utente. Sono supportati solo i valori di testo stringa.

Questo campo supporta la sintassi del modello di messaggio Apigee, incluso l'utilizzo di variabili o funzioni di percorso JSON.

Ad esempio:

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

<FunctionResponseSource> Facoltativo La posizione dei dati di risposta della funzione o dello strumento da estrarre. La policy utilizza questo elemento come riserva quando <UserPromptSource> restituisce un valore vuoto nei turni di chiamata di funzione.

Valore predefinito: {jsonPath('$.contents[-1].parts[-1].functionResponse.response',request.content)}

Esempio

Questa sezione fornisce un esempio di utilizzo di <SanitizeUserPrompt>.

Questo esempio utilizza tutti i valori predefiniti per il rilevamento del modello e l'estrazione dei prompt:

<SanitizeUserPrompt async="false" continueOnError="false" enabled="true" name="sanitize-text">
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <DisplayName>Sanitize-Text-sample</DisplayName>
  <ModelArmor>
    <TemplateName>projects/{project}/locations/{location}/templates/{template-name}</TemplateName>
  </ModelArmor>
</SanitizeUserPrompt>

Riferimento dell'elemento secondario

Questa sezione descrive gli elementi secondari di <SanitizeUserPrompt>.

<DisplayName>

Da utilizzare insieme all'attributo name per etichettare il criterio nell'editor proxy dell'interfaccia utente di gestione con un nome diverso e più naturale.

L'elemento <DisplayName> è comune a tutti i criteri.

Valore predefinito N/D
Obbligatorio? Facoltativo. Se ometti <DisplayName>, viene utilizzato il valore dell'attributo name del criterio.
Tipo Stringa
Elemento principale <PolicyElement>
Elementi secondari Nessuno

La sintassi dell'elemento <DisplayName> è la seguente:

Sintassi

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

Esempio

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

L'elemento <DisplayName> non ha attributi o elementi secondari.

<IgnoreUnresolvedVariables>

Determina se l'elaborazione si interrompe quando una variabile non viene risolta. Imposta su true per ignorare le variabili non risolte e continuare l'elaborazione.

Valore predefinito Falso
Obbligatorio? Facoltativo
Tipo Booleano
Elemento principale <SanitizeUserPrompt>
Elementi secondari Nessuno

<ModelArmor>

Contiene le informazioni necessarie per specificare il template Model Armor.

Valore predefinito N/D
Obbligatorio? Obbligatorio
Tipo Stringa
Elemento principale
Elementi secondari <TemplateName>

L'elemento <ModelArmor> utilizza la seguente sintassi:

Sintassi

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

Esempio

Questo esempio utilizza le variabili di flusso Apigee per compilare le informazioni richieste.

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

La tabella seguente fornisce una descrizione generale degli elementi secondari di <ModelArmor>.

Elemento secondario Obbligatorio? Descrizione
<TemplateName> Obbligatorio Stringa

Il template Model Armor utilizzato per sanificare il prompt dell'utente.

Questo valore può essere basato su un modello utilizzando le seguenti variabili di flusso Apigee:

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

<UserPromptSource>

La posizione del payload per l'estrazione del testo del prompt dell'utente. Questo campo supporta la sintassi del modello di messaggio Apigee, incluso l'utilizzo di variabili o funzioni di percorso JSON. Ad esempio:

{jsonpath('$.input.prompt.text',request.content,false)}
Valore predefinito {jsonPath('$.contents[-1].parts[-1].text',request.content)}
Obbligatorio? Facoltativo
Tipo Stringa
Elemento principale <SanitizeUserPrompt>
Elementi secondari Nessuno

<FunctionResponseSource>

La posizione dei dati di risposta della funzione o dello strumento da estrarre dalla richiesta. La policy utilizza questo elemento come riserva quando <UserPromptSource> restituisce un valore vuoto, il che si verifica nei turni di chiamata di funzione in cui l'ultima voce di contenuto contiene una risposta della funzione anziché un testo. Devi eseguire la sanitizzazione dei dati di risposta della funzione perché contengono dati esterni non attendibili provenienti da API e database.

Questo campo supporta la sintassi del modello di messaggio, incluse le funzioni JSON Path.

Valore predefinito {jsonPath('$.contents[-1].parts[-1].functionResponse.response',request.content)}
Obbligatorio? Facoltativo
Tipo Stringa
Elemento principale <SanitizeUserPrompt>
Elementi secondari Nessuno

Variabili di flusso

Le variabili di flusso configurano il comportamento di runtime dinamico per policy e flussi, in base alle intestazioni HTTP o ai contenuti dei messaggi o al contesto disponibile nel flusso. Per saperne di più sulle variabili di flusso, consulta il Riferimento per le variabili di flusso.

Questa policy fornisce il seguente insieme di variabili di flusso di sola lettura durante l'esecuzione. Puoi utilizzare queste variabili di flusso con la policy DataCapture per creare report di analisi personalizzati. Per saperne di più, consulta Raccolta dei dati dei clienti con la policy di acquisizione dei dati.

Nome variabile Descrizione
SanitizeUserPrompt.POLICY_NAME.templateUsed Specifica quale template Model Armor viene utilizzato. Ad esempio: projects/myproject/locations/us-west1/templates/mytemplate
SanitizeUserPrompt.POLICY_NAME.userPrompt Specifica i contenuti del prompt utilizzati per la chiamata a Model Armor per la sanitizzazione dei contenuti.
SanitizeUserPrompt.POLICY_NAME.modelResponse Specifica i contenuti della risposta dell'LLM utilizzati per la chiamata a Model Armor per la sanitizzazione dei contenuti.
SanitizeUserPrompt.POLICY_NAME.responseFromModelArmor Specifica la risposta JSON di Model Armor.
SanitizeUserPrompt.POLICY_NAME.filterMatchState Specifica se il filtro ha trovato una corrispondenza. I valori validi includono MATCH_FOUND e NO_MATCH_FOUND.
SanitizeUserPrompt.POLICY_NAME.invocationResult Un campo che indica il risultato della chiamata, indipendentemente dallo stato della corrispondenza. Può avere i seguenti elementi:
  • SUCCESS: All filters executed successfully.
  • PARTIAL: l'esecuzione di alcuni filtri è stata saltata o non è riuscita.
  • ERRORE: tutti i filtri sono stati ignorati o l'esecuzione non è riuscita.
SanitizeUserPrompt.POLICY_NAME.raiFilterResult.executionState Risultato dell'esecuzione del filtro AI responsabile. I valori validi includono EXECUTION_SUCCESS e EXECUTION_SKIPPED.
SanitizeUserPrompt.POLICY_NAME.raiFilterResult.matchState Stato della corrispondenza del filtro AI responsabile. I valori validi includono MATCH_FOUND e NO_MATCH_FOUND.
SanitizeUserPrompt.POLICY_NAME.sdpFilterResult.inspectResult.executionState Stato di esecuzione del risultato dell'ispezione del filtro SDP. I valori validi includono EXECUTION_SUCCESS e EXECUTION_SKIPPED.
SanitizeUserPrompt.POLICY_NAME.sdpFilterResult.inspectResult.matchState Stato di corrispondenza del risultato dell'ispezione del filtro SDP. I valori validi includono MATCH_FOUND e NO_MATCH_FOUND.
SanitizeUserPrompt.POLICY_NAME.sdpFilterResult.deidentifyResult.executionState Stato di esecuzione del risultato dell'anonimizzazione del filtro SDP. I valori validi includono EXECUTION_SUCCESS e EXECUTION_SKIPPED.
SanitizeUserPrompt.POLICY_NAME.sdpFilterResult.deidentifyResult.matchState Stato di corrispondenza del risultato dell'anonimizzazione del filtro SDP. I valori validi includono MATCH_FOUND e NO_MATCH_FOUND.
SanitizeUserPrompt.POLICY_NAME.piAndJailbreakFilterResult.executionState Stato di esecuzione dei risultati del filtro prompt injection e jailbreak. I valori validi includono EXECUTION_SUCCESS e EXECUTION_SKIPPED.
SanitizeUserPrompt.POLICY_NAME.piAndJailbreakFilterResult.matchState Stato di corrispondenza dei risultati del filtro per prompt injection e jailbreak. I valori validi includono MATCH_FOUND e NO_MATCH_FOUND.
SanitizeUserPrompt.POLICY_NAME.csamFilterFilterResult.executionState Stato di esecuzione del filtro CSAM. I valori validi includono EXECUTION_SUCCESS e EXECUTION_SKIPPED.
SanitizeUserPrompt.POLICY_NAME.csamFilterFilterResult.matchState Stato della corrispondenza del filtro CSAM. I valori validi includono MATCH_FOUND e NO_MATCH_FOUND.
SanitizeUserPrompt.POLICY_NAME.maliciousUriFilterResult.executionState Stato di esecuzione del filtro URI dannoso. I valori validi includono EXECUTION_SUCCESS e EXECUTION_SKIPPED.
SanitizeUserPrompt.POLICY_NAME.maliciousUriFilterResult.matchState Stato di corrispondenza del filtro URI dannoso. I valori validi includono MATCH_FOUND e NO_MATCH_FOUND.
SanitizeUserPrompt.POLICY_NAME.sanitizationMetadata.errorCode Codice di errore personalizzato sottoposto a override, se presente nella risposta di Model Armor.
SanitizeUserPrompt.POLICY_NAME.sanitizationMetadata.errorMessage Codice di errore personalizzato sottoposto a override, se presente nella risposta di Model Armor.
SanitizeUserPrompt.POLICY_NAME.csamFilterMatched Valore booleano che indica se il filtro CSAM ha trovato una corrispondenza.
SanitizeUserPrompt.POLICY_NAME.maliciousURIs Elenco aggiunto di URI dannosi rilevati dal filtro URI dannoso.
SanitizeUserPrompt.POLICY_NAME.maliciousURIsDetected Valore booleano che indica se il filtro URI dannoso ha trovato una corrispondenza.
SanitizeUserPrompt.POLICY_NAME.matchesFound Valore booleano che indica se uno dei filtri corrisponde.
SanitizeUserPrompt.POLICY_NAME.promptInjectionDetected Valore booleano che indica se il filtro di prompt injection ha trovato una corrispondenza.
SanitizeUserPrompt.POLICY_NAME.promptInjectionConfidence Livello di confidenza del rilevamento di prompt injection.
SanitizeUserPrompt.POLICY_NAME.raiMatchesFound Valore booleano che indica se il filtro RAI ha trovato una corrispondenza.
SanitizeUserPrompt.POLICY_NAME.requestSentToModelArmor Valore booleano che indica se è stata inviata una richiesta a Model Armor.
SanitizeUserPrompt.POLICY_NAME.sanitizeOperation Specifica l'operazione eseguita dalla policy. I valori validi includono SANITIZE_USER_PROMPT e SANITIZE_MODEL_RESPONSE.

Messaggi di errore

Questa sezione descrive i codici di errore e i messaggi di errore restituiti da Apigee e le variabili di errore impostate da Apigee per la policy SanitizeUserPrompt. Queste informazioni sono importanti se stai sviluppando regole di errore per gestire gli errori. Per saperne di più, consulta Cosa devi sapere sugli errori delle policy e Gestione degli errori.

Errori di runtime

Questi errori possono verificarsi durante l'esecuzione della policy.

Codice di errore Stato HTTP Causa
steps.sanitize.user.prompt.response.FilterMatched 400 Questo errore si verifica se il prompt dell'utente non supera il controllo del template di Model Armor.
steps.sanitize.user.prompt.SanitizationResponseParsingFailed 500 Questo errore si verifica se non è possibile analizzare la risposta di Model Armor.
steps.sanitize.user.prompt.FailedToExtractUserPrompt 500 Questo errore si verifica se l'estrazione automatica del prompt utente per il valore predefinito non è riuscita.
steps.sanitize.user.prompt.InternalError 500 Questo errore si verifica quando si verifica un errore interno del server.
steps.sanitize.modelarmor.ModelArmorTemplateNameExtractionFailed 500 Questo errore si verifica se non è possibile risolvere il nome del template.
steps.sanitize.modelarmor.AuthenticationFailure 500 Questo errore si verifica se il account di servizio non dispone dell'autorizzazione per chiamare l'API Model Armor.
steps.sanitize.modelarmor.ModelArmorAPIFailed 500 Questo errore si verifica se l'API Model Armor genera un errore.
steps.sanitize.modelarmor.ModelArmorCalloutError 500 Questo errore si verifica se la chiamata API Model Armor non va a buon fine.
steps.sanitize.modelarmor.ServiceUnavailable 500 Questo errore si verifica se il servizio Model Armor non è disponibile.

Errori di deployment

Questi errori possono verificarsi quando esegui il deployment di un proxy contenente questa policy.

Nome errore Causa
The ModelArmor/TemplateName element is required. Si verifica se l'elemento <TemplateName> in <ModelArmor> non è presente.
The TemplateName element value is required. Si verifica se il valore <TemplateName> è vuoto.

Variabili di errore

Questa policy imposta queste variabili quando attiva un errore in fase di runtime. Per saperne di più, consulta Informazioni sugli errori relativi alle norme.

Variabili Dove Esempio
fault.name="FAULT_NAME" FAULT_NAME è il nome dell'errore, come elencato nella tabella Errori di runtime riportata sopra. Il nome dell'errore è l'ultima parte del codice di errore. fault.name Matches "UnresolvedVariable"
SanitizeUserPrompt.POLICY_NAME.failed POLICY_NAME è il nome specificato dall'utente della policy che ha generato l'errore. SanitizeUserPrompt.sanitize-prompt.failed = true

Esempio di risposta di errore

{
  "fault": {
    "faultstring": "SanitizeUserPrompt[sanitize-prompt]: unable to resolve variable [variable_name]",
    "detail": {
      "errorcode": "steps.sanitizeuserprompt.UnresolvedVariable"
    }
  }
}

Esempio di regola di errore

<FaultRule name="SanitizeUserPrompt Faults">
    <Step>
        <Name>SUP-CustomSetVariableErrorResponse</Name>
        <Condition>(fault.name = "SetVariableFailed")</Condition>
    </Step>
    <Condition>(sanitizeuserprompt.failed = true)</Condition>
</FaultRule>

Codice di errore e messaggi di errore del template Model Armor

Il template Model Armor supporta l'override dei codici di errore e dei messaggi di errore generati dalle richieste API della policy SanitizeUserPrompt. Se l'utente imposta gli override, i codici di errore e i messaggi di errore di Model Armor compilano le variabili di flusso.

Ad esempio, una risposta con codici e messaggi di errore di Model Armor potrebbe essere simile alla seguente:

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

Schemi

Ogni tipo di policy è definito da uno schema XML (.xsd). Per riferimento, gli schemi delle policy sono disponibili su GitHub.