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

בדף הזה מוסבר על שליפה מבוססת-סוכן ואיך משתמשים בה עם השיטה stream answers.

מידע על שליפה באמצעות סוכן

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

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

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

חיפוש משולב עם שליפה של נתונים על ידי סוכן ובלעדיה

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

לדוגמה, יש לכם מאגרי נתונים נפרדים למדיניות החברה הגלובלית ולפרטים של משרדים אזוריים. משתמש שואל: "מהם כללי התאימות למשרד שלנו בטוקיו?":

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

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

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

אחזור מבוסס-סוכן מאפשר גם לבצע שאילתות חיפוש מרובות (שאלות המשך) באפליקציות חיפוש משולב. בלי שליפה מבוססת-סוכן, חיפוש רב-שלבי פועל רק עם אפליקציות של מאגר נתונים יחיד. כדי לשמור את הקשר השיחה בכמה תורות, אפשר לשלב Agent Retrieval עם סשן של Agent Platform.

סיווג שאילתות בהתאמה אישית

השיטות answer ו-streaming answer מספקות שני סוגים של סיווג שאילתות: ADVERSARIAL_QUERY ו-NON_ANSWER_SEEKING_QUERY.

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

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

דרכים להפעיל ולאחזר מידע באמצעות סוכן AI

יש שתי דרכים להפעיל שליפה עם סוכן:

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

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

לפני שמתחילים

לפני שמשתמשים באחזור מבוסס-סוכן, צריך לבצע את הפעולות הבאות:

הגדרת מנוע הסקת מסקנות לסשנים מרובי-תורות

כדי לשמור את ההקשר של השיחה בכמה תורות, צריך ליצור מנוע (נקרא גם מנוע חשיבה רציונלית) של Agent Runtime ב-Gemini Enterprise Agent Platform.

כששולחים בקשת streamAnswer, מעבירים את שם המשאב של Agent Runtime כשדה reasoningEngine בבקשת streamAnswer.

  1. מפעילים את Agent Platform בפרויקט Google Cloud .

  2. יוצרים מופע של Agent Runtime (שנקרא גם מנוע הנימוקים) באמצעות Agent Engine REST API (או הערכה לפיתוח סוכנים). המופע מארח את הסשנים שמשמשים את השיטה streamAnswer.

    הפורמט של שם המשאב של המופע הוא:

    projects/PROJECT_NUMBER/locations/LOCATION_ID/reasoningEngines/REASONING_ENGINE_ID
  3. נותנים לסוכן השירות של Discovery Engine גישה למנוע הנימוקים על ידי הקצאת התפקיד roles/aiplatform.reasoningEngineServiceAgent לחשבון השירות של Discovery Engine:

    service-PROJECT_NUMBER@gcp-sa-discoveryengine.iam.gserviceaccount.com

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

  4. בודקים את המכסות הרלוונטיות. סשנים שמגובים על ידי Agent Runtime צורכים מכסות מ-Agent Platform API. המכסות הרלוונטיות הן:

    • ‫aiplatform.googleapis.com/session_write_requests — יצירה, מחיקה או עדכון של סשנים של Agent Runtime לדקה.

    • ‫aiplatform.googleapis.com/session_event_append_requests — צירוף אירוע להפעלות של Agent Runtime בכל דקה.

    מידע נוסף זמין במאמר בנושא מכסות של Agent Engine ב-Gemini Enterprise Agent Platform.

  5. חשוב לרשום את שם המשאב של Agent Runtime כי צריך להעביר אותו כשדה reasoningEngine בבקשת streamAnswer.

אופציונלי: הגדרת אפליקציה במצב AI בהתאמה אישית

