Cette page s'applique à Apigee et à Apigee hybrid.
Consultez la documentation d'
Apigee Edge.
Présentation
La stratégie SemanticCacheLookup est une stratégie de mise en cache avancée conçue pour optimiser les performances des charges de travail d'IA, en particulier celles impliquant des grands modèles de langage (LLM).
La règle utilise l' API Vertex AI d'embeddings de texte pour générer des embeddings pour le texte et Vector Search pour trouver des requêtes similaires en fonction de la similarité sémantique, plutôt que de correspondances exactes.
La règle SemanticCacheLookup peut réduire les temps de réponse des requêtes répétées et optimiser les coûts en réduisant le volume d'appels aux LLM.
Cette règle est utilisée avec la règle SemanticCachePopulate.
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 SemanticCacheLookup, vous devez effectuer les tâches suivantes :
- Créez un projet Vertex AI.
- Créez un index Vector Search.
- Créez un point de terminaison Vertex AI pour l'index.
- Créez une stratégie SemanticCachePopulate.
Pour en savoir plus sur la réalisation de ces tâches, consultez Premiers pas avec les règles de mise en cache sémantique.
Rôles requis
Pour obtenir les autorisations nécessaires pour appliquer et utiliser la règle SemanticCacheLookup, demandez à votre administrateur de vous accorder le rôle IAM Utilisateur de la plate-forme AI (roles/aiplatform.user
) 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 la page 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 Compute Engine, Vertex AI, and Cloud Storage APIs.
Élément <SemanticCacheLookup>
Définit une règle SemanticCacheLookup.
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> <UserPromptSource> <Embeddings> <SimilaritySearch> |
L'élément <SemanticCacheLookup>
utilise la syntaxe suivante :
Syntaxe
L'élément <SemanticCacheLookup>
utilise la syntaxe suivante :
<SemanticCacheLookup async="false" continueOnError="false" enabled="true" name="SCL-lookup"> <DisplayName>SCL-lookup</DisplayName> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <UserPromptSource>{jsonPath($.contents[-1].parts[-1].text,request.content,true)}</UserPromptSource> <Embeddings> <VertexAI> <URL>https://{LOCATION}-aiplatform.googleapis.com/v1/projects/{PROJECT_ID}/locations/{LOCATION}/publishers/google/models/{MODEL_ID}:predict</URL> </VertexAI> </Embeddings> <SimilaritySearch> <VertexAI> <URL>https://{PUBLIC_DOMAIN_NAME}/v1/projects/{PROJECT_ID}/locations/{LOCATION}/indexEndpoints/{INDEX_ENDPOINT_ID}:findNeighbors</URL> <DeployedIndexID>{DEPLOYED_INDEX_ID}</DeployedIndexID> <Threshold>0.95</Threshold> </VertexAI> </SimilaritySearch> </SemanticCacheLookup>
Règle par défaut
L'exemple suivant montre les paramètres par défaut lorsque vous ajoutez une règle SemanticCacheLookup à votre flux dans l'interface utilisateur d'Apigee :
<SemanticCacheLookup async="false" continueOnError="false"enabled="true" name="SCL-lookup"> <DisplayName>SCL-lookup</DisplayName> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <UserPromptSource>{jsonPath($.contents[-1].parts[-1].text,request.content,true)}</UserPromptSource> <Embeddings> <VertexAI> <URL>https://{LOCATION}-aiplatform.googleapis.com/v1/projects/{PROJECT_ID}/locations/{LOCATION}/publishers/google/models/{MODEL_ID}:predict </URL> </VertexAI> </Embeddings> <SimilaritySearch> <VertexAI> <URL>https://{PUBLIC_DOMAIN_NAME}/v1/projects/{PROJECT_ID}/locations/{LOCATION}/indexEndpoints/{INDEX_ENDPOINT_ID}:findNeighbors</URL> <Threshold>0.9</Threshold> <DeployedIndexID>{DEPLOYED_INDEX_ID}</DeployedIndexID> </VertexAI> </SimilaritySearch> </SemanticCacheLookup>
Lorsque vous insérez une nouvelle règle SemanticCacheLookup dans 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 <SemanticCacheLookup>
:
Élément enfant | Obligatoire ? | Description |
---|---|---|
<DisplayName> |
Facultatif | Nom de la règle. |
<IgnoreUnresolvedVariables> |
Facultatif | 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.
|
<UserPromptSource> |
Facultatif | 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($.contents[-1].parts[-1].text,request.content,true)} |
<Embeddings> |
Obligatoire | Élément contenant les informations requises pour générer des représentations vectorielles continues. |
<SimilaritySearch> |
Obligatoire | Élément contenant les informations requises pour effectuer des recherches de similarité.
Pour en savoir plus, consultez Interroger un index public pour obtenir les voisins les plus proches. |
Référence d'élément enfant
Cette section décrit les éléments enfants de <SemanticCacheLookup>
.
<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.
IgnoreUnresolvedVariables
n'est pas applicable lorsque <DefaultValue>
est fourni.
Valeur par défaut | Faux |
Obligatoire ? | Facultatif |
Type | Booléen |
Élément parent |
<SemanticCacheLookup>
|
Éléments enfants | Aucun |
<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($.contents[-1].parts[-1].text,request.content,true)}
Valeur par défaut | {jsonPath($.contents[-1].parts[-1].text,request.content,true)} |
Obligatoire ? | Facultatif |
Type | Chaîne |
Élément parent |
<SemanticCacheLookup>
|
Éléments enfants | Aucun |
<Embeddings>
Cet élément contient les informations requises pour générer des représentations vectorielles continues de texte.
Valeur par défaut | N/A |
Obligatoire ? | Facultatif |
Type | Chaîne |
Élément parent |
<SemanticCacheLookup>
|
Éléments enfants |
<VertexAI>
|
L'élément <Embeddings>
utilise la syntaxe suivante :
<Embeddings> <VertexAI> <URL>https://{LOCATION}-aiplatform.googleapis.com/v1/projects/{PROJECT_ID}/locations/{LOCATION}/publishers/google/models/{MODEL_ID}:predict</URL> </VertexAI> </Embeddings>
<VertexAI> (enfant de <Embeddings>
)
Contient l'élément <URL> pour les attributs spécifiques à Vertex AI.
Valeur par défaut | N/A |
Obligatoire ? | Obligatoire |
Type | Chaîne |
Élément parent |
<Embeddings>
|
Éléments enfants |
<URL> |
L'élément VertexAI
utilise la syntaxe suivante :
<VertexAI> <URL>https://{LOCATION}-aiplatform.googleapis.com/v1/projects/{PROJECT_ID}/locations/{LOCATION}/publishers/google/models/{MODEL_ID}:predict</URL> </VertexAI>
<URL> (enfant de <VertexAI>
)
URL utilisée pour générer des embeddings textuels. Consultez la section Modèles compatibles pour obtenir la liste des modèles pouvant fournir des représentations vectorielles continues de texte pour la règle SemanticCacheLookup.
Valeur par défaut | N/A |
Obligatoire ? | Obligatoire |
Type | Chaîne |
Élément parent |
<VertexAI>
|
Éléments enfants |
Aucune |
L'élément URL
utilise la syntaxe suivante :
<URL>https://{LOCATION}-aiplatform.googleapis.com/v1/projects/{PROJECT_ID}/locations/{LOCATION}/publishers/google/models/{MODEL_ID}:predict</URL>
<SimilaritySearch>
Cet élément contient les informations requises pour effectuer des recherches de similarité.
Pour en savoir plus, consultez Interroger un index public pour obtenir les voisins les plus proches.
Valeur par défaut | N/A |
Obligatoire ? | Obligatoire |
Type | Chaîne |
Élément parent |
<SemanticCacheLookup>
|
Éléments enfants |
<VertexAI> |
L'élément <SimilaritySearch>
utilise la syntaxe suivante :
<SimilaritySearch> <VertexAI> <URL>https://{PUBLIC_DOMAIN_NAME}/v1/projects/{PROJECT_ID}/locations/{LOCATION}/indexEndpoints/{INDEX_ENDPOINT_ID}:findNeighbors </URL> <Threshold>0.9</Threshold> <DeployedIndexID>{DEPLOYED_INDEX_ID}</DeployedIndexID> </VertexAI> </SimilaritySearch>
<VertexAI> (enfant de <SimilaritySearch>
)
Contient l'élément <URL> pour les attributs spécifiques à Vertex AI.
Valeur par défaut | N/A |
Obligatoire ? | Obligatoire |
Type | Chaîne |
Élément parent |
<SimilaritySearch>
|
Éléments enfants |
<URL> |
L'élément VertexAI
utilise la syntaxe suivante :
<VertexAI> <URL>https://{PUBLIC_DOMAIN_NAME}/v1/projects/{PROJECT_ID}/locations/{LOCATION}/indexEndpoints/{INDEX_ENDPOINT_ID}:findNeighbors</URL> <Threshold>0.9</Threshold> <DeployedIndexID>{DEPLOYED_INDEX_ID}</DeployedIndexID> </VertexAI>
Le tableau suivant fournit une description détaillée des éléments enfants de <VertexAI>
.
Élément enfant | Obligatoire ? | Description |
---|---|---|
<URL> |
Obligatoire | Chaîne URL utilisée pour effectuer des recherches de similarité. Le point de données le plus proche, en fonction du seuil de similarité, sera le seul utilisé. |
<Threshold> |
Facultatif | Chaîne Score de similarité utilisé pour déterminer si deux requêtes sont considérées comme correspondant. Valeur comprise entre 0 et 1. La valeur par défaut est 0,9. |
<DeployedIndexID> |
Obligatoire | Chaîne ID de l'index déployé sur le point de terminaison d'index utilisé pour le cache sémantique. |
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 |
---|---|
request.content |
Contient le contenu complet de la requête API entrante. |
request.url |
Inclut l'URL de la requête API entrante. |
semanticcache.lookup.policy_name.user_prompt |
Contient des composants spécifiques extraits de la requête, qui sont utilisés pour générer des représentations vectorielles continues ou effectuer des recherches de similarité. |
semanticcache.lookup.policy_name.embeddings_request |
Contient la charge utile de la requête envoyée à l'API Vertex AI Embeddings pour générer des embeddings de texte pour le texte d'entrée. |
semanticcache.lookup.policy_name.embeddings_response |
Contient la réponse de l'API Vertex AI Embeddings, qui inclut les représentations vectorielles continues de texte générées. |
semanticcache.lookup.policy_name.dense_embeddings |
Contient les valeurs numériques réelles des représentations vectorielles continues générées par l'API Vertex AI Embeddings. |
semanticcache.lookup.policy_name.is_nearest_neighbor_hit |
Indique si un voisin le plus proche a été trouvé dans la base de données vectorielle pour la requête donnée et si le point de données atteint le seuil de similarité. |
semanticcache.lookup.policy_name.cache_hit |
Indique si la réponse a été trouvée dans le cache sémantique. |
semanticcache.lookup.policy_name.cached_llm_response |
Inclut la réponse récupérée à partir du cache sémantique (si un cache a été trouvé). |
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 <SemanticCacheLookup>
. 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
Ces erreurs peuvent se produire lors de l'exécution de la règle.
Code d'erreur | État HTTP | Cause |
---|---|---|
steps.semanticcache.lookup.MessageTemplateExtractionFailed |
400 |
Échec de l'extraction des données de la requête à l'aide de l'expression JSONPath. |
steps.semanticcache.lookup.FailedToExtractUserPrompt |
500 |
Impossible d'extraire l'invite utilisateur de la requête d'API. |
steps.semanticcache.lookup.EmbeddingsServiceUnavailable |
400 |
Le service Vertex AI Embeddings est actuellement indisponible. |
steps.semanticcache.lookup.EmbeddingsAPIFailed |
400 |
Échec du service d'embeddings Vertex AI. |
steps.semanticcache.lookup.VectorSearchServiceUnavailable |
400 |
Le service Vertex AI Vector Search n'est actuellement pas disponible. |
steps.semanticcache.lookup.VectorSearchAPIFailed |
400 |
Le service Vertex AI Vector Search a échoué. |
steps.semanticcache.lookup.AuthenticationFailure |
500 |
Le compte de service ne dispose pas des autorisations requises. |
steps.semanticcache.lookup.InternalError |
500 |
Une erreur inattendue s'est produite dans la stratégie SemanticCacheLookup. |
steps.semanticcache.lookup.CalloutError |
500 |
L'appel du service Vertex AI a échoué. |
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 Embeddings/VertexAI element is required. |
Se produit si l'élément <VertexAI> de <Embeddings> est vide. |
The SimilaritySearch/VertexAI element is required. |
Se produit si l'élément <VertexAI> de <SimilaritySearch> est vide. |
The Embeddings/URL element is required. |
Se produit si l'élément <URL> de <Embeddings> est vide. |
The SimilaritySearch/URL element is required. |
Se produit si l'élément <URL> de <SimilaritySearch> est vide. |
Embeddings URL {url} is invalid. |
Se produit si l'élément <URL> de <Embeddings> est vide ou non valide. |
The SimilaritySearch URL {url} is invalid. |
Se produit si l'élément <URL> de <SimilaritySearch> est vide ou non valide. |
The scheme {http-scheme} of Embeddings URL {url} must be one of http, https. |
Se produit si le schéma http de l'élément <URL> des représentations vectorielles continues n'est pas valide. |
The scheme {http-scheme} of SimilaritySearch URL {url} must be one of http, https. |
Se produit si le schéma http de l'élément SimilaritySearch <URL> n'est pas valide. |
SimilaritySearch/Threshold element must be >= 0 and <= 1. |
Si l'attribut n'est pas compris entre 0 et 1, le déploiement du proxy d'API échoue. |
SimilaritySearch/DeployedIndexID element is required. |
Se produit si l'élément <DeployedIndexID> de <SimilaritySearch> est vide. |
SimilaritySearch/DeployedIndexID element must not contain spaces. |
Se produit si l'élément <DeployedIndexID> de <SimilaritySearch> contient des espaces. |
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" |
semanticcachelookup.POLICY_NAME.failed |
POLICY_NAME est le nom spécifié par l'utilisateur de la règle qui a provoqué l'erreur. | semanticcachelookup.SC-lookup.failed = true |
Exemple de réponse d'erreur
{ "fault": { "faultstring": "SemanticCacheLookup[SC-lookup]: unable to resolve variable [variable_name]", "detail": { "errorcode": "steps.semanticcachelookup.UnresolvedVariable" } } }
Exemple de règle de défaillance
<FaultRule name="SemanticCacheLookup Faults"> <Step> <Name>SCL-CustomSetVariableErrorResponse</Name> <Condition>(fault.name = "SetVariableFailed")</Condition> </Step> <Condition>(semanticcachelookup.failed = true)</Condition> </FaultRule>
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.