Stratégie SanitizeModelResponse

Règle extensible

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 offensants 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 et détecter les contenus nuisibles ou offensants. Elle offre une protection native pour les clients et les charges de travail d'IA à l'aide d'Apigee. Model Armor est un service Google Cloud qui offre des mesures de sécurité 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 SanitizeUserPrompt.

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 règle SanitizeModelResponse, vous devez effectuer les tâches suivantes :

  • Créer 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 règle 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 :

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

Activez les API Model Armor, si elles ne sont pas déjà activées.

Rôles requis pour activer les API

Pour activer des API, vous devez disposer de l'autorisation serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation via le rôle Propriétaire (roles/owner). Sinon, vous pouvez l'obtenir via le rôle Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles.

Activer les API

É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>
<ModelArmor>
<UserPromptSource>
<LLMResponseSource>
<FunctionCallSource>
<ContinuousScan>

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)}</UserPromptSource>
  <LLMResponseSource>{jsonPath('$.candidates[-1].content.parts',response.content)}</LLMResponseSource>
  <FunctionCallSource>{jsonPath('$.candidates[-1].content.parts[-1].functionCall.args',response.content)}</FunctionCallSource>
  <ContinuousScan>false</ContinuousScan>
</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êtes 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)}</UserPromptSource>
  <LLMResponseSource>{jsonPath('$.candidates[-1].content.parts',response.content)}</LLMResponseSource>
  <FunctionCallSource>{jsonPath('$.candidates[-1].content.parts[-1].functionCall.args',response.content)}</FunctionCallSource>
</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 name peut contenir des lettres, des chiffres, des espaces, des tirets, des traits de soulignement et des points. Cette valeur ne peut pas dépasser 255 caractères.

Vous pouvez également utiliser l'élément <DisplayName> pour ajouter un libellé à la règle dans l'éditeur de proxy de l'interface utilisateur de gestion avec un nom différent, en langage naturel.

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.
<ModelArmor> Obligatoire Contient les informations requises pour spécifier le modèle Model Armor.
<UserPromptSource> Facultatif Emplacement de la charge utile à partir duquel extraire le texte du prompt utilisateur. La règle envoie ce texte à Model Armor en tant que contexte pour le nettoyage de la réponse. Si vous omettez cet élément, la règle n'envoie que la réponse du LLM à Model Armor pour assainissement, et la règle est déployée et exécutée correctement. N'accepte que les valeurs de texte de type chaîne.

Ce champ est compatible avec la syntaxe des modèles de message Apigee, y compris l'utilisation de variables ou de fonctions JSONPath.

Exemple :

{jsonpath('$.contents[-1].parts[-1].text',request.content,false)}
<LLMResponseSource> Facultatif Emplacement de la charge utile pour l'extraction du texte de réponse du LLM. En cas d'omission, le chemin JSON generateContent par défaut d'Agent Platform est appliqué : {jsonPath('$.candidates[-1].content.parts',response.content)}. Seules les valeurs de texte de chaîne sont acceptées.

Ce champ est compatible avec la syntaxe des modèles de message Apigee, y compris l'utilisation de variables ou de fonctions JSONPath.

Exemple :

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

<FunctionCallSource> Facultatif Emplacement des arguments d'appel de fonction à extraire des réponses du modèle. La règle utilise cet élément comme solution de secours lorsque <LLMResponseSource> renvoie une valeur vide lors des tours d'appel de fonction.

Valeur par défaut : {jsonPath('$.candidates[-1].content.parts[-1].functionCall.args',response.content)}

<ContinuousScan> Facultatif

Indique s'il faut vérifier l'intégralité de la réponse en streaming (SSE), en ne transmettant chaque événement au client qu'après sa vérification par Model Armor. S'applique uniquement lorsque la règle s'exécute dans un EventFlow SSE.

Valeur par défaut : false

Nettoyer les réponses des événements envoyés par le serveur (SSE) en streaming

