Fundierung mit Elasticsearch

Auf dieser Seite wird erläutert, wie Sie Ihre Elasticsearch-Instanz verwenden können, um Ihre Daten zu fundieren.

Gemini mit Elasticsearch fundieren

Beim Fundieren werden öffentliche und private Datasets verwendet, um Kontext und Fakten für die Antworten von Large Language Models (LLMs) bereitzustellen. Durch die Fundierung mit Elasticsearch können Sie Ihre vorhandenen Elasticsearch-Indizes nutzen, um die Qualität und Zuverlässigkeit der Ausgabe von Gemini zu verbessern. So werden Halluzinationen reduziert und die Antworten sind relevanter für Ihre Daten. So können Sie leistungsstarke RAG-Anwendungen wie die folgenden erstellen:

  • Generative Zusammenfassungen
  • Frage-Antwort-Chatbots mit Unternehmensdaten
  • Agents, die auf Ihren Daten basieren

Sie können eine Antwort auf bis zu 10 Datenquellen gleichzeitig stützen. Sie können die Fundierung mit Elasticsearch mit der Fundierung mit der Google Suche kombinieren, um das Modell mit dem Wissen der ganzen Welt, einer Vielzahl von Themen oder aktuellen Informationen im Internet zu verknüpfen.

Unterstützte Modelle

Die folgenden Modelle unterstützen Grounding mit Elasticsearch nur mit Texteingabe:

Suchvorlage in Elasticsearch einrichten

In diesem Abschnitt wird erläutert, wie Sie Ihre Elasticsearch-Instanz verwenden können, um auf Ihre in der Instanz gespeicherten Daten zu verweisen.

Best Practices

Damit die Antworten möglichst fundiert sind, sollten Sie beim Erstellen einer Suchvorlage die folgenden Grundsätze beachten:

  • Fügen Sie nur relevante und nützliche Daten hinzu. Wenn Sie beispielsweise in einem Produktkatalog eine Bild-URL angeben, kann das LLM möglicherweise keine Prompts zu Produkteigenschaften beantworten, es sei denn, im Prompt wird ausdrücklich nach einer URL gefragt. Vermeiden Sie auch die Ausgabe von Einbettungsvektoren.

  • Durch die Fundierung werden Elasticsearch-Ergebnisse mit geringer Relevanz für Ihre Prompts entfernt. Sie sollten eine höhere Anzahl von Elasticsearch-Ergebnissen angeben, um den gesamten relevanten Kontext zu erfassen.

  • Die Ergebnisdaten können sich in einem Feld oder in mehreren Feldern befinden.

Beispielvorlagen

Sie können Ihre Suchvorlagen verwenden. Wir empfehlen jedoch, die generische kNN-Suchvorlage mit Elasticsearch-Fundierung zu verwenden. Weitere Suchvorlagen finden Sie im GitHub-Repository.

Diese semantische Suche mit Vertex AI ist eine generische kNN-Suche.

    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
              }
              ]
        }
      }
    }

Fundierte Antworten mit Elasticsearch generieren

In diesem Abschnitt wird beschrieben, wie Sie die Vertex AI API verwenden, um LLM-Antworten zu fundieren.

Vorbereitung

Bevor Sie LLM-Antworten mit Elasticsearch abstützen können, müssen Sie Folgendes ausführen:

  1. Vertex AI API aktivieren: Die Vertex AI API muss für Ihr Google Cloud Projekt aktiviert sein.

  2. Google Cloud CLI installieren und anmelden: Installieren und initialisieren Sie das gcloud CLI-Befehlszeilentool.

  3. Elasticsearch-Einrichtung: Verwenden Sie einen vorhandenen Elasticsearch-Cluster und -Index, die Sie für die Fundierung verwenden möchten. Holen Sie die folgenden Informationen aus Ihrer Elasticsearch-Einrichtung ein:

    • Endpunkt: Die URL Ihres Elasticsearch-Clusters.
    • Indexname: Der Name des Index, in dem Sie suchen möchten, z. B. my-data-index.
    • API-Schlüssel: Ein API-Schlüssel, der den Zugriff auf Ihren Elasticsearch-Cluster ermöglicht. Der API-Schlüssel muss mit dem Präfix ApiKey beginnen.
  4. Elasticsearch-Suchvorlage erstellen: Verwenden Sie eine Elasticsearch-Datenquelle, die eine Referenzvorlage verwendet, die Ergebnisdaten für die Fundierung zurückgibt.

Fundierte Antworten generieren

Console

So können Sie Elasticsearch in der Google Cloud Console als Grundlage verwenden:

  1. Rufen Sie in Vertex AI Studio die Seite Prompt erstellen auf.

    Zur Seite „Prompt erstellen“

  2. Klicken Sie im Bereich Einstellungen auf den Schalter Fundierung: Ihre Daten, um Ihre Daten zu fundieren.

  3. Wählen Sie im Bereich Fundierung anpassen die Option Elasticsearch aus.

  4. Geben Sie den Endpunkt in das Feld Elasticsearch-Endpunkt ein.

  5. Geben Sie ApiKey YOUR_API_KEY in das Feld Elasticsearch API-Schlüssel ein.

  6. Geben Sie den Index in das Feld Elasticsearch-Index ein.

  7. Geben Sie die Suchvorlage in das Feld Elasticsearch-Suchvorlage ein.

  8. Passen Sie die Anzahl der Treffer mit dem Schieberegler Anzahl der Treffer an.

  9. Klicken Sie auf Speichern.

  10. Geben Sie Ihren Prompt ein.

  11. Klicken Sie auf Senden.

