Ancrage avec Elasticsearch

Cette page explique comment utiliser votre instance Elasticsearch pour ancrer les réponses sur vos données.

Ancrer Gemini avec Elasticsearch

L'ancrage consiste à utiliser des ensembles de données publics et privés pour fournir un contexte et des faits permettant d'ancrer les réponses d'un grand modèle de langage (LLM). En ancrant avec Elasticsearch, vous pouvez exploiter vos index Elasticsearch existants pour améliorer la qualité et la fiabilité des résultats de Gemini, réduire les hallucinations et vous assurer que les réponses sont pertinentes par rapport à vos données. Cela vous permet de créer des applications RAG puissantes, telles que :

  • Résumés de recherche génératifs
  • Chatbots de questions/réponses avec des données d'entreprise
  • Agents ancrés dans vos données

Vous pouvez ancrer une réponse sur un maximum de 10 sources de données à la fois. Vous pouvez combiner l'ancrage avec Elasticsearch et l'ancrage avec la recherche Google pour associer le modèle à des connaissances du monde entier, à un large éventail de sujets possibles ou à des informations à jour disponibles sur Internet.

Modèles compatibles

Les modèles suivants sont compatibles avec l'ancrage avec Elasticsearch avec saisie de texte uniquement :

Cliquez pour développer la liste des modèles compatibles

Configurer un modèle de recherche dans Elasticsearch

Cette section explique comment utiliser votre instance Elasticsearch pour l'ancrage sur les données stockées dans l'instance.

Bonnes pratiques

Pour obtenir les meilleures réponses d'ancrage, suivez ces principes lorsque vous créez un modèle de recherche :

  • N'incluez que des données pertinentes et utiles. Par exemple, dans un catalogue de produits, spécifier une URL d'image peut ne pas aider le LLM à répondre aux requêtes sur les propriétés du produit, sauf si la requête demande spécifiquement une URL. De même, évitez de générer des vecteurs d'embedding.

  • L'ancrage supprime les résultats Elasticsearch peu pertinents par rapport à vos prompts. Vous devez fournir un plus grand nombre de résultats Elasticsearch pour capturer tout le contexte pertinent.

  • Les données des résultats peuvent se trouver dans un seul champ ou être réparties dans plusieurs champs.

Exemples de modèles

Vous pouvez utiliser vos modèles de recherche. Toutefois, nous vous recommandons d'utiliser le modèle de recherche kNN générique avec l'ancrage Elasticsearch. Pour obtenir d'autres modèles de recherche, consultez le dépôt GitHub.

Cette recherche sémantique avec Gemini Enterprise Agent Platform est une recherche kNN générique.

    PUT _scripts/google-template-knn-multioutput
    {
      "script": {
        "lang": "mustache",
        "source": {
          "_source": {
            "excludes": [ "title_embedding", "description_embedding", "images"]
          },
            "size": "num_hits",
              "knn" : [
              {
                "field": "description_embedding",
                "k": 5,
                "num_candidates": 10,
                "query_vector_builder": {
                  "text_embedding": {
                    "model_id": "googlevertexai_embeddings_004",
                    "model_text": "query"
                  }
                },
                "boost": 0.4
              },
              {
                "field": "title_embedding",
                "k": 5,
                "num_candidates": 10,
                "query_vector_builder": {
                  "text_embedding": {
                    "model_id": "googlevertexai_embeddings_004",
                    "model_text": "query"
                }
              },
              "boost": 0.6
              }
              ]
        }
      }
    }

Générer des réponses ancrées avec Elasticsearch

Cette section explique comment utiliser l'API Agent Platform pour ancrer les réponses de votre LLM.

Prérequis

Avant de pouvoir ancrer les réponses des LLM avec Elasticsearch, vous devez effectuer les opérations suivantes :

  1. Activer l'API Agent Platform : assurez-vous que l'API Agent Platform est activée pour votre projet Google Cloud .

  2. Installez Google Cloud CLI et connectez-vous : installez et initialisez l'outil de ligne de commande gcloud CLI.

  3. Configuration d'Elasticsearch : utilisez un cluster et un index Elasticsearch existants que vous souhaitez utiliser pour l'ancrage. Obtenez les informations suivantes à partir de votre configuration Elasticsearch :

    • Point de terminaison : URL de votre cluster Elasticsearch.
    • Nom de l'index : nom de l'index dans lequel vous souhaitez effectuer une recherche, par exemple my-data-index.
    • Clé API : clé API permettant d'accéder à votre cluster Elasticsearch. La clé API doit commencer par le préfixe ApiKey.
  4. Créer un modèle de recherche Elasticsearch : utilisez une source de données Elasticsearch qui utilise un modèle de référence qui renvoie des données de résultat pour l'ancrage.