Dans un EventFlow SSE, utilisez <ContinuousScan> pour choisir l'une des deux options : vérifier chaque événement séparément (false, par défaut) ou vérifier l'intégralité du flux à l'aide de la nettoyage en streaming de Model Armor (true). Avec true, la réponse complète se termine généralement plus tôt, car la stratégie vérifie le flux sur une seule connexion pendant que le modèle est encore en cours de génération, au lieu d'effectuer une requête distincte pour chaque événement. Cependant, le délai de génération du premier jeton peut être plus long. Pour ajouter la règle à un EventFlow, consultez Utiliser une règle Apigee Model Armor dans un EventFlow.

Le tableau suivant compare les deux options :

Comportement false (par défaut) : chaque événement séparément true : flux entier
Comment le texte est vérifié Chaque événement individuellement, sans le texte des événements précédents. Le flux entier, avec le texte des événements précédents comme contexte.
Lorsque le client reçoit un événement Après la vérification de cet événement. Après que Model Armor l'a vérifié.
Requêtes Model Armor Un par événement. Une par réponse.
Limite de jetons Par requête. Aucune limite n'est imposée pour le nombre total de jetons dans une réponse.

L'élément <ContinuousScan> n'existe que dans la règle SanitizeModelResponse, et non dans la règle SanitizeUserPrompt.

Configurer l'analyse continue

Définissez <ContinuousScan>true</ContinuousScan> et faites pointer <LLMResponseSource> vers le texte de l'événement actuel, response.event.current.data :

<SanitizeModelResponse async="false" continueOnError="false"
    enabled="true" name="SMR-ContinuousScan">
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <DisplayName>SMR-ContinuousScan</DisplayName>
  <ModelArmor>
    <TemplateName>projects/{project}/locations/{location}/templates/{template-name}</TemplateName>
  </ModelArmor>
  <LLMResponseSource>{jsonPath('$.candidates[-1].content.parts[-1].text',response.event.current.data,true)}</LLMResponseSource>
  <ContinuousScan>true</ContinuousScan>
</SanitizeModelResponse>

Utilisez l'expression <LLMResponseSource> correspondant au format de streaming de votre modèle :

Format de streaming <LLMResponseSource>
Gemini (streamGenerateContent?alt=sse) {jsonPath('$.candidates[-1].content.parts[-1].text',response.event.current.data,true)}
Complétions de chat compatibles avec OpenAI {jsonPath('$.choices[-1].delta.content',response.event.current.data,true)}
Anthropic Claude {jsonPath('$.delta.text',response.event.current.data,true)}

Correspondances et erreurs

Lorsque <ContinuousScan> est défini sur true, les erreurs sont soit temporaires, soit définitives :

Type Exemples Comment sont-elles traitées ?
Transient Une connexion interrompue à Model Armor ou une indisponibilité temporaire de Model Armor. Nouvelle tentative effectuée. Apigee se reconnecte et vérifie à nouveau le texte non encore diffusé, de sorte qu'aucun événement n'est ignoré ni diffusé sans vérification. Cela se produit jusqu'à deux fois par réponse, quel que soit continueOnError. Si l'échec persiste, l'erreur devient fatale.
Terminal Une correspondance de filtre, une erreur d'authentification ou d'autorisation, un dépassement du quota Model Armor ou l'absence de réponse de Model Armor dans le délai de 60 secondes. Aucune nouvelle tentative. La vérification se termine et continueOnError détermine ce que le client reçoit, comme décrit dans le tableau suivant.

Lorsque <ContinuousScan> est défini sur true, la règle ne fournit pas le texte anonymisé (masqué) par Sensitive Data Protection (SDP) à partir de Model Armor. Apigee publie les événements sans les modifier et gère une correspondance d'anonymisation comme n'importe quelle autre correspondance.

En cas d'erreur fatale, l'attribut continueOnError détermine ce que le client reçoit :

