Каждую неделю я трачу 15-20 минут на заказ продуктов во «ВкусВилл». Сценарий обычно один и тот же: открыть каталог, найти молоко среди 15 похожих карточек, добавить, искать хлеб, сомневаться между бородинским и чиабаттой, снова добавить, потом сыр, потом что-то к чаю. К пятой позиции я уже не уверен, кто тут клиент: я или бесконечная лента товаров.
В какой-то момент поймал себя на мысли: я трачу больше времени на поиск гречки, чем гречка потом варится.
По данным Platforma (2021), россияне в среднем проводят от 19 до 49 минут в месяц на выбор продуктов онлайн с мобильного (жители Москвы — в 2,5 раза больше). При этом 65% покупателей называют экономию времени главной причиной онлайн-покупки продуктов (РБК, 2022) - данные несколько устаревшие, но все же.
Парадокс понятный: мы идём в онлайн, чтобы сэкономить время, и там же это время сливаем в рутину.
Я решил проверить простую гипотезу: если человек обычно заказывает одно и то же, можно ли собрать корзину по одной фразе вроде:
> «Собери завтрак на двоих»
Спойлер: можно. Я сделал Telegram-бота, который понимает обычный язык, сам ищет товары в каталоге «ВкусВилл» и отдаёт готовую ссылку на корзину.
> Дисклеймер: это личный open-source проект. Я не связан с компаниями ВкусВилл или Яндекс. Бот использует публичный API ВкусВилл и Yandex Cloud AI Studio на общих условиях. Код доступен на GitHub под лицензией Apache 2.0.
Давайте сразу к делу. Вот как выглядит типичный диалог:
**Пользователь:** Собери завтрак на двоих **Бот:** > 🛒 Завтрак на двоих (5 товаров, 612 руб): > 1. Яйца куриные С0, 10 шт — 89 руб × 1 = 89 руб > 2. Хлеб бородинский нарезной — 65 руб × 1 = 65 руб > 3. Масло сливочное 82.5%, 180 г — 169 руб × 1 = 169 руб > 4. Сыр Маасдам нарезка, 125 г — 159 руб × 1 = 159 руб > 5. Апельсиновый сок, 1 л — 130 руб × 1 = 130 руб > > Итого: 612 руб > [Открыть корзину](ссылка) > > Наличие и точное количество товаров будет проверено при > открытии ссылки на корзину. Цены уточняйте на сайте.
Бот не просто находит «что-то съедобное», а собирает цельный набор. Как сосед, которому вы дали список. Только сосед может принести ещё семечки и рассказ на 20 минут, а бот просто присылает ссылку.
##Что бот делает под капотом?
На запрос «завтрак на двоих» бот обычно делает 5 шагов:
Разбивает задачу на позиции (яйца, хлеб, масло, сыр, сок) Ищет каждую позицию в каталоге Выбирает лучший кандидат по релевантности/цене Рассчитывает количество (для рецептов - с учётом порций) Собирает одну ссылку на корзину На практике это 5-12 инструментальных вызовов и около 60 секунд ответа.
## Ещё два сценария
Рецепт далее корзина
Пользователь: собери ингредиенты для окрошки на квасе
Бот извлекает ингредиенты, ищет их в каталоге, считает количества и собирает одну корзину.
Персонализация
Бот: Запомнил: молоко [записал в блокнотъ] безлактозное молоко
После этого в новых заказах бот подставляет нужный вариант автоматически.
Через пару недель он иногда помнит ваши привычки лучше, чем вы в субботу утром.
## Архитектура
Если простыми словами, то:
Telegram принимает сообщения
Shopping Agent решает, что искать и в каком порядке
MCP Gateway ходит во внешние инструменты (поиск/корзина)
Хранилища держат предпочтения, историю и кэш
## Почему именно так
Qwen в Yandex Cloud: стабильно работает с русским языком и удобно доступен из РФ
MCP: единый протокол для инструментов; меньше «самописной склейки»
Сменяемая модель: провайдера можно заменить без переписывания половины проекта
Я сознательно не ухожу в код в этой статье. Здесь цель - показать продукт и механику. Технический разбор будет отдельно.
## Что пошло не так (и это нормально)
Рабочий ИИ-бот - это не только «вау-демо», но и ежедневные маленькие драки с реальностью.
Пользователь просит 3 пачки молока, а модель пытается положить одну
Поиск может зациклиться на одном и том же запросе (режим «я точно закрыл дверь?»)
Иногда встречаются величины уровня 0.68 банки огурцов
Из 5 найденных товаров в корзину может уехать 4 (обычно страдает сыр, не знаю почему)
Все эти кейсы я вынес в отдельную статью про «11 граблей» с кодом и фиксами.
|
№ |
Метрика |
Значение |
|
1 |
Ручной заказ |
15-20 мин/неделю |
|
2 |
Через бота |
~60 секунд |
|
3 |
Экономия |
~75 мин/месяц (~15 часов/год) |
|
4 |
Действия |
~20 кликов -> 1 сообщение |
|
5 |
Tool calls |
5-12 на запрос (до 20 для сложных рецептов) |
|
6 |
Точность подбора |
~90% (с верификацией корзины) |
|
7 |
Покрытие тестами |
98% |
\* Если попросить «что-нибудь вкусное, полезное, недорогое и с пармезаном, но чтобы недорого», модель тоже немного задумается.
## Что дальше в серии
|
№ |
Статья |
О чём |
|
1 |
Вы здесь |
Демо и обзор: как бот собирает корзину |
|
2 |
MCP + Qwen |
Как устроен цикл tool calling и интеграция с API |
|
3 |
11 граблей tool calling |
Дубликаты, зацикливание, дробные количества, мусорные запросы |
|
4 |
Тестирование ИИ-бота |
Как тестировать недетерминированную систему |
|
5 |
Юнит-экономика |
Сколько стоит один заказ и где точка окупаемости |
Попробовать
Бот в Telegram: [@vkus_eda_voda_bot](https://t.me/vkus_eda_voda_bot)
Исходный код: [GitHub](https://github.com/mrPDA/vkuswill_bot) (Apache)
Как использовать:
Отправьте сообщение: «собери завтрак на двоих»
Подождите ответ (~60 секунд)
Откройте ссылку на корзину и оформите заказ
Статья Вкусвилл о собственном MCP
Интересно, какие рутинные задачи в быту можно так же «свернуть в одно сообщение», напишите в комментариях. Соберу идеи для следующих экспериментов.
P.S. Бот сделан в формате AI-assisted development: архитектура и ключевые решения мои, ИИ помогал с реализацией. Отдельно покажу, где это реально ускоряет разработку, а где, наоборот, создаёт новые риски.
Источник


