Реалізація AI-асистента для планування маршрутів подорожей в мобільному додатку
Користувач вводить «Рим, 4 дні, з дитиною 6 років, бюджет середній» та хоче отримати готовий маршрут з послідовністю пам'ятників, рекомендаціями ресторанів рядом з кожною точкою, урахуванням часів роботи та логіки «не гнати через весь город двічі». Це не та задача, яку вирішує просто виклик ChatGPT — тут потрібна комбінація LLM, геоданих та маршрутизації.
Архітектура: чому простого GPT недостатньо
LLM добре генерує текст, але не знає актуальне розписання Колізею на наступний тиждень, не уміє оптимізувати порядок відвідувань по географічному принципу та не перевіряє реальну відстань між точками.
Робоча схема — RAG (Retrieval-Augmented Generation) + зовнішні API:
- Запит користувача → парсинг намірів через LLM (GPT-4o/Claude 3 Haiku) — витягаємо: місто, дати, кількість людей, вік дітей, інтереси, бюджет.
-
Пошук POI — Google Places API або Foursquare Places API за параметрами: координати міста,
type(museum/restaurant/park),rating ≥ 4.0, відкрито в потрібні дні. - Геооптимізація маршруту — Travelling Salesman Problem спрощений варіант: для 8-15 точок працює nearest-neighbor heuristic або Google Routes API Optimization (Compute Routes Matrix → жадний алгоритм розподілу по дням).
- Обогащення LLM — зібрані дані про POI + маршрут передаються в LLM для генерації людських описів, порад та зв'язного тексту плану.
-
Реальний час — актуальні розписання через Google Places Details (
opening_hours.periods), forecast натовпу через BestTime.app API (час найменшої завантаженості).
Промпт-інжиніринг для маршрутів
System prompt: «Ти — досвідчений travel-консультант. Тобі дан список POI з координатами, розписанням та рейтингами, розподілений по дням. Складі пов'язний план з часовими слотами, порадами логістики та рекомендаціями рядом з кожною точкою. Не вигадуй факти — тільки те, що є в переданих даних.»
Передаємо дані в структурованому JSON всередині user message — LLM краще працює зі структурою ніж з потоком тексту. Токени: ~3000-5000 на 4-денний маршрут з 15 точками. GPT-4o-mini по вартості оптимален для продакшену.
Мобільний UX: як це виглядає
Діалоговий інтерфейс
Не форма з полями — розмова. Користувач пише як в месенджері, асистент уточнює: «Ви згадали дитину — цікаві дитячі музеї або краще уникати?». Це серія clarification-питань до старту генерації.
На iOS: UITextView з inputAccessoryView для кнопки відправки. Сообщення в UICollectionView — пухирці як у чаті. Typing indicator поки LLM генерує.
Streaming відповіді: OpenAI API підтримує SSE (Server-Sent Events) streaming — текст з'являється по мірі генерації, не чекаємо повного відповіді. iOS: URLSession.dataTask + парсинг SSE-чанків через Scanner. Android: OkHttp EventSource. В UI — typingLabel з послідовним додаванням тексту.
Карта маршруту
Після генерації — інтерактивна карта з точками дня (Mapbox або Google Maps), пронумерованими маркерами та лініями шляху між ними. День переключається табом — карта перецентрується на точки вибраного дня з анімацією flyTo.
Натиск на маркер → карточка POI: фото (Google Places Photos API), рейтинг, рабочі години, відстань від попередної точки, кнопка «відкрити в навігаторі» (deeplink в Google Maps / Apple Maps / Яндекс Карти).
Редагування плану
Користувач хоче убрати точку або додати нову — drag & drop у списку дня, або чат-команда «убери Пантеон з другого дня та додай щось замість нього». LLM перегенерує тільки затронутий день з урахуванням змін.
Переупорядкування точок всередині дня: UITableView з UITableViewDragDelegate на iOS, ReorderableList в Compose.
Зберігання та синхронізація
Маршрут зберігається в хмарі (PostgreSQL: trips → trip_days → trip_stops). Офлайн-копія в SQLite/CoreData: користувач повинен мати доступ до маршруту без інтернету. Синхронізація при reconnect.
Експорт: PDF-план через сервер (WeasyPrint), Google Calendar через OAuth2 (calendar.events.insert для кожної точки зі часом), GPX для навігаторів.
Вартість LLM-викликів
При ~3000 токенів на генерацію та GPT-4o-mini ($0.15/1M input, $0.60/1M output) — близько $0.001-0.002 на один маршрут. Для проекту з 1000 генерацій на день — $1-2 на добу. Кешуємо результати схожих запитів (city + duration + type хеш) — знижує API-витрати при зростанні аудиторії.
Тривалість проекту
Базовий AI-планувальник маршрутів (діалог, генерація, карта) — 2-3 тижні. З редаганням, експортом в PDF/Calendar, офлайн-доступом та оптимізацією за часом роботи об'єктів — 5-8 тижнів. Вартість розраховується індивідуально: вибір LLM-провайдера та геосервісів істотно впливає на архітектуру.