continueOnError Ce que le client reçoit
false (par défaut) Le client reçoit les événements qui ont réussi la vérification, puis un événement SSE avec l'erreur, par exemple steps.sanitize.model.response.FilterMatched, steps.sanitize.modelarmor.ModelArmorAPIFailed ou steps.sanitize.modelarmor.AuthenticationFailure. Le flux se termine ensuite. Le client ne reçoit aucun texte non vérifié ou correspondant.
true Le client reçoit la réponse complète, y compris le texte correspondant et tout ce qui suit. Les erreurs fatales ne génèrent pas d'erreur, et le reste de la réponse est transmis sans vérification. La règle définit SanitizeModelResponse.POLICY_NAME.failed sur true afin qu'une étape ultérieure de EventFlow puisse agir dessus.

Lorsque <ContinuousScan> est défini sur false, chaque événement est une requête distincte et aucune tentative de reconnexion n'est effectuée. Avec continueOnError="true", une correspondance n'affecte que cet événement, et la règle vérifie toujours les événements ultérieurs.

Quotas et limites

  • Avec <ContinuousScan>true</ContinuousScan>, une réponse entière diffusée en streaming compte comme une seule requête par rapport au quota Model Armor de votre projet, plus une pour chaque reconnexion. Avec false, chaque événement SSE est une requête distincte.
  • Avec <ContinuousScan>true</ContinuousScan>, il n'y a aucune limite sur le nombre total de jetons dans une réponse. Sinon, chaque requête est soumise aux limites de jetons de Model Armor.

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

<ModelArmor>

Contient la configuration du modèle Model Armor. L'élément enfant <TemplateName> spécifie le modèle Model Armor utilisé pour nettoyer la réponse du LLM.

Valeur par défaut N/A
Obligatoire ? Obligatoire
Type Objet complexe
Élément parent <SanitizeModelResponse>
Éléments enfants <TemplateName>

L'élément <ModelArmor> utilise la syntaxe suivante :

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

<TemplateName>

Modèle Model Armor.

Valeur par défaut N/A
Obligatoire ? Obligatoire
Type Chaîne
Élément parent <ModelArmor>
É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 à partir duquel extraire le texte du prompt utilisateur. Si vous fournissez cet élément, la règle envoie le prompt utilisateur à Model Armor en même temps que la réponse du modèle pour un nettoyage contextuel. Si vous omettez cet élément, la stratégie n'assainit que la réponse du modèle, et elle est déployée et exécutée correctement. N'accepte que les valeurs de texte de type chaîne.

Ce champ est compatible avec la syntaxe des modèles de message Apigee, y compris l'utilisation de variables ou de fonctions JSONPath. Exemple :

{jsonpath('$.input.prompt.text',request.content,false)}
Valeur par défaut N/A
Obligatoire ? Facultatif
Type Chaîne
Élément parent <SanitizeModelResponse>
Éléments enfants Aucun

<LLMResponseSource>

Emplacement de la charge utile de la réponse LLM à extraire. Seules les valeurs de texte de chaîne sont acceptées.

Ce champ est compatible avec la syntaxe des modèles de message Apigee, y compris l'utilisation de variables ou de fonctions JSONPath. Exemple :

{jsonpath('$.input.prompt.text',request.content,false)}
Valeur par défaut {jsonPath('$.candidates[-1].content.parts',response.content)}
Obligatoire ? Facultatif
Type Chaîne
Élément parent <SanitizeModelResponse>
Éléments enfants Aucun

<FunctionCallSource>

Emplacement des arguments d'appel de fonction à extraire de la réponse du modèle. La règle utilise cet élément comme solution de secours lorsque <LLMResponseSource> renvoie une valeur vide, ce qui se produit lorsque le modèle renvoie un appel de fonction au lieu d'un contenu textuel.

Ce champ accepte la syntaxe des modèles de message, y compris les fonctions JSONPath.

Valeur par défaut {jsonPath('$.candidates[-1].content.parts[-1].functionCall.args',response.content)}
Obligatoire ? Facultatif
Type Chaîne
Élément parent <SanitizeModelResponse>
Éléments enfants Aucun

<ContinuousScan>

