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

במסגרת חוויית השימוש ב-Retrieval Augmented Generation (יצירה משולבת-אחזור, RAG) בחיפוש מבוסס סוכנים, אתם יכולים ליצור תשובות מבוססות-מידע להנחיות על סמך מקורות המידע הבאים:

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

בדף הזה נסביר איך ליצור תשובות מבוססות-הקשר על סמך מקורות ההקשר האלה, באמצעות הגישות הבאות:

בנוסף, אתם יכולים לבחור להזרים את התשובות מהמודל. יצירת תשובה שמבוססת על מקורות באמצעות סטרימינג היא תכונה ניסיונית.

אתם יכולים להשתמש בשיטות אחרות כדי ליצור תשובות מבוססות-קרקע, בהתאם לאפליקציה שלכם. מידע נוסף מופיע במאמר Vertex AI APIs for building search and RAG experiences.

הסברים על המונחים

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

מונחים שקשורים ל-RAG

RAG היא מתודולוגיה שמאפשרת למודלים גדולים של שפה (LLMs) ליצור תשובות שמבוססות על מקור הנתונים שתבחרו. יש שני שלבים ב-RAG:

  1. אחזור: קבלת העובדות הכי רלוונטיות במהירות יכולה להיות בעיה נפוצה בחיפוש. בעזרת RAG, אפשר לאחזר במהירות את העובדות שחשובות ליצירת תשובה.
  2. יצירה: העובדות שאוחזרו משמשות את ה-LLM ליצירת תשובה מבוססת.

לכן, שיטת יצירת התשובות שמבוססות על מקורות מאחזרת את העובדות ממקור ההצמדה ויוצרת תשובה שמבוססת על מקורות.

נתוני קלט

שיטת יצירת התשובות המבוססת על מידע מהימן דורשת את הקלט הבא בבקשה:

  • תפקיד: השולח של טקסט מסוים, שהוא משתמש (user) או מודל (model).

  • טקסט: כשהתפקיד הוא user, הטקסט הוא הנחיה, וכשהתפקיד הוא model, הטקסט הוא תשובה מבוססת. האופן שבו מציינים את התפקיד ואת הטקסט בבקשה נקבע באופן הבא:

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

  • מקור העיגון: המקור שבו התשובה מעוגנת, ויכול להיות אחד או יותר מהמקורות הבאים:

    • חיפוש Google: ביסוס התשובות על תוצאות חיפוש Google. כשמקור ההארקה הוא חיפוש Google, אפשר לציין הגדרה של אחזור דינמי עם סף אחזור דינמי. מידע נוסף זמין במאמר בנושא אחזור דינמי.

    • טקסט מוטבע: מעגנים את התשובה בטקסט עובדתי שמופיע בבקשה. עובדה היא הצהרה שסופקה על ידי המשתמש ונחשבת לעובדתית עבור בקשה נתונה. המודל לא בודק את האותנטיות של הטקסט של העובדה. אפשר לספק עד 100 טקסטים של עובדות בכל מקור טקסט מוטבע. אפשר לתמוך בטקסטים של העובדות באמצעות מאפייני מטא, כמו title, author ו-URI. מאפייני המטא האלה מוחזרים בתשובה כשמצטטים את החלקים שתומכים בתשובה.

    • מאגרי נתונים של חיפוש מבוסס סוכנים: התשובה מבוססת על המסמכים ממאגרי הנתונים של חיפוש מבוסס סוכנים. אי אפשר לציין מאגר נתונים של חיפושים באתר כמקור לביסוס.

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

    אפשר לספק עד 10 מקורות להארקה בכל סדר. לדוגמה, נניח שאתם מספקים את מקורות ההארקה עם המספר הבא, בסדר הבא, כדי לקבל סך של 10 מקורות הארקה:

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

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

    מקור העיגון אינדקס
    טקסט מוטבע מספר 1 0
    טקסט מוטבע #2 1
    מאגר נתונים של חיפוש מבוסס-סוכנים מס' 1 2
    טקסט מוטבע #3 3
    מאגר נתונים של חיפוש מבוסס סוכנים מס' 2 4

    האינדקס הזה מצוין בתגובה ועוזר לעקוב אחרי המקור.

  • מפרטי יצירה: המפרטים להגדרת המודל, שכוללים את המידע הבא:

    • מספר המודל: מציין את מודל Gemini של Vertex AI שבו יש להשתמש ליצירת תשובות. רשימת מודלים של Gemini שבהם אפשר להשתמש כדי ליצור תשובות מבוססות-קרקע זמינה במאמר מודלים של Gemini.

    • פרמטרים של המודל: מציינים את הפרמטרים שאפשר להגדיר למודל שבוחרים להשתמש בו. הפרמטרים האלה הם: שפה, רמת אקראיות, Top-P ו-Top-K. פרטים על הפרמטרים האלה מופיעים במאמר פרמטרים של מודלים של Gemini.

  • קוד שפה: השפה של התשובה שנוצרה בדרך כלל תואמת לשפה של ההנחיה. אם אין שפה אחת בהנחיה (לדוגמה, אם ההנחיה קצרה מאוד ויכולה להיות תקפה בכמה שפות), שדה קוד השפה קובע את שפת התשובה.

    רשימת קודי השפות מופיעה במאמר שפות.

  • Latitude and longitude: מציינים את קו הרוחב וקו האורך של המשתמש. אם השאילתה מכילה שאלות שקשורות למיקום, כמו 'תמצא בית קפה בקרבת מקום', נעשה שימוש בשדות האלה. אם אי אפשר לקבוע את שפת השאילתה וקוד השפה לא מוגדר, המערכת משתמשת בקו הרוחב ובקו האורך כדי לקבוע את שפת התשובה.