כברירת מחדל, שליפה באמצעות סוכן משתמשת בסוכן התשובות המוגדר מראש של Google. הסיווג הזה מחלק את השאילתות לכוונות DEFAULT_ANSWER_SEEKING וDO_NOT_ANSWER. אתם יכולים ליצור אפליקציה מותאמת אישית במצב AI כשאתם רוצים להתאים אישית כלים או להוסיף תמיכה בסוגים חדשים של כוונות שאילתה. כל כוונת משתמש מותאמת אישית (או מסגרת) מצהירה על התנאים שבהם הסוכן מסווג שאילתה לפי הכוונה, ועל ההוראות והכלים שבהם הסוכן משתמש כדי לטפל בה.

  1. יוצרים את המנוע באמצעות שיטת ה-REST‏ engines.create עם בלוק engine_config.answer_agent.

    המבנה של ההגדרות הוא כזה:

    engine {
     name: "YOUR_AI_MODE_ENGINE"
     display_name: "YOUR_AI_MODE_ENGINE_DISPLAY_NAME"
     engine_config {
       answer_agent {
         frames {
           vertical_intent: "YOUR_CUSTOM_INTENT"
           vertical_intent_prompt {
             instructions: "Instructions for when to classify a user query as YOUR_CUSTOM_INTENT."
           }
           initial_prompt {
             instructions: "Instructions for the agent on how to process a user query classified as YOUR_CUSTOM_INTENT."
             tools {
               discovery_engine_search_tool_config {
                 serving_config: "YOUR_SEARCH_SERVING_CONFIG_1"
                 page_size: 10
               }
               tool_description: "This tool can help search corpus 1."
             }
             tools {
               discovery_engine_search_tool_config {
                 serving_config: "YOUR_SEARCH_SERVING_CONFIG_2"
                 page_size: 10
               }
               tool_description: "This tool can help search corpus 2."
             }
           }
         }
       }
     }
    }
    engine_id: "SAMPLE_MULTI_SEARCH_RETRIEVAL"
  2. אחרי שיוצרים את המנוע, צריך לנתב את הבקשות דרך הגדרת ההגשה שלו default_agent_answer:

    projects/*/locations/*/collections/*/engines/YOUR_AI_MODE_ENGINE/servingConfigs/default_agent_answer
  3. לקבלת עזרה בעיצוב או ברישום של אפליקציה בהתאמה אישית במצב AI, אפשר לפנות אל התמיכה.

הזרמת תשובה באמצעות אחזור מידע מבוסס-סוכן

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

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

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_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/SERVING_CONFIG_ID:streamAnswer" \
      -d '{
            "query": { "text": "QUERY" },
            "session": "SESSION",
            "enableAgentInvocation": true,
            "userPseudoId": "USER_PSEUDO_ID",
            "reasoningEngine": "projects/PROJECT_NUMBER/locations/LOCATION_ID/reasoningEngines/REASONING_ENGINE_ID"
          }'
    

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

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • APP_ID: המזהה של אפליקציית חיפוש מבוסס סוכנים שרוצים לשלוח אליה שאילתה.
    • ‫SERVING_CONFIG_ID: כדי להשתמש באפליקציה מותאמת אישית במצב AI, צריך להגדיר את הערך הזה ל-default_agent_answer. כדי להשתמש בסוכן התשובות המוגדר מראש של Google, מגדירים את הערך הזה ל-default_search.
    • ‫PROJECT_NUMBER: מספר הפרויקט שמארח את מנוע הנימוקים.
    • ‫QUERY: מחרוזת טקסט חופשי שמכילה את השאלה או את שאילתת החיפוש.
    • ‫SESSION: אם ממשיכים שיחה רב-שלבית, זהו שם משאב הסשן שמוחזר בתגובה של התור הקודם, לדוגמה, projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/sessions/SESSION_ID. אם לא ממשיכים שיחה, צריך להגדיר את הערך הזה ל--, מקף.
    • ‫USER_PSEUDO_ID: מזהה ייחודי שמשמש למעקב אחרי המבקר.
    • ‫LOCATION_ID: המיקום של מנוע ההסקה, לדוגמה us-central1.
    • ‫REASONING_ENGINE_ID: המזהה של מופע Agent Engine שיצרתם.

Python

מידע נוסף מופיע בתיעוד העזר של ה-API של חיפוש מבוסס סוכנים Python.

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

בדוגמה הבאה אנחנו משתמשים ב-client של Discovery Engine Python ‏ (v1alpha) כדי להפעיל את stream_answer_query עם הפעלת הסוכן. מעבירים את השדה reasoning_engine לסשנים רב-שלביים.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1alpha


def run_stream_answer_query():
    PROJECT_ID = "YOUR_PROJECT_ID"
    LOCATION = "global"  # or a specific region
    COLLECTION_ID = "default_collection"
    ENGINE_ID = "YOUR_ENGINE_ID"
    # Use "default_search" for the predefined Google answer agent, or
    # "default_agent_answer" if you have configured a custom AI_MODE app.
    SERVING_CONFIG_ID = "default_search"
    USER_ID = "user-id"
    QUERY_TEXT = "YOUR_QUERY_TEXT"
    REASONING_ENGINE_ID = "YOUR_REASONING_ENGINE_ID"
    # Use "-" to start a new session, or pass the sessionId returned in
    # the previous turn's response to continue an existing session.
    SESSION_ID = "-"

    SESSION_REF = (
        f"projects/{PROJECT_ID}/locations/{LOCATION}/collections/"
        f"{COLLECTION_ID}/engines/{ENGINE_ID}/sessions/{SESSION_ID}"
    )
    SERVING_CONFIG_ENGINE = (
        f"projects/{PROJECT_ID}/locations/{LOCATION}/collections/"
        f"{COLLECTION_ID}/engines/{ENGINE_ID}/servingConfigs/{SERVING_CONFIG_ID}"
    )
    REASONING_ENGINE = (
        f"projects/{PROJECT_ID}/locations/{LOCATION}/"
        f"reasoningEngines/{REASONING_ENGINE_ID}"
    )

    client_options = ClientOptions(
        api_endpoint="discoveryengine.googleapis.com"
    )

    client = discoveryengine_v1alpha.ConversationalSearchServiceClient(
        client_options=client_options
    )

    request = discoveryengine_v1alpha.AnswerQueryRequest(
        query=discoveryengine_v1alpha.Query(text=QUERY_TEXT),
        serving_config=SERVING_CONFIG_ENGINE,
        user_pseudo_id=USER_ID,
        enable_agent_invocation=True,
        session=SESSION_REF,
        reasoning_engine=REASONING_ENGINE,
    )

    print(f"Starting StreamAnswerQuery agentic session with: {request}")
    stream = client.stream_answer_query(request)

    try:
        for response in stream:
            print(f"Received response: {response}")
    except Exception as e:
        print(f"Error during streaming: {e}")


if __name__ == "__main__":
    run_stream_answer_query()

קבלת גרסת התצוגה המקדימה של Discovery Engine SDK

בעזרת Discovery Engine SDK קל יותר ליצור אינטראקציה עם Google Cloud שירותים מהאפליקציות שלכם. ערכת ה-SDK עוזרת בטיפול בשגיאות ובאימות, ומספקת תכונות כמו ניסיונות חוזרים אוטומטיים, טיפול בהחלפת דפים וניהול פעולות ארוכות טווח.

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

כדי לקבל את גרסת הטרום-השקה של Discovery Engine SDK, צריך לבצע את הפעולות הבאות:

  1. כדי לקבל גישה לתיקיית Google Drive של גרסת הטרום-השקה של ה-SDK, צריך לפנות אל התמיכה.

  2. מורידים את החבילה בשפה הרצויה.

שינויים ב-API

התכונה הזו נמצאת ברשימת ההיתרים, ולכן במסמכי העזרה של ה-API בדף השיטה streaming answer לא מוצגים כל השדות שזמינים ונדרשים לשימוש באחזור מבוסס-סוכן עם השיטה stream answer. השדות החסרים מתועדים באופן הבא.

שדות בגוף הבקשה

  • ‫enableAgentInvocation (בוליאני) – הגדרה של true למעבר לעיבוד מבוסס-סוכן עם הגדרות קיימות של הצגת תוצאות חיפוש. השדה הזה הוא אופציונלי אם מציינים answer_agent הגדרת הצגה עם אפליקציה בהתאמה אישית במצב AI.

  • ‫reasoningEngine (מחרוזת) – שם המשאב של Agent Runtime שמארח את סשנים של סוכנים, בפורמט projects/*/locations/*/reasoningEngines/*.

שדות תשובה

כשהאחזור באמצעות סוכן מופעל, כל תשובה שנוצרת על ידי Answer.Reference כוללת:

  • ‫queries (מחרוזת שחוזרת על עצמה) – רשימת השאילתות שהסוכן הגיש כדי ליצור את קובץ העזר.

שירות סשנים

‫API בארכיטקטורת REST של שירות Session לא תומך בשיטות create או update. עם זאת, היא תומכת בשיטות האחרות: list,‏ get ו-delete.

Session service RPC API לא תומך בפעולות Update או Create במשאבי סשן שמשמשים לשיחות רב-שלביות. עם זאת, הוא תומך בשירותים אחרים: פעולות List, Get ו-Delete במשאבי סשן שמשמשים לשיחות רב-שלביות.