Розробка AI-асистента в мобільному додатку на базі GPT-4/GPT-4o
Ми часто стикаємося з запитами від клієнтів, які хочуть впровадити AI-асистента в мобільний додаток, але не знають, з якого боку підійти до архітектури. Найчастіша помилка — використовувати GPT-4-turbo замість GPT-4o та будувати окремі пайплайни для тексту, зображень і голосу. GPT-4o — мультимодальна модель: приймає текст, зображення та аудіо в одному API-виклику. Це змінює архітектуру асистента: замість окремих пайплайнів для OCR + текст + голос — один ендпоінт gpt-4o з content типу array. Мобільний додаток, який не використовує цю можливість, втрачає половину цінності моделі. Наш досвід показує, що правильна інтеграція мультимодальності скорочує час розробки на 30% і покращує UX завдяки єдиному потоку даних.
Інтеграція OpenAI API: що реально важливо
Базовий виклик — через POST /v1/chat/completions. На iOS найзручніше використовувати офіційний openai-swift пакет або написати тонкий wrapper на URLSession — залежність від важких HTTP-клієнтів тут не потрібна. На Android — офіційний OpenAI Kotlin клієнт або OkHttp.
Ключові параметри для мобільного асистента:
let request = ChatCompletionRequest( model: "gpt-4o", messages: conversationHistory, stream: true, // стрімінг — обов'язковий для UX maxTokens: 1024, temperature: 0.7 ) Стрімінг обов'язковий для UX
Користувач, який чекає 5–8 секунд тиші перед появою відповіді, закриває додаток. З stream: true перший токен приходить через 300–500 мс, і текст з'являється посимвольно. Реалізація на iOS через URLSession + AsyncBytes або через EventSource для SSE. На Android — OkHttp з Enqueue і порядкове читання. Ми гарантуємо, що стрімінг працюватиме стабільно навіть при нестабільному з'єднанні завдяки retry з exponential backoff.
Мультимодальність GPT-4o. Передача зображення:
let message = ChatMessage(role: .user, content: [ .text("Що зображено на цьому скріншоті?"), .imageURL(base64Image: imageBase64, detail: .auto) ]) detail: .auto — модель сама обирає між low (85 токенів) та high (до 1700 токенів) залежно від завдання. Для аналізу документів краще high, для швидких відповідей — low.
Як інтегрувати GPT-4o в мобільний додаток?
Покрокова інтеграція:
- Налаштування API-клієнта — створіть конфігурацію з базовим URL та ключем (через серверний проксі).
- Конфігурація стрімінгу — увімкніть
stream: trueта реалізуйте потокову обробку токенів. - Управління контекстом — реалізуйте ковзне вікно з сумаризацією через GPT-4o-mini.
- Обробка помилок — впровадьте exponential backoff з jitter для rate limits.
Коли використовувати GPT-4o-mini для сумаризації?
Якщо історія діалогу перевищує поріг (наприклад, 4000 токенів), стискайте її через GPT-4o-mini. Це дешевше в 20 разів, ніж повний прогон через GPT-4o. Алгоритм: останні N повідомлень зберігаються повністю, ранні замінюються summary, яке поміщається як system повідомлення на початок історії. Токени рахуємо через tiktoken на сервері або евристично.
Порівняння GPT-4o та GPT-4-turbo для мобільних сценаріїв
| Характеристика | GPT-4o | GPT-4-turbo |
|---|---|---|
| Мультимодальність | Текст, зображення, аудіо | Тільки текст |
| Контекстне вікно | 128K токенів | 128K токенів |
| Вартість (вхід) | $5 / 1M токенів | $10 / 1M токенів |
| Затримка до першого токена | ~300 мс | ~500 мс |
| Підтримка function calling | Так | Так |
Типові помилки та їх обробка
| Помилка | Причина | Рішення |
|---|---|---|
| 429 Too Many Requests | Перевищення rate limit | Exponential backoff з jitter |
| Таймаут стрімінгу | Довге очікування відповіді | Таймаут на рівні chunk, не на весь запит |
| Втрата контексту | Відсутність сумаризації | Використовувати ковзне вікно з GPT-4o-mini |
Приклад обробки помилок з backoff
func retryWithBackoff<T>(maxAttempts: Int = 3, operation: () async throws -> T) async throws -> T { var attempt = 0 while attempt < maxAttempts { do { return try await operation() } catch APIError.rateLimitExceeded { let delay = Double.random(in: 1.0...2.0) * pow(2.0, Double(attempt)) try await Task.sleep(nanoseconds: UInt64(delay * 1_000_000_000)) attempt += 1 } } throw APIError.maxRetriesExceeded } Безпека API-ключа
API-ключ OpenAI не можна хардкодити в мобільному додатку — його можна витягти з бінарника за хвилини. Правильна схема: мобільний клієнт автентифікується на власному бекенді, бекенд проксує запити до OpenAI з ключем із змінних середовища. Додатково — rate limiting на рівні користувача. Це відповідає App Store Review Guidelines.
Процес роботи
- Аудит вимог: які модальності потрібні (тільки текст, зображення, голос), чи потрібен серверний проксі, вимоги до історії діалогу (скільки зберігати, синхронізувати чи між пристроями).
- Розробка: API-клієнт → стрімінговий UI → управління історією → мультимодальність → обробка помилок → серверний проксі.
- Деплой та тестування: навантажувальне тестування стрімінгу, перевірка rate limits, налагодження на реальних пристроях.
Що входить у роботу
- Готова інтеграція OpenAI API (GPT-4o, GPT-4-turbo, GPT-4o-mini)
- UI стрімінгового чату з підтримкою тексту, зображень і голосу
- Серверний проксі для безпечного зберігання API-ключа
- Модуль управління контекстом з сумаризацією
- Документація з розгортання та кастомізації
- Навчання команди (2 години онлайн)
- Підтримка протягом 1 місяця після здачі
Орієнтири за термінами
Текстовий асистент зі стрімінгом та історією — 1–2 тижні. З зображеннями, голосом, серверним проксі та управлінням контекстом — 3–5 тижнів. Вартість розраховується індивідуально після аудиту вимог.
Отримайте консультацію за вашим проектом — наша команда оцінить задачу за два дні. Наш досвід включає понад 20 інтеграцій AI-асистентів для iOS та Android, 5+ років роботи з мобільними технологіями. Сертифіковані інженери гарантують дотримання OpenAI API best practices.







