Реализация 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), crowd 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-провайдера и геосервисов существенно влияет на архитектуру.