Définissez cette option sur true pour vérifier l'intégralité de la réponse en streaming (SSE) en tant que flux unique, à l'aide du nettoyage du streaming de Model Armor. La règle vérifie chaque événement ainsi que le texte de tous les événements précédents, et le client reçoit chaque événement entier et inchangé, uniquement après que Model Armor l'a vérifié. La règle ne fournit pas le texte anonymisé (masqué) par Sensitive Data Protection (SDP) à partir de Model Armor.

Si la valeur est false ou si elle est omise, la règle vérifie chaque événement séparément. L'élément ne s'applique que lorsque la règle s'exécute dans un EventFlow SSE et n'a aucun effet ailleurs. Pour en savoir plus, consultez Nettoyer les réponses des événements envoyés par le serveur (SSE) en streaming.

Valeur par défaut Faux
Obligatoire ? Facultatif
Type Booléen
Élément parent <SanitizeModelResponse>
Éléments enfants Aucun

L'élément <ContinuousScan> utilise la syntaxe suivante :

<ContinuousScan>true</ContinuousScan>

Variables de flux

Les variables de flux peuvent être utilisées pour configurer un comportement d'exécution dynamique pour les règles et les 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.

Cette règle fournit l'ensemble de variables de flux en lecture seule suivant lors de l'exécution. Vous pouvez utiliser ces variables de flux avec la règle DataCapture pour créer des rapports d'analyse personnalisés. Pour en savoir plus, consultez Collecter des données client avec la règle DataCapture.

Nom de la variable Description
SanitizeModelResponse.POLICY_NAME.templateUsed Spécifie le modèle Model Armor utilisé. Par exemple : projects/myproject/locations/us-west1/templates/mytemplate
SanitizeModelResponse.POLICY_NAME.userPrompt Spécifie le contenu du prompt utilisé pour l'appel à Model Armor afin de nettoyer le contenu.
SanitizeModelResponse.POLICY_NAME.modelResponse Spécifie le contenu de la réponse du LLM utilisé pour l'appel à Model Armor afin de nettoyer le contenu.
SanitizeModelResponse.POLICY_NAME.responseFromModelArmor Spécifie la réponse JSON de Model Armor. Lorsque <ContinuousScan> est défini sur true, contient la réponse la plus récente.
SanitizeModelResponse.POLICY_NAME.filterMatchState Indique si le filtre a été mis en correspondance. Les valeurs autorisées 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. Il peut avoir les éléments suivants :
  • RÉUSSITE : tous les filtres ont bien été exécutés.
  • PARTIAL : certains filtres ont été ignorés ou n'ont pas pu être exécutés.
  • ÉCHEC : tous les filtres ont été ignorés ou n'ont pas pu être exécutés.
