Cette page s'applique à Apigee et à Apigee hybrid.
Consultez la documentation d'
Apigee Edge.
La règle SanitizeModelResponse protège les clients d'IA contre les contenus nuisibles ou choquants en nettoyant les réponses des modèles d'IA générative. La règle utilise Model Armor pour évaluer les réponses du modèle en cas de contenu nuisible ou choquant, ce qui permet de protéger de manière native les clients et les charges de travail d'IA à l'aide d'Apigee. Model Armor est un Google Cloud service qui propose des mesures de sécurité et de sûreté de l'IA pour atténuer les risques associés aux grands modèles de langage (LLM).
Cette règle est utilisée conjointement avec la règle SanitizeModelResponse.
Cette règle est une règle extensible et son utilisation peut avoir des conséquences sur le coût ou l'utilisation, en fonction de votre licence Apigee. Pour en savoir plus sur les types de règles et les implications en termes d'utilisation, consultez la section Types de règles.
Avant de commencer
Avant d'utiliser la stratégie SanitizeModelResponse, vous devez effectuer les tâches suivantes :
- Créez un modèle Model Armor. Cette étape doit être effectuée avant de créer une règle SanitizeModelResponse.
- Définissez le point de terminaison de l'API pour le service Model Armor.
Rôles requis
Pour obtenir les autorisations nécessaires pour appliquer et utiliser la stratégie SanitizeModelResponse, demandez à votre administrateur de vous accorder les rôles IAM suivants sur le compte de service que vous utilisez pour déployer des proxys Apigee :
-
Utilisateur de modèle Armor (
roles/modelarmor.user
) -
Lecteur Model Armor (
roles/modelarmor.viewer
)
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.
Activer les API
Enable the Model Armor APIs.
Élément <SanitizeModelResponse>
Définit une règle SanitizeModelResponse.
Valeur par défaut | Consultez l'onglet Règles par défaut ci-dessous. |
Obligatoire ? | Obligatoire |
Type | Objet complexe |
Élément parent | ND |
Éléments enfants |
<DisplayName> <IgnoreUnresolvedVariables> <TemplateName> <UserPromptSource> <LLMResponseSource> |
L'élément <SanitizeModelResponse>
utilise la syntaxe suivante :
Syntaxe
<SanitizeModelResponse async="false" continueOnError="false" enabled="true" name="sanitize-response"> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <DisplayName>sanitize-response-sample</DisplayName> <ModelArmor> <TemplateName>projects/{project}/locations/{location}/templates/{template-name}</TemplateName> </ModelArmor> <UserPromptSource>{jsonPath('$.contents[-1].parts[-1].text',request.content,true)}</UserPromptSource> <LLMResponseSource>{jsonPath($.candidates[-1].content.parts,response.content,true)}</LLMResponseSource> </SanitizeModelResponse>
Règle par défaut
L'exemple suivant montre les paramètres par défaut lorsque vous ajoutez une règle SanitizeModelResponse à votre flux de requête dans l'interface utilisateur d'Apigee :
<SanitizeModelResponse async="false" continueOnError="false" enabled="true" name="sanitize-response"> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <DisplayName>sanitize-response-sample</DisplayName> <ModelArmor> <TemplateName>projects/{project}/locations/{location}/templates/{template-name}</TemplateName> </ModelArmor> <UserPromptSource>{jsonPath('$.contents[-1].parts[-1].text',request.content,true)}</UserPromptSource> <LLMResponseSource>{jsonPath($.candidates[-1].content.parts,response.content,true)}</LLMResponseSource> </SanitizeModelResponse>
Lorsque vous insérez une nouvelle règle SanitizeModelResponse à l'aide de l'interface utilisateur d'Apigee, le modèle contient des bouchons pour toutes les opérations possibles. Vous trouverez ci-dessous des informations sur les éléments requis.
Cet élément possède les attributs suivants qui sont communs à toutes les règles :
Attribut | Par défaut | Obligatoire ? | Description |
---|---|---|---|
name |
ND | Obligatoire |
Nom interne de la règle. La valeur de l'attribut Vous pouvez également utiliser l'élément |
continueOnError |
faux | Facultatif | Définissez sur false pour afficher une erreur en cas d'échec d'une règle. Il s'agit du comportement attendu pour la plupart des règles. Définissez sur true pour que l'exécution du flux se poursuive même après l'échec d'une règle. Voir aussi :
|
enabled |
true | Facultatif | Définissez sur true pour appliquer la règle. Définissez sur false pour désactiver la règle. La règle ne sera pas appliquée même si elle reste associée à un flux. |
async |
faux | Obsolète | Cet attribut est obsolète. |
Le tableau suivant fournit une description détaillée des éléments enfants de <SanitizeModelResponse>
:
Élément enfant | Obligatoire ? | Description |
---|---|---|
<DisplayName> |
Facultatif | Nom de la règle. |
<IgnoreUnresolvedVariables> |
Facultatif | Spécifie si le traitement s'arrête si la variable utilisée pour le nom du modèle ou la charge utile Model Armor n'est pas résolue. |
<TemplateName> |
Obligatoire | Modèle Model Armor utilisé pour nettoyer la réponse du LLM.
Cette valeur peut être modélisée à l'aide des variables de flux Apigee suivantes : projects/{organization.name}/locations/{system.region.name}/templates/{id} |
<UserPromptSource> |
Obligatoire | Emplacement de la charge utile pour le texte de l'invite utilisateur à extraire. Seules les valeurs de texte de chaîne sont acceptées.
Ce champ accepte la syntaxe du modèle de message Apigee, y compris l'utilisation de variables ou de fonctions de chemin JSON. {jsonpath('$.contents[-1].parts[-1].text',request.content,false)} |
<LLMResponseSource> |
Obligatoire | Emplacement de la charge utile pour le texte de la réponse LLM à extraire. Seules les valeurs de texte de chaîne sont acceptées.
Ce champ accepte la syntaxe du modèle de message Apigee, y compris l'utilisation de variables ou de fonctions de chemin JSON. {jsonpath('$.input.prompt.text',request.content,false)} |
Référence d'élément enfant
Cette section décrit les éléments enfants de <SanitizeModelResponse>
.
<DisplayName>
Utilisez-le, en plus de l'attribut name
, pour appliquer un libellé à la règle dans l'éditeur de proxys de l'interface de gestion en utilisant un nom différent et plus naturel.
L'élément <DisplayName>
est commun à toutes les règles.
Valeur par défaut | N/A |
Obligatoire ? | Facultatif. Si vous omettez <DisplayName> , la valeur de l'attribut name de la règle est utilisée. |
Type | Chaîne |
Élément parent | <PolicyElement> |
Éléments enfants | Aucun |
L'élément <DisplayName>
utilise la syntaxe suivante :
Syntaxe
<PolicyElement> <DisplayName>POLICY_DISPLAY_NAME</DisplayName> ... </PolicyElement>
Exemple
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
L'élément <DisplayName>
ne comporte aucun attribut ni élément enfant.
<IgnoreUnresolvedVariables>
Détermine si le traitement s'arrête lorsqu'une variable n'est pas résolue. Définissez la valeur sur true
pour ignorer les variables non résolues et poursuivre le traitement.
Valeur par défaut | Faux |
Obligatoire ? | Facultatif |
Type | Booléen |
Élément parent |
<SanitizeModelResponse>
|
Éléments enfants | Aucun |
<TemplateName>
Modèle Model Armor.
Valeur par défaut | N/A |
Obligatoire ? | Obligatoire |
Type | Chaîne |
Élément parent |
<SanitizeModelResponse>
|
Éléments enfants | Aucun |
L'élément <TemplateName>
utilise la syntaxe suivante :
Syntaxe
<ModelArmor> <TemplateName>projects/{project}/locations/{location}/templates/{template-name}</TemplateName> </ModelArmor>
Exemple
Cet exemple utilise des variables de flux Apigee pour renseigner les informations requises.
<ModelArmor> <TemplateName>projects/{organization.name}/locations/{system.region.name}/templates/{id}</TemplateName> </ModelArmor>
<UserPromptSource>
Emplacement de la charge utile pour le texte de l'invite utilisateur à extraire. Seules les valeurs de texte de chaîne sont acceptées.
Ce champ accepte la syntaxe du modèle de message Apigee, y compris l'utilisation de variables ou de fonctions de chemin JSON. Exemple :
{jsonpath('$.input.prompt.text',request.content,false)}
Valeur par défaut | {jsonPath($.contents[-1].parts[-1].text,request.content,true)} |
Obligatoire ? | Obligatoire |
Type | Chaîne |
Élément parent |
<SanitizeModelResponse>
|
Éléments enfants | Aucun |
<LLMResponseSource>
Emplacement de la charge utile à extraire de la réponse LLM. Seules les valeurs de texte de chaîne sont acceptées.
Ce champ accepte la syntaxe du modèle de message Apigee, y compris l'utilisation de variables ou de fonctions de chemin JSON. Exemple :
{jsonpath('$.input.prompt.text',request.content,false)}
Valeur par défaut | {jsonPath($.candidates[-1].content.parts,response.content,true)} |
Obligatoire ? | Obligatoire |
Type | Chaîne |
Élément parent |
<SanitizeModelResponse>
|
Éléments enfants | Aucun |
Variables de flux
Les variables de flux peuvent être utilisées pour configurer le comportement d'exécution dynamique des règles et des flux en fonction des en-têtes HTTP, du contenu des messages ou du contexte disponible dans le flux. Pour en savoir plus sur les variables de flux, consultez la documentation de référence sur les variables de flux.
La règle peut définir ces variables en lecture seule lors de l'exécution.
Nom de la variable | Description |
---|---|
SanitizeModelResponse.POLICY_NAME.templateUsed |
Indique le modèle d'armure de modèle utilisé. Par exemple :
projects/myproject/locations/us-west1/templates/mytemplate |
SanitizeModelResponse.POLICY_NAME.userPrompt |
Spécifie le contenu de l'invite utilisé pour l'appel de Model Armor afin de nettoyer le contenu. |
SanitizeModelResponse.POLICY_NAME.modelResponse |
Spécifie le contenu de la réponse LLM utilisé pour l'appel de Model Armor afin de nettoyer le contenu. |
SanitizeModelResponse.POLICY_NAME.responseFromModelArmor |
Spécifie la réponse JSON de Model Armor. Model Armor |
SanitizeModelResponse.POLICY_NAME.filterMatchState |
Indique si le filtre a été mis en correspondance. Les valeurs valides sont MATCH_FOUND et NO_MATCH_FOUND . |
SanitizeModelResponse.POLICY_NAME.invocationResult |
Champ indiquant le résultat de l'appel, quel que soit l'état de la correspondance. Les valeurs suivantes sont possibles :
|
SanitizeModelResponse.POLICY_NAME.raiFilterResult.executionState |
Résultat de l'exécution du filtre d'IA responsable. Les valeurs valides sont EXECUTION_SUCCESS et EXECUTION_SKIPPED . |
SanitizeModelResponse.POLICY_NAME.raiFilterResult.matchState |
État de la correspondance du filtre d'IA responsable. Les valeurs valides sont MATCH_FOUND et NO_MATCH_FOUND . |
SanitizeModelResponse.POLICY_NAME.sdpFilterResult.inspectResult.executionState |
État d'exécution du résultat de l'inspection du filtre SDP Les valeurs valides sont EXECUTION_SUCCESS et EXECUTION_SKIPPED . |
SanitizeModelResponse.POLICY_NAME.sdpFilterResult.inspectResult.matchState |
État de la correspondance des résultats de l'inspection du filtre SDP. Les valeurs valides sont MATCH_FOUND et NO_MATCH_FOUND . |
SanitizeModelResponse.POLICY_NAME.sdpFilterResult.deidentifyResult.executionState |
Filtre SDP permettant d'identifier l'état d'exécution des résultats. Les valeurs valides sont EXECUTION_SUCCESS et EXECUTION_SKIPPED . |
SanitizeModelResponse.POLICY_NAME.sdpFilterResult.deidentifyResult.matchState |
Filtre SDP permettant d'identifier l'état de la correspondance des résultats. Les valeurs valides sont MATCH_FOUND et NO_MATCH_FOUND . |
SanitizeModelResponse.POLICY_NAME.piAndJailbreakFilterResult.executionState |
État d'exécution des résultats de l'injection de requêtes et du filtre de jailbreak. Les valeurs valides sont EXECUTION_SUCCESS et EXECUTION_SKIPPED . |
SanitizeModelResponse.POLICY_NAME.piAndJailbreakFilterResult.matchState |
Les résultats du filtre d'injection de requêtes et de jailbreaking correspondent à l'état. Les valeurs valides sont MATCH_FOUND et NO_MATCH_FOUND . |
SanitizeModelResponse.POLICY_NAME.csamFilterFilterResult.executionState |
État d'exécution du filtre CSAM. Les valeurs valides sont EXECUTION_SUCCESS et EXECUTION_SKIPPED . |
SanitizeModelResponse.POLICY_NAME.csamFilterFilterResult.matchState |
État de la correspondance du filtre CSAM. Les valeurs valides sont MATCH_FOUND et NO_MATCH_FOUND . |
SanitizeModelResponse.POLICY_NAME.maliciousUriFilterResult.executionState |
État d'exécution du filtre d'URI malveillant. Les valeurs valides sont EXECUTION_SUCCESS et EXECUTION_SKIPPED . |
SanitizeModelResponse.POLICY_NAME.maliciousUriFilterResult.matchState |
État de la correspondance du filtre d'URI malveillant. Les valeurs valides sont MATCH_FOUND et NO_MATCH_FOUND . |
SanitizeModelResponse.POLICY_NAME.sanitizationMetadata.errorCode |
Code d'erreur personnalisé remplacé, le cas échéant, dans la réponse de Model Armor. |
SanitizeModelResponse.POLICY_NAME.sanitizationMetadata.errorMessage |
Code d'erreur personnalisé remplacé, le cas échéant, dans la réponse de Model Armor. |
SanitizeModelResponse.POLICY_NAME.csamFilterMatched/code> |
Valeur booléenne indiquant si le filtre CSAM a correspondu. |
SanitizeModelResponse.POLICY_NAME.maliciousURIs |
Liste des URI malveillants détectés par le filtre d'URI malveillants. |
SanitizeModelResponse.POLICY_NAME.maliciousURIsDetected |
Valeur booléenne indiquant si le filtre d'URI malveillant a correspondu. |
SanitizeModelResponse.POLICY_NAME.matchesFound |
Valeur booléenne indiquant si l'un des filtres a correspondu. |
SanitizeModelResponse.POLICY_NAME.promptInjectionDetected |
Valeur booléenne indiquant si le filtre d'injection d'invite a correspondu. |
SanitizeModelResponse.POLICY_NAME.promptInjectionConfidence |
Niveau de confiance de la détection de l'injection de requêtes. |
SanitizeModelResponse.POLICY_NAME.raiMatchesFound |
Valeur booléenne indiquant si le filtre RAI a correspondu. |
SanitizeModelResponse.POLICY_NAME.requestSentToModelArmor |
Valeur booléenne indiquant si une requête a été envoyée à Model Armor. |
SanitizeModelResponse.POLICY_NAME.sanitizeOperation |
Spécifie l'opération effectuée par la règle. Les valeurs autorisées sont SANITIZE_USER_PROMPT et SANITIZE_MODEL_RESPONSE . |
Informations de référence sur les erreurs
Cette section décrit les codes d'erreur et les messages d'erreur renvoyés, ainsi que les variables d'erreur définies par Apigee spécifiques à la règle <SanitizeModelResponse>
.
Ces informations sont importantes si vous développez des règles de défaillance afin de gérer les pannes. Pour en savoir plus, consultez les pages Ce que vous devez savoir à propos des erreurs liées aux règles et Gérer les pannes.
Erreurs d'exécution
Code d'erreur | État HTTP | Cause |
---|---|---|
steps.sanitize.model.response.FilterMatched |
400 |
Cette erreur se produit si l'invite utilisateur ne passe pas la vérification du modèle Model Armor. |
steps.sanitize.model.response.SanitizationResponseParsingFailed |
500 |
Cette erreur se produit si la réponse Model Armor ne peut pas être analysée. |
steps.sanitize.model.response.FailedToExtractUserPrompt |
500 |
Cette erreur se produit si l'extraction automatique de l'invite utilisateur pour la valeur par défaut a échoué. |
steps.sanitize.model.response.FailedToExtractLLMResponse |
500 |
Cette erreur se produit si l'extraction automatique de la réponse du modèle pour la valeur par défaut a échoué. |
steps.sanitize.model.response.InternalError |
500 |
Cette erreur se produit en cas d'erreur interne du serveur. |
steps.sanitize.model.response.ModelArmorTemplateNameExtractionFailed |
500 |
Cette erreur se produit si le nom du modèle ne peut pas être résolu. |
steps.sanitize.model.response.AuthenticationFailure |
500 |
Cette erreur se produit si le compte de service n'est pas autorisé à appeler l'API Model Armor. |
steps.sanitize.model.response.ModelArmorAPIFailed |
500 |
Cette erreur se produit si l'API Model Armor génère une erreur. |
steps.sanitize.model.response.ModelArmorCalloutError |
500 |
Cette erreur se produit si l'appel d'API Model Armor échoue. |
steps.sanitize.modelarmor.ServiceUnavailable |
500 |
Cette erreur se produit si le service Model Armor est indisponible. |
Erreurs de déploiement
Ces erreurs peuvent se produire lorsque vous déployez un proxy contenant cette règle.
Nom de l'erreur | Cause |
---|---|
The ModelArmor/TemplateName element is required. |
Se produit si l'élément <TemplateName> dans <ModelArmor> n'est pas présent. |
The TemplateName element value is required. |
Se produit si la valeur <TemplateName> est vide. |
Variables de panne
Ces variables sont définies lorsque cette règle déclenche une erreur au moment de l'exécution. Pour en savoir plus, consultez la section Ce que vous devez savoir sur les erreurs liées aux règles.
Variables | Lieu | Exemple |
---|---|---|
fault.name="FAULT_NAME" |
FAULT_NAME est le nom de l'erreur, tel qu'indiqué dans le tableau Erreurs d'exécution ci-dessus. Le nom d'erreur est la dernière partie du code d'erreur. | fault.name Matches "UnresolvedVariable" |
SanitizeModelResponse.POLICY_NAME.failed |
POLICY_NAME est le nom spécifié par l'utilisateur de la règle qui a provoqué l'erreur. | SanitizeModelResponse.sanitize-response.failed = true |
Exemple de réponse d'erreur
{ "fault": { "faultstring": "SanitizeModelResponse[sanitize-response]: unable to resolve variable [variable_name]", "detail": { "errorcode": "steps.sanitizemodelresponse.UnresolvedVariable" } } }
Exemple de règle de défaillance
<FaultRule name="SanitizeModelResponse Faults"> <Step> <Name>SMR-CustomSetVariableErrorResponse</Name> <Condition>(fault.name = "SetVariableFailed")</Condition> </Step> <Condition>(sanitizemodelresponse.failed = true)</Condition> </FaultRule>
Codes et messages d'erreur du modèle Model Armor
Le modèle Model Armor permet de remplacer les codes et les messages d'erreur générés par les requêtes API de la règle SanitizeModelResponse. Si l'utilisateur définit les forçages, les codes et messages d'erreur Model Armor renseignent les variables de flux.
Par exemple, une réponse avec des codes et des messages d'erreur Model Armor peut ressembler à ce qui suit :
{ "sanitizationResult": { "filterMatchState": "MATCH_FOUND", "filterResults": {...}, "sanitizationMetadata": { "errorCode": "890", "errorMessage": "get out" }, "invocationResult": "SUCCESS" } }
Schémas
Chaque type de règle est défini par un schéma XML (.xsd
). Pour référence, des schémas de règles sont disponibles sur GitHub.