נתוני פלט

התשובה שהמודל יוצר נקראת מועמד והיא מכילה את הנתונים הבאים. יכול להיות שלא כל השדות יופיעו בפלט.

  • תפקיד: השולח של התשובה המבוססת. התשובה תמיד מכילה את הטקסט של התשובה המבוססת על מידע. לכן, התפקיד בתשובה הוא תמיד מודל.

  • טקסט: תשובה מבוססת.

  • ציון ההצמדה לקרקע: ערך מסוג float בטווח [0, 1] שמציין עד כמה התשובה מבוססת על המקורות שצוינו.

  • מטא-נתונים של ביסוס: מטא-נתונים על מקור הביסוס. מטא-נתונים של ביסוס כוללים את הפרטים הבאים:

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

      • קטע טקסט: חלק מהטקסט שצוטט מילה במילה מהמקור שממנו נלקחה התשובה או חלק מהתשובה (שנקרא טקסט הטענה). יכול להיות שהמידע הזה לא יופיע תמיד בתשובה.
      • מקור: אינדקס שמוקצה למקור בבקשה.
      • מטא-נתונים של המקור: מטא-נתונים על החלק. בהתאם למקור, המטא-נתונים של המקור יכולים להיות כל אחד מהבאים:

        • במקרה של מקור מוטבע, המטא-נתונים יכולים להיות הפרטים הנוספים שצוינו בבקשה, כמו שם, מחבר או URI.
        • במאגר הנתונים של חיפוש מבוסס סוכנים, המטא-נתונים יכולים להיות מזהה המסמך, שם המסמך, ה-URI (המיקום ב-Cloud Storage) או מספר הדף.
        • ב-Grounding with Google Search, כשנוצרת תוצאה מבוססת, המטא-נתונים מכילים מזהה URI שמפנה מחדש לבעל התוכן ששימש ליצירת התוצאה המבוססת. המטא-נתונים כוללים גם את הדומיין של המוציא לאור. כתובות ה-URI שסופקו נשארות נגישות למשך 30 יום לכל היותר אחרי יצירת התוצאה המבוססת.
    • תמיכה בהצגת מקורות מידע: הצגת מקורות מידע לתמיכה בטענה בתשובה. התמיכה בהארקה כוללת את המידע הבא:

      • טקסט הטענה: התשובה או חלק מהתשובה שמגובות בטקסט של קטע התמיכה.
      • Support chunk index: אינדקס שמוקצה לחלק התומך בסדר שבו החלק מופיע ברשימת החלקים התומכים.
      • שאילתות חיפוש באינטרנט: הצעות לשאילתות חיפוש בחיפוש Google.
      • הצעות לחיפוש: אם אתם מקבלים הצעות לחיפוש Google עם תשובה, התשובה הזו היא "תוצאה עם ביסוס" בכפוף לתנאי השירות של עיגון באמצעות חיפוש Google. מידע נוסף זמין במאמר בנושא תנאי השירות. השדה renderedContent בתוך השדה searchEntryPoint הוא הקוד שסופק להטמעה של הצעות לחיפוש Google. כדי להשתמש בהצעות לחיפוש ב-Google, אפשר לעיין במאמר בנושא שימוש בהצעות לחיפוש ב-Google.

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

בקטע הזה מוסבר איך ליצור תשובות שמבוססות על המקורות הבאים:

התשובה תהיה מבוססת על טקסט מוטבע ומאגר נתונים של חיפוש מבוסס סוכנים

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

