התבססות על חיפוש Google

אפשר להשתמש בתכונה 'התאמה לנושא באמצעות חיפוש Google' ב-Gemini API וב-AI Studio כדי לשפר את הדיוק ואת העדכניות של התשובות מהמודל. בנוסף לתשובות עובדתיות יותר, כשהאפשרות 'התאמה לעובדות באמצעות חיפוש Google' מופעלת, ה-API של Gemini מחזיר מקורות מידע (קישורים תומכים בתוך הטקסט) והצעות מחיפוש Google יחד עם תוכן התשובה. ההצעות לחיפוש מפנות את המשתמשים לתוצאות החיפוש התואמות לתשובה המבוססת.

המדריך הזה יעזור לכם להתחיל להשתמש ב-Grounding with Google Search באמצעות אחת מערכות ה-SDK של Gemini API או באמצעות ה-API ל-REST.

החל מגרסה 2.0 של Gemini, חיפוש Google זמין ככלי. כלומר, המודל יכול להחליט מתי להשתמש בחיפוש Google. בדוגמה הבאה מוסבר איך להגדיר את החיפוש ככלי.

from google import genai
from google.genai.types import Tool, GenerateContentConfig, GoogleSearch

client = genai.Client()
model_id = "gemini-2.0-flash"

google_search_tool = Tool(
    google_search = GoogleSearch()
)

response = client.models.generate_content(
    model=model_id,
    contents="When is the next total solar eclipse in the United States?",
    config=GenerateContentConfig(
        tools=[google_search_tool],
        response_modalities=["TEXT"],
    )
)

for each in response.candidates[0].content.parts:
    print(each.text)
# Example response:
# The next total solar eclipse visible in the contiguous United States will be on ...

# To get grounding metadata as web content.
print(response.candidates[0].grounding_metadata.search_entry_point.rendered_content)

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

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

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

התכונה 'התמקדות' בחיפוש Google פועלת בכל השפות הזמינות כשמשתמשים בהנחיות טקסט. ברמה בתשלום של Gemini Developer API, אתם יכולים לקבל בחינם 1,500 שאילתות של Grounding with Google Search ביום, ושאילתות נוספות יחויבו במחיר הרגיל של 35 $ל-1,000 שאילתות.

כדאי לנסות את המחברת של כלי החיפוש כדי לקבל מידע נוסף.

הצעות בחיפוש Google

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

אחזור מ-Google Search

אחזור דינמי

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

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

איך פועל אחזור דינמי

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

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

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

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

    הנחיה ציון החיזוי תגובה
    "כתיבת שיר על אדמוניות" 0.13 המודל יכול להסתמך על הידע שלו והתשובה לא צריכה להסתמך על נתונים.
    "Suggest a toy for a 2yo child" 0.36 המודל יכול להסתמך על הידע שלו והתשובה לא צריכה להסתמך על נתונים.
    "יש לך מתכון לגואקמולה בהשראת המטבח האסייתי?" 0.55 חיפוש Google יכול לספק תשובה מבוססת, אבל אין צורך בכך באופן מוחלט. יכול להיות שהידע של המודל יספיק.
    "מהו הכלי ליצירת סוכנים? איך מתבצע החיוב על עיגון ב-Agent Builder?" 0.72 המערכת צריכה להשתמש בחיפוש Google כדי ליצור תשובה מבוססת.
    "Who won the latest F1 grand prix?" 0.97 המערכת צריכה להשתמש בחיפוש Google כדי ליצור תשובה מבוססת.
  • סף: בבקשת ה-API, אפשר לציין הגדרה של אחזור דינמי עם סף. הסף הוא ערך נקודה צפה (floating-point) בטווח [0,1], וערך ברירת המחדל שלו הוא 0.3. אם ערך הסף הוא אפס, התגובה תמיד תתבסס על חיפוש Google. לכל שאר הערכים של הסף, חל הכלל הבא:

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

במאמר דוגמה לקוד תוכלו לקרוא איך מגדירים את סף אחזור הנתונים הדינמי באמצעות SDK או באמצעות API ל-REST.

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

תגובה מבוססת

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

