עיגון באמצעות Elasticsearch

בדף הזה מוסבר איך להשתמש במכונה של Elasticsearch כדי לבסס תשובות על הנתונים שלכם.

איך מבססים את Gemini באמצעות Elasticsearch

עיגון כולל שימוש במערכי נתונים ציבוריים ופרטיים כדי לספק הקשר ועובדות לעיגון התשובות של מודל שפה גדול (LLM). כשמבססים את המודל על Elasticsearch, אפשר להשתמש באינדקסים הקיימים של Elasticsearch כדי לשפר את האיכות והאמינות של הפלט של Gemini, לצמצם את ההזיות ולוודא שהתשובות רלוונטיות לנתונים שלכם. כך אפשר ליצור אפליקציות RAG מתקדמות, כמו:

  • סיכומי חיפוש גנרטיביים
  • צ'אטבוטים של שאלות ותשובות עם נתונים ארגוניים
  • סוכנים שמעוגנים בנתונים שלכם

אפשר לבסס תשובה על עד 10 מקורות נתונים בו-זמנית. אתם יכולים לשלב את העיגון ב-Elasticsearch עם עיגון באמצעות חיפוש Google כדי לקשר את המודל לידע כללי, למגוון רחב של נושאים או למידע עדכני באינטרנט.

מודלים נתמכים

המודלים הבאים תומכים בביסוס באמצעות Elasticsearch עם קלט טקסט בלבד:

לחצו כדי להרחיב את רשימת המודלים הנתמכים

הגדרת תבנית חיפוש ב-Elasticsearch

בקטע הזה מוסבר איך להשתמש במכונה של Elasticsearch כדי לבסס את הנתונים שמאוחסנים במכונה.

שיטות מומלצות

כדי לקבל את התשובות הכי טובות עם ביסוס, כדאי להשתמש בעקרונות הבאים כשיוצרים תבנית חיפוש:

  • לכלול רק נתונים רלוונטיים ושימושיים. לדוגמה, אם בקטלוג מוצרים מציינים כתובת URL של תמונה, יכול להיות שהיא לא תעזור למודל ה-LLM לענות על הנחיות לגבי מאפייני המוצר, אלא אם ההנחיה מבקשת באופן ספציפי כתובת URL. באופן דומה, כדאי להימנע מפלט של וקטורי הטמעה.

  • העיגון מסיר תוצאות מ-Elasticsearch עם רלוונטיות נמוכה להנחיות שלכם. כדי לכלול את כל ההקשר הרלוונטי, צריך לספק מספר גבוה יותר של תוצאות מ-Elasticsearch.

  • נתוני התוצאות יכולים להיות בשדה אחד או בכמה שדות.

תבניות לדוגמה

אתם יכולים להשתמש בתבניות החיפוש שלכם. עם זאת, מומלץ להשתמש בתבנית החיפוש הגנרית של kNN עם הארקה של Elasticsearch. תבניות חיפוש נוספות זמינות במאגר GitHub.

החיפוש הסמנטי הזה עם Gemini Enterprise Agent Platform הוא חיפוש kNN גנרי.

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

יצירת תשובות מבוססות-מקורות באמצעות Elasticsearch

בקטע הזה מוסבר איך משתמשים ב-Agent Platform API כדי לבסס את התשובות של ה-LLM.

דרישות מוקדמות

לפני שתוכלו לבסס את התשובות של ה-LLM באמצעות Elasticsearch, תצטרכו לבצע את הפעולות הבאות:

  1. הפעלת Agent Platform API: ודאו ש-Agent Platform API מופעל בפרויקט ב- Google Cloud .

  2. התקנה וכניסה ל-Google Cloud CLI: מתקינים ומפעילים את כלי שורת הפקודה של ה-CLI של gcloud.

  3. הגדרת Elasticsearch: משתמשים באשכול ובאינדקס קיימים של Elasticsearch שרוצים להשתמש בהם לצורך ביסוס. משיגים את הפרטים הבאים מההגדרה של Elasticsearch:

    • נקודת קצה (endpoint): כתובת ה-URL של אשכול Elasticsearch.
    • ‫Index Name: שם האינדקס שרוצים לחפש, למשל my-data-index.
    • ‫API Key: מפתח API שמאפשר גישה לאשכול Elasticsearch. מפתח ה-API חייב להתחיל בקידומת ApiKey.
  4. יצירת תבנית חיפוש ב-Elasticsearch: משתמשים במקור נתונים של Elasticsearch שמשתמש בתבנית עזר שמחזירה נתוני תוצאות לצורך עיגון.

יצירת תשובות שמבוססות על מקורות

המסוף

כדי לבצע קרקוע באמצעות Elasticsearch במסוף Google Cloud :

  1. נכנסים לדף Agent Studio.

    מעבר ל-Agent Studio

  2. בחלונית הצדדית, בקטע הגדרות המודל, עוברים לקטע ביסוס ומפעילים את המתג הנתונים שלך.

  3. בחלונית ההגדרות, בוחרים באפשרות Elasticsearch.

  4. מזינים את נקודת הקצה בשדה Elasticsearch endpoint.

  5. בשדה Elasticsearch API Key, מזינים את הערך ApiKey YOUR_API_KEY.

  6. מזינים את האינדקס בשדה Elasticsearch index.

  7. מזינים את תבנית החיפוש בשדה Elasticsearch search template.

  8. כדי לשנות את מספר ההיטים, מזיזים את פס ההזזה מספר ההיטים.

  9. לוחצים על Save.

  10. מזינים את הפרומפט.

  11. לוחצים על שליחה.