REST

  1. שולחים את ההנחיה בבקשת curl הבאה.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_NUMBER/locations/global:generateGroundedContent" \
    -d '
    {
    "contents": [
     {
       "role": "user",
       "parts": [
         {
           "text": "PROMPT_TEXT"
         }
       ]
     }
    ],
    "systemInstruction": {
       "parts": {
           "text": "SYSTEM_INSTRUCTION"
       }
    },
    "groundingSpec": {
     "groundingSources": [
       {
         "inlineSource": {
           "groundingFacts": [
             {
               "factText": "FACT_TEXT_1",
               "attributes": {
                 "title": "TITLE_1",
                 "uri": "URI_1",
                 "author": "AUTHOR_1"
               }
             }
           ]
         }
       },
       {
         "inlineSource": {
           "groundingFacts": [
             {
               "factText": "FACT_TEXT_2",
               "attributes": {
                 "title": "TITLE_2",
                 "uri": "URI_2"
               }
             },
             {
               "factText": "FACT_TEXT_3",
               "attributes": {
                 "title": "TITLE_3",
                 "uri": "URI_3"
               }
             }
           ]
         }
       },
       {
         "searchSource": {
           "servingConfig": "projects/PROJECT_NUMBER/locations/global/collections/default_collection/engines/APP_ID_1/servingConfigs/default_search"
         }
       },
       {
         "searchSource": {
           "servingConfig": "projects/PROJECT_NUMBER/locations/global/collections/default_collection/engines/APP_ID_2/servingConfigs/default_search"
         }
       }
      ]
    },
    "generationSpec": {
      "modelId": "MODEL_ID",
      "temperature": TEMPERATURE,
      "topP": TOP_P,
      "topK": TOP_K
    },
    "user_context": {
      "languageCode: "LANGUAGE_CODE",
      "latLng": {
        "latitude": LATITUDE,
        "longitude": LONGITUDE
     },
    }
    }'
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_NUMBER: מספר הפרויקט ב- Google Cloud .
    • PROMPT_TEXT: ההנחיה מהמשתמש.
    • SYSTEM_INSTRUCTION: שדה אופציונלי שבו אפשר לספק הקדמה או הקשר נוסף.
    • FACT_TEXT_N: הטקסט שמופיע בשורה כדי להצדיק את התשובה. אפשר לספק עד 100 טקסטים של עובדות.
    • TITLE_N: שדה אופציונלי להגדרת מאפיין המטא של הכותרת לטקסט בתוך התג.
    • URI_N: שדה אופציונלי להגדרת מאפיין המטא של ה-URI עבור הטקסט בתוך התג.
    • AUTHOR_N: שדה אופציונלי להגדרת מאפיין מטא של מחבר לטקסט בתוך התג.
    • APP_ID_N: המזהה של אפליקציית חיפוש מבוסס סוכנים.
    • MODEL_ID: שדה אופציונלי להגדרת מזהה המודל של מודל Gemini שבו רוצים להשתמש כדי ליצור את התשובה המבוססת. רשימה של מזהי המודלים הזמינים מופיעה במאמר מודלים של Gemini במסמכי המוצר בנושא AI גנרטיבי ב-Vertex AI.
    • TEMPERATURE: שדה אופציונלי להגדרת רמת האקראיות שמשמשת לדגימה. ‫Google ממליצה על רמת אקראיות של 0.0. מידע נוסף זמין במאמר פרמטרים של מודל Gemini.
    • TOP_P: שדה אופציונלי להגדרת ערך top-P של המודל. מידע נוסף זמין במאמר פרמטרים של מודל Gemini.
    • TOP_K: שדה אופציונלי להגדרת ערך ה-K העליון של המודל. מידע נוסף זמין במאמר פרמטרים של מודל Gemini.
    • LANGUAGE_CODE: שדה אופציונלי שאפשר להשתמש בו כדי להגדיר את השפה של התשובה שנוצרה ושל הטקסט של החלק שמוחזר. אם אי אפשר לקבוע את השפה מהשאילתה, נעשה שימוש בשדה הזה. ערך ברירת המחדל הוא en. רשימת קודי שפה זמינה במאמר שפות.
    • LATITUDE: שדה אופציונלי להגדרת קו הרוחב. מזינים את הערך במעלות עשרוניות – לדוגמה, -25.34.
    • LONGITUDE: שדה אופציונלי להגדרת קו האורך. מזינים את הערך במעלות עשרוניות – לדוגמה, 131.04.

דוגמה ליצירת תשובה בשיחה חד-תורית שמבוססת על טקסט מוטבע ועל חיפוש באמצעות סוכן

בדוגמה הבאה, הבקשה מציינת את מקורות העיגון הבאים: עובדה טקסטואלית מוטמעת אחת ומאגר נתונים אחד של חיפוש מבוסס סוכנים. בדוגמה הזו נעשה שימוש בשיטה generateGroundedContent. בדוגמה הזו נעשה שימוש גם בהוראה למערכת לסיים את התשובה עם אמוג'י של פרצוף מחייך.

REST

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://discoveryengine.googleapis.com/v1/projects/123456/locations/global:generateGroundedContent" \
-d '
{
  "contents": [
    {
      "role": "user",
      "parts": [
        {
          "text": "How did Google do in 2020? Where can I find BigQuery docs?"
        }
      ]
    }
  ],
  "systemInstruction": {
      "parts": {
          "text": "Add a smiley emoji after the answer."
      }
  },
  "groundingSpec": {
    "groundingSources": [
      {
        "inline_source": {
          "grounding_facts": [
            {
              "fact_text": "The BigQuery documentation can be found at https://cloud.google.com/bigquery/docs/introduction",
              "attributes": {
                "title": "BigQuery Overview",
                "uri": "https://cloud.google.com/bigquery/docs/introduction"
              }
            }
          ]
        }
      },
      {
        "searchSource": {
          "servingConfig": "projects/123456/locations/global/collections/default_collection/engines/app_id_example/servingConfigs/default_search"
        }
      }
    ]
  },
  "generationSpec": {
    "modelId": "gemini-2.5-flash"
  },
  "user_context": {
    "languageCode: "en",
    "latLng": {
       "latitude": 37.422131,
       "longitude": -122.084801
    }
  }
}'

Python

from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_number = "YOUR_PROJECT_NUMBER"
# engine_id = "YOUR_ENGINE_ID"

client = discoveryengine.GroundedGenerationServiceClient()

