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

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

תחומי פיתוח AI

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1365
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

שילוב AI באפליקציה לנייד: היכן זה נשבר כבר בהתחלה

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

הכשל הראשון — קריטריוני קבלה מעורפלים. כל עוד האיכות מתוארת כ״תשובות נראות הולמות״, אי אפשר לא לקבל את העבודה ולא להבחין בהידרדרות לאחר החלפת מודל.

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

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

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

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

אפקט מדיד: מה משתנה במדדים לאחר ההטמעה

אנחנו מודדים פעמיים: בגרסת האפליקציה הנוכחית וכעבור 2–4 שבועות לאחר הפעלת הלוגיקה החדשה על חלק מהקהל. אחרת אין במה לאשר את האפקט מהטמעת AI — המוצר ״נראה חכם יותר״, בעוד ששיעור הכשלים וזמן התגובה נשארים כשהיו. להלן כיוונים שבהם השינוי נראה בנתוני המוצר, ולא בדוח.

שיעור הפעלות שגויות ודיוק התשובות

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

זמן תגובה

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

התנהגות ללא רשת

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

שיעור הפעולות הידניות

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

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

ענן, מכשיר או היברידי: השוואת מצבי עבודה

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

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

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

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

כיצד עוברת האינטגרציה: שלבי העבודה ההנדסית

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

  1. ביקורת נתונים ותרחישים. מפרקים אילו נתונים קיימים, במה מצבם והאם הם מספיקים לאיכות הנדרשת. התוצאה — רשימת תרחישים שבהם המודל ייתן אפקט כבר עכשיו, והערכה כנה של אלה שבהם עדיין לא.
  2. תכנון הסכימה. מחליטים מה מחושב במכשיר ומה בענן, כיצד הפונקציה מתנהגת ללא רשת וכיצד מתעדכנים מודלים בלי הוצאת בנייה חדשה של האפליקציה. כאן גם קובעים מדדי איכות שלפיהם לאחר מכן נקבל את העבודה.
  3. בנייה. אינטגרציה לאפליקציה קיימת: ממשק, אחסון נתונים, עיבוד תורים של בקשות, התנהגות במחסור במשאבים ובמכשירים חלשים. כל צומת נסגר בבדיקות לפי מידת המוכנות.
  4. בדיקה על תרחישים אמיתיים. הרצה על נתונים חיים ופעולות אופייניות של המשתמש, ולא על דוגמאות נבחרות. בנפרד בודקים מקרים נדירים ומקרי גבול — דווקא שם פונקציות AI נשברות לרוב.
  5. קבלת פונקציית AI. משווים את התוצאה למדדים שסיכמנו עליהם בהתחלה, ובודקים התנהגות בכשלים: מה המשתמש רואה אם המודל טעה או לא זמין. הלקוח מקבל את הפונקציה לפי קריטריון מובן, ולא ״לפי תחושה״.
  6. מסירת הפתרון. מוסרים תיעוד, קונפיגורציות, הרשאות ותקנון עדכון מודלים. צוות הלקוח יכול לפתח את הפונקציה הלאה בכוחות עצמו — או בתמיכתנו בתנאים מוסכמים.

תוצרים ותיעוד: מה מוסרים לצוות הלקוח

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

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

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

מקרה בוחן: כיצד קיצרנו את השהיית התגובה והסרנו סוג של כשלים

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

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

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

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

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

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

מה לעשות אם הפתרון כבר בנוי על שירות מוכן?

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

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

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

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

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

ספקות טכניים: דיוק, פרטיות, עצמאות

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

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

היכן נשמרים הנתונים שהמודל מעבד?

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

איך יודעים שאיכות התשובות מספיקה לפני שחרור?

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

מה עם פרטיות: המשתמש יכול לסרב לעיבוד?

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

איך הפונקציה עובדת ללא רשת?

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

עד כמה זה מעמיס על המכשיר ומה קורה בעדכון מודל?

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

נדון במשימה: ממה נתחיל ומה צריך מצדכם

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

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

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