שיפור האיכות של חיפוש ו-RAG באמצעות API לדירוג

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

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

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

בדף הזה מוסבר איך להשתמש ב-Ranking API כדי לדרג קבוצה של מסמכים על סמך שאילתה.

תרחישים לדוגמה

תרחיש השימוש העיקרי של ה-API לדירוג הוא שיפור האיכות של תוצאות החיפוש.

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

  • איך מוצאים את התוכן המתאים להארקה של מודל LLM

  • שיפור הרלוונטיות של חוויית חיפוש קיימת

  • זיהוי חלקים רלוונטיים במסמך

בתרשים הבא מוסבר איך אפשר להשתמש ב-Ranking API כדי לשפר את איכות התוצאות במסמכים עם נתונים בחלקים:

  1. משתמשים ב-Document AI Layout Parser API כדי לפצל קבוצה של מסמכים לחלקים.

  2. משתמשים ב-API של הטמעות כדי ליצור הטמעות לכל אחד מהחלקים.

  3. טוענים את ההטמעות ל-Vector Search או לפתרון חיפוש אחר.

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

  5. מדרגים מחדש את החלקים הרלוונטיים באמצעות ה-API לדירוג.

נתוני קלט

כדי להשתמש ב-Ranking API, צריך להזין את הפרטים הבאים:

  • השאילתה שלפיה מדרגים את הרשומות.

    לדוגמה:

    "query": "Why is the sky blue?"
    
  • קבוצת רשומות שרלוונטיות לשאילתה. הרשומות מסופקות כמערך של אובייקטים. כל רשומה יכולה לכלול מזהה ייחודי, כותרת ותוכן המסמך. לכל רשומה צריך לכלול כותרת, תוכן או את שניהם. מספר האסימונים המקסימלי שנתמך לכל רשומה תלוי בגרסת המודל שבה נעשה שימוש. לדוגמה, מודלים עד גרסה 003 תומכים ב-512 טוקנים, בעוד שגרסה 004 תומכת ב-1,024 טוקנים. אם האורך המשולב של הכותרת והתוכן חורג ממגבלת הטוקנים של המודל, התוכן העודף נחתך. אפשר לכלול עד 200 רשומות בכל בקשה.

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

    "records": [
       {
           "id": "1",
           "title": "The Color of the Sky: A Poem",
           "content": "A canvas stretched across the day,\nWhere sunlight learns to dance and play.\nBlue, a hue of scattered light,\nA gentle whisper, soft and bright."
       },
       {
           "id": "2",
           "title": "The Science of a Blue Sky",
           "content": "The sky appears blue due to a phenomenon called Rayleigh scattering. Sunlight is comprised of all the colors of the rainbow. Blue light has shorter wavelengths than other colors, and is thus scattered more easily."
       }
    ]
    
  • אופציונלי: המספר המקסימלי של רשומות שרוצים שממשק ה-API לדירוג יחזיר. כברירת מחדל, כל הרשומות מוחזרות, אבל אפשר להשתמש בשדה topN כדי להחזיר פחות רשומות. כל הרשומות מדורגות, לא משנה איזה ערך מוגדר.

    לדוגמה, הפקודה הזו מחזירה את 10 הרשומות המובילות:

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

    לדוגמה, אם מגדירים את הערך true, מוחזר רק מזהה הרשומה, ולא הכותרת או התוכן:

    "ignoreRecordDetailsInResponse": true,
    
  • אופציונלי: שם המודל. ההגדרה הזו מציינת את המודל שישמש לדירוג המסמכים. אם לא מציינים מודל, המערכת משתמשת ב-semantic-ranker-default@latest, שמפנה אוטומטית למודל הזמין האחרון. כדי להפנות למודל ספציפי, מציינים אחד משמות המודלים שמופיעים במודלים נתמכים, למשל semantic-ranker-512-003.

    בדוגמה הבאה, הערך model מוגדר ל-semantic-ranker-default@latest. המשמעות היא ש-Ranking API תמיד ישתמש במודל הזמין העדכני ביותר.

    "model": "semantic-ranker-default@latest"
    

נתוני פלט

ממשק ה-API של הדירוג מחזיר רשימה מדורגת של רשומות עם הפלטים הבאים:

  • ציון: ערך מספרי עשרוני בין 0 ל-1 שמציין את הרלוונטיות של הרשומה.

  • ‫ID: המזהה הייחודי של הרשומה.

  • אם נדרש, האובייקט המלא: המזהה, השם והתוכן.

    לדוגמה:

{
    "records": [
        {
            "id": "2",
            "score": 0.98,
            "title": "The Science of a Blue Sky",
            "content": "The sky appears blue due to a phenomenon called Rayleigh scattering. Sunlight is comprised of all the colors of the rainbow. Blue light has shorter wavelengths than other colors, and is thus scattered more easily."
        },
        {
            "id": "1",
            "score": 0.64,
            "title": "The Color of the Sky: A Poem",
            "content": "A canvas stretched across the day,\nWhere sunlight learns to dance and play.\nBlue, a hue of scattered light,\nA gentle whisper, soft and bright."
        }
    ]
}