request = discoveryengine.GenerateGroundedContentRequest(
    # The full resource name of the location.
    # Format: projects/{project_number}/locations/{location}
    location=client.common_location_path(project=project_number, location="global"),
    generation_spec=discoveryengine.GenerateGroundedContentRequest.GenerationSpec(
        model_id="gemini-2.5-flash",
    ),
    # Conversation between user and model
    contents=[
        discoveryengine.GroundedGenerationContent(
            role="user",
            parts=[
                discoveryengine.GroundedGenerationContent.Part(
                    text="How did Google do in 2020? Where can I find BigQuery docs?"
                )
            ],
        )
    ],
    system_instruction=discoveryengine.GroundedGenerationContent(
        parts=[
            discoveryengine.GroundedGenerationContent.Part(
                text="Add a smiley emoji after the answer."
            )
        ],
    ),
    # What to ground on.
    grounding_spec=discoveryengine.GenerateGroundedContentRequest.GroundingSpec(
        grounding_sources=[
            discoveryengine.GenerateGroundedContentRequest.GroundingSource(
                inline_source=discoveryengine.GenerateGroundedContentRequest.GroundingSource.InlineSource(
                    grounding_facts=[
                        discoveryengine.GroundingFact(
                            fact_text=(
                                "The BigQuery documentation can be found at https://cloud.google.com/bigquery/docs/introduction"
                            ),
                            attributes={
                                "title": "BigQuery Overview",
                                "uri": "https://cloud.google.com/bigquery/docs/introduction",
                            },
                        ),
                    ]
                ),
            ),
            discoveryengine.GenerateGroundedContentRequest.GroundingSource(
                search_source=discoveryengine.GenerateGroundedContentRequest.GroundingSource.SearchSource(
                    # The full resource name of the serving config for a Vertex AI Search App
                    serving_config=f"projects/{project_number}/locations/global/collections/default_collection/engines/{engine_id}/servingConfigs/default_search",
                ),
            ),
        ]
    ),
)
response = client.generate_grounded_content(request)

# Handle the response
print(response)

יצירת תשובה מעוגנת באמצעות חיפוש Google

אפשר להוסיף לתשובות שנוצרות נתונים שזמינים לכולם באינטרנט.

אחזור דינמי

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

ציון וסף של חיזוי אחזור דינמי

כששולחים בקשה ליצירת תשובה מבוססת, התכונה 'חיפוש סוכן' מקצה לטקסט הבקשה ציון חיזוי. ציון החיזוי הוא ערך נקודה צפה (floating-point) בטווח [0,1]. הערך שלו תלוי בשאלה אם התשובה להנחיה יכולה להסתמך על המידע העדכני ביותר מחיפוש Google. לכן, הנחיה שנדרשת בה תשובה שמבוססת על העובדות העדכניות ביותר באינטרנט מקבלת ציון חיזוי גבוה יותר, והנחיה שבה תשובה שנוצרה על ידי מודל מספיקה מקבלת ציון חיזוי נמוך יותר.

הנה כמה דוגמאות להנחיות ולציוני החיזוי שלהן.

הנחיה ציון החיזוי תגובה
‫"Write a poem about peonies" ‏(תכתוב שיר על אדמוניות) 0.13 המודל יכול להסתמך על הידע שלו, ולא צריך להצמיד את התשובה למקור
‫"Suggest a toy for a 2yo child" ‏(הצעת צעצוע לילד בן שנתיים) 0.36 המודל יכול להסתמך על הידע שלו, ולא צריך להצמיד את התשובה למקור
"תנסח מתכון לגוואקמולי בסגנון אסייתי?" 0.55 חיפוש Google יכול לספק תשובה מבוססת, אבל לא בהכרח צריך לבסס אותה; יכול להיות שהידע של המודל יספיק
מה זה חיפוש מבוסס סוכנים? איך מתבצע חיוב על עיגון בחיפוש מבוסס סוכנים? 0.72 נדרש חיפוש ב-Google כדי ליצור תשובה שמבוססת על מקורות
"מי ניצח בגרנד פרי האחרון של פורמולה 1?" 0.97 נדרש חיפוש ב-Google כדי ליצור תשובה שמבוססת על מקורות

בבקשה ליצירת תשובה מבוססת-קרקע, אפשר לציין הגדרה של שליפה דינמית עם סף. הסף הוא ערך נקודה צפה בטווח [0,1], וערך ברירת המחדל הוא 0.7. אם ערך הסף הוא אפס, התשובה תמיד מבוססת על חיפוש Google. לכל שאר ערכי הסף, חלים התנאים הבאים:

  • אם ציון התחזית גדול מהסף או שווה לו, התשובה מבוססת על חיפוש Google. סף נמוך יותר מרמז שיש יותר הנחיות שהתשובות שלהן נוצרות באמצעות עיגון באמצעות חיפוש Google.
  • אם ציון החיזוי נמוך מהסף, יכול להיות שהמודל עדיין ייצור את התשובה, אבל היא לא תתבסס על חיפוש Google.

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

עיגון התשובה באמצעות חיפוש Google

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

