Как работает AI-турагент Voyago: пайплайн от запроса до брони
Снаружи Voyago выглядит просто: пишете боту фразу — получаете готовую поездку. Внутри это 6 этапов и 5 разных API, которые работают параллельно. Разбираем пайплайн без маркетинга: что обрабатывает голос, что понимает запрос, как подбираются варианты и почему 30 секунд хватает на всё.
Этап 1. Вход — текст или голос в Telegram
Пользователь отправляет сообщение боту @voyago_travel_bot. Telegram Bot API доставляет update нашему серверу через long-poll. На входе либо текст («хочу в Бали в июле на двоих, бюджет $3 000»), либо голосовое сообщение (.oga-файл).
Если это голос — файл сразу уходит на следующий этап. Если текст — пропускаем шаг 2.
Этап 2. Whisper — распознавание речи
Голосовое сообщение прогоняется через модель Whisper (large-v3) от OpenAI. Запрос идёт через Groq Whisper API — это в 5-8 раз быстрее, чем OpenAI напрямую, потому что Groq использует свой кастомный inference-чип LPU.
Время на 15-секундное войс — около 700 мс. Распознавание работает на 99 языках, но мы дополнительно передаём language=ru для русских юзеров — это уменьшает количество ошибок на именах городов и валютных метках.
Почему именно Groq, а не OpenAI напрямую
Whisper на Groq — около $0.05 за минуту аудио и латенси ~700 мс. У OpenAI — $0.006/минута (дешевле!), но латенси 3-5 секунд. Для real-time чат-бота скорость важнее экономии $0.04 за запрос.
Этап 3. Groq llama-3.3 — извлечение параметров
Распознанный текст уходит в LLM Groq llama-3.3-70b. Промпт превращает свободную фразу в структурированный JSON:
- destination — город/страна назначения
- origin — город вылета (либо из профиля)
- dates — даты или месяц
- nights — количество ночей
- budget — бюджет в валюте
- travelers — взрослые, дети, возрасты
- preferences — стиль (тихо/активно), питание, локация отеля
Llama-3.3-70b на Groq отвечает за ~1.2 секунды — это сильно быстрее, чем GPT-4 (3-6 сек) и Claude Sonnet (4-8 сек). При этом качество извлечения параметров на наших тестах ~94% F1, что не сильно уступает GPT-4 (~96%).
Если в запросе чего-то не хватает (например, не указан город вылета) — LLM генерирует уточняющий вопрос, и бот возвращается в этап 1.
Этап 4. Параллельный запрос к 6 партнёрам
Когда параметры собраны, наш оркестратор запускает 6 одновременных HTTP-запросов:
- Aviasales API — поиск рейсов по датам и направлению (marker 727114)
- Booking.com через Travelpayouts — отели в выбранном диапазоне
- Hotels.com и Agoda — cross-check цен на топ-3 отеля от Booking
- Tripster — русскоязычные экскурсии в локации
- Airalo — eSIM-тарифы для страны
- Cherehapa — страховка на даты и страну
- Kiwitaxi — трансфер аэропорт↔отель
Все 7 запросов выполняются через Promise.all() с таймаутом 8 секунд на каждый. В среднем самый медленный из них (Booking) завершается за 4-5 секунд. Остальные приходят раньше.
Этап 5. Ранжирование и сборка пакета
На выходе из этапа 4 у нас «корзина» данных: ~30 рейсов, ~20 отелей с ценами от 3 разных провайдеров, 5-15 активностей, 2-4 eSIM-тарифа, 5-8 страховых полисов, цена трансфера.
Ранжирование делает не LLM, а отдельный детерминированный скоринг на Python:
- Cross-check цен на отель: берём минимальную из Booking/Hotels.com/Agoda
- Фильтр рейсов: соответствие классу, без долгих пересадок (если не указано)
- Бюджет-чек: рейсы + 7 ночей + страховка + eSIM ≤ заявленный бюджет
- Профильные предпочтения: «тихо» → отели не в туристических зонах, «у моря» → ≤500м до пляжа
На выходе — топ-3 варианта пакета: «бюджетный», «оптимальный», «премиум» в рамках указанного бюджета.
Почему скоринг не на LLM
Сравнение 20+ отелей по 8 параметрам — это детерминированная задача, у которой есть один правильный ответ. LLM здесь не нужна: она будет медленнее, дороже и иногда галлюцинировать цены. Поэтому скоринг = чистый Python с весами, настроенными вручную на 14 000 предыдущих кейсах.
Этап 6. Рендеринг и доставка пользователю
Топ-3 пакета конвертируются в Telegram-сообщения с inline-кнопками. На каждом отеле — кнопка с прямой ссылкой на бронирование с маркером 727114 для трекинга. На рейсах — ссылка на Aviasales. На eSIM — на Airalo с предзаполненным тарифом.
Voyago сам не процессит оплату. Пользователь нажимает кнопку, открывается сайт партнёра, бронирование происходит у них. Это важно: мы не храним данные карт и не несём ответственности за платёж — это упрощает compliance и снимает риски с пользователя.
Сколько занимает целиком
Усреднённое время от отправки сообщения до получения пакета на наших последних 1000 запросов:
- Whisper (если голос): 700 мс
- Llama-3.3 на Groq: 1 200 мс
- Параллельный запрос к 7 партнёрам: 4 800 мс (определяется самым медленным — Booking)
- Скоринг и рендер: 200 мс
- Telegram-доставка: 300 мс
Итого ~7 секунд для голосового запроса, ~6.5 секунд для текстового. Маркетинговое «30 секунд» — это с запасом, под пиковую нагрузку и медленные сети у пользователей.
Что под капотом
- Backend: Node.js (Express) на VPS в Казахстане. Telegram Bot API через polling
- База данных: PostgreSQL (Supabase) для пользователей и сохранённых поездок
- Кеш: Redis для агрегированных результатов поиска (TTL 15 минут)
- LLM: Groq llama-3.3-70b (быстро + дёшево), fallback на Claude 4.7 Sonnet для сложных запросов
- STT: Whisper large-v3 через Groq
- Mini App: Next.js 14 (App Router), self-hosted на той же VPS, через Caddy + Let's Encrypt
Чем это отличается от ChatGPT
ChatGPT с включённым Web Browsing тоже умеет искать рейсы и отели. Разница в трёх вещах:
- Прямые API партнёров. Voyago общается с Aviasales и Booking через официальные API. ChatGPT парсит публичные сайты — это медленнее (10-20 секунд), не всегда точно по цене, без partner marker для трекинга комиссии.
- Структурированный пайплайн. ChatGPT отвечает потоком текста; у Voyago — фиксированный JSON-формат пакета, который рендерится в кнопки Telegram с прямыми ссылками на бронь.
- Память между сессиями. ChatGPT забывает контекст между чатами. Voyago помнит ваш профиль (город вылета, бюджет, предпочтения, сохранённые поездки) — следующий запрос пишется одной фразой.
Хотите попробовать целиком? Откройте @voyago_travel_bot и опишите поездку — увидите все 6 этапов в действии. Если интересно посмотреть на список направлений сначала — у нас есть подборка 20 безвизовых стран для россиян в 2026. Если хотите понять, чем AI-турагент полезен в принципе — читайте про 7 преимуществ AI-планирования.