אתגר ה Multi-Hop Reasoning במערכות ידע מבוזרות
- shlomoyona

- 2 days ago
- 6 min read
אנו ממשיכים בסדרת הפוסטים שעוסקת במעבר של ארגונים גדולים ממערכות אחזור מידע פשוטות לפלטפורמות שמשתמשות בסוכנים חכמים. בפוסט הקודם הצגנו את ההבדל בין חיפוש סמנטי קלאסי לבין הצורך של מערכות מודרניות לבצע פעולות חשיבה אוטונומיות בתוך מאגרי מידע מורכבים. הרעיון שמנחה אותנו נשאר זהה, לנתח את האתגרים הטכנולוגיים שעולים בדרך ולהציג פתרון מקצועי ומדויק עבור כל אחד מהם. ניגש כעת היישר לבעיה המרכזית שנעסוק בה הפעם, אתגר ה-Multi-Hop Reasoning במערכות ידע מבוזרות.
מפתחים בונים מערכות סוכנים מתקדמות כדי לענות על שאלות שדורשות חשיבה מורכבת וחיבור של חלקי מידע שאנחנו שומרים על פני צמתים רבים ומקורות שונים. מנגנון זה מחייב את הסוכן לבצע דילוגים סמנטיים או לוגיים בין ישויות שונות בגרף כדי להגיע לתשובה הסופית. לדוגמה, כאשר משתמש שואל על זהותו של מנהל פרויקט שהשתמש בטכנולוגיה ספציפית בעבר, על המערכת לאתר תחילה את הטכנולוגיה, למצוא פרויקטים שמקשרים אליה בעזרת קשתות מתאימות, לאתר בני אדם שעובדים באותם פרויקטים, ולבסוף למצוא את האדם שממלא את התפקיד הניהולי.
האתגר המרכזי בתהליך זה הוא תופעת סטיית ההקשר. בכל פעם שהסוכן בוחר קשת שגויה או לא מדויקת לחלוטין בשלב נתון בחיפוש, השגיאה ההסתברותית מצטברת. אם בשלב הדילוג הראשון הסוכן מזהה פרויקט שנושא שם דומה אך אינו הפרויקט הנכון, המערכת תבסס את כל פעולות עיגון המידע שהיא תבצע בשלבים הבאים על מידע שחסר תוקף לחלוטין, והתשובה הסופית תהפוך להזיה מוחלטת שאי אפשר לאתר את המקור שלה. משמעות הדבר היא שמודלים סטטיסטיים של חפיפה ווקטורית אינם מספיקים לניהול חיפושים שכוללים מספר שלבים.
צוותי פיתוח שמנסים להתמודד עם תופעה זו מפתחים לעיתים קרובות מנגנוני אימות עצמי שבהם הסוכן עוצר את פעולתו לאחר כל דילוג בודד, מאמת מול מקורות המידע או מול מודל השפה האם נתיב החיפוש עדיין תואם את כוונת השאילתה המקורית, ואז ממשיך או מתקן. מנגנונים נאיביים אלו אמנם מורידים את אחוזי הסטייה, אך הם מכפילים ואף משלשים את זמן העיבוד הכולל של השאילתה. הם דורשים קריאות מרובות וטוריות למודלי שפה כבדים, ויוצרים חוויית משתמש איטית ומסורבלת שאינה מתאימה לסביבת ייצור רציפה. חוסר היכולת לנהל מצבי ביניים מורכבים במקביל גורם למערכות רבות להיכנס ללולאות אינסופיות של חיפוש ותיקון שאינן מניבות פרי, ולבסוף להפסיק לתפקד עקב חריגה מזמני קריאה סבירים. חשוב להבהיר שטכנית, גם צומת הערכה הוא קריאה נוספת ל-LLM, גם אם למודל קטן. ההבדל אינו בהכרח בכמות הקריאות אלא במבנה שלהן, טורי מול מקבילי, ובניהול המצב.
לפני שנפנה לפתרון בית הספר שאנחנו מציעים חשוב להבין שהתיאור של הצטברות שגיאות הסתברותיות הוא מדויק. במערכות מבוססות סוכנים, טעות של 10% בשלב הראשון מחריפה והופכת לקריטית ככל שמספר הדילוגים עולה. יחד עם זאת, הצגנו את הבעיה כאילו היא נובעת בעיקר מבחירת קשת שגויה. זה נכון בהנחה שאין לנו בעיה של חוסר מידע ושאין לנו בעיה במבנה הנתונים שאינו תומך בשאילתה. תחת ההנחות הללו אכן הבעיה נובעת מניהול לא נכון של הסוכן. שום פתרון בית ספר לא יועיל אם הגרף אינו נבנה נכון ואם המידע אינו נכון.
פתרון בית הספר
התשובה לפתרון בעיית הסטייה וזמני התגובה הארוכים דורשת לנטוש את גישת העיבוד הליניארי ולעבור למבנה תוכנה שמבוסס על תורת הגרפים המכוונים כדי לשלוט בזרימת המידע. מערכות שמבוססות על מכונות מצבים מאפשרות למדל את מחזורי החשיבה והפעולה של הסוכן כגרף מכוון ציקלי בעל התפצלויות מותנות ונקודות שמירת מצב מתמשכות. בשיטה זו, אנחנו מממשים מנגנוני הערכה ותיקון שגיאות בזמן אמת בצורה מובנית בתוך זרימת הנתונים של הסוכן.
במקום לאפשר לסוכן לדלג באופן חופשי ועיוור בתוך מאגרי המידע, תכנון המערכת מגדיר צמתים לוגיים ברורים לכל שלב בפעולה. לאחר השליפה הראשונית, במקום להמשיך ישירות להפקת התשובה או לדילוג הבא בגרף הידע, המידע עובר דרך צומת הערכה קפדני. בצומת זה, מודל השפה משמש שופט ממוקד שמקבל את השאילתה המקורית ואת המידע שהסוכן אחזר, ועליו לספק הערכה בינארית לשאלת הרלוונטיות של המסמך. נעיר ש-הערכה בינארית היא לעיתים קשיחה מדי. גישות מתקדמות משתמשות בציון או ב-3 מצבים (רלוונטי, לא רלוונטי, רלוונטי בחלקו) כדי לאפשר גמישות רבה יותר בניתוב. קשת מותנית בגרף המצבים מנתבת את זרימת הנתונים על סמך ציון הרלוונטיות, וכך אם המידע רלוונטי, המערכת מתקדמת לשלב ייצור התשובה. אם הסוכן מגלה סטייה והמידע אינו עונה על השאלה, התוכנה מנתבת אותו לביצוע שכתוב.
תהליכים אלו נשענים על גישת חשיבה שבה הסוכן מבצע self-reflection כדי לנתב את עצמו בין צמתי הפעולה, על מנת לציין האם יש צורך באחזור מידע נוסף, האם המסמך רלוונטי, והאם הוא תומך באופן עובדתי בתשובה שהסוכן ייצר. כדי להתמודד עם בעיית זמני העיבוד הארוכים, ארגונים מטמיעים מודלים מהירים וייעודיים שמשמשים אך ורק לתהליכי שיפוט הרלוונטיות. מודלים אלו פועלים בזמני תגובה כמעט אפסיים ומונעים את עומס ההמתנה שמאפיין קריאות למודלים עצומים בכל שלב בדרך. בנוסף, התוכנה שומרת כל העת את מצב המערכת במבנה נתונים משותף שמאפשר לסוכן לזכור אילו נתיבים הוא כבר בדק בגרף הידע, ובכך הוא מונע לולאות חיפוש אינסופיות או חזרה על טעויות העבר.
כדי להבין לעומק את צמתי ניתוב המצבים, כדאי להכיר את התפקידים השונים שלהם במערכת הלוגית ואת הדרך שבה הם מונעים סטיות ומנהלים דילוגים ביעילות. רכיב ניהול המצב שומר את היסטוריית הפעולות, את המסמכים שהסוכן אחזר ואת כלל מצבי הביניים שלו. בכך הוא מונע חזרה על נתיבי חיפוש שגויים שהסוכן כבר בדק על ידי תיעוד הזיכרון האפיזודי והרציף. קשתות מותנות משמשות פונקציות ניתוב שמעבירות את המידע לצמתים שונים על בסיס ציוני רלוונטיות. הן עוצרות את הניווט באופן מיידי ברגע שהמערכת מזהה חריגה סמנטית בין השאילתה לתוצאה בשטח. צומת הערכה כולל פונקציית הערכה שמשתמשת בפרומפט בינארי לבדיקת טיב המסמכים שהסוכן קיבל. הוא מספק בקרה קשיחה על איכות עיגון העובדות לפני שהמערכת מאשרת את הדילוג הלוגי הבא. בנוסף, צומת שכתוב משמש מנגנון לניסוח מחדש של שאלות מורכבות על סמך כשלים קודמים שהמערכת תיעדה במצב. הוא מתקן את נתיב החיפוש ומכוון את השאילתה לישויות הנכונות ללא צורך בהתערבות משתמש. מנגנון זה של תיקון שגיאות בזמן אמת הופך את הסוכן לפעיל ומודע לעצמו, ותכונה זו מאפשרת לו לתפקד באמינות גבוהה גם כאשר הנתונים דורשים עשרות דילוגים לוגיים לרוחב מאגר הידע העצום של הארגון.
ביישום ניתוב בסוכנים, מומלץ להגדיר פונקציה ייעודית שתשמש קשת מותנית עבור צומת הערכת המסמכים. על פונקציה זו להשתמש במנתח פלט מובנה כדי לחלץ ציון בינארי פשוט ממודל השפה. אם הציון חיובי, הפונקציה תחזיר את המפתח של צומת ייצור התשובה. אם הציון שלילי, היא תחזיר את המפתח של צומת שכתוב השאילתה, ובכך תפעיל מנגנון תיקון קלאסי שסוגר את הלולאה חזרה למנגנון האחזור, תוך תיעוד ניסיון הכשל באובייקט המצב המרכזי של המערכת כדי למנוע חזרה מדויקת על אותה שאילתה. לסיום, כדאי לחשוב באילו שלבים של מחזור החשיבה נכון יותר לבצע נסיגה אל מצב זיכרון קודם כאשר מזהים סטייה משמעותית בניווט בגרף הידע. כמו כן, חשוב לתכנן כיצד למנוע הגעה ללולאות אינסופיות בתהליך התיקון העצמי כאשר המערכת מנסה את כל נתיבי הגרף הרלוונטיים ונכשלת.
גישות משלימות וחלופיות
הפתרון שתיארנו מציע מעבר לעיבוד מבוסס Graph-based State Machines בדומה לטכנולוגיית LangGraph. קהילת המפתחים רואה בגישה זו כיום את חזית הטכנולוגיה עבור סוכנים מורכבים. גישה זו מאפשרת בקרה רבה, מנהלת זיכרון אפיזודי ומונעת לולאות חזרתיות. אבל פתרון זה דורש משאבי פיתוח ותחזוקה ניכרים. הוא מחייב את המתכנת להגדיר מראש את כל זרימת המחשבה בסגנון Deterministic-ish flow. תצורה מעין זו סותרת במידה מסוימת את הגמישות שמאפיינת סוכנים אוטונומיים טהורים.
התעשייה אינה מסתמכת בלעדית על מכונות מצבים ומיישמת גישות מתחרות מקבילות. בשיטת Corrective RAG במקום לבנות גרף מצבים מסועף המערכת נעזרת במודל קטן ומהיר אך ורק לשם סינון תוצאות אחזור בטרם העברתן למודל הגדול. Corrective Rag ממומש פעמים רבות בתוך מכונת מצבים אז זאת אינה בהכרח גישה מתחרה אלא מתודולוגיה של הערכת איכות. לחלופין גישת ReAct מנחה את המודל לתעד את מחשבותיו בפורמט Chain of Thought לפני כל פעולה שהוא מבצע. מודל כזה נשלט פחות ממכונת מצבים קלאסית אך הוא מפגין גמישות רבה יותר מול בעיות שהמפתח לא חזה מראש. אוטונומיות טהורה היא לרוב חיסרון בגלל חוסר יכולת חיזוי. נדגיש שמכונת המצבים היא השלד שמאפשר חופש פעולה בתוך גבולות גזרה בטוחים.
מערכות מרובות סוכנים מפצלות את הבעיה בין מספר יישומים במקום להטיל את כל כובד המשקל על סוכן בודד. המערכת מקצה תפקידים ייעודיים כמו סוכן חוקר, סוכן כותב וסוכן שמבקר את התוצרים. הסוכן שמבקר בוחן את הפעולות של הסוכן החוקר ופותר את בעיית הסטייה דרך מנגנון של הפרדת רשויות. טכניקת Query Transformation מציגה חלופה נוספת לדילוגים פנימיים בתוך הגרף. במקרה זה המערכת מחלקת מראש שאלה מורכבת למספר שאלות מיקוד שונות ומריצה אותן במקביל. תהליך מקבילי זה חוסך את זמן העיבוד הטורי שהזכרנו באופן ביקורתי.
כאשר משווים בין הגישות השונות מתגלה תמונה מורכבת. מכונת מצבים מציעה שליטה מקסימלית ואמינות גבוהה אך סובלת ממורכבות פיתוח ומקשיחות תפעולית. מערכת מרובת סוכנים מעודדת חשיבה ביקורתית ומאפשרת ביצוע מקבילי בקלות רבה יותר אך היא צורכת כמות טוקנים גדולה ודורשת מאמץ ניכר בתיאום בין הסוכנים. טכניקת פיצול השאילתות מצטיינת במהירות ובפשטות אך אינה מתאימה למצבים שבהם צעד עוקב תלוי במידע שהתגלה רק בצעד שקדם לו.
בסופו של דבר, פתרון בית הספר שלנו תקף, אך הוא אינו האפשרות היחידה. פעמים רבות שילוב של פיצול שאילתות יחד עם מכונת מצבים פשוטה יפיק תוצאות מהירות ואיכותיות יותר. השילוב מנצח כאשר חלק מהמידע ניתן לשליפה במקביל וחלקו דורש העמקה טורית.

צריכים עזרה עם AI/GenAI/AgenticAI/AI Platform ועם מעבר מהוכחת יכולת לעבודה בסקייל מלא באנטרפרייז?
זקוקים לשותף טכנולוגי עתיר ניסיון שיודע לספק שירותי מחקר ופיתוח Hands-on, מארגוני אנטרפרייז ועד סטארט-אפים, על מנת להוציא חזון אלגוריתמי שלכם מהכוח אל הפועל?
רוצים מחקר אלגוריתמי יישומי?
הבה נדבר!
שלמה יונה,
מייסד ומדען ראשי,
מתמטיקאי מחקר ופיתוח בע"מ
053-7326360
פודקאסט על החברה ועליי, שלמה יונה, ואופן העבודה שלנו ואיתנו:

.png)
Comments