Générer des réponses ancrées

Console

Pour ancrer avec Elasticsearch dans la console Google Cloud , procédez comme suit :

  1. Accédez à la page Agent Studio.

    Accéder à Agent Studio

  2. Dans le panneau latéral, sous Paramètres du modèle, accédez à la section Ancrage, puis activez l'option Vos données.

  3. Dans le volet de configuration, sélectionnez Elasticsearch.

  4. Saisissez le point de terminaison dans le champ Point de terminaison Elasticsearch.

  5. Saisissez ApiKey YOUR_API_KEY dans le champ Clé API Elasticsearch.

  6. Saisissez l'index dans le champ Index Elasticsearch.

  7. Saisissez le modèle de recherche dans le champ Modèle de recherche Elasticsearch.

  8. Ajustez le nombre de hits en faisant glisser le curseur Nombre de hits.

  9. Cliquez sur Enregistrer.

  10. Saisissez votre prompt.

  11. Cliquez sur Envoyer.

Comprendre votre réponse

Si le prompt de votre modèle est correctement ancré dans les datastores Elasticsearch à l'aide d'Agent Studio ou de l'API, les réponses du modèle incluent des métadonnées avec des citations et du contenu source. Si la réponse du modèle est peu pertinente ou incomplète, il est possible que les métadonnées ne soient pas fournies et que la réponse à la requête ne soit pas ancrée.

Python

Installer

pip install --upgrade google-genai

Pour en savoir plus, consultez la documentation de référence du SDK.

Définissez des variables d'environnement pour utiliser le SDK Google Gen AI avec Vertex AI :

# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
# with appropriate values for your project.
export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
export GOOGLE_CLOUD_LOCATION=global
export GOOGLE_GENAI_USE_ENTERPRISE=True

from google import genai
from google.genai.types import (
    GenerateContentConfig,
    Elasticsearch,
    Retrieval,
    Tool,
    HttpOptions,
)

client = genai.Client(http_options=HttpOptions(api_version="v1"))

# Replace with your Elasticsearch details
ELASTIC_SEARCH_ENDPOINT = "YOUR_ELASTICSEARCH_ENDPOINT"
ELASTIC_SEARCH_API_KEY = "YOUR_ELASTICSEARCH_API_KEY"
INDEX_NAME = "YOUR_INDEX_NAME"
SEARCH_TEMPLATE_NAME = "YOUR_SEARCH_TEMPLATE_NAME"
NUM_HITS = 5

tool = Tool(
    retrieval=Retrieval(
        external_api=Elasticsearch(
            api_spec="ELASTIC_SEARCH",
            endpoint=ELASTIC_SEARCH_ENDPOINT,
            api_auth={
                "apiKeyConfig": {
                    "apiKeyString": f"ApiKey {ELASTIC_SEARCH_API_KEY}"
                }
            },
            elastic_search_params={
                "index": INDEX_NAME,
                "searchTemplate": SEARCH_TEMPLATE_NAME,
                "numHits": NUM_HITS,
            },
        )
    )
)

response = client.models.generate_content(
    model="gemini-2.5-flash",  # Or another supported model
    contents="What are the main features of product X?", # Your query
    config=GenerateContentConfig(
        tools=[tool],
    ),
)

print(response.text)

REST

