ШІ-агент для поїздок Бенгалуру, який вирішує, як вам добиратися
Як GoWise складає маршрути з пішої ходи, автобусів, метро, авторикш і таксі за допомогою пошуку графом і рушія оцінювання, а Gemini залишає лише пояснення й ніколи не довіряє йому вибір маршруту.
Попросіть будь-який навігаційний застосунок побудувати поїздку, і ви отримаєте одну відповідь: маршрут. Справжні поїздки в такому місті, як Бенгалуру, складніші. Найшвидший шлях не завжди найдешевший. Трохи довша поїздка метро може виявитися кращою за годину в заторі. Хтось нізащо не поїде таксі чи авторикшею. А план, що п'ять хвилин тому здавався ідеальним, зараз може бути хибним.
Ця невідповідність і привела до Commute Agent — ШІ-системи, яка не просто знаходить маршрут, а вирішує, як людині варто добиратися. GoWise — застосунок, яким користуються самі пасажири. Код відкритий: https://github.com/ssharanyab/commute-agent.
Стратегії, а не маршрути
GoWise — персоналізований мультимодальний планувальник для Бенгалуру. Поїздка тут не один шлях з A в B. Це поєднання ходьби, автобусів BMTC, метро, авторикш і таксі, з якого можуть виходити ланцюжки на кшталт «пішки, метро, пішки», «пішки, автобус, пішки» чи «авторикша, метро, пішки», де це доречно.
Ніхто не прописував ці комбінації вручну. Планувальник шукає транспортною мережею й алгоритмічно обчислює здійсненні поїздки.
Як розділено систему
Головне проєктне рішення — жорстка межа між ШІ-оркестрацією та детермінованим ухваленням рішень. Загалом:
Flutter / GoWise
↓
FastAPI
↓
Google ADK Orchestrator
↓
Journey Builder
↓
Live + Historical Enrichment
↓
Decision Engine
↓
Gemini Explanation
Flutter відповідає за інтерфейс для пасажира. Бекенд виконує процес планування, а оркестрацією займається Google ADK. Ось найважливіше правило: LLM ніколи не обирає маршрут.
Варіанти поїздок дає пошук графом
Journey Builder працює з мережею зупинок, станцій, пересадок і піших зв'язок чи підходів. Детермінований пошук графом перетворює її на здійсненні мультимодальні поїздки, кожна з яких має власне поєднання видів транспорту й пересадок.
Тож ніхто не питає в Gemini щось на кшталт "як найкраще доїхати від Majestic до Indiranagar?". Спершу варіанти генеруються алгоритмічно. Це робить планування набагато передбачуванішим і простішим для перевірки, ніж якби мовна модель імпровізувала маршрут.
Від варіантів до рішення
Згенерувати варіанти — лише половина справи. Далі системі треба вирішити, який варіант найкращий для конкретного пасажира, і це робить детермінований багатокритеріальний рушій рішень. Пасажир може розставити ваги цілей: найшвидше, найдешевше, найменше ходьби, найнадійніше, найменше заторів або баланс.
Рушій оцінює варіанти за цими вподобаннями й водночас дотримується жорстких обмежень. Візьмімо користувача, який каже: без таксі й без авторикш. Ці слова не просто змушують систему недолюблювати ці види транспорту. Вони стають обмеженнями, що відкидають кожну поїздку з ними, а решту варіантів оцінюють і ранжують.
Розділення обмежень і вподобань виявилося одним із найважливіших проєктних рішень.
Дані в основі
Це не концептуальне демо. Мережа спирається на реальні джерела щодо Бенгалуру:
- фіди BMTC GTFS
- дані про мережу метро BMRCL
- тарифи на авторикші, опубліковані владою
- інформація про державну політику
- історичні дані про пересування з Uber Movement
Поверх цього — версіоновані знімки й відстеження походження даних, тож невдале оновлення не може непомітно перезаписати робочий набір даних.
Що історія може сказати, а що ні
Історичні дані дають контекстні сигнали про маршрут: очікуваний час у дорозі, наскільки він коливається, надійність, покриття й відхилення від звичайних умов. Модель навмисно позиціонується як оцінювач контексту маршруту й не претендує на прогноз довільного майбутнього трафіку. Така чесність важлива. ШІ-система має прямо казати, що знають її моделі.
Поточні умови
Історія не може описати поїздку, яка починається просто зараз. Для ділянок дорогами GoWise може підключати дані маршрутизації Google Maps, які дають актуальні оцінки з урахуванням заторів. Розділення чітке: історія каже, що нормально, а жива маршрутизація — як справи цієї хвилини. Рушій рішень міркує над поїздками, збагаченими і тим, і тим.
Вузька роль Gemini
Gemini, що викликається через Google ADK, — це шар пояснень. Коли детермінований рушій уже обрав поїздку, Gemini отримує обґрунтовані факти про цей вибір і пише зрозуміле пасажирові пояснення. Це не дає моделі вигадувати ID маршрутів, оцінки, вартість чи міркування, які нічим не підкріплені. Простіше кажучи, вирішує система, а пояснює Gemini.
Персоналізація як частина планування
Уявіть поїздку від Majestic до Indiranagar для трьох різних пасажирів. Одному потрібен найдешевший варіант. Інший не хоче багато ходити. Третій відмовляється від таксі й авторикш. Транспортна мережа для всіх трьох та сама. Різний лише контекст рішення. Персоналізація тут — частина самого планування, а не косметична зміна інтерфейсу.
Де місце Google Maps
GoWise не прагне замінити Google Maps, які чудово ведуть людину обраним маршрутом. GoWise розв'язує раніше питання: яку стратегію пересування взагалі обрати? Maps веде маршрутом, а GoWise вирішує й складає, як вам їхати, а потім передає вибір у Maps для покрокової навігації.
Перепланування на ходу
Поїздка не стоїть на місці, і коли умови змінюються досить сильно, перша рекомендація може перестати бути найкращою. Адаптивний шар бере контекст поточної поїздки, оновлює умови, що змінилися, наново оцінює варіанти й перевіряє, чи не має перемогти інша стратегія. Це перетворює продукт з одноразового планувальника маршрутів на агента, що ухвалює рішення про пересування.
Уроки розробки
Прикрутити LLM ще не означає автоматично отримати ШІ-агента. Більша частина важкої роботи виявилася звичайною детермінованою інженерією:
- побудувати транспортний граф, яким справді можна користуватися
- знаходити мультимодальні поїздки, які по-справжньому відрізняються одна від одної
- давати раду першій і останній милі
- зберігати ідентичність транспортних об'єктів між етапами планування
- справлятися з неповними даними
- відрізняти невідомі значення від нулів
- проєктувати багатокритеріальне оцінювання, яке щось означає
- правильно застосовувати обмеження користувача
- тримати пояснення в прив'язці до того, що насправді вирішено
LLM — лише одна частина. Інтелект виникає з того, як усі частини працюють разом.
Що далі
Є куди рости: багатші фіди транспорту в реальному часі, детальніші пішохідні мережі, більше транспортних провайдерів, сильніше планування в часі, персоналізація, що навчається, і більші набори даних. Довгострокова мета — не симпатичніший планувальник маршрутів. Мета — система, яка розуміє пасажира, мережу, поточний контекст і компроміси між способами пересування.
Краще питання
Ми чудово навчилися питати найшвидший маршрут, але пасажирові часто треба знати зовсім не це. Корисніше спитати, як вам варто добиратися з огляду на те, хто ви, що для вас важливо і що відбувається просто зараз. GoWise — спроба відповісти саме на це питання.