Каждую неделю я трачу 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

Юнит-экономика

Сколько стоит один заказ и где точка окупаемости

Попробовать

Как использовать:

  1. Отправьте сообщение: «собери завтрак на двоих»

  2. Подождите ответ (~60 секунд)

  3. Откройте ссылку на корзину и оформите заказ

Источник вдохновения

Статья Вкусвилл о собственном MCP

Интересно, какие рутинные задачи в быту можно так же «свернуть в одно сообщение», напишите в комментариях. Соберу идеи для следующих экспериментов.

P.S. Бот сделан в формате AI-assisted development: архитектура и ключевые решения мои, ИИ помогал с реализацией. Отдельно покажу, где это реально ускоряет разработку, а где, наоборот, создаёт новые риски.

Комментарии (23)


  1. janvarev
    03.03.2026 07:23

    Сценарий обычно один и тот же: открыть каталог, найти молоко среди 15 похожих карточек, добавить, искать хлеб, сомневаться между бородинским и чиабаттой, снова добавить, потом сыр, потом что-то к чаю.

    Даже не знаю - откройте для себя "Избранное", что ли... :))))

    Есть тупо пищевые привычки, и брать "абстрактный хлеб к абстрактному чаю" - ну, имхо, такое...


    1. sharxan Автор
      03.03.2026 07:23

      Можно итак ))) а можно и записать в блокнот, что ешь, и ходить с этим в магазин, тоже в некотором роде избранное. Поэтому реализация дело вкуса )


    1. conrad98
      03.03.2026 07:23

      Нее, нужно придумать проблему, там где её нет, а потом типа "решить" её и пафосно заявить миру "какой же я молодец".

      А, по сути, просто отделаться жидко...

      • Кста, есть ещё и функция "повторить корзину", если уж совсем лень )


    1. lunarshade
      03.03.2026 07:23

      Бывает, что любимого товара из избранного просто нет, сидишь полчаса ищешь замену.


      1. janvarev
        03.03.2026 07:23

        Бывает, да - но ИИ вряд ли поможет :)

        Кстати, мы выделили себе небольшой бюджет "под эксперименты" - брать что-то новое, и, если зайдет, потом тоже добавлять в избранное.


        1. sharxan Автор
          03.03.2026 07:23

          Хорошая идея) вообще бывает ИИ подкинет что-то новенькое. Например, на тестах предложил венгерскую кухню )


          1. janvarev
            03.03.2026 07:23


            1. sharxan Автор
              03.03.2026 07:23

              Спасибо, что поделились опытом. Этот раздел известен. Это новинки ассортимента. Не всегда из нового на сайте является для кого-то новым.

              Вообщем каждый сам может определить, как будет себе искать что-то в качестве эксперимента.


              1. janvarev
                03.03.2026 07:23

                Коллега, немного завидую вашему оптимизму :)

                Вообще считаю, что на личном уровне ваш энтузиазм более чем полезен, так что мои замечания относятся скорее к возможному общественному использованию (не могу слишком сильно грешить против истины).

                Пишу не просто так - я автор опенсорс голосового помощника Ирина (на Хабре есть статьи под этим профилем).

                И спустя три года разработки, практического использования и обсуждений я понимаю - основная голосовая команда помощнику - "таймер". Это практически единственное, что удобно ставить голосом, а не руками. Еще, но значительно реже:

                • команды умного дома (для имеющих такой, Home Assistant)

                • музыка (для проприетарных голосовых - поставить фоном музыку)

                • будильник

                • погода

                • справочная информация (у меня для этого Perplexity подключен)

                Собственно, все.


                1. sharxan Автор
                  03.03.2026 07:23

                  Спасибо за поддержку) как говорится, дорогу осилит идущий.

                  Хочет нанести какую-то пользу и ради технофана получить удовольствие ) в любом случае я для себя уже в процессе создания попробовал несколько инструментов, про которые читал, но не было точки приложения усилий


        1. lunarshade
          03.03.2026 07:23

          Я одно время пользовалась сервисом, который придумывал меню и рецепты, и просто присылала тебе продукты из супермаркета под эти рецепты. Это ещё до развития ии. Мне нравилось постоянно пробовать что-то новое, но потом они закрылись, к сожалению. Как я понимаю, данный бот может быть заменителем такого сервиса))


      1. sharxan Автор
        03.03.2026 07:23

        Или хочется чего-то такого, а не понятно, что под настроение)))


  1. n39r19
    03.03.2026 07:23

    Зарегался специально чтобы прокомментировать этот пост)

    Автор молодец, ведь есть кайф в автоматизации своей личной рутины. Даже трата N*100 времени, чтобы автоматизировать N своего времени - это отдельный кайф, он не всем понятен

    Удачи в развитии продукта, жду следующих статей!


  1. coodi
    03.03.2026 07:23

    А как выбрать просрочку?


    1. sharxan Автор
      03.03.2026 07:23

      MCP такого не возвращает. Вообще это не должно попадать покупателям ни в каком виде. Интересно, к чему такой вопрос?


      1. coodi
        03.03.2026 07:23

        Там раньше был "жёлтый ценник"


        1. sharxan Автор
          03.03.2026 07:23

          Понял, это со скидкой. Вроде что-то было, типа скидки и акции. Я посмотрю. Интересно.


  1. ProfDonda
    03.03.2026 07:23

    Не понял проблемы, честно говоря. Мы в семье за 3 - 4 месяца первоначального пользования ВВ выяснили, какой творог/молоко/котлеты/рыба/выпечка/etc.etc.etc. нам понравились и просто повторяем свои заказы в той или иной комбинации. Там же есть история Заказов. Какой такой "по релевантности/цене"?? На вкусно или нам невкусно, вот какой критерий.


    1. sharxan Автор
      03.03.2026 07:23

      Глобально проблемы нет. Это вопрос удобства. ВкусВилл опубликовал MCP сервер, а это уже шаг к реализации более френдли истории для пользователя. Заказ голосом, какая-то автономность и да просто автоматизировать бытовуху. Например, робот пылесос из этой серии, можно пылесосить 2 раза в неделю обычным пылесосом.

      Через Алису есть тестовый функционал, хочу доработать его. Вижу такой путь: Алиса закажи то и то, а Алиса спрашивает, у вас возможно закончилось и это. Добавить? Подтверждаем - смотрим в корзину, все ли ок. - оплачиваем.


      1. ProfDonda
        03.03.2026 07:23

        Пылесосить роботом-пылесосом очень удобно, запустил его и ушёл гулять/в кино/в другую комнату. Запускаем через день, а то и ежедневно. А вот с едой каждую неделю разная программа, по настроению/сезону/аппетиту. Но виды продуктов "наработаны" опытом. Впрочем, в каждой семье свои привычки.


  1. sharxan Автор
    03.03.2026 07:23

    Привет!

    Спасибо, что дочитали статью и воспользовались ботом, дали обратную связь. Стало понятно, что еще необходимо доработать, добавить новый функционал. Например, поведение бота при сложносоставных запросах с большим количеством элементов.

    Взял в работу.

    Всем хорошего дня!


  1. diffnotes-tech
    03.03.2026 07:23

    "Точность подбора ~90%" - ну то есть каждый десятый товар мимо. Для завтрака на двоих из 5 позиций это каждый второй заказ с сюрпризом)


    1. sharxan Автор
      03.03.2026 07:23

      Точность нужно повышать. У нас как раз на вход неопределенность от пользователя в виде формулирования запросов и на выходе неопределенность от LLM в силу матмеханизма модели. Не всегда валидаторы справляются. Вот если подсветить заранее предпочитаемым продукт, система его запомнит и неопределенность снизится.