דירוג (או דירוג מחדש) של קבוצת רשומות לפי שאילתה

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

  1. מקבלים את השאילתה ואת הרשומות שמתקבלות. מוודאים שלכל רשומה יש מזהה וגם כותרת, תוכן או שניהם.

    מספר האסימונים המקסימלי שנתמך לכל רשומה תלוי בגרסת המודל. מודלים עד גרסה 003, כמו semantic-ranker-512-003, תומכים ב-512 טוקנים לכל רשומה. החל מגרסה 004, המגבלה הזו גדלה ל-1,024 טוקנים. אם האורך המשולב של הכותרת והתוכן חורג ממגבלת הטוקנים של המודל, התוכן העודף נחתך.

  2. מבצעים קריאה ל-rankingConfigs.rank באמצעות הקוד הבא:

REST

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-H "X-Goog-User-Project: PROJECT_ID" \
"https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/rankingConfigs/default_ranking_config:rank" \
-d '{
"model": "semantic-ranker-default@latest",
"query": "QUERY",
"records": [
    {
        "id": "RECORD_ID_1",
        "title": "TITLE_1",
        "content": "CONTENT_1"
    },
    {
        "id": "RECORD_ID_2",
        "title": "TITLE_2",
        "content": "CONTENT_2"
    },
    {
        "id": "RECORD_ID_3",
        "title": "TITLE_3",
        "content": "CONTENT_3"
    }
]
}'

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

  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • QUERY: השאילתה שלפיה הרשומות ממוינות ומקבלות ניקוד.
  • RECORD_ID_n: מחרוזת ייחודית שמזהה את הרשומה.
  • TITLE_n: השם של הרשומה.
  • CONTENT_n: התוכן של הרשומה.

מידע כללי על השיטה הזו זמין במאמר rankingConfigs.rank.

כאן אפשר לראות דוגמה לפקודת curl ולתשובה.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: my-project-123" \
    "https://discoveryengine.googleapis.com/v1/projects/my-project-123/locations/global/rankingConfigs/default_ranking_config:rank" \
    -d '{
        "model": "semantic-ranker-default@latest",
        "query": "what is Google gemini?",
        "records": [
            {
                "id": "1",
                "title": "Gemini",
                "content": "The Gemini zodiac symbol often depicts two figures standing side-by-side."
            },
            {
                "id": "2",
                "title": "Gemini",
                "content": "Gemini is a cutting edge large language model created by Google."
            },
            {
                "id": "3",
                "title": "Gemini Constellation",
                "content": "Gemini is a constellation that can be seen in the night sky."
            }
        ]
    }'
    
{
    "records": [
        {
            "id": "2",
            "title": "Gemini",
            "content": "Gemini is a cutting edge large language model created by Google.",
            "score": 0.97
        },
        {
            "id": "3",
            "title": "Gemini Constellation",
            "content": "Gemini is a constellation that can be seen in the night sky.",
            "score": 0.18
        },
        {
            "id": "1",
            "title": "Gemini",
            "content": "The Gemini zodiac symbol often depicts two figures standing side-by-side.",
            "score": 0.05
        }
    ]
}

Python

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

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

from google.cloud import discoveryengine_v1 as discoveryengine

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

client = discoveryengine.RankServiceClient()

# The full resource name of the ranking config.
# Format: projects/{project_id}/locations/{location}/rankingConfigs/default_ranking_config
ranking_config = client.ranking_config_path(
    project=project_id,
    location="global",
    ranking_config="default_ranking_config",
)
request = discoveryengine.RankRequest(
    ranking_config=ranking_config,
    model="semantic-ranker-default@latest",
    top_n=10,
    query="What is Google Gemini?",
    records=[
        discoveryengine.RankingRecord(
            id="1",
            title="Gemini",
            content="The Gemini zodiac symbol often depicts two figures standing side-by-side.",
        ),
        discoveryengine.RankingRecord(
            id="2",
            title="Gemini",
            content="Gemini is a cutting edge large language model created by Google.",
        ),
        discoveryengine.RankingRecord(
            id="3",
            title="Gemini Constellation",
            content="Gemini is a constellation that can be seen in the night sky.",
        ),
    ],
)

response = client.rank(request=request)

# Handle the response
print(response)

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

אלה המודלים שזמינים:

שם הדגם מודל ברירת המחדל העדכני ביותר (semantic-ranker-default@latest) המודל המהיר העדכני ביותר (semantic-ranker-fast@latest) קלט חלון ההקשר תאריך הפצה תאריך הפסקת התמיכה
semantic-ranker-default-004 כן לא טקסט (25 שפות) 1024 ‫9 באפריל 2025 עדיין לא נקבע
semantic-ranker-fast-004 לא כן טקסט (25 שפות) 1024 ‫9 באפריל 2025 עדיין לא נקבע
semantic-ranker-default-003 לא לא טקסט (25 שפות) 512 ‫10 בספטמבר 2024 עדיין לא נקבע
semantic-ranker-default-002 לא לא טקסט (באנגלית בלבד) 512 ‫3 ביוני 2024 עדיין לא נקבע

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

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