Ihre Antwort verstehen

Wenn Ihr Modell-Prompt von Vertex AI Studio oder der API erfolgreich bei Elasticsearch-Datenspeichern fundiert wird, enthalten die Antworten des Modells Metadaten mit Quellenangaben und Quellinhalten. Wenn die Antwort des Modells eine geringe Quellenrelevanz oder unvollständige Informationen aufweist, werden möglicherweise keine Metadaten bereitgestellt und die Prompt-Antwort wird nicht fundiert.

Python

Installieren

pip install --upgrade google-genai

Weitere Informationen finden Sie in der SDK-Referenzdokumentation.

Umgebungsvariablen für die Verwendung des Gen AI SDK mit Vertex AI festlegen:

# 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_VERTEXAI=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

Wenn Sie einen Text-Prompt senden und mit Elasticsearch verankern möchten, senden Sie eine POST-Anfrage an die Vertex AI API. Sie müssen mindestens den Anfragetext angeben. Ersetzen Sie dabei Folgendes:

  • PROMPT: Der Text-Prompt, der als Grundlage dienen soll.
  • ELASTIC_SEARCH_ENDPOINT: Der absolute Endpunktpfad für die zu verwendende Elasticsearch-Ressource.
  • ELASTIC_SEARCH_API_KEY: Der API-Schlüssel für den Elasticsearch-Datenendpunkt.
  • INDEX_NAME: Der Name des Elasticsearch-Index, der für die Fundierung verwendet wird.
  • SEARCH_TEMPLATE_NAME: Die Elasticsearch-Suchvorlage, die für die Fundierung verwendet wird.
  • NUM_HITS: Die Anzahl der Ergebnisse, die von der Elasticsearch-Datenquelle zurückgegeben und für die Fundierung verwendet wurden.

    HTTP-Methode und URL:

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

    JSON-Text anfordern:

      {
        "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",
              }
            }
          }
        }]
      }
    

Weitere Informationen zu anderen API-Feldern wie Systemanweisungen und Multi-Turn-Chats finden Sie im Leitfaden für Einsteiger in generative KI.

API-Anfrage senden

Sie können den Anfragetext in einer Datei mit dem Namen request.json speichern. Führen Sie dann die POST-API-Anfrage aus und nehmen Sie die folgenden Ersetzungen vor:

  • LOCATION: Die Region, in der die Anfrage verarbeitet werden soll. Wenn Sie den globalen Endpunkt verwenden möchten, schließen Sie den Standort aus dem Endpunktnamen aus und konfigurieren Sie den Standort der Ressource auf global.
  • PROJECT_ID: Ihre Google Cloud Projekt-ID. Weitere Informationen zu Projekt-IDs finden Sie unter Projekte erstellen und verwalten.
  • MODEL_ID: Die Modell-ID des multimodalen Modells.
  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"

Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

  {
    "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],
            },
          ],
        },
      }
    ],
  }

Ihre Antwort verstehen

Die Antworten beider APIs enthalten den LLM-generierten Text, der als Kandidat bezeichnet wird. Wenn Ihr Modell-Prompt erfolgreich auf Ihre Elasticsearch-Datenquelle gestützt wird, enthalten die Antworten Fundierungsmetadaten, die die Teile der Antwort identifizieren, die aus Ihren Elasticsearch-Daten abgeleitet wurden. Es gibt jedoch mehrere Gründe, warum diese Metadaten möglicherweise nicht bereitgestellt werden und die Prompt-Antwort nicht fundiert wird. Dazu gehören eine geringe Quellenrelevanz oder unvollständige Informationen in der Antwort des Modells.

Im Folgenden finden Sie eine Aufschlüsselung der Ausgabedaten:

  • Rolle: Gibt den Absender der fundierten Antwort an. Da die Antwort immer fundierten Text enthält, ist die Rolle immer model.
  • Text: Die fundierte Antwort, die vom LLM generiert wurde.
  • Metadaten zur Fundierung: Informationen zur Fundierungsquelle, die die folgenden Elemente enthalten:
    • Fundierungsblöcke: Eine Liste von Ergebnissen aus Ihrem Elasticsearch-Index, die die Antwort unterstützen.
    • Fundierungsunterstützung: Informationen zu einer bestimmten Behauptung in der Antwort, die zum Anzeigen von Quellenangaben verwendet werden können:
    • Segment: Der Teil der Antwort des Modells, der durch einen Fundierungs-Chunk belegt wird.
    • Index des Fundierungs-Chunks: Der Index der Fundierungs-Chunks in der Liste der Fundierungs-Chunks, der diesem Anspruch entspricht.
    • Konfidenzwerte: Eine Zahl zwischen 0 und 1, die angibt, wie fundiert die Behauptung in den bereitgestellten Grounding-Chunks ist. Nicht verfügbar für Gemini 2.5 Pro, Gemini 2.5 Flash und höher.

Nächste Schritte