REST

  1. שולחים את ההנחיה בבקשת curl הבאה.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_NUMBER/locations/global:generateGroundedContent" \
    -d '
    {
    "contents": [
     {
       "role": "user",
       "parts": [
         {
           "text": "PROMPT_TEXT"
         }
       ]
     }
    ],
    "systemInstruction": {
       "parts": {
           "text": "SYSTEM_INSTRUCTION"
       }
    },
    "groundingSpec": {
     "groundingSources": [
     {
         "googleSearchSource": {
              "dynamicRetrievalConfig": {
                  "predictor":{
                      "threshold": DYNAMIC_RETRIEVAL_THRESHOLD
                  }
              }
         }
     }
    ]
    },
    "generationSpec": {
     "modelId": "MODEL_ID",
     "temperature": TEMPERATURE,
     "topP": TOP_P,
     "topK": TOP_K
    },
    "user_context": {
     "languageCode: "LANGUAGE_CODE",
     "latLng": {
       "latitude": LATITUDE,
       "longitude": LONGITUDE
     },
    }
    }'
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_NUMBER: מספר הפרויקט ב- Google Cloud .
    • PROMPT_TEXT: ההנחיה מהמשתמש.
    • SYSTEM_INSTRUCTION: שדה אופציונלי שבו אפשר לספק הקדמה או הקשר נוסף.
    • DYNAMIC_RETRIEVAL_THRESHOLD: שדה אופציונלי להגדרת הסף להפעלת ההגדרה של אחזור דינמי. זהו ערך נקודה צפה (floating-point) בטווח [0,1]. אם מוסיפים את השדה dynamicRetrievalConfig, אבל לא מגדירים את השדה predictor או threshold, ערך הסף מוגדר כברירת מחדל ל-0.7. אם לא מגדירים את השדה dynamicRetrievalConfig, התשובה תמיד תהיה מבוססת על מקורות.
    • MODEL_ID: שדה אופציונלי להגדרת מזהה המודל של מודל Gemini שבו רוצים להשתמש כדי ליצור את התשובה המבוססת. רשימה של מזהי המודלים הזמינים מופיעה במאמר מודלים של Gemini במסמכי המוצר בנושא AI גנרטיבי ב-Vertex AI.
    • TEMPERATURE: שדה אופציונלי להגדרת רמת האקראיות שמשמשת לדגימה. ‫Google ממליצה על רמת אקראיות של 0.0. מידע נוסף זמין במאמר פרמטרים של מודל Gemini.
    • TOP_P: שדה אופציונלי להגדרת ערך top-P של המודל. מידע נוסף זמין במאמר פרמטרים של מודל Gemini.
    • TOP_K: שדה אופציונלי להגדרת ערך ה-K העליון של המודל. מידע נוסף זמין במאמר פרמטרים של מודל Gemini.
    • LANGUAGE_CODE: שדה אופציונלי שאפשר להשתמש בו כדי להגדיר את השפה של התשובה שנוצרה ושל הטקסט של החלק שמוחזר. אם אי אפשר לקבוע את השפה מהשאילתה, נעשה שימוש בשדה הזה. ערך ברירת המחדל הוא en. רשימת קודי שפה זמינה במאמר שפות.
    • LATITUDE: שדה אופציונלי להגדרת קו הרוחב. מזינים את הערך במעלות עשרוניות – לדוגמה, -25.34.
    • LONGITUDE: שדה אופציונלי להגדרת קו האורך. מזינים את הערך במעלות עשרוניות – לדוגמה, 131.04.

Python

from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_number = "YOUR_PROJECT_NUMBER"

client = discoveryengine.GroundedGenerationServiceClient()

request = discoveryengine.GenerateGroundedContentRequest(
    # The full resource name of the location.
    # Format: projects/{project_number}/locations/{location}
    location=client.common_location_path(project=project_number, location="global"),
    generation_spec=discoveryengine.GenerateGroundedContentRequest.GenerationSpec(
        model_id="gemini-2.5-flash",
    ),
    # Conversation between user and model
    contents=[
        discoveryengine.GroundedGenerationContent(
            role="user",
            parts=[
                discoveryengine.GroundedGenerationContent.Part(
                    text="How much is Google stock?"
                )
            ],
        )
    ],
    system_instruction=discoveryengine.GroundedGenerationContent(
        parts=[
            discoveryengine.GroundedGenerationContent.Part(text="Be comprehensive.")
        ],
    ),
    # What to ground on.
    grounding_spec=discoveryengine.GenerateGroundedContentRequest.GroundingSpec(
        grounding_sources=[
            discoveryengine.GenerateGroundedContentRequest.GroundingSource(
                google_search_source=discoveryengine.GenerateGroundedContentRequest.GroundingSource.GoogleSearchSource(
                    # Optional: For Dynamic Retrieval
                    dynamic_retrieval_config=discoveryengine.GenerateGroundedContentRequest.DynamicRetrievalConfiguration(
                        predictor=discoveryengine.GenerateGroundedContentRequest.DynamicRetrievalConfiguration.DynamicRetrievalPredictor(
                            threshold=0.7
                        )
                    )
                )
            ),
        ]
    ),
)
response = client.generate_grounded_content(request)

# Handle the response
print(response)

בדוגמה הבאה, הבקשה מציינת את חיפוש Google כמקור ההארקה. בדוגמה הזו נעשה שימוש בשיטה generateGroundedContent. בדוגמה הזו נעשה שימוש גם בהוראה למערכת לסיים את התשובה עם אמוג'י של פרצוף מחייך.

REST

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://discoveryengine.googleapis.com/v1/projects/123456/locations/global:generateGroundedContent" \
-d '
{
"contents": [{
  "role": "user",
  "parts": [{
    "text": "What is Agent Search?"
}]
}],
"systemInstruction": {
   "parts": {
      "text": "Add a smiley emoji after the answer."
   }
},
"groundingSpec": {
  "groundingSources": [
  {
      "googleSearchSource": {
        "dynamicRetrievalConfig": {
               "predictor":{
                   "threshold": 0.6
               }
           }
      }
  }
 ]
},
"generationSpec": {
  "modelId": "gemini-2.5-flash"
}
}
'

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

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

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

