פרק 16 · לא מתכנת — מה למדתי כשבניתי עם בינה מלאכותית
אל תסמוך על מה שהטלפון מדווח
את הבעיה הכי חמורה באפליקציה שלי לא מצאתי כי חיפשתי אותה. מצאתי אותה כי היה לי מנוי שעמד להיגמר.
ביקורת מתוך חיסכון
ב-4 באוקטובר, אחר הצהריים, ביטלתי את המנוי ל-Codex, כלי הבינה המלאכותית השני שעובד איתי. הוא היה אמור להמשיך לעבוד עד אמצע החודש, אז כתבתי ל-Claude שכדאי לנצל אותו כמה שיותר עד אז. Claude הציע כמה משימות. הראשונה ברשימה הייתה ביקורת על Reach & Do, האפליקציה שבה מדברים בקול עם דמויות: תשלומים, הרשאות ואבטחה. "זה הכי חשוב", הוא כתב, "כי באפליקציה הזו עובר כסף אמיתי". השנייה הייתה ביקורת דומה על OurRoute, מתכנן הטיולים. עניתי ששני אלה חשובים מאוד, ו-Codex יצא לעבודה.
ב-Reach & Do קונים דקות שיחה. כל שיחה עם דמות מורידה דקות מהיתרה, וכשהיתרה נגמרת, קונים עוד.
קצת אחרי שבע בערב הגיע הדו"ח. Claude פתח אותו בכותרת: לא לפתוח עדיין למכירה ציבורית. ואז הסביר את הממצא הראשון:
"אפשר לדבר בלי שיורדות דקות. הטלפון הוא זה שמדווח לשרת כמה זמן נמשכה השיחה. משתמש מתוחכם יכול פשוט לא לשלוח את הדיווח, ולדבר בחינם. בדקתי, וזה נכון."
Claude, 4.10.2026, 19:02
מי סופר את הדקות
כדי להבין למה זה חמור, צריך לדעת מי משתתף בשיחה. יש את הטלפון שלי, שעליו רצה האפליקציה. יש את השרת, המחשב שלנו מאחורי הקלעים, שבודק מי אני וכמה דקות נשארו לי. ויש את החברה שמספקת את הקול של הדמות.
עד אותו ערב, בסוף כל שיחה הטלפון שלח לשרת הודעה קצרה: "השיחה נמשכה כך וכך שניות". השרת האמין לו, והוריד את הדקות. אבל הטלפון נמצא בידיים של המשתמש. מי שיודע לשנות את האפליקציה יכול לשלוח מספר אחר, או לא לשלוח כלום.
באותו ערב שאלתי על הל והילה, שתי דמויות שהטלפון מתחבר בהן ישירות לחברה שמספקת את הקול. Claude הסביר שמהרגע שהשיחה מתחילה, השרת שלנו כבר לא בתמונה: הוא לא רואה אותה, לא יודע כמה זמן היא נמשכת, ולא יכול לנתק אותה. ואז הוסיף דימוי שאני זוכר עד היום:
"זה כמו שמוכר הכרטיסים נותן לך כרטיס לקולנוע וחוזר הביתה. אתה נכנס, ואין מי שיוציא אותך כשהזמן נגמר. אתה רק 'מספר לו' כמה זמן ישבת. משתמש הגון יגיד את האמת, ורמאי יכול להישאר כמה שירצה."
Claude, 4.10.2026, 20:47
אותה טעות, פרויקט אחר
באותו דו"ח היה גם ממצא על OurRoute. כדי שהעלויות לא יברחו, לכל טיול מותרות ארבע בדיקות של בינה מלאכותית. התברר שאם משנים את מספר הזיהוי של הטיול, המונה מתאפס, ואפשר להתחיל מחדש.
זו בדיוק אותה טעות בתחפושת אחרת. מספר הזיהוי היה משהו שהמשתמש יכול לשנות, והמערכת סמכה עליו כדי לספור. כאן התיקון היה פשוט: חוק חדש במסד הנתונים, שאוסר לשנות את מספר הזיהוי של טיול. עשרים דקות אחרי שהממצא הגיע, התיקון כבר היה באתר החי.
התיקון המהיר שהיה גרוע יותר
ב-Reach & Do זה לא היה פשוט. עוד לפני ההסבר על הקולנוע ניסינו תיקון מהיר, ו-Codex בדק אותו. התשובה שלו הפתיעה אותי:
"ההמלצה שלו: לא למזג במצב הנוכחי. בהדמיה, שיחה של 60 שניות חויבה כ-90 שניות. היום יש פרצה שרק רמאי מתוחכם ינצל. הגרסה החדשה עלולה לחייב ביתר משתמשים רגילים, וזה יותר מזיק לאמון."
Claude, 4.10.2026, 19:52
"למזג" פירושו להכניס את התיקון לאפליקציה. כלומר: לא להכניס אותו עדיין.
זה היה הרגע שבו הבנתי משהו על תיקונים. המטרה לא הייתה לתפוס רמאים. המטרה הייתה שאף אחד לא ישלם על משהו שלא קיבל. תיקון שגורם ללקוח הגון לשלם יותר הוא לא תיקון. הוא תקלה חדשה.
שאלתי אם זה סוגר את כל הטיפול בדו"ח. Claude ענה שלא, והמליץ לא לפתוח מכירות ולא להרחיב את הבדיקה מעבר לחברים, עד שהשרת יספור את הדקות בעצמו. עניתי במשפט אחד:
"אין בעיה, תעדכן."
4.10.2026, 20:18
בשלוש מילים הסכמתי לדחות את המכירות. אבל כעבור שתים-עשרה דקות כבר שאלתי "למה לא עכשיו??". Claude הסביר שזה לא תיקון, זו בנייה מחדש: השרת צריך למדוד את זמן הדיבור בעצמו, ולא להאמין לטלפון. הוא העריך שזה ייקח תשעה עד עשרה ימים. כתבתי לו "???? זה אמיתי?", ואחרי דקה:
"בוא נתחיל לעבוד, חבל על הזמן. מאשר את ההמלצות. תנחה לעשות עבודה מדויקת ומקצועית, בלי לשבור את האפליקציה או לפגוע בה."
4.10.2026, 20:53
פנקס חדש
מה שנבנה באותו לילה נקרא "ספר חשבונות", או בעברית פשוטה: פנקס. הוא רושם את השיחות ואת החיובים. כשהשיחה מתחילה, השרת שומר בצד את הדקות שהיא עשויה לצרוך. כשהיא נגמרת, הוא מחשב בעצמו כמה זמן היא באמת נמשכה, מוריד רק את זה, ומחזיר את השאר. החיוב כבר לא נשען על מה שהטלפון מדווח. את הזמן סופר השרת.
Codex בדק את השינוי במסד הנתונים חמש פעמים. ארבע פעמים הוא אמר "לא", ובכל סבב היו פחות דברים לתקן. בפעם החמישית הוא אמר "כן". הייתי ער באותו לילה, וכתבתי "ממשיכים כל הלילה". לפני שהעליתי את השינוי לאתר החי, התברר שבתוכנית החינמית של מסד הנתונים אין גיבויים, אז קודם שמרנו עותק ידני של טבלת הדקות. אחרי ההעלאה, Claude השווה את המספרים: לא נוספה ולא נגרעה אפילו שנייה אחת מהיתרות.
שעה אחר כך עשיתי שיחה של דקה עם הל, אחת הדמויות. הפנקס החדש רץ "בצל": הוא חישב בשקט, בלי לחייב באמת, כדי שנוכל להשוות.
"הדרך הישנה רשמה: 62 שניות. המערכת החדשה הייתה מחייבת: 62 שניות. הפרש: 0."
Claude, 4.10.2026, 23:12
נכון זה לא מספיק
למחרת בבוקר בדקתי לראשונה שיחה שחויבה באמת דרך הפנקס החדש, וראיתי משהו מוזר. דיברתי בערך שתי דקות, אבל הספירה לאחור התחילה משמונה וחצי דקות ולא מתשע וחצי, ובסוף השיחה היתרה נראתה לא נכונה. Claude הסביר שזה בדיוק מה שהפנקס אמור לעשות: לשמור בצד את הדקות בתחילת השיחה, כמו בית מלון שתופס סכום בכרטיס האשראי בכניסה ומשחרר אותו ביציאה. בסוף השיחה השאר חוזר. מה שראיתי היו הדקות שנשמרו בצד, והן נראו כאילו כבר נוצלו.
מבחינה חשבונאית זה היה נכון. אבל כתבתי לו:
"זו אכן בעיה, כי כסף זה נושא רגיש. אם דיברתי שתי דקות, אסור בשום פנים להראות שהיתרה ירדה בשמונה דקות."
5.10.2026, 11:16
מערכת יכולה להיות נכונה לגמרי ועדיין להיראות כמו גניבה. משתמש שרואה את היתרה צונחת לא יודע שהיא תחזור.
אחר הצהריים שמתי לב לבעיה נוספת, הפעם במה שקורה כשמשהו משתבש. כתבתי ל-Claude: מישהו שנשארו לו תשע וחצי דקות, התחיל שיחה, דיבר דקה, ונאלץ לסגור את האפליקציה בגלל משהו דחוף, בלי ללחוץ על הכפתור. האם הוא לא יוכל לדבר עד שתעבור שעה? Claude ענה שהבנתי נכון, ושזה אפילו קצת יותר גרוע. הדקות שנשמרו בצד היו נעולות עד שעה.
"זה לא מקובל למשתמשים אמיתיים. תפסת בעיה חשובה."
Claude, 5.10.2026, 13:05
לא הבנתי את הקוד. הבנתי מה עושה אדם שמצלצלים לו בדלת באמצע שיחה.
התיקון הגיע תוך פחות משעתיים, ובדקתי אותו בעצמי: התחלתי שיחה כשהיתרה הייתה 25:17, דיברתי דקה, וסגרתי את האפליקציה בכוח. כשנכנסתי שוב, היתרה הייתה 24:17. התחלתי מיד שיחה חדשה, בלי בעיה. השרת ספר נכון גם כשהטלפון נעלם בלי להיפרד.
עשרים וחמש שעות
ב-5 באוקטובר, שש דקות לפני שמונה בערב, כל החשבונות וכל הדמויות עברו לפנקס החדש. מהרגע שהממצא הגיע ועד ההשקה עברו בערך עשרים וחמש שעות, לא תשעה ימים. אבל זה לא היה מירוץ. כתבתי באותו יום "אין משתמשים, יש זמן להשקה, הכול טוב", וזה מה שאפשר לעבוד בזהירות.
שאלתי מה הסיכון במה שעשינו, מה יכול להיכשל. Claude פירט כמה דברים, וסיים במשפט שנשאר איתי:
"מה לא יכול לקרות: חיוב כפול, ושיחה בלי חיוב. בשני המקרים המערכת בנויה לסרב ולא לנחש."
Claude, 5.10.2026, 19:58
זו הייתה ההבטחה. עדיין רציתי שמישהו ינסה למצוא בה חור.
ואז דיברתי דקה וחצי, וקניתי חבילה קטנה של דקות, בכסף אמיתי. היתרה עלתה בדיוק בעשר דקות. רציתי לראות את כל המעגל עובד במו ידיי: שיחה שמחויבת, וקנייה שנזקפת.
מה למדתי
כל מה שמגיע מהצד של המשתמש, מהטלפון או מהדפדפן, הוא בקשה, לא עובדה. אפשר להקשיב לו, אבל את מה שעולה כסף צריך לספור במקום שהמשתמש לא נוגע בו.
ותיקון שפוגע בלקוח ההגון גרוע מהפרצה שהוא בא לסגור. מערכת של כסף צריכה להיות נכונה, וגם להיראות נכונה, ובמקרה של ספק לסרב ולא לנחש.
גם אחרי שהפעלנו את הפנקס, סבב האבטחה עוד לא נסגר: Codex עדיין לא אמר "כן". לא הכרזתי על ניצחון. ביקשתי ממנו סבב חדש, מקיף, על כל האפליקציה. בלי הגבלה, שייקח את הזמן.
בטלפון אפשר גם להחליק: שמאלה לקודם