דירוג מחדש של תוצאות חיפוש באמצעות VertexRanker

Agent Retrieval (לשעבר חיפוש וקטורי 2.0) מספקת את VertexRanker לדירוג מחדש סמנטי, שמבוסס על Ranking API.

אחרי ש-Agent Retrieval מאחזר וממזג תוצאות פוטנציאליות (באמצעות Reciprocal Rank Fusion‏ (RRF)), ‏ VertexRanker מבצע ניקוד מחדש של התוצאות הממוזגות בהתאם לשאילתה בשפה טבעית באמצעות מודל סמנטי ייעודי. כך משתפרת הרלוונטיות של k התוצאות המובילות, במיוחד בשאילתות שבהן החיפוש לבדו לא מצליח לזהות ניואנסים. הדירוג מחדש מתבצע בצד השרת באמצעות קריאות אל BatchSearchDataObjects. אין צורך בחיבורים נוספים בצד הלקוח או בהעברות נוספות.

VertexRanker

‫VertexRanker מוגדר ככלי לדירוג מחדש של השדה combine.ranker באובייקט BatchSearchDataObjectsRequest. צריך להגדיר דירוג ראשי (רק RRF נתמך). הדירוג מחדש מתבצע אחרי שלב המיזוג של RRF, והפלט מוחלף ברשימה עם הניקוד הסמנטי.

בטבלה הבאה מפורטים שדות ההגדרה של כלי הדירוג.

שדה חובה תיאור
combine.ranker.rrf.weights כן המשקלים של מיזוג RRF של תוצאות החיפוש הבסיסיות.
combine.ranker.vertex_ranker.model כן שם מודל הדירוג. ערכים נתמכים: semantic-ranker-fast@latest, ‏ semantic-ranker-default@latest, ‏ semantic-ranker-fast-004, ‏ semantic-ranker-default-004. פרטים על כל אחד מהם מופיעים במאמר בנושא מודלים של Ranking API.
combine.ranker.vertex_ranker.top_n כן המספר המקסימלי של מועמדים מהרשימה המאוחדת שיישלחו למערכת הדירוג. הערכים התקינים הם מ-1 עד 1000.
combine.ranker.vertex_ranker.text_record_spec.query כן שאילתה בשפה טבעית שמשמשת את הכלי לדירוג כדי לתת ניקוד לרשומות.
combine.ranker.vertex_ranker.text_record_spec.title_template כן מחרוזת התבנית, למשל {title}, שמציינת איך לחלץ (לבנות) את הכותרת של כל רשומה. משתמשים בנתיבי נקודות כדי לציין שדות נתונים.
combine.ranker.vertex_ranker.text_record_spec.content_template כן מחרוזת התבנית, למשל {body.text}, שמציינת איך לחלץ (לבנות) את התוכן הראשי של כל רשומה. משתמשים בנתיבי נקודות כדי לציין שדות נתונים.
combine.top_k אופציונלי מספר התוצאות הסופי שיוחזר אחרי הדירוג מחדש. הערך הזה חייב להיות קטן מ-vertex_ranker.top_n או שווה לו, וגם קטן מ-1,000 או שווה לו.

בדוגמה הבאה מוצג גוף הבקשה.

{
  "searches": [
    { "semantic_search": { "search_text": "running shoes", "search_field": "embedding", "task_type": "RETRIEVAL_QUERY", "top_k": 50 } },
    { "text_search":     { "search_text": "running shoes", "data_field_names": ["title"], "top_k": 50 } }
  ],
  "combine": {
    "top_k": 10,
    "ranker": {
      "rrf": { "weights": [1.0, 1.0] },
      "vertex_ranker": {
        "model": "semantic-ranker-fast@latest",
        "top_n": 50,
        "text_record_spec": {
          "query": "running shoes",
          "title_template": "{title}",
          "content_template": "{body.text}"
        }
      }
    }
  }
}

בתבניות משתמשים בנתיבי נקודות לשדות נתונים של אובייקט נתונים, לדוגמה, {title} או {nested.field}. השדות האלה חייבים להופיע בסכימת הקולקציה, אחרת הבקשה תידחה במהלך האימות. אם חסר שדה שצוין באובייקט נתונים, השרת מאחזר מחדש באופן שקוף את הרשומה המלאה מהאחסון כדי שאפשר יהיה לאכלס את התבנית.