REST

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

  1. שולחים את ההנחיה הראשונה בבקשת curl הבאה.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_NUMBER/locations/global:generateGroundedContent" \
    -d '
    {
    "contents": [
     {
       "role": "user",
       "parts": [
         {
           "text": "PROMPT_TEXT_TURN_1"
         }
       ]
     }
    ],
    "systemInstruction": {
       "parts": {
           "text": "SYSTEM_INSTRUCTION_TURN_1"
       }
    },
    "groundingSpec": {
     "groundingSources": [
       {
         "googleSearchSource": {}
       }
     ]
    },
    "generationSpec": {
     "modelId": "MODEL_ID",
     "temperature": TEMPERATURE,
     "topP": TOP_P,
     "topK": TOP_K
    },
    "user_context": {
     "languageCode: "LANGUAGE_CODE",
     "latLng": {
       "latitude": LATITUDE,
       "longitude": LONGITUDE
     },
    }
    }'
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_NUMBER: מספר הפרויקט ב- Google Cloud .
    • PROMPT_TEXT_TURN_1: טקסט ההנחיה מהמשתמש בתור הראשון.
    • SYSTEM_INSTRUCTION_TURN_1: שדה אופציונלי שבו אפשר לספק הקדמה או הקשר נוסף. כדי ליצור תשובה רב-שלבית, צריך לספק את הוראות המערכת בכל שלב.
    • MODEL_ID: שדה אופציונלי להגדרת מזהה המודל של מודל Gemini שבו רוצים להשתמש כדי ליצור את התשובה המבוססת. רשימה של מזהי המודלים הזמינים מופיעה במאמר מודלים של Gemini במסמכי המוצר בנושא AI גנרטיבי ב-Vertex AI.
    • TEMPERATURE: שדה אופציונלי להגדרת רמת האקראיות שמשמשת לדגימה. ‫Google ממליצה על רמת אקראיות של 0.0. מידע נוסף זמין במאמר פרמטרים של מודל Gemini.
    • TOP_P: שדה אופציונלי להגדרת ערך top-P של המודל. מידע נוסף זמין במאמר פרמטרים של מודל Gemini.
    • TOP_K: שדה אופציונלי להגדרת ערך ה-K העליון של המודל. מידע נוסף זמין במאמר פרמטרים של מודל Gemini.
    • LANGUAGE_CODE: שדה אופציונלי שאפשר להשתמש בו כדי להגדיר את השפה של התשובה שנוצרה ושל הטקסט של החלק שמוחזר. אם אי אפשר לקבוע את השפה מהשאילתה, נעשה שימוש בשדה הזה. ערך ברירת המחדל הוא en. רשימת קודי שפה זמינה במאמר שפות.
    • LATITUDE: שדה אופציונלי להגדרת קו הרוחב. מזינים את הערך במעלות עשרוניות – לדוגמה, -25.34.
    • LONGITUDE: שדה אופציונלי להגדרת קו האורך. מזינים את הערך במעלות עשרוניות – לדוגמה, 131.04.
  2. שולחים את ההנחיה השנייה כהנחיית המשך. מוסיפים את ההנחיה הראשונה מהמשתמש ואת התשובה התואמת מהמודל כדי לספק הקשר.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_NUMBER/locations/global:generateGroundedContent" \
    -d '
    {
    "contents": [
     {
       "role": "user",
       "parts": [
         {
           "text": "PROMPT_TEXT_TURN_1"
         }
       ]
     },
     {
       "role": "model",
       "parts": [
         {
           "text": "ANSWER_TEXT_TURN_1"
         }
       ]
     },
     {
       "role": "user",
       "parts": [
         {
           "text": "PROMPT_TEXT_TURN_2"
         }
       ]
     }
    ],
    "systemInstruction": {
       "parts": {
           "text": "SYSTEM_INSTRUCTION_TURN_2"
       }
    },
    "groundingSpec": {
     "groundingSources": [
       {
         "googleSearchSource": {}
       }
     ]
    },
    "generationSpec": {
     "modelId": "MODEL_ID",
     "temperature": TEMPERATURE,
     "topP": TOP_P,
     "topK": TOP_K
    },
    "user_context": {
     "languageCode: "LANGUAGE_CODE",
     "latLng": {
       "latitude": LATITUDE,
       "longitude": LONGITUDE
     },
    }
    }'
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_NUMBER: מספר הפרויקט ב- Google Cloud .
    • PROMPT_TEXT_TURN_1: טקסט ההנחיה מהמשתמש בתור הראשון.
    • ANSWER_TEXT_TURN_1: טקסט התשובה מהמודל בפנייה הראשונה.
    • PROMPT_TEXT_TURN_2: טקסט ההנחיה מהמשתמש בתור השני.
    • SYSTEM_INSTRUCTION_TURN_2: שדה אופציונלי שבו אפשר לספק הקדמה או הקשר נוסף. כדי ליצור תשובה רב-שלבית, צריך לספק את הוראות המערכת בכל שלב.
    • MODEL_ID: שדה אופציונלי להגדרת מזהה המודל של מודל Gemini שבו רוצים להשתמש כדי ליצור את התשובה המבוססת. רשימה של מזהי המודלים הזמינים מופיעה במאמר מודלים של Gemini במסמכי המוצר בנושא AI גנרטיבי ב-Vertex AI.
    • TEMPERATURE: שדה אופציונלי להגדרת רמת האקראיות שמשמשת לדגימה. ‫Google ממליצה על רמת אקראיות של 0.0. מידע נוסף זמין במאמר פרמטרים של מודל Gemini.
    • TOP_P: שדה אופציונלי להגדרת ערך top-P של המודל. מידע נוסף זמין במאמר פרמטרים של מודל Gemini.
    • TOP_K: שדה אופציונלי להגדרת ערך ה-K העליון של המודל. מידע נוסף זמין במאמר פרמטרים של מודל Gemini.
    • LANGUAGE_CODE: שדה אופציונלי שאפשר להשתמש בו כדי להגדיר את השפה של התשובה שנוצרה ושל הטקסט של החלק שמוחזר. אם אי אפשר לקבוע את השפה מהשאילתה, נעשה שימוש בשדה הזה. ערך ברירת המחדל הוא en. רשימת קודי שפה זמינה במאמר שפות.
    • LATITUDE: שדה אופציונלי להגדרת קו הרוחב. מזינים את הערך במעלות עשרוניות – לדוגמה, -25.34.
    • LONGITUDE: שדה אופציונלי להגדרת קו האורך. מזינים את הערך במעלות עשרוניות – לדוגמה, 131.04.
  3. כדי לקבל תשובות נוספות, חוזרים על התהליך הזה. בכל תור, מוסיפים את כל ההנחיות הקודמות מהמשתמש ואת התשובות התואמות מהמודל.