SanitizeModelResponse.POLICY_NAME.raiFilterResult.executionState Résultat de l'exécution du filtre d'IA responsable. Les valeurs autorisées sont EXECUTION_SUCCESS et EXECUTION_SKIPPED.
SanitizeModelResponse.POLICY_NAME.raiFilterResult.matchState État de correspondance du filtre d'IA responsable. Les valeurs autorisées 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 autorisées sont EXECUTION_SUCCESS et EXECUTION_SKIPPED.
SanitizeModelResponse.POLICY_NAME.sdpFilterResult.inspectResult.matchState État de correspondance du résultat de l'inspection du filtre SDP. Les valeurs autorisées sont MATCH_FOUND et NO_MATCH_FOUND.
SanitizeModelResponse.POLICY_NAME.sdpFilterResult.deidentifyResult.executionState État d'exécution du résultat de l'anonymisation du filtre SDP. Les valeurs autorisées sont EXECUTION_SUCCESS et EXECUTION_SKIPPED.
SanitizeModelResponse.POLICY_NAME.sdpFilterResult.deidentifyResult.matchState État de correspondance du résultat de l'anonymisation du filtre SDP. Les valeurs autorisées sont MATCH_FOUND et NO_MATCH_FOUND.
SanitizeModelResponse.POLICY_NAME.piAndJailbreakFilterResult.executionState État d'exécution des résultats du filtre d'injection de prompt et de jailbreaking. Les valeurs autorisées sont EXECUTION_SUCCESS et EXECUTION_SKIPPED.
SanitizeModelResponse.POLICY_NAME.piAndJailbreakFilterResult.matchState État de correspondance des résultats du filtre d'injection de prompt et de jailbreaking. Les valeurs autorisées sont MATCH_FOUND et NO_MATCH_FOUND.
SanitizeModelResponse.POLICY_NAME.csamFilterFilterResult.executionState État d'exécution du filtre de contenus d'abus sexuels sur mineurs. Les valeurs autorisées sont EXECUTION_SUCCESS et EXECUTION_SKIPPED.
SanitizeModelResponse.POLICY_NAME.csamFilterFilterResult.matchState État de correspondance du filtre CSAM. Les valeurs autorisées sont MATCH_FOUND et NO_MATCH_FOUND.
SanitizeModelResponse.POLICY_NAME.maliciousUriFilterResult.executionState État d'exécution du filtre d'URI malveillants. Les valeurs autorisées sont EXECUTION_SUCCESS et EXECUTION_SKIPPED.
SanitizeModelResponse.POLICY_NAME.maliciousUriFilterResult.matchState État de correspondance du filtre d'URI malveillants. Les valeurs autorisées sont MATCH_FOUND et NO_MATCH_FOUND.
SanitizeModelResponse.POLICY_NAME.sanitizationMetadata.errorCode Code d'erreur personnalisé remplacé s'il est présent dans la réponse de Model Armor.
SanitizeModelResponse.POLICY_NAME.sanitizationMetadata.errorMessage Code d'erreur personnalisé remplacé s'il est présent dans la réponse de Model Armor.
SanitizeModelResponse.POLICY_NAME.csamFilterMatched Valeur booléenne indiquant si le filtre de contenus d'abus sexuels sur mineurs a trouvé une correspondance.
SanitizeModelResponse.POLICY_NAME.maliciousURIs Liste ajoutée d'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 trouvé une correspondance.
SanitizeModelResponse.POLICY_NAME.matchesFound Valeur booléenne indiquant si l'un des filtres correspond.
SanitizeModelResponse.POLICY_NAME.promptInjectionDetected Valeur booléenne indiquant si le filtre d'injection de prompt a trouvé une correspondance.
SanitizeModelResponse.POLICY_NAME.promptInjectionConfidence Niveau de confiance de la détection d'injection de prompt.
SanitizeModelResponse.POLICY_NAME.raiMatchesFound Valeur booléenne indiquant si le filtre d'IA responsable a trouvé une correspondance.
SanitizeModelResponse.POLICY_NAME.requestSentToModelArmor Spécifie la requête JSON envoyée à Model Armor. Lorsque <ContinuousScan> est défini sur true, contient la requête la plus récente.
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.
SanitizeModelResponse.POLICY_NAME.streamReplacements Spécifie le nombre de fois où la règle s'est reconnectée à Model Armor pendant la réponse lorsque <ContinuousScan> est défini sur true. Défini uniquement si la règle a été reconnectée.
SanitizeModelResponse.POLICY_NAME.lastStreamReplacementCause Spécifie l'erreur à l'origine de la dernière reconnexion lorsque <ContinuousScan> est défini sur true. Défini uniquement si la règle a été reconnectée.

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 le prompt 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 de Model Armor ne peut pas être analysée.
steps.sanitize.model.response.FailedToExtractUserPrompt 500 Cette erreur se produit si l'extraction automatique de la requête 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 renvoie une erreur.
steps.sanitize.model.response.ModelArmorCalloutError 500 Cette erreur se produit si l'appel de l'API Model Armor échoue.
steps.sanitize.modelarmor.ServiceUnavailable 500 Cette erreur se produit si le service Model Armor n'est pas disponible.

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>

Code d'erreur et messages d'erreur du modèle Model Armor

Le modèle Model Armor permet de remplacer les codes d'erreur 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 remplacements, les codes d'erreur et les messages d'erreur Model Armor renseignent les variables de flux.

Par exemple, une réponse contenant des codes d'erreur et des messages Model Armor peut se présenter comme 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.