Fundierung mit Elasticsearch

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

Gemini mit Elasticsearch fundieren

Bei der Fundierung 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 Gemini-Ausgabe zu verbessern, Halluzinationen zu reduzieren und dafür zu sorgen, dass die Antworten für Ihre Daten relevant sind. So können Sie leistungsstarke RAG-Anwendungen erstellen, z. B.:

  • Generative Suchzusammenfassungen
  • Frage-Antwort-Chatbots mit Unternehmensdaten
  • KI-Agenten, die auf Ihren Daten basieren

Sie können eine Antwort auf bis zu 10 Datenquellen gleichzeitig fundieren. 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 die Fundierung mit Elasticsearch nur mit Texteingabe:

Klicken, um unterstützte Modelle einzublenden

Suchvorlage in Elasticsearch einrichten

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

Best Practices

Beachten Sie beim Erstellen einer Suchvorlage die folgenden Grundsätze, um die besten Fundierungsantworten zu erhalten:

  • Nehmen Sie nur relevante und nützliche Daten auf. In einem Produktkatalog hilft die Angabe einer Bild-URL dem LLM beispielsweise möglicherweise nicht, Prompts zu Produkteigenschaften zu 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 alle relevanten Kontexte zu erfassen.

  • Ergebnisdaten können in einem Feld oder auf mehrere Felder verteilt sein.

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 der Gemini Enterprise Agent Platform 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 erläutert, wie Sie die Agent Platform API verwenden, um Ihre LLM-Antworten zu fundieren.

Vorbereitung

Bevor Sie LLM-Antworten mit Elasticsearch fundieren können, müssen Sie die folgenden Schritte ausführen:

  1. Agent Platform API aktivieren: Die Agent Platform API muss für Ihr Google Cloud -Projekt aktiviert sein.

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

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

    • Endpunkt: Die URL Ihres Elasticsearch-Clusters.
    • Indexname: Der Name des Index, den Sie durchsuchen möchten, z. B. my-data-index.
    • API-Schlüssel: Ein API-Schlüssel, der 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 fundieren Sie mit Elasticsearch in der Google Cloud Console:

  1. Rufen Sie die Seite Agent Studio auf.

    Zu Agent Studio

  2. Gehen Sie in der Seitenleiste unter Modelleinstellungen zum Abschnitt Fundierung und aktivieren Sie die Option Meine Daten.

  3. Wählen Sie im Konfigurationsbereich 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 Key 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 über Agent Studio oder die API erfolgreich bei Elasticsearch-Datenspeichern fundiert wird, enthalten die Antworten des Modells Metadaten mit Zitationen und Quellinhalten. Wenn die Antwort des Modells eine geringe Relevanz für die Quelle oder unvollständige Informationen enthält, 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.

Legen Sie Umgebungsvariablen fest, um das Google Gen AI SDK mit Vertex AI zu verwenden:

# 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

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

  • PROMPT: Der Text-Prompt, der fundiert werden 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 werden.

    HTTP-Methode und URL:

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

    JSON-Text der Anfrage:

      {
        "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-Unterhaltungen 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 Projekt-ID in Google Cloud . 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 Antwort beider APIs enthält den vom LLM generierten Text, der als Kandidat bezeichnet wird. Wenn Ihr Modell-Prompt erfolgreich bei Ihrer Elasticsearch-Datenquelle fundiert 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. Zu diesen Gründen gehören eine geringe Relevanz der Quelle 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.
  • Fundierungsmetadaten: Informationen zur Fundierungsquelle, die die folgenden Elemente enthalten:
    • Fundierungsblöcke: Eine Liste von Ergebnissen aus Ihrem Elasticsearch-Index, die die Antwort unterstützen.
    • Fundierungsbelege: Informationen zu einer bestimmten Behauptung in der Antwort, die zum Anzeigen von Zitaten verwendet werden können:
    • Segment: Der Teil der Antwort des Modells, der durch einen Fundierungsblock belegt wird.
    • Fundierungsblock-Index: Der Index der Fundierungsblöcke in der Liste der Fundierungsblöcke, die dieser Behauptung entsprechen.
    • Konfidenzwerte: Eine Zahl zwischen 0 und 1, die angibt, wie fundiert die Aussage in den bereitgestellten Fundierungsblöcken ist. Nicht verfügbar für Gemini 2.5 Pro und Gemini 2.5 Flash und höher.

Nächste Schritte