דוגמה ליצירת תשובה רב-שלבית

בדוגמה הבאה, הבקשה מציינת שלושה טקסטים של עובדות מוטמעות כמקור לביסוס התשובות בשני תורות. בדוגמה הזו נעשה שימוש בשיטה generateGroundedContent. בדוגמה הזו נעשה שימוש גם בהוראת מערכת כדי לסיים את התשובה בתור הראשון עם אמוג'י של סמיילי.

REST

  1. שולחים את ההנחיה הראשונה בבקשת curl הבאה.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/123456/locations/global:generateGroundedContent" \
    -d '
    {
    "contents": [
     {
       "role": "user",
       "parts": [
         {
           "text": "Summarize what happened in 2023 in one paragraph."
         }
       ]
     }
    ],
    "systemInstruction": {
      "parts": {
          "text": "Add a smiley emoji after the answer."
      }
    },
    "grounding_spec": {
     "grounding_sources": [
       {
         "inline_source": {
           "grounding_facts": [
             {
               "fact_text": "In 2023, the world population surpassed 8 billion. This milestone marked a significant moment in human history, highlighting both the rapid growth of our species and the challenges of resource management and sustainability in the years to come.",
               "attributes": {
                 "title": "title_1",
                 "uri": "some-uri-1"
               }
             }
           ]
         }
       },
       {
         "inline_source": {
           "grounding_facts": [
             {
               "fact_text": "In 2023, global e-commerce sales reached an estimated $5.7 trillion. The continued rise of online shopping solidified its position as a dominant force in retail, with major implications for traditional brick-and-mortar stores and the logistics networks supporting worldwide deliveries.",
               "attributes": {
                 "title": "title_2",
                 "uri": "some-uri-2"
               }
             }
           ]
         }
       },
       {
         "inline_source": {
           "grounding_facts": [
             {
               "fact_text": "In 2023, the global average surface temperature was approximately 0.2 degrees Celsius higher than the 20th-century average. This continued the worrying trend of global warming, underscoring the urgency of worldwide climate initiatives, carbon reduction efforts, and investment in renewable energy sources.",
               "attributes": {
                 "title": "title_3",
                 "uri": "some-uri-3"
               }
             }
           ]
         }
       }
     ]
    },
    "generationSpec": {
     "modelId": "gemini-2.5-flash"
    }
    }'
    
  2. שולחים את ההנחיה השנייה כהנחיית המשך. מוסיפים את ההנחיה הראשונה מהמשתמש ואת התשובה התואמת מהמודל כדי לספק הקשר.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/123456/locations/global:generateGroundedContent" \
    -d '
    {
    "contents": [
     {
       "role": "user",
       "parts": [
         {
           "text": "Summarize what happened in 2023 in one paragraph."
         }
       ]
     },
     {
       "role": "model",
       "parts": [
         {
           "text": "In 2023, the global average surface temperature increased, the world population surpassed 8 billion, and global e-commerce sales reached an estimated $5.7 trillion.  😊 \n"
         }
       ]
     },
     {
       "role": "user",
       "parts": [
         {
           "text": "Rephrase the answer in an abstracted list."
         }
       ]
     }
    ],
    "grounding_spec": {
     "grounding_sources": [
       {
         "inline_source": {
           "grounding_facts": [
             {
               "fact_text": "In 2023, the world population surpassed 8 billion. This milestone marked a significant moment in human history, highlighting both the rapid growth of our species and the challenges of resource management and sustainability in the years to come.",
               "attributes": {
                 "title": "title_1",
                 "uri": "some-uri-1"
               }
             }
           ]
         }
       },
       {
         "inline_source": {
           "grounding_facts": [
             {
               "fact_text": "In 2023, global e-commerce sales reached an estimated $5.7 trillion. The continued rise of online shopping solidified its position as a dominant force in retail, with major implications for traditional brick-and-mortar stores and the logistics networks supporting worldwide deliveries.",
               "attributes": {
                 "title": "title_2",
                 "uri": "some-uri-2"
               }
             }
           ]
         }
       },
       {
         "inline_source": {
           "grounding_facts": [
             {
               "fact_text": "In 2023, the global average surface temperature was approximately 0.2 degrees Celsius higher than the 20th-century average. This continued the worrying trend of global warming, underscoring the urgency of worldwide climate initiatives, carbon reduction efforts, and investment in renewable energy sources.",
               "attributes": {
                 "title": "title_3",
                 "uri": "some-uri-3"
               }
             }
           ]
         }
       }
     ]
    },
    "generationSpec": {
     "modelId": "gemini-2.5-flash"
    }
    }'
    

הצגת תשובות מבוססות באופן שוטף

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

כדי לקבל תשובה מבוססת קרקע שמוזרמת, פועלים לפי השלבים הבאים:

REST

