הזיית AI היא תשובה שנשמעת בטוחה והיא שגויה: עובדה שהומצאה, הפניה למאמר שלא קיים, פונקציה שלא הייתה בספרייה אף פעם. כל מודל צ'אט עושה את זה, כולל ChatGPT, Claude ו-Gemini. זה לא באג שיתוקן בעדכון; זה נובע מהדרך שבה מודלי שפה מפיקים טקסט. פרומפטים יכולים להפוך הזיות לנדירות יותר, ורק בדיקה יכולה לתפוס את אלה שנשארות.
למה מודלי שפה הוזים
מודל שפה כותב טוקן אחד בכל פעם, וכל אחד נבחר כי סביר שהוא יבוא אחרי הטקסט עד כה. סביר, לפי כל מה שהמודל ראה באימון. שום דבר בתהליך הזה לא בודק עובדה. כשהתשובה הייתה נפוצה בנתוני האימון, ההמשך הסביר הוא בדרך כלל הנכון. כשהיא הייתה נדירה, חדשה, או לא הופיעה בכלל, המודל עדיין מפיק את ההמשך הכי סביר, וטקסט סביר על עובדה שאין לו הוא הזיה.
יש סוגי שאלות חשופים יותר מאחרים:
- פרטים ספציפיים: מספרים מדויקים, תאריכים, שמות, מספרי גרסה, הפניות לעמודים. קל לנבא את צורת התשובה; את הפרט עצמו לא.
- מקורות וקישורים. להפניה יש פורמט צפוי (מחברים, שנה, כותרת, כתב עת), ולכן מודל יכול להפיק הפניה תקינה למאמר שמעולם לא נכתב.
- נושאים נדירים או חדשים: ספרייה קטנה, תקנה מקומית, כל דבר שקרה אחרי שנתוני האימון של המודל נגמרו.
- שאלות עם הנחה שגויה. שאלו מה פונקציה עושה, והמודל נוטה לענות כאילו הפונקציה קיימת.
רהיטות אינה סימן לדיוק. לתשובה הזויה יש אותו טון בטוח, אותו עיצוב ואותה רמת פירוט כמו לתשובה נכונה, ולכן קל לפספס אותה.
המלכודת של ההנחה השגויה
הלשוניות שלמטה שואלות על DataFrame.smart_merge() ב-pandas. המתודה הזו לא קיימת. השאלה הראשונה מניחה שהיא קיימת; השנייה מאפשרת למודל לומר שלא.
DataFrame.smart_merge() ממזגת שני DataFrames ומזהה בשבילך את מפתחות המיזוג על ידי השוואת שמות עמודות וסוגי נתונים. כדאי להשתמש בה כשלטבלאות יש עמודות מפתח משותפות עם שמות שונים מעט, למשל user_id ו-userId, כי היא יכולה להתאים ביניהן אוטומטית.
לשליטה מלאה במפתחות ובסוג המיזוג, merge() היא עדיין הבחירה הטובה יותר.
התשובה הראשונה היא הזיה שבנויה מחלקים אמיתיים: pandas באמת ממזגת DataFrames, והתאמת מפתחות היא דבר סביר לרצות. השאלה סיפקה את ההנחה, והמודל סיפק פונקציה סבירה שמתאימה לה. מודלים עדכניים תופסים הנחות שגויות לעיתים קרובות יותר ממודלים ישנים, אבל שאלה שמנוסחת כהנחה עדיין דוחפת את התשובה לכיוון של הסכמה.
הפרומפט השני עשה שני דברים. הוא שאל אם המתודה קיימת לפני שאל מה היא עושה, והוא נתן אישור מפורש לא להיות בטוח. התשובה גם החזירה דרך לאמת, וזה ההרגל ששווה לשמור: hasattr בודק את הספרייה האמיתית בשורה אחת.
מענה מתוך המקור, עם ציטוטים
הדרך החזקה ביותר לצמצם הזיות היא לשים את העובדות בפרומפט. כשהתשובה נמצאת בטקסט שהמודל רואה, הוא לא צריך להיזכר בשום דבר, ואתם יכולים לבדוק כל טענה מול הטקסט הזה. בקשה לציטוט תומך לכל טענה הופכת את הבדיקה למהירה, והנחיה מה לומר כשהמסמך שותק מפחיתה את הסיכוי שהמודל ימלא את החור בניחוש.
כמה זמן נשמרים גיבויי הפרודקשן: 30 יום. המסמך נותן 30 יום לגיבויים באופן כללי ו-7 ימים רק ל-staging. "גיבויים רצים כל לילה ב-02:00 UTC ונשמרים 30 יום."
האם אפשר לשחזר אחד בעצמי: לא מופיע במסמך. הוא אומר רק איך מבקשים שחזור: "בקשות לשחזור מוגשות בערוץ #ops ובדרך כלל מושלמות תוך ארבע שעות." זה מרמז שצוות אחר מבצע אותם, אבל המסמך לא אומר אם קיים שחזור בשירות עצמי.
שימו לב איך התשובה טיפלה בשאלה השנייה. מודל שעונה מידע כללי היה יכול לתאר פקודת שחזור. כשהוא מוגבל למסמך, הוא הפריד בין מה שהטקסט אומר לבין מה שהוא רק מרמז. כבו את חלק המגבלות ושאלו שוב כדי לראות אם התשובה עדיין מפרידה ביניהם.
התגיות <document> מפרידות את חומר המקור מההוראות שלכם; בדף מפרידים ותגיות XML מוסבר למה זה חשוב, ובדף context engineering מוסבר איך מזינים למודלים את המסמכים הנכונים בקנה מידה גדול. אותו רעיון עומד מאחורי אפליקציות צ'אט עם חיפוש ברשת או העלאת קבצים: התשובה מבוססת רק כמו המקורות שבשיחה, אז קראו את המקור המצוטט, לא רק את הסיכום שלו.
עוד הרגלי פרומפט שעוזרים
- שאלו, אל תניחו. "יש דרך לעשות X?" לפני "איך עושים X?". הנחה שגויה היא הדרך הקלה ביותר לעורר הזיה.
- בקשו לציין אי ודאות. "סמן כל טענה שאתה לא בטוח בה" נותן לכם רשימה של מקומות לבדוק קודם. הסימונים האלה אינם הסתברויות מכוילות, אבל הם מצביעים לעיתים קרובות על הנקודות החלשות.
- בקשו מקורות שאפשר לפתוח. ואז פתחו אותם. מקור שלא פתחתם לא נבדק, וקישור יכול להיות קיים ועדיין לומר משהו שונה מהטענה שהוא אמור לתמוך בה.
- התחילו מחדש כשצ'אט מתארך. פרטים מתחילת צ'אט ארוך עלולים להתבלבל או ללכת לאיבוד ככל שהשיחה גדלה. לעובדות שחשובות, פתחו שיחה חדשה עם החומר הרלוונטי מודבק בה; בדף טוקנים וחלון הקשר מוסבר למה.
- שאלו פעם שנייה, מאפס. אם שתי תשובות עצמאיות לאותה שאלה עובדתית סותרות זו את זו, לפחות אחת מהן שגויה. הסכמה היא ראיה חלשה יותר, כי מודל יכול לחזור על אותה טעות.
בדקו את מה שחשוב
שום פרומפט לא מבטל הזיות, ולכן החליטו מה צריך בדיקה לפי המחיר של טעות. סיעור מוחות או טיוטה ראשונה יכולים לשאת כמה שגיאות. מספר בדוח, טענה משפטית או רפואית, ציטוט שמיוחס לאדם או הפניה בעבודה שלכם צריכים מקור ראשוני.
קוד הוא הפלט הכי קל לאמת, כי הרצה שלו בודקת אותו. מתודה מומצאת נכשלת עם AttributeError או מקבילה שלה ברגע שהשורה שקוראת לה רצה, אז ודאו שהבדיקה שלכם מגיעה לשורה הזו. המקרה המסוכן הוא שם חבילה מומצא. אם מודל אומר לכם להתקין חבילה שלא שמעתם עליה, בדקו שהיא קיימת, שהיא הפרויקט שאתם חושבים, ושנעשה בה שימוש נרחב, לפני שאתם מתקינים אותה. חוקרי אבטחה הראו שמודלים ממציאים לעיתים קרובות את אותם שמות חבילות מזויפים שוב ושוב, ותוקף שמפרסם חבילה תחת אחד מהשמות האלה זוכה לכך שהקוד שלו מותקן אצל כל מי שהולך אחרי ההצעה. הבדיקות לקוד שנכתב על ידי AI מוסברות בדף פרומפטים לכתיבת קוד.
שאלות נפוצות
מה זו הזיית AI?
הזיית AI היא תשובה של מודל שפה שנשמעת בטוחה ורהוטה אבל היא שגויה או לא מבוססת: עובדה שהומצאה, הפניה למאמר שלא קיים, פונקציה שלא הייתה בספרייה אף פעם. המודל לא משקר בכוונה. הוא הפיק את הטקסט שנראה הכי סביר, וסביר זה לא אותו דבר כמו נכון.
למה ChatGPT ממציא דברים?
מודלי צ'אט מייצרים טקסט על ידי ניבוי הטוקן הבא, אחד אחרי השני, לפי דפוסים שנלמדו באימון. אלא אם כלי כמו חיפוש ברשת או מסמך נמצא בשיחה, שום דבר לא בודק את התשובה. כשהתשובה הנכונה הייתה נדירה בנתוני האימון, או לא הופיעה בהם כלל, המודל עדיין מפיק את ההמשך הכי סביר, ותשובה שגויה וסבירה נקראת בדיוק כמו תשובה נכונה.
אפשר לגרום ל-AI להפסיק להזות לגמרי?
לא. מודלים עדכניים הוזים פחות ממודלים קודמים, ומענה מתוך מסמכים שאתם מספקים או מתוך תוצאות חיפוש מצמצם את זה עוד יותר, אבל שום פרומפט לא מבטל את זה. התייחסו לכל עובדה, מספר, ציטוט, מקור או API שחשובים לכם כאל טענה שצריך לבדוק מול מקור ראשוני.
אילו פרומפטים מצמצמים הזיות AI?
שלושה עוזרים הכי הרבה. תנו אישור מפורש להגיד "אני לא יודע". ספקו את חומר המקור ובקשו מהמודל לענות רק ממנו. בקשו ציטוט ישיר שתומך בכל טענה, כדי שתוכלו לבדוק את הטענה מול הטקסט. הימנעו משאלות שמניחות שמשהו נכון, כי המודל נוטה ללכת עם ההנחה.
מה הן דוגמאות להזיות AI בתכנות?
קריאה למתודה שאין בספרייה, העברת אפשרות שלא קיימת, ייבוא חבילה שאף אחד לא פרסם, ותיאור התנהגות מגרסה ישנה של ספרייה כאילו היא עדכנית. בקוד קל לתפוס רבות מאלה, כי מתודה מומצאת נכשלת ברגע שהשורה שקוראת לה רצה. שמות חבילות מומצאים הם המקרה המסוכן: בדקו שחבילה אמיתית ומוכרת לפני שאתם מתקינים אותה.