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

מתחילים מהבעיה, לא מהמודל

השאלה הראשונה היא לא “באיזה מודל שפה להשתמש”, אלא איזו בעיה של המשתמש אנחנו פותרים ואיך נדע שפתרנו אותה. פרויקטים שמתחילים מהטכנולוגיה נוטים לייצר פיצ’רים שמרשימים בהדגמה ולא משנים דבר בעבודה היומיומית.

לפני שבוחרים כלי, כדאי להגדיר:

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

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

איפה AI במוצר מוסיף ערך, ואיפה קוד דטרמיניסטי עדיף?

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

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

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

אדם בלולאה: מתי צריך אישור אנושי?

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

אפשר לחשוב על שלוש רמות:

  1. הצעה בלבד – המערכת מציעה טיוטה, תשובה או סיווג, והמשתמש מחליט.
  2. אישור לפי סף – מקרים ברורים עוברים אוטומטית, והשאר נשלחים לבדיקה. שימו לב שמדדי “ביטחון” של מודלים לא תמיד אמינים, וצריך לכייל את הסף על הנתונים שלכם.
  3. אוטומציה מלאה עם ביקורת מדגמית – רק אחרי שהמדידה הראתה שהאיכות מספקת, ועדיין עם בדיקה שוטפת של מדגם.

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

סט הערכה: איך בודקים משהו שלא מחזיר תמיד אותה תשובה?

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

מה נכנס לסט ההערכה

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

איך מודדים

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

Guardrails: גבולות ברורים למה שה-AI רשאי לעשות

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

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

עלות וזמן תגובה הם חלק מהמוצר

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

  • שלחו למודל רק את ההקשר הדרוש, ולא את כל המסמך “ליתר ביטחון”.
  • השתמשו במודל קטן ומהיר למשימות פשוטות, ושמרו מודל חזק יותר למשימות שבאמת צריכות אותו.
  • שמרו במטמון (cache) תוצאות של קלטים שחוזרים על עצמם.
  • הציגו תשובות בהזרמה (streaming) כשהמשתמש ממתין מול המסך, והעבירו משימות ארוכות לעיבוד ברקע.
  • הגדירו תקציב והתראה על חריגה, ברמת הפיצ’ר או ברמת הלקוח.

פרטיות וטיפול בנתונים

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

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

ניטור בייצור והתנהגות במקרה כשל

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

מה לנטר

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

מסלול חלופי (Fallback)

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

בשורה התחתונה

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