מכסה ותמחור

‫VertexRanker on Agent Retrieval משתמש בהקצאה של תוכנית ללא תשלום עם חיוב על חריגה שמבוסס על שימוש. בכל פרויקט מקבלים מכסה חינמית של שימוש בדירוג לכל תקופה של 30 יום. השימוש במסגרת המכסה הזו לא כרוך בעלות. על כל שימוש מעבר למכסה הזו יחול התמחור הרגיל של Ranking API בפרויקט הצרכן.

בטבלה הבאה מפורטים ערכי המכסה.

פריט ערך
הקצאה בתוכנית בחינם ‫80,000 יחידות דירוג לכל פרויקט צרכן לכל תקופה של 30 ימים.
מעבר למכסה החיוב מתבצע לפי תמחור ה-API הרגיל של הדירוג בפרויקט הצרכן.
מספר הרשומות המקסימלי לכל קריאה לדירוג מחדש ‫1000 (top_n חייב להיות בטווח [1, 1000] ו-top_k <= top_n).

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

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

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

טיפול בכשלים ואזהרות

‫VertexRanker הוא כלי לדירוג מחדש שפועל על בסיס המאמץ הטוב ביותר. אם קריאת הדירוג נכשלת, ה-RPC‏ BatchSearchDataObjects עדיין מצליח ומחזיר את התוצאות המשולבות של RRF שקוצצו ל-top_k. השגיאה מדווחת בשדה search_response_metadata.warnings בתשובה. קוד הסטטוס המלא מ-Ranking API נשמר. קוד האזהרה לסטטוסים לא צפויים הוא UNAVAILABLE עם הודעת האזהרה: "Reranking is temporarily unavailable. Returning fused (RRF) results without semantic reranking."

תנאי הכשל

כל ה-RPC‏ BatchSearchDataObjects נכשל עם FAILED_PRECONDITION (אין חזרה ל-RRF) במקרים הבאים.

  • ‫Discovery Engine API לא מופעל – Ranking API מחזיר את השגיאה FAILED_PRECONDITION עם ההודעה Discovery Engine API is not enabled for the consumer project /<N/>. Please enable the API and try again.". כדי לפתור את הבעיה, צריך להפעיל את Discovery Engine API בפרויקט הצרכן.

הלקוח צריך להפעיל את Discovery Engine בפרויקט הצרכן כדי שהדירוג מחדש יתבצע.

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

קוד אזהרה סיבה אופיינית הודעת אזהרה
RESOURCE_EXHAUSTED חריגה ממכסת Ranking API בפרויקט הצרכן. הערה: חריגה ממכסת יחידות הדירוג (80,000) לא גורמת להצגת האזהרה הזו, אלא לחיוב על חריגה. <Quota exceeded message>; RankService.Rank call failed for consumer project <N> with request query: <query> and <model>: semantic-ranker-fast@latest number of records: <N>
DEADLINE_EXCEEDED הבקשה של Ranker.Rank לא הושלמה עד המועד האחרון. <deadline-exceeded message from Ranker.Rank>; RankService.Rank call failed for consumer project <N> with request query: <query> and <model>: semantic-ranker-fast@latest number of records: <N>
UNAVAILABLE הפונקציה מחזירה Ranker.Rank UNAVAILABLE, או קוד שלא נשמר (לדוגמה, INTERNAL) שמתכווץ ל-UNAVAILABLE. אם קוד הבסיס הוא UNAVAILABLE: "RankService.Rank call failed for consumer project...

אחרת: "Reranking is temporarily unavailable. Returning fused (RRF) results without semantic reranking."
FAILED_PRECONDITION כל FAILED_PRECONDITION שמוחזר על ידי ה-Ranking API. RankService.Rank call failed for consumer project <N> with request query: <query> and <model>: semantic-ranker-fast@latest number of records: <N>
CANCELLED המתקשר ביטל את BatchSearchDataObjects RPC לפני שהדירוג מחדש הושלם. <cancellation message from the cancelled RankService.Rank RPC>; RankService.Rank call failed for consumer project <N> with request query: <query> and <model>: semantic-ranker-fast@latest number of records: <N>