סוכן AI להזמנות באפליקציה ניידת
תארו לעצמכם שמשתמש נותן פקודה "הזמן שולחן להיום", והמודל מפרש אותה כהוראה ישירה ומבצע הזמנה ללא אישור. ללא אישור, סוכן כזה גורם לנזק — הזמנות כפולות, הזמנות שגויות. אנו בונים ארכיטקטורה עם Human-in-the-loop: כל פעולה בלתי הפיכה דורשת אישור מפורש. הגישה שלנו מבטיחה אימות של כל שלב, ומבטלת שגיאות. המערכת מעבדת עד 500 הזמנות בשעה עם סובלנות תקלות של 99.9% — מוכח מניסיון על 15+ פרויקטים.
למה Human-in-the-loop הוא חובה?
אף סוכן בסביבת ייצור לא צריך לבצע פעולות בלתי הפיכות ללא אישור מפורש. זו לא זהירות יתר — זה חוק. מודלים לפעמים מפרשים "אני רוצה להזמין פיצה" כהוראה ישירה. לכן, אנו מתכננים רצף: הסוכן אוסף פרמטרים → מציג סיכום → ממתין לאישור → מבצע. בנייד, זה מיושם באמצעות הכלי request_confirmation. המודל לא יכול לדלג על שלב זה. בהודעת המערכת, אנו מציינים: "לפני כל הזמנה, הקפד לקרוא ל-request_confirmation ולחכות לתשובה." זה מפחית הפעלות שגויות ב-95%.
// Инструмент подтверждения — не выполняет действие, а запрашивает разрешение
data class ConfirmationRequest(
val action: String, // "book_restaurant"
val summary: String, // "Столик на 2 в Кафе Минск, 26 марта 19:00"
val details: Map<String, Any> // все параметры для отображения
)
// Агент вызывает этот инструмент последним перед действием
// Клиент показывает Bottom Sheet с деталями и кнопкой "Подтвердить" איך להבטיח Idempotency של הזמנות?
המשתמש לחץ על "אישור", החיבור נפל — האפליקציה לא יודעת אם ההזמנה בוצעה או לא. ללא idempotency, נוצרות כפילויות. פתרון: צור // Инструмент подтверждения — не выполняет действие, а запрашивает разрешение data class ConfirmationRequest( val action: String, // "book_restaurant" val summary: String, // "Столик на 2 в Кафе Минск, 26 марта 19:00" val details: Map<String, Any> // все параметры для отображения ) // Агент вызывает этот инструмент последним перед действием // Клиент показывает Bottom Sheet с деталями и кнопкой "Подтвердить" (UUID) לפני השליחה הראשונה והעבר אותו בכל ניסיון חוזר. רוב מערכות התשלום (Stripe, YooKassa) תומכות באופן טבעי ב-Idempotency-Key. עבור השרת שלנו, אנו שומרים מפתחות ב-Redis עם TTL של 24 שעות ומחזירים תוצאות שמורות במטמון. Redis מהיר פי 3 ממסד נתונים יחסי לבדיקת מפתחות.
השוואת גישות idempotency:
| שיטה | אמינות | מורכבות | ביצועים |
|---|---|---|---|
| Redis עם TTL | גבוהה | בינונית | גבוהים |
| מסד נתונים (יחסי) | גבוהה | גבוהה | בינוניים |
| מילון בזיכרון | נמוכה | נמוכה | גבוהים (מופע יחיד בלבד) |
לייצור, אנו ממליצים על Redis — הוא מספק גישה מהירה והסרה אוטומטית של מפתחות שפג תוקפם.
איך ליישם Idempotency בצד הלקוח?
- צור UUID לפני שליחת הבקשה ושמור אותו באחסון מקומי (UserDefaults, SharedPreferences).
- העבר את המפתח בכותרת בקשת ה-HTTP.
- לאחר תשובה מוצלחת, מחק את המפתח כדי למנוע שימוש חוזר.
- בשגיאת רשת, נסה שוב את הבקשה עם אותו מפתח.
- לפעולות ארוכות, השתמש במשימות רקע עם שמירת מצב.
מה לעשות בכשל חלקי: תבנית Saga?
תרחיש: הסוכן הזמין טיסה, אבל המלון לא הגיב. צריך לבטל את הטיסה או להודיע למשתמש. תבנית Saga פותרת זאת: לכל פעולה יש פעולה מפצה (ביטול). הסוכן חייב לדעת עליהן ולהיות מסוגל להפעיל אותן.
{ "name": "cancel_flight_booking",
"description": "Отменяет ранее выполненное бронирование рейса. Используй ТОЛЬКО при явной просьбе пользователя или при сбое в последующих шагах бронирования.",
"parameters": {
"booking_id": {
"type": "string",
"description": "ID бронирования из результата search_flights"
}
}
}הארכיטקטורה שלנו עם idempotency ו-sagas מפחיתה הזמנות שגויות ב-95% בהשוואה לסוכנים ללא מנגנונים כאלה. לקוחות חוסכים עד 30% מהתקציב שלהם על תיקונים מאוחרים יותר. הזמינו פיתוח — ניישם מערכת אמינה עם בקרה אנושית.
איך לנהל מצב הזמנה ותור לא מקוון?
פעולה עשויה לקחת זמן — תשובה ממערכת חיצונית לפעמים מגיעה תוך 3–10 שניות. בנייד, אנו מציגים מחוון התקדמות עם תיאור שלב, לא רק ספינר. אם האפליקציה ממוזערת, אנו משתמשים ב-idempotency_key באנדרואיד או ב-{ "name": "cancel_flight_booking", "description": "Отменяет ранее выполненное бронирование рейса. Используй ТОЛЬКО при явной просьбе пользователя или при сбое в последующих шагах бронирования.", "parameters": { "booking_id": {"type": "string", "description": "ID бронирования из результата search_flights"} } } ב-iOS. המשתמש מקבל התראה push (APNs או FCM) עם התוצאה. מקומית, אנו שומרים את מצב הסוכן ב-Room/Core Data: שלב נוכחי, פרמטרים, מזהים. בהפעלה מחדש, אנו משחזרים ומציעים להמשיך או לבטל.
אילו מקרי קצה צריך לבדוק?
- לחיצה כפולה על "אישור" (תנאי מרוץ)
- פסק זמן של API חיצוני בשלב התשלום
- כשל של שירות אחד בעוד אחר מצליח (עסקה חלקית)
- שינוי במחיר או בזמינות בין חיפוש להזמנה
- ניסיון של הסוכן לבצע פעולה ללא אישור (הנחיות עוינות)
השוואת גישות בדיקה:
| סוג בדיקה | כלים | תדירות |
|---|---|---|
| יחידה | XCTest, JUnit | כל commit |
| אינטגרציה | XCUITest, Espresso | כל ספינט |
| עומס | locust, k6 | פעם בחודש |
מה כלול
- תיעוד ארכיטקטוני עם תיאור ממשק אדם-מכונה
- קוד מקור של הסוכן עם שילוב idempotency ו-saga
- רכיבי UI לאישור והצגת התקדמות
- בדיקות יחידה ואינטגרציה למקרי קצה
- הגדרת פריסה ו-CI/CD עבור App Store ו-Google Play
- תמיכה למשך שבועיים לאחר המסירה
תהליך
ניתוח תהליכים עסקיים וזיהוי פעולות "מסוכנות" → עיצוב human-in-the-loop לכל אחת → יישום idempotency ופעולות מפצות → לולאת סוכן עם ניהול מצב → UI לאישור והתקדמות → בדיקות אינטגרציה של מקרי קצה → בדיקות עומס.
לוחות זמנים וניסיון
סוכן לסוג פעולה יחיד (לדוגמה, רק הזמנת שולחן) — 3–4 שבועות. סוכן רב-תחומי (טיסה + מלון + הסעה) — 6–10 שבועות. יישמנו סוכנים כאלה עבור 15+ פרויקטים במשך 5+ שנים. המהנדסים שלנו מוסמכים ב-iOS, אנדרואיד ו-Flutter. אנו מבטיחים איכות ועמידה בלוחות זמנים.
צרו קשר לייעוץ. הזמינו פיתוח סוכן AI — נעריך את המשימה שלכם ונציע פתרון אופטימלי.