Pour envoyer un prompt textuel et l'ancrer avec Elasticsearch, envoyez une requête POST à l'API Agent Platform. Vous devez au minimum fournir le corps de la requête. Veillez à effectuer les remplacements suivants :

  • PROMPT : prompt textuel à ancrer.
  • ELASTIC_SEARCH_ENDPOINT : chemin d'accès absolu du point de terminaison de la ressource Elasticsearch à utiliser.
  • ELASTIC_SEARCH_API_KEY : clé API du point de terminaison de données Elasticsearch.
  • INDEX_NAME : nom de l'index Elasticsearch utilisé pour l'ancrage.
  • SEARCH_TEMPLATE_NAME : modèle de recherche Elasticsearch utilisé pour l'ancrage.
  • NUM_HITS : nombre de résultats renvoyés par la source de données Elasticsearch et utilisés pour l'ancrage.

    Méthode HTTP et URL :

    POST https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:generateContent
    

    Corps JSON de la requête :

      {
        "contents": [
          {
            "role": "user",
            "parts": [
              {
                "text": "PROMPT"
              }
            ]
          }
        ],
        "tools": [{
          "retrieval": {
            "externalApi": {
              "api_spec": "ELASTIC_SEARCH",
              "endpoint": "ELASTIC_SEARCH_ENDPOINT",
              "apiAuth": {
                "apiKeyConfig": {
                  "apiKeyString": "ApiKey ELASTIC_SEARCH_API_KEY"
                }
              },
              "elasticSearchParams": {
                "index": "INDEX_NAME",
                "searchTemplate": "SEARCH_TEMPLATE_NAME",
                "numHits": "NUM_HITS",
              }
            }
          }
        }]
      }
    

Pour en savoir plus sur les autres champs de l'API, tels que les instructions système et les discussions multitours, consultez le guide de l'IA générative pour les débutants.

Envoyer la requête API

Vous pouvez enregistrer le corps de la requête dans un fichier nommé request.json. Ensuite, exécutez la requête API POST et effectuez les remplacements suivants :

  • LOCATION : région dans laquelle traiter la requête. Pour utiliser le point de terminaison global, excluez l'emplacement du nom du point de terminaison et configurez l'emplacement de la ressource sur global.
  • PROJECT_ID : ID de votre projet Google Cloud . Pour en savoir plus sur les ID de projet, consultez Créer et gérer des projets.
  • MODEL_ID : ID du modèle multimodal.
  curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json; charset=utf-8" \
      -d @request.json \
  "https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:generateContent"

Vous devriez recevoir une réponse JSON de ce type :

  {
    "candidates": [
      {
        "content": {
          "role": "model",
          "parts": [
            {
              "text": "Based on the information ..."
            }
          ]
        },
        "finishReason": "STOP",
        "safetyRatings": [ "..." ],
        "groundingMetadata": {
          "groundingChunks": [
            {
              "retrievedContext": {
                "text": "ipsum lorem ..."
              }
            },
            {...},
            {...},
          ],
          "groundingSupports": [
            {
              "segment": {
                "startIndex": 25,
                "endIndex": 147,
                "text": "ipsum lorem ..."
              },
              "groundingChunkIndices": [1,2],
              "confidenceScores": [0.6626542, 0.82018316],
            },
          ],
        },
      }
    ],
  }

Comprendre votre réponse

La réponse des deux API inclut le texte généré par le LLM, appelé candidat. Si le prompt de votre modèle est correctement ancré sur votre source de données Elasticsearch, les réponses incluent des métadonnées d'ancrage, qui identifient les parties de la réponse provenant de vos données Elasticsearch. Toutefois, il existe plusieurs raisons pour lesquelles ces métadonnées peuvent ne pas être fournies et la réponse du prompt ne sera pas ancrée. Ces raisons peuvent être une faible pertinence de la source ou des informations incomplètes dans la réponse du modèle.

Voici une répartition des données de sortie :

  • Rôle : indique l'expéditeur de la réponse ancrée. Étant donné que la réponse contient toujours du texte ancré, le rôle est toujours model.
  • Texte : réponse ancrée générée par le LLM.
  • Métadonnées d'ancrage : informations sur la source d'ancrage, qui contient les éléments suivants :
    • Segments d'ancrage : liste des résultats de votre index Elasticsearch qui correspondent à la réponse.
    • Supports d'ancrage : informations sur une affirmation spécifique dans la réponse qui peuvent être utilisées pour afficher des citations :
    • Segment : partie de la réponse du modèle qui est étayée par un segment d'ancrage.
    • Index de segment d'ancrage : index des segments d'ancrage dans la liste des segments d'ancrage correspondant à cette affirmation.
    • Scores de confiance : nombre compris entre 0 et 1 qui indique le niveau d'ancrage de l'affirmation dans l'ensemble fourni de segments d'ancrage. Non disponible pour Gemini 2.5 Pro, Gemini 2.5 Flash et les versions ultérieures.

Étapes suivantes

  • Pour en savoir plus sur l'envoi de requêtes de chat, consultez la section Chat multitour.
  • Pour en savoir plus sur les bonnes pratiques d'IA responsable et les filtres de sécurité d'Agent Platform, consultez Bonnes pratiques de sécurité.