Questa pagina si applica ad Apigee e Apigee hybrid.
Visualizza la documentazione di
Apigee Edge.
Panoramica
Il criterio SanitizeUserPrompt protegge le applicazioni di IA da contenuti dannosi mediante la sanificazione dei prompt utente inviati ai modelli di IA generativa. Il criterio utilizza Model Armor per valutare i prompt dell'utente alla ricerca di contenuti dannosi, attivando la protezione nativa per i carichi di lavoro di AI che utilizzano Apigee. Model Armor è un Google Cloud servizio che offre misure di sicurezza e protezione dell'IA per mitigare i rischi associati ai modelli linguistici di grandi dimensioni (LLM).
Questo criterio viene utilizzato in combinazione con il criterio SanitizeModelResponse.
Questo criterio è un criterio estensibile e il suo utilizzo potrebbe comportare implicazioni in termini di costi o utilizzo, a seconda della licenza Apigee. Per informazioni sui tipi di criteri e sulle implicazioni per l'utilizzo, consulta Tipi di criteri.
Prima di iniziare
Prima di utilizzare il criterio SanitizeUserPrompt, devi completare le seguenti attività:
- Crea un modello Model Armor. Questo passaggio deve essere completato prima di creare un criterio SanitizeUserPrompt.
- Imposta l'endpoint API per il servizio Model Armor.
- Crea un criterio SanitizeModelResponse. Questa attività deve essere completata prima di implementare il criterio SanitizeUserPrompt.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per applicare e utilizzare il criterio SanitizeUserPrompt, chiedi all'amministratore di concederti i seguenti ruoli IAM nell'account di servizio che utilizzi per eseguire il deployment dei proxy Apigee:
-
Model Armor User (
roles/modelarmor.user
) -
Model Armor Viewer (
roles/modelarmor.viewer
)
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
Enable the Model Armor API.
Elemento <SanitizeUserPrompt>
Definisce un criterio SanitizeUserPrompt.
Valore predefinito | Consulta la scheda Criteri predefiniti di seguito |
Obbligatorio? | Obbligatorio |
Tipo | Oggetto complesso |
Elemento principale | N/D |
Elementi secondari |
<DisplayName> <IgnoreUnresolvedVariables> <TemplateName> <UserPromptSource> |
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,true)}</UserPromptSource> </SanitizeUserPrompt>
Criterio predefinito
L'esempio seguente mostra le impostazioni predefinite quando aggiungi un criterio 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,true)}</UserPromptSource> </SanitizeUserPrompt>
Quando inserisci un nuovo criterio SanitizeUserPrompt utilizzando l'interfaccia utente di Apigee, il modello contiene stub per tutte le possibili operazioni. Di seguito sono riportate le informazioni sugli elementi obbligatori.
This element has the following attributes that are common to all policies:
Attribute | Default | Required? | Description |
---|---|---|---|
name |
N/A | Required |
The internal name of the policy. The value of the Optionally, use the |
continueOnError |
false | Optional | Set to false to return an error when a policy fails. This is expected behavior for
most policies. Set to true to have flow execution continue even after a policy
fails. See also:
|
enabled |
true | Optional | Set to true to enforce the policy. Set to false to turn off the
policy. The policy will not be enforced even if it remains attached to a flow. |
async |
false | Deprecated | This attribute is deprecated. |
La tabella seguente fornisce una descrizione generale degli elementi secondari di <SanitizeUserPrompt>
:
Elemento secondario | Obbligatorio? | Descrizione |
---|---|---|
<DisplayName> |
Facoltativo | Il nome del criterio. |
<IgnoreUnresolvedVariables> |
Facoltativo | Specifica se l'elaborazione si interrompe se la variabile utilizzata per il nome del modello o per il payload di Model Armor non è risolta. |
<ModelArmor> |
Obbligatorio | Contiene le informazioni necessarie per specificare il modello di Model Armor. |
<UserPromptSource> |
Facoltativo | La posizione del payload per il testo della richiesta all'utente da estrarre. 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)} |
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 all'elemento secondario
Questa sezione descrive gli elementi secondari di <SanitizeUserPrompt>
.
<DisplayName>
Use in addition to the name
attribute to label the policy in the
management UI proxy editor with a different, more natural-sounding name.
The <DisplayName>
element is common to all policies.
Default Value | N/A |
Required? | Optional. If you omit <DisplayName> , the value of the
policy's name attribute is used. |
Type | String |
Parent Element | <PolicyElement> |
Child Elements | None |
The <DisplayName>
element uses the following syntax:
Syntax
<PolicyElement> <DisplayName>POLICY_DISPLAY_NAME</DisplayName> ... </PolicyElement>
Example
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
The <DisplayName>
element has no attributes or child elements.
<IgnoreUnresolvedVariables>
Determina se l'elaborazione si interrompe quando una variabile non è 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 modello di Model Armor.
Valore predefinito | N/D |
Obbligatorio? | Obbligatorio |
Tipo | Stringa |
Elemento principale | |
Elementi secondari |
<TemplateName>
|
La sintassi dell'elemento <ModelArmor>
è la seguente:
Sintassi
<ModelArmor> <TemplateName>projects/{project}/locations/{location}/templates/{template-name}</TemplateName> </ModelArmor>
Esempio
Questo esempio utilizza le variabili del 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 modello Model Armor utilizzato per eseguire la sanitizzazione della richiesta dell'utente. Questo valore può essere definito come modello utilizzando le seguenti variabili di flusso Apigee: projects/{organization.name}/locations/{system.region.name}/templates/{id} |
<UserPromptSource>
La posizione del payload per il testo della richiesta all'utente da estrarre. 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,true)} |
Obbligatorio? | Facoltativo |
Tipo | Stringa |
Elemento principale |
<SanitizeUserPrompt>
|
Elementi secondari | Nessuno |
Variabili di flusso
Le variabili di flusso possono essere utilizzate per configurare il comportamento di runtime dinamico per criteri e flussi, in base alle intestazioni HTTP o ai contenuti dei messaggi o al contesto disponibile nel flusso. Per ulteriori informazioni sulle variabili di flusso, consulta la sezione Riferimento alle variabili di flusso.
Il criterio può impostare queste variabili di sola lettura durante l'esecuzione.
Nome variabile | Descrizione |
---|---|
SanitizeUserPrompt.POLICY_NAME.templateUsed |
Specifica il modello di Model Armor 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 sanificazione dei contenuti. |
SanitizeUserPrompt.POLICY_NAME.modelResponse |
Specifica i contenuti della risposta 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 è stato trovato. I valori validi includono MATCH_FOUND e NO_MATCH_FOUND . |
SanitizeUserPrompt.POLICY_NAME.invocationResult |
Un campo che indica l'esito dell'invocazione, indipendentemente dallo stato della corrispondenza. Può avere
i seguenti elementi:
|
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 di 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 della corrispondenza del risultato dell'ispezione del filtro SDP. I valori validi includono MATCH_FOUND e NO_MATCH_FOUND . |
SanitizeUserPrompt.POLICY_NAME.sdpFilterResult.deidentifyResult.executionState |
Il filtro SDP consente di identificare lo stato di esecuzione del risultato. I valori validi includono EXECUTION_SUCCESS e EXECUTION_SKIPPED . |
SanitizeUserPrompt.POLICY_NAME.sdpFilterResult.deidentifyResult.matchState |
Il filtro SDP de identifica lo stato della corrispondenza del risultato. 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 |
I risultati del filtro prompt injection e jailbreak corrispondono allo stato. 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 della corrispondenza del filtro URI dannoso. I valori validi includono MATCH_FOUND e NO_MATCH_FOUND . |
SanitizeUserPrompt.POLICY_NAME.sanitizationMetadata.errorCode |
Codice di errore personalizzato sostituito, se presente nella risposta di Model Armor. |
SanitizeUserPrompt.POLICY_NAME.sanitizationMetadata.errorMessage |
Codice di errore personalizzato sostituito, se presente nella risposta di Model Armor. |
SanitizeUserPrompt.POLICY_NAME.csamFilterMatched/code> |
Valore booleano che indica se il filtro CSAM ha trovato una corrispondenza. |
SanitizeUserPrompt.POLICY_NAME.maliciousURIs |
Elenco degli URI dannosi rilevati dal filtro URI dannosi. |
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 inserimento della richiesta 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 dal criterio. 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 e le variabili di errore impostate da Apigee specifiche per il criterio SanitizeUserPrompt. Queste informazioni sono importanti se stai sviluppando regole di errore per gestire gli errori. Per scoprire di più, consulta Informazioni importanti sugli errori delle norme e Gestione degli errori.
Errori di runtime
Questi errori possono verificarsi durante l'esecuzione del criterio.
Codice guasto | Stato HTTP | Causa |
---|---|---|
steps.sanitize.user.prompt.response.FilterMatched |
400 |
Questo errore si verifica se la richiesta all'utente non supera il controllo del modello 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 della richiesta all'utente per il valore predefinito non è riuscita. |
steps.sanitize.user.prompt.InternalError |
500 |
Questo errore si verifica in caso di errore interno del server. |
steps.sanitize.modelarmor.ModelArmorTemplateNameExtractionFailed |
500 |
Questo errore si verifica se non è possibile risolvere il nome del modello. |
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 all'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 questo criterio.
Nome dell'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
Queste variabili vengono impostate quando questo criterio attiva un errore in fase di esecuzione. Per ulteriori informazioni, consulta Informazioni importanti sugli errori relativi alle norme.
Variabili | Dove | Esempio |
---|---|---|
fault.name="FAULT_NAME" |
FAULT_NAME è il nome dell'errore, come indicato nella tabella Errori di runtime sopra. Il nome dell'errore è l'ultima parte del codice dell'errore. | fault.name Matches "UnresolvedVariable" |
SanitizeUserPrompt.POLICY_NAME.failed |
POLICY_NAME è il nome specificato dall'utente del criterio 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 modello Model Armor
Il modello Model Armor supporta l'override dei codici di errore e dei messaggi di errore generati dalle richieste API del criterio SanitizeUserPrompt. Se l'utente imposta le sostituzioni, i codici e i messaggi di errore di Model Armor completeranno 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 norma è definito da uno schema XML (.xsd
). Come riferimento, gli schemi delle norme sono disponibili su GitHub.