{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "text": "Carlos Alcaraz won the Gentlemen's Singles title at the 2024 Wimbledon Championships. He defeated Novak Djokovic in the final, winning his second consecutive Wimbledon title and fourth Grand Slam title overall. \n"
          }
        ],
        "role": "model"
      },
      ...
      "groundingMetadata": {
        "searchEntryPoint": {
          "renderedContent": "\u003cstyle\u003e\n.container {\n  align-items: center;\n  border-radius: 8px;\n  display: flex;\n  font-family: Google Sans, Roboto, sans-serif;\n  font-size: 14px;\n  line-height: 20px;\n  padding: 8px 12px;\n}\n.chip {\n  display: inline-block;\n  border: solid 1px;\n  border-radius: 16px;\n  min-width: 14px;\n  padding: 5px 16px;\n  text-align: center;\n  user-select: none;\n  margin: 0 8px;\n  -webkit-tap-highlight-color: transparent;\n}\n.carousel {\n  overflow: auto;\n  scrollbar-width: none;\n  white-space: nowrap;\n  margin-right: -12px;\n}\n.headline {\n  display: flex;\n  margin-right: 4px;\n}\n.gradient-container {\n  position: relative;\n}\n.gradient {\n  position: absolute;\n  transform: translate(3px, -9px);\n  height: 36px;\n  width: 9px;\n}\n@media (prefers-color-scheme: light) {\n  .container {\n    background-color: #fafafa;\n    box-shadow: 0 0 0 1px #0000000f;\n  }\n  .headline-label {\n    color: #1f1f1f;\n  }\n  .chip {\n    background-color: #ffffff;\n    border-color: #d2d2d2;\n    color: #5e5e5e;\n    text-decoration: none;\n  }\n  .chip:hover {\n    background-color: #f2f2f2;\n  }\n  .chip:focus {\n    background-color: #f2f2f2;\n  }\n  .chip:active {\n    background-color: #d8d8d8;\n    border-color: #b6b6b6;\n  }\n  .logo-dark {\n    display: none;\n  }\n  .gradient {\n    background: linear-gradient(90deg, #fafafa 15%, #fafafa00 100%);\n  }\n}\n@media (prefers-color-scheme: dark) {\n  .container {\n    background-color: #1f1f1f;\n    box-shadow: 0 0 0 1px #ffffff26;\n  }\n  .headline-label {\n    color: #fff;\n  }\n  .chip {\n    background-color: #2c2c2c;\n    border-color: #3c4043;\n    color: #fff;\n    text-decoration: none;\n  }\n  .chip:hover {\n    background-color: #353536;\n  }\n  .chip:focus {\n    background-color: #353536;\n  }\n  .chip:active {\n    background-color: #464849;\n    border-color: #53575b;\n  }\n  .logo-light {\n    display: none;\n  }\n  .gradient {\n    background: linear-gradient(90deg, #1f1f1f 15%, #1f1f1f00 100%);\n  }\n}\n\u003c/style\u003e\n\u003cdiv class=\"container\"\u003e\n  \u003cdiv class=\"headline\"\u003e\n    \u003csvg class=\"logo-light\" width=\"18\" height=\"18\" viewBox=\"9 9 35 35\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\n      \u003cpath fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M42.8622 27.0064C42.8622 25.7839 42.7525 24.6084 42.5487 23.4799H26.3109V30.1568H35.5897C35.1821 32.3041 33.9596 34.1222 32.1258 35.3448V39.6864H37.7213C40.9814 36.677 42.8622 32.2571 42.8622 27.0064V27.0064Z\" fill=\"#4285F4\"/\u003e\n      \u003cpath fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M26.3109 43.8555C30.9659 43.8555 34.8687 42.3195 37.7213 39.6863L32.1258 35.3447C30.5898 36.3792 28.6306 37.0061 26.3109 37.0061C21.8282 37.0061 18.0195 33.9811 16.6559 29.906H10.9194V34.3573C13.7563 39.9841 19.5712 43.8555 26.3109 43.8555V43.8555Z\" fill=\"#34A853\"/\u003e\n      \u003cpath fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M16.6559 29.8904C16.3111 28.8559 16.1074 27.7588 16.1074 26.6146C16.1074 25.4704 16.3111 24.3733 16.6559 23.3388V18.8875H10.9194C9.74388 21.2072 9.06992 23.8247 9.06992 26.6146C9.06992 29.4045 9.74388 32.022 10.9194 34.3417L15.3864 30.8621L16.6559 29.8904V29.8904Z\" fill=\"#FBBC05\"/\u003e\n      \u003cpath fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M26.3109 16.2386C28.85 16.2386 31.107 17.1164 32.9095 18.8091L37.8466 13.8719C34.853 11.082 30.9659 9.3736 26.3109 9.3736C19.5712 9.3736 13.7563 13.245 10.9194 18.8875L16.6559 23.3388C18.0195 19.2636 21.8282 16.2386 26.3109 16.2386V16.2386Z\" fill=\"#EA4335\"/\u003e\n    \u003c/svg\u003e\n    \u003csvg class=\"logo-dark\" width=\"18\" height=\"18\" viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\n      \u003ccircle cx=\"24\" cy=\"23\" fill=\"#FFF\" r=\"22\"/\u003e\n      \u003cpath d=\"M33.76 34.26c2.75-2.56 4.49-6.37 4.49-11.26 0-.89-.08-1.84-.29-3H24.01v5.99h8.03c-.4 2.02-1.5 3.56-3.07 4.56v.75l3.91 2.97h.88z\" fill=\"#4285F4\"/\u003e\n      \u003cpath d=\"M15.58 25.77A8.845 8.845 0 0 0 24 31.86c1.92 0 3.62-.46 4.97-1.31l4.79 3.71C31.14 36.7 27.65 38 24 38c-5.93 0-11.01-3.4-13.45-8.36l.17-1.01 4.06-2.85h.8z\" fill=\"#34A853\"/\u003e\n      \u003cpath d=\"M15.59 20.21a8.864 8.864 0 0 0 0 5.58l-5.03 3.86c-.98-2-1.53-4.25-1.53-6.64 0-2.39.55-4.64 1.53-6.64l1-.22 3.81 2.98.22 1.08z\" fill=\"#FBBC05\"/\u003e\n      \u003cpath d=\"M24 14.14c2.11 0 4.02.75 5.52 1.98l4.36-4.36C31.22 9.43 27.81 8 24 8c-5.93 0-11.01 3.4-13.45 8.36l5.03 3.85A8.86 8.86 0 0 1 24 14.14z\" fill=\"#EA4335\"/\u003e\n    \u003c/svg\u003e\n    \u003cdiv class=\"gradient-container\"\u003e\u003cdiv class=\"gradient\"\u003e\u003c/div\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"carousel\"\u003e\n    \u003ca class=\"chip\" href=\"https://vertexaisearch.cloud.google.com/grounding-api-redirect/AWhgh4x8Epe-gzpwRBvp7o3RZh2m1ygq1EHktn0OWCtvTXjad4bb1zSuqfJd6OEuZZ9_SXZ_P2SvCpJM7NaFfQfiZs6064MeqXego0vSbV9LlAZoxTdbxWK1hFeqTG6kA13YJf7Fbu1SqBYM0cFM4zo0G_sD9NKYWcOCQMvDLDEJFhjrC9DM_QobBIAMq-gWN95G5tvt6_z6EuPN8QY=\"\u003ewho won wimbledon 2024\u003c/a\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n"
        },
        "groundingChunks": [
          {
            "web": {
              "uri": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/AWhgh4whET1ta3sDETZvcicd8FeNe4z0VuduVsxrT677KQRp2rYghXI0VpfYbIMVI3THcTuMwggRCbFXS_wVvW0UmGzMe9h2fyrkvsnQPJyikJasNIbjJLPX0StM4Bd694-ZVle56MmRA4YiUvwSqad1w6O2opmWnw==",
              "title": "wikipedia.org"
            }
          },
          {
            "web": {
              "uri": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/AWhgh4wR1M-9-yMPUr_KdHlnoAmQ8ZX90DtQ_vDYTjtP2oR5RH4tRP04uqKPLmesvo64BBkPeYLC2EpVDxv9ngO3S1fs2xh-e78fY4m0GAtgNlahUkm_tBm_sih5kFPc7ill9u2uwesNGUkwrQlmP2mfWNU5lMMr23HGktr6t0sV0QYlzQq7odVoBxYWlQ_sqWFH",
              "title": "wikipedia.org"
            }
          },
          {
            "web": {
              "uri": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/AWhgh4wsDmROzbP-tmt8GdwCW_pqISTZ4IRbBuoaMyaHfcQg8WW-yKRQQvMDTPAuLxJh-8_U8_iw_6JKFbQ8M9oVYtaFdWFK4gOtL4RrC9Jyqc5BNpuxp6uLEKgL5-9TggtNvO97PyCfziDFXPsxylwI1HcfQdrz3Jy7ZdOL4XM-S5rC0lF2S3VWW0IEAEtS7WX861meBYVjIuuF_mIr3spYPqWLhbAY2Spj-4_ba8DjRvmevIFUhRuESTKvBfmpxNSM",
              "title": "cbssports.com"
            }
          },
          {
            "web": {
              "uri": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/AWhgh4yzjLkorHiUKjhOPkWaZ9b4cO-cLG-02vlEl6xTBjMUjyhK04qSIclAa7heR41JQ6AAVXmNdS3WDrLOV4Wli-iezyzW8QPQ4vgnmO_egdsuxhcGk3-Fp8-yfqNLvgXFwY5mPo6QRhvplOFv0_x9mAcka18QuAXtj0SPvJfZhUEgYLCtCrucDS5XFc5HmRBcG1tqFdKSE1ihnp8KLdaWMhrUQI21hHS9",
              "title": "jagranjosh.com"
            }
          },
          {
            "web": {
              "uri": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/AWhgh4y9L4oeNGWCatFz63b9PpP3ys-Wi_zwnkUT5ji9lY7gPUJQcsmmE87q88GSdZqzcx5nZG9usot5FYk2yK-FAGvCRE6JsUQJB_W11_kJU2HVV1BTPiZ4SAgm8XDFIxpCZXnXmEx5HUfRqQm_zav7CvS2qjA2x3__qLME6Jy7R5oza1C5_aqjQu422le9CaigThS5bvJoMo-ZGcXdBUCj2CqoXNVjMA==",
              "title": "apnews.com"
            }
          }
        ],
        "groundingSupports": [
          {
            "segment": {
              "endIndex": 85,
              "text": "Carlos Alcaraz won the Gentlemen's Singles title at the 2024 Wimbledon Championships."
            },
            "groundingChunkIndices": [
              0,
              1,
              2,
              3
            ],
            "confidenceScores": [
              0.97380733,
              0.97380733,
              0.97380733,
              0.97380733
            ]
          },
          {
            "segment": {
              "startIndex": 86,
              "endIndex": 210,
              "text": "He defeated Novak Djokovic in the final, winning his second consecutive Wimbledon title and fourth Grand Slam title overall."
            },
            "groundingChunkIndices": [
              1,
              0,
              4
            ],
            "confidenceScores": [
              0.96145374,
              0.96145374,
              0.96145374
            ]
          }
        ],
        "webSearchQueries": [
          "who won wimbledon 2024"
        ]
      }
    }
  ],
  ...
}

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

כאשר נוצרת תוצאה מבוססת, המטא-נתונים מכילים מזהי URI שמפנים אוטומטית למוציאים לאור של התוכן ששימש ליצירת התוצאה המבוססת. מזהי ה-URI האלה מכילים את תת-הדומיין vertexaisearch, כמו בדוגמה המקוצרת הזו: https://vertexaisearch.cloud.google.com/grounding-api-redirect/.... המטא-נתונים מכילים גם את הדומיינים של בעלי התוכן הדיגיטלי. אפשר לגשת למזהי ה-URI שסופקו למשך 30 יום אחרי יצירת התוצאה המבוססת.

השדה renderedContent בתוך searchEntryPoint הוא הקוד שסופק להטמעת ההצעות של חיפוש Google. למידע נוסף, ראו שימוש בהצעות לחיפוש ב-Google.