בדוגמה הבאה אפשר לראות איך להזרים תשובה מבוססת. בדוגמה הזו נעשה שימוש בשיטה streamGenerateGroundedContent והתשובה מבוססת על חיפוש Google בלי הגדרת אחזור דינמי. אפשר להשתמש בשלבים דומים כדי ליצור תשובות שמבוססות על מקורות באמצעות מקורות אחרים.

  1. שולחים את ההנחיה בבקשת curl הבאה.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1alpha/projects/PROJECT_NUMBER/locations/global:streamGenerateGroundedContent" \
    -d '
    [
    {
     "contents": [
       {
         "role": "user",
         "parts": [
           {
             "text": "PROMPT_TEXT"
           }
         ]
       }
     ],
     "systemInstruction": {
         "parts": {
             "text": "SYSTEM_INSTRUCTION"
         }
     },
     "groundingSpec": {
       "groundingSources": [
         {
           "googleSearchSource": {}
         }
       ]
     },
    "generationSpec": {
     "modelId": "MODEL_ID",
     "temperature": TEMPERATURE,
     "topP": TOP_P,
     "topK": TOP_K
    },
    "user_context": {
     "languageCode: "LANGUAGE_CODE",
     "latLng": {
       "latitude": LATITUDE,
       "longitude": LONGITUDE
     },
    }
    }
    ]'
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_NUMBER: מספר הפרויקט ב- Google Cloud .
    • PROMPT_TEXT: ההנחיה מהמשתמש.
    • SYSTEM_INSTRUCTION: שדה אופציונלי שבו אפשר לספק הקדמה או הקשר נוסף.
    • MODEL_ID: שדה אופציונלי להגדרת מזהה המודל של מודל Gemini שבו רוצים להשתמש כדי ליצור את התשובה המבוססת. רשימה של מזהי המודלים הזמינים מופיעה במאמר מודלים של Gemini במסמכי המוצר בנושא AI גנרטיבי ב-Vertex AI.
    • TEMPERATURE: שדה אופציונלי להגדרת רמת האקראיות שמשמשת לדגימה. ‫Google ממליצה על רמת אקראיות של 0.0. מידע נוסף זמין במאמר פרמטרים של מודל Gemini.
    • TOP_P: שדה אופציונלי להגדרת ערך top-P של המודל. מידע נוסף זמין במאמר פרמטרים של מודל Gemini.
    • TOP_K: שדה אופציונלי להגדרת ערך ה-K העליון של המודל. מידע נוסף זמין במאמר פרמטרים של מודל Gemini.
    • LANGUAGE_CODE: שדה אופציונלי שאפשר להשתמש בו כדי להגדיר את השפה של התשובה שנוצרה ושל הטקסט של החלק שמוחזר. אם אי אפשר לקבוע את השפה מהשאילתה, נעשה שימוש בשדה הזה. ערך ברירת המחדל הוא en. רשימת קודי שפה זמינה במאמר שפות.
    • LATITUDE: שדה אופציונלי להגדרת קו הרוחב. מזינים את הערך במעלות עשרוניות – לדוגמה, -25.34.
    • LONGITUDE: שדה אופציונלי להגדרת קו האורך. מזינים את הערך במעלות עשרוניות – לדוגמה, 131.04.

Python

from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"

client = discoveryengine.GroundedGenerationServiceClient()

request = discoveryengine.GenerateGroundedContentRequest(
    # The full resource name of the location.
    # Format: projects/{project_number}/locations/{location}
    location=client.common_location_path(project=project_number, location="global"),
    generation_spec=discoveryengine.GenerateGroundedContentRequest.GenerationSpec(
        model_id="gemini-2.5-flash",
    ),
    # Conversation between user and model
    contents=[
        discoveryengine.GroundedGenerationContent(
            role="user",
            parts=[
                discoveryengine.GroundedGenerationContent.Part(
                    text="Summarize how to delete a data store in Vertex AI Agent Builder?"
                )
            ],
        )
    ],
    grounding_spec=discoveryengine.GenerateGroundedContentRequest.GroundingSpec(
        grounding_sources=[
            discoveryengine.GenerateGroundedContentRequest.GroundingSource(
                google_search_source=discoveryengine.GenerateGroundedContentRequest.GroundingSource.GoogleSearchSource()
            ),
        ]
    ),
)
responses = client.stream_generate_grounded_content(iter([request]))

for response in responses:
    # Handle the response
    print(response)

דוגמה לשידור תשובות מבוססות

בדוגמה הבאה, הבקשה מציינת את חיפוש Google כמקור המידע להזרמת תשובה בלי הגדרת אחזור דינמי. התשובה שמוזרמת מחולקת לכמה תשובות אפשריות. בדוגמה הזו נעשה שימוש בשיטה streamGenerateGroundedContent.

REST

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://discoveryengine.googleapis.com/v1alpha/projects/123456/locations/global:streamGenerateGroundedContent" \
-d '
[
{
  "contents": [
    {
      "role": "user",
      "parts": [
        {
          "text": "Summarize How to delete a data store in Agent Search?"
        }
      ]
    }
  ],
  "groundingSpec": {
    "groundingSources": [
      {
        "googleSearchSource": {}
      }
    ]
  },
  "generationSpec": {
    "modelId": "gemini-2.5-flash"
  }
}
]'

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

כאן מוסבר איך להשתמש בשיטת היצירה המבוססת על נתונים עם ממשקי API אחרים של RAG כדי ליצור תשובות מבוססות-נתונים מנתונים לא מובנים.