מדוע צינור Haystack נשבר על נתונים אמיתיים
הדגמה של צינור Haystack כמעט תמיד נראית משכנעת: עשרה טקסטים אחידים בקלט, שאלות מדויקות, תשובות לעניין. זרימת פניות אמיתית — אלה סריקות עם זיהוי גרוע, מכתבים עם ציטוטים וחתימות, קבצים מצורפים בפורמטים שונים, התכתבות בשתי שפות באותו שרשור.
ברגע ששיעור המסמכים ה„מלוכלכים” גדל, איכות חילוץ הנתונים יורדת באופן לא אחיד: חלק מהפניות מעובדות באופן מושלם, חלקן הולכות לפח.
הסיבה בדרך כלל אינה במודל, אלא בהגדרת הצינור — חלוקה למקטעים נעשתה לצורכי הדגמה: הטקסט נחתך לפי אורך קבוע, טבלאות ורשימות נקרעות באמצע, הכותרת מנותקת מהתוכן.
השכבה השנייה — חיפוש וחילוץ מאפיינים. בלי מודל דירוג מחדש, המקומות הראשונים תופסים מקטעים שדומים בניסוח, לא במשמעות. ובחילוץ שדות הנתונים מפוזרים על פני המסמך, חלק מהשדות חסרים או סותרים זה את זה: בלי בדיקת עיגון במקור ותשובה מפורשת „אין זאת במסמך”, הצינור מציב ערכים סבירים.
מכאן הסיבה השלישית לירידה — אין מה למדוד. כל עוד איכות מוערכת בבדיקת חמישה דוגמאות, כל שינוי אינו נעקב: החלפת מודל, שיטת חיתוך חדשה, סידור מחדש של צמתים.
מערך בקרה של פניות מתויגות והרצת רגרסיה לאחר כל שינוי נותנים מספרים במקום תחושות — והופכים צינור NLP מקצה לקצה למערכת ניתנת לניהול. בהמשך נפרט איך זה נסגר באינטגרציה של Haystack.
מה משנה צינור עיבוד טקסט בנוי
הדבר הראשון שמשתנה — שיעור הניתוח הידני. צינור על Haystack מזהה בעצמו את סוג המסמך, מחלץ שדות ומסדר אותם לפי המבנה, ולמפעיל נשארים רק מקרים שנויים במחלוקת. בזרימת פניות העבודה הידנית מצטמצמת מרוב הפניות הנכנסות לאחוזים בודדים.
מהירות עיבוד המסמכים עולה לא פי כמה, אלא בסדר גודל: מה שעמד בתור לניתוח ימים שלמים עובר בצינור תוך דקות — במקביל ובקבוצות. תפוקת המערכת מפסיקה להיות תלויה בגודל המשמרת, וזרימה גדלה אינה דורשת אנשים חדשים.
איכות החיפוש משתנה יחד עם אופן הגישה לנתונים. במקום התאמות לפי מילים מדויקות, המערכת מחפשת לפי משמעות: מוצאת מקטע לפי שאלה מנוסחת מחדש, מילה נרדפת או שגיאת כתיב ומחזירה אותו עם הפניה למקור. התשובה נמצאת במעבר אחד, ולא אחרי שלושה ניסיונות לנחש את הניסוח.
מחלקות שלמות של כשלים נעלמות. פריסה לא סטנדרטית כבר לא מפילה את הניתוח, כפילויות מודבקות לפי מפתח, לא בעיני המפעיל, מסמכים בשפה אחרת עוברים את אותה שרשרת. אוטומציה של ניתוח פניות מסירה מהאנשים את החלק המונוטוני ומשאירה להם החלטות לגופו של עניין.
האפקט ניתן לבדיקה: לפני ההתחלה מתעדים מדדים על מדגם היסטורי, אחר כך — משווים על אותו מערך. כך רואים היכן הניתוח הידני עוד מחזיק ומה סוגי הכשלים שנותרו, — הצעד הבא נבחר לפי נתונים, לא לפי תחושות.
מצבי עבודה ודרכי פריסה: מה לבחור
מצב הפריסה נבחר לא לפי המודל, אלא לפי פרופיל העומס ודרישות למתחם הנתונים. אם מסמכים והתכתבויות לא יכולים לצאת מתשתית הלקוח, מתחם מקומי הוא האפשרות העובדת היחידה: צינור העיבוד, מאגר ה-embeddings והמודל חיים בתוך רשת סגורה, והחלפה החוצה מתבצעת רק דרך שער מאושר. אם הנתונים אינם רגישים והעומס בשיאים, מתחם מנוהל מתאים יותר להרחבה.
בתוך כל מתחם, ארכיטקטורת הפתרון מתפצלת לשני מצבי קליטת משימות — זרימה ואצווה. להלן תנאי ההתאמה והמגבלות של כל מצב.
| אפשרות | מתי מתאימה | מגבלות |
|---|---|---|
| מתחם מקומי | נתונים אישיים, מתחם רגולטורי, דרישת בידוד | דרושים משאבים עצמיים לשיא, עדכון מודלים מתואם בפנים |
| מתחם מנוהל | אין הגבלות על הוצאת נתונים, העומס משתנה | תלות בשירות חיצוני, מגבלות על גודל בקשה |
| עיבוד זרימה | דיאלוג עם בסיס ידע, חיפוש, תשובה תוך שניות | משאבים מוקצים באופן קבוע וחלק מהזמן אינם מנוצלים |
| עיבוד אצווה | ניתוח ארכיונים, אינדוקס, דוחות על כמויות טקסט | התוצאה אינה מיידית, נדרשים מתזמן והרצות חוזרות |
תאימות בין האפשרויות מובטחת באמצעות חוזה אחיד: כניסה ויציאה זהות של הצינור על Haystack, ופרמטרים של המאגר, המודל והמצב מוצאים לקונפיגורציה. אז העברה ממתחם מנוהל למקומי או מעבר ממצב אצווה לזרימה — היא החלפת הגדרות, לא כתיבה מחדש של הלוגיקה.
איך אנחנו בונים צינור Haystack: שלבי העבודה
העבודה מתבצעת באיטרציות: קודם מתעדים מה הצינור צריך לעשות ועל אילו נתונים לבדוק אותו, אחר כך בונים ומוסרים להפעלה. סדר כזה מבטל מצב שבו הפתרון מוכן, אבל את נתוני המקור עבורו איש לא הכין. להלן שלבי הטמעת צינור NLP שכל פרויקט עובר.
- ביקורת נתונים. מפרקים מקורות, תיוג, כפילויות וחסרים, מעריכים את התאמת הקורפוס. בפלט — דוח: כמה מסמכים מוכנים לעבודה ומה צריך לתייג נוסף.
- קריטריונים לאיכות. לפני הפיתוח מתעדים מה נחשב לתשובה נכונה: דיוק על מדגם נפרד, שיעור כשלים, זמן תשובה. אחרת אין במה לקבל את התוצאה.
- תרשים הצינור. מתכננים שרשרת: ניתוח מסמכים, חלוקה למקטעים, אינדוקס, חיפוש, יצירת תשובה. את התרשים מתאמים מראש, כדי לא לכתוב מחדש את הקוד.
- הרכבה. מממשים רכיבים על Haystack, מתאימים מודלים למשימה ומגדירים פרמטרי חיפוש. את מהלך העבודה בודקים על דוגמאות מתויגות.
- הערכה על נתונים נפרדים. מריצים את הצינור על מדגם שלא השתתף בהגדרה, ומשווים לקריטריונים. פערים מנתחים וחוזרים לשלב המתאים.
- קבלת הפתרון. מוסרים תיעוד, קונפיגורציות ונוהל הפעלה מחדש, ומכשירים את צוות הלקוח. את התוצאה מודדים על הנתונים שלהם.
- תמיכה. מעדכנים אינדקס כשבסיס הידע משתנה ועוקבים אחר האיכות לפי נוהל מוסכם.
מה מוסרים יחד עם הפתרון המוכן
המסירה היא לא הצגת דמו, אלא העברת מתחם שהמהנדסים שלכם יוכלו להפעיל ולפתח בלעדינו. לכן יחד עם המערכת העובדת נמסר סט ארטיפקטים: חלקם מתארים איך הכול בנוי, ואחרים — איך לשנות, לשלוט ולשבור בבטחה.
- קונפיגורציות של צינור Haystack — הרכב הצמתים, חיבור המודלים, פרמטרי חיפוש ויצירה, הגדרות סביבות. נערכות במקום אחד, בלי להיכנס לקוד.
- תרשימי ארכיטקטורה וזרימת נתונים — מסלול הבקשה מקליטה ועד תשובה, היכן יושבים האינדקסים והייצוגים הווקטוריים, אילו שירותים חיצוניים מעורבים ומה יקרה בכשל שלהם.
- מדיניות גישה ותפקידים — מי רשאי לשנות קונפיגורציה, לבצע אינדוקס מחדש, לקרוא יומנים ותשובות מודל; היכן נשמרים המפתחות ואיך הם מוחלפים.
- נוהל עדכון מודלים — תדירות, קריטריונים לשחרור גרסה חדשה, אופן החזרה לגרסה קודמת ותנאים שבהם העדכון נחסם.
- ניטור איכות — סט מדדים ולוח תצפית עם ערכי סף והתראות, ובנוסף סט שאילתות ייחוס להרצות רגרסיה לאחר כל שינוי.
- הוראות הפעלה — הפעלה, עצירה, הרחבה לפי עומס, תקלות אופייניות וסדר הפעולות של מהנדס תורן.
- פרוטוקול מסירה — הכשרת הצוות שלכם לפי הסכמה „עושים יחד — עושים תחת השגחתנו — עושים לבד”, עם ניתוח אירועים על הנתונים שלכם.
התוצאה — לא קופסה שחורה, אלא מערכת עם נקודת כניסה מובנת לכל מהנדס חדש. תארו את המשימה: נחזור עם הערכה ותוכנית, כולל הרכב החבילה הנמסרת.
מקרה בוחן: איך התמיכה הפסיקה למיין מכתבים ידנית
תמיכה של שירות עם זרימה של כמה אלפי פניות בחודש מיינה מכתבים ידנית: המפעיל פתח פנייה, קרא את ההתכתבות, קבע את הנושא והעביר לתור המתאים. על מיון ותשובה ראשונה הושקעו בממוצע שבע שעות, ועד 40% מהמשמרת הוקדשו לא לפתרון הבעיה, אלא לניתוח הזרימה הנכנסת.
מה שינו
הרכבנו צינור עיבוד על Haystack: מסווג כוונות על ייצוגים וקטוריים של טקסט קובע את נושא הפנייה, רכיב דירוג בוחר מאמרים רלוונטיים מבסיס הידע, וכללי ניתוב מפזרים את הבקשה לפי תור ועדיפות. תרחישים אופייניים — סטטוס הזמנה, החזרה, גישה לאזור אישי — נסגרים בתשובה אוטומטית. כל מה שמתחת לסף הביטחון עובר למפעיל יחד עם טיוטת תשובה ונושא שכבר הוגדר.
מה יצא
חלק הפניות שנותחו בלי אדם עלה מאפס ל-63%, ניתוב אוטומטי מכסה 94% מהזרימה, זמן התשובה הראשונה בתרחישים אופייניים הצטמצם משבע שעות ל-25 דקות. העומס על המפעילים ירד כמעט בחצי: המשמרת מוקדשת למקרים מורכבים, לא למיון.
את האיכות אנחנו מחזיקים במדידות מתמשכות — פעם בשבוע מריצים מדגם מתויג ובודקים דיוק לפי נושאים ושיעור תשובות אוטומטיות שגויות. אם הביטחון יורד מתחת לסף, הכלל מושבת והפנייה עוברת למפעיל; היומנים וגרסאות הכללים נשמרים, ולכן כל שגיאה מנתחים שלב אחר שלב.
במה Haystack שונה מצינור שנבנה עצמאית?
צינור שנבנה עצמאית מנצח בדיוק פעם אחת — באב-טיפוס הראשון: כמה סקריפטים, מאגר מסמכים אחד, מודל אחד, והתשובות כבר מוחזרות. הבעיה מתחילה בצעד השני, כשמקורות הופכים לשלושה, חלק מהמסמכים צריך לאנדקס מחדש, ולתשובה צריך לצרף הפניה למקטע המקור. כל דרישה כזו בקוד עצמאי היא שכבה חדשה של הסתעפויות שאיש מלבד המחבר לא קורא.
התשתית Haystack מתארת עיבוד כגרף צמתים עם כניסה ויציאה קבועות. החלפת מודל, הוספת דירוג מדייק או מאגר שני — היא עריכת קונפיגורציה וצומת אחד, לא כתיבה מחדש של לוגיקת ההחזרה. הממשקים בין השלבים מוגדרים במפורש, ולכן הצמתים נבדקים בנפרד ומוחלפים בסטבים בזמן ניפוי.
| קריטריון | צינור שנבנה עצמאית | תשתית מוכנה |
|---|---|---|
| גרסה עובדת ראשונה | מהר בתרחיש אחד | צריך לפרק את המשימה לצמתים |
| מקור נתונים שני | עריכות בלוגיקה הראשית | צומת חדש ופרמטרי חיבור |
| החלפת מודל | כתיבה מחדש של קריאות לפי קוד | החלפת צומת אחד |
| ניתוח שגיאות | יומנים לפי סקריפטים | מצב כל שלב והארגומנטים שלו |
| מסירה לצוות | התרשים חי בראש המחבר | הצינור נקרא כקונפיגורציה |
פתרון עצמאי נשאר מוצדק כשהדרישות לעיבוד אינן אופייניות: פורמט אחסון משלו, סדר גישה קשיח לנתונים, השתלבות בשירות קיים. אז התשתית מוסיפה שכבת הפשטה שיש לעקוף. בפועל שלבים כאלה נכתבים באופן ילידי, ורכיבים מוכנים משאירים לחילוץ, חיבור שלבים ונראות.
את התחזוקתיות אנחנו מודדים לא בתחושות: כמה זמן לוקח חיבור מקור חדש, איזה שיעור מהתרחישים מכוסה בבדיקות, תוך כמה זמן מתבטלת החלפת מודל. בתחזוקת הצינור המדידות האלה מראות היכן בדיוק החלק העצמאי מעכב את פיתוח הפתרון, ומעבירים אותו לתשתית בשלבים, בלי לעצור את השירות.
ספקות טכניים נפוצים לפני ההתחלה
הספקות לפני ההתחלה הם בדרך כלל אותם ספקות: האם הפתרון ישתלב במה שכבר עובד, האם יספיקו הנתונים ומה יישאר אחרי המסירה. עונים בקצרה ולעניין.
אצלנו כבר פועלים שירותים פנימיים וחיפוש — הכול יצטרך להיבנות מחדש?
שכבת עיבוד הטקסט מתחברת מעל המקורות הקיימים: מסמכים, בסיס ידע ומטא-נתונים נקראים מהמקום שבו הם נמצאים כעת, ושירותי היישום פונים אליה דרך ממשקים רגילים. משתנים רק החיפוש ויצירת התשובה — שאר המערכת נשארת ללא שינוי.
אין תיוג מוכן — מי עושה אותו ובמה נבדקת האיכות?
תיוג הוא חלק מהעבודה, לא משימה של הלקוח: מתארים כללים, מתייגים מדגם ומחשבים הסכמה בין מתייגים. אם ההסכמה נמוכה, מתקנים את ההוראה, ולא מגדילים את הנפח. מדוגמאות מתויגות נבנה סט קבלה — לפיו רואים אם הפתרון השתפר אחרי כל עריכה.
מה יהיה אחרי המסירה — מי אחראי לאיכות?
מוסרים קונפיגורציות, כללי תיוג, סט קבלה ותיעוד הפעלה. בהמשך אפשריים שני מצבים: תמיכה עם עדכון מודלים ובקרת מדדים מצידנו, או עבודה עצמאית של הצוות שלכם. את הגבול מתעדים מראש: על אילו מדדים אנחנו אחראים בקבלה ומה נחשב להרעה.
עד כמה בטוח למסור נתונים לעיבוד?
העיבוד נפרס במתחם שלכם, שירותים חיצוניים מתחברים רק במקום שזו החלטה מודעת. ההרשאות מופרדות לפי תפקידים, ביומנים נשמרות בקשות בלי תוכן המסמכים. אם אסור להוציא נתונים מחוץ למתחם — מרכיבים קונפיגורציה מקומית על Haystack ומודלים פתוחים.
נדון במשימה שלכם ונחזור עם תוכנית
כדי לחזור עם הערכת היקף העבודה, ולא עם ניסוחים כלליים, נדרשים לפחות נתוני קלט מינימליים. את הסטק מתאימים למשימה: עבור שרשראות עיבוד טקסט זה לרוב Haystack על מודלים לשפה ולתחום שלכם. מה כדאי להכין לשיחה:
- הגדרה במונחי תוצאה: אילו בקשות מגיעות בקלט, מה נחשב לתשובה נכונה, ומה — לשגיאה.
- דוגמאות חיות: 100–300 בקשות אמיתיות עם תשובות מצופות והפניות למקורות — עליהן מודדים איכות לפני ההתחלה.
- סביבה: היכן יושבים הנתונים והשירות פועל — ענן, מתחם סגור או שרתים משלכם; אילו מערכות הופכות למקורות ידע.
- מגבלות הרשאה: מה אסור למסור לשירותים חיצוניים, איך לשמור היסטוריית דיאלוגים ויומנים.
- עומס ועדכונים: כמה בקשות צפויות, איזה זמן תשובה מקובל, באיזו תדירות משתנה בסיס הידע.
- קבלה: מי מקבל את התוצאה, מי בודק גרסאות ביניים וכמה מהר נותן משוב.
לפי הנתונים האלה אנחנו מרכיבים הערכת היקף עבודה, תוכנית הטמעה וקריטריוני קבלה. שלב הפיילוט מפעילים על הנתונים שלכם במתחם שלכם: הוא מראה איכות אמיתית לפני מעבר להפעלה מלאה. בהמשך תחילת הפרויקט מתקדמת לפי שלבים מוסכמים — עם סטטוס ומדדים בכל צעד.