הסבר על התשובה

אם ההנחיה למודל מתבססת על מאגרי נתונים של Elasticsearch באמצעות Agent Studio או ה-API, התשובות של המודל כוללות מטא-נתונים עם ציטוטים ותוכן מקור. אם התשובה של המודל לא רלוונטית למקור או שהמידע לא מלא, יכול להיות שלא יסופקו מטא-נתונים והתשובה להנחיה לא תהיה מבוססת.

Python

התקנה

pip install --upgrade google-genai

מידע נוסף זמין ב מאמרי העזרה של ה-SDK.

מגדירים משתני סביבה כדי להשתמש ב-Google Gen AI SDK עם 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

כדי לשלוח פרומפט טקסטואלי ולעגן אותו באמצעות Elasticsearch, שולחים בקשת POST ל-Agent Platform API. חובה לספק לפחות את גוף הבקשה. חשוב לבצע את ההחלפות הבאות:

  • ‫PROMPT: פרומפט טקסטואלי לעיגון.
  • ‫ELASTIC_SEARCH_ENDPOINT: הנתיב המוחלט של נקודת הקצה של המשאב ב-Elasticsearch שבו רוצים להשתמש.
  • ‫ELASTIC_SEARCH_API_KEY: מפתח ה-API של נקודת הקצה של הנתונים ב-Elasticsearch.
  • ‫INDEX_NAME: השם של אינדקס Elasticsearch שמשמש לביסוס.
  • ‫SEARCH_TEMPLATE_NAME: תבנית החיפוש של Elasticsearch שמשמשת לעיגון.
  • ‫NUM_HITS: מספר התוצאות שהוחזרו ממקור הנתונים של Elasticsearch ושימשו לביסוס.

    ה-method של ה-HTTP וכתובת ה-URL:

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

    תוכן בקשת JSON:

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

מידע נוסף על שדות אחרים של API, כמו הוראות מערכת ושיחות עם זיכרון, זמין במדריך למתחילים בנושא AI גנרטיבי.

שליחת בקשת ה-API

אפשר לשמור את גוף הבקשה בקובץ בשם request.json. לאחר מכן מבצעים את בקשת ה-API מסוג POST, ומחליפים את הפרטים הבאים:

  • ‫LOCATION: האזור שבו הבקשה תעובד. כדי להשתמש בנקודת הקצה הגלובלית, צריך להחריג את המיקום משם נקודת הקצה ולהגדיר את מיקום המשאב ל-global.
  • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud . מידע נוסף על מזהי פרויקטים זמין במאמר יצירה וניהול של פרויקטים.
  • ‫MODEL_ID: מזהה המודל של המודל המולטי-מודאלי.
  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"

אתם אמורים לקבל תגובת JSON שדומה לזו:

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

הסבר על התשובה

התשובה משני ממשקי ה-API כוללת את הטקסט שנוצר על ידי ה-LLM, שנקרא מועמד. אם ההנחיה למודל מתבססת על מקור הנתונים ב-Elasticsearch, התשובות כוללות מטא-נתונים של ביסוס, שמזהים את החלקים בתשובה שמקורם בנתונים ב-Elasticsearch. עם זאת, יש כמה סיבות לכך שהמטא-נתונים האלה לא יסופקו, והתשובה להנחיה לא תהיה מבוססת. למשל, אם המקורות לא רלוונטיים או שהמידע בתשובה של המודל לא מלא.

פירוט של נתוני הפלט:

  • תפקיד: מציין את השולח של התשובה המבוססת. התשובה תמיד מכילה טקסט מבוסס-קרקע, ולכן התפקיד הוא תמיד model.
  • טקסט: התשובה המבוססת שנוצרה על ידי ה-LLM.
  • מטא-נתונים של ביסוס: מידע על מקור הביסוס, שמכיל את הרכיבים הבאים:
    • חלקי עיגון: רשימת תוצאות מהאינדקס של Elasticsearch שתומכות בתשובה.
    • תמיכה בביסוס: מידע על טענה ספציפית בתשובה שאפשר להשתמש בו כדי להציג ציטוטים:
    • קטע: החלק בתשובה של המודל שמבוסס על קטע מידע מסוים.
    • אינדקס של קטעי נתונים מעוגנים: האינדקס של קטעי הנתונים המעוגנים ברשימת קטעי הנתונים המעוגנים שתואמים לטענה הזו.
    • ציוני מהימנות: מספר מ-0 עד 1 שמציין עד כמה הטענה מבוססת על קבוצת קטעי הטקסט שסופקו לצורך ביסוס. לא זמין ב-Gemini 2.5 Pro, ב-Gemini 2.5 Flash ובגרסאות מתקדמות יותר.

המאמרים הבאים