Этот сервис автоматически подхватывает новые отзывы из кабинета продавца Wildberries, генерирует ответ через LLM и отправляет его обратно. Он рассчитан на запуск в Yandex Cloud Functions, но может работать локально или в Docker.
- Ключевые возможности
- Как работает сервис
- Стоимость использования
- Быстрый старт
- Требования и предварительная подготовка
- Конфигурация приложения
- Структура проекта
- Локальный запуск
- Запуск в Yandex Cloud Functions (Serverless)
- Запуск через Docker
- Архитектура и внутреннее устройство
- Тестирование и качество кода
- Расширение и кастомизация
- Частые вопросы
- Ограничения и известные особенности
- Обратная связь и вклад в проект
- Лицензия
- Полный контроль над доступом к API Wildberries, вы не делитесь токеном с третьими сторонами.
- Очень простая настройка и деплой в Yandex Cloud Functions через Serverless Framework, справится любой!
- Возможность кастомизации промптов - как модель будет отвечать на отзывы.
- Регулярная обработка новых отзывов без сервера и постоянного процесса.
- Поддержка YandexGPT и OpenAI-совместимых моделей.
- Гибкая конфигурация через YAML и переменные окружения.
- Несколько сценариев запуска: Yandex Cloud Functions, Docker, локально.
- По расписанию функция запрашивает список неотвеченных отзывов в Wildberries.
- Каждый отзыв превращается в индивидуальный промпт для LLM с включением деталей отзыва и даже наличия фото или видео.
- LLM генерирует ответ в нужном тоне и языке.
- Ответ отправляется обратно в Wildberries Feedbacks API.
- Код бесплатный и открытый.
- Расходы зависят от облака, модели и числа отзывов.
- Yandex Cloud Functions тарифицируется по времени выполнения и памяти.
- YandexGPT или OpenAI тарифицируются по токенам.
- Wildberries Feedbacks API бесплатен в пределах лимитов кабинета продавца.
Производственные замеры показали стоимость около 0,25 рубля за один отзыв. На скриншоте за два дня было отвечено примерно на 100 отзывов.
Если всё уже настроено (YC, доступы, токены), достаточно: Это соберёт и задеплоит функцию в Yandex Cloud Functions и настроит cron-триггер (который будет запускать функцию по расписанию).
npm install
WILDBERRIES__API_TOKEN='your_wb_token' serverless deployОпционально можно указать ключ LLM или изменить расписание:
LLM__API_KEY='your_llm_api_key' WILDBERRIES__API_TOKEN='your_wb_token' serverless deploy
WILDBERRIES__CHECK_EVERY_MINUTES='15' WILDBERRIES__API_TOKEN='your_wb_token' serverless deploy- Python 3.12+ и
pipдля локальных запусков и тестов. - Node.js 18+ и
npmдля Serverless Framework. - Установленный CLI
ycдля работы с Yandex Cloud.
- В кабинете продавца откройте «Профиль → Настройки → Доступ к API → Отзывы и вопросы».
- Создайте новый ключ и передайте его через переменную окружения
WILDBERRIES__API_TOKEN. - Документация по токенам: https://dev.wildberries.ru/openapi/api-information#tag/Avtorizaciya/Kak-sozdat-personalnyj-bazovyj-ili-testovyj-token
- Для YandexGPT в Yandex Cloud Functions нужен сервисный аккаунт с ролью
ai.languageModels.user(описано вserverless.yml). - Внутри Cloud Functions можно не задавать
LLM__API_KEY: функция подставит IAM-токен изcontext.token, если ключ пустой или равенnull. - Для OpenAI или другого OpenAI-совместимого API укажите
LLM__API_KEY,LLM__MODELиLLM__BASE_URL.
Можно использовать бесплатные локальные модели через Ollama: сервис поднимает OpenAI-совместимый API на http://localhost:11434/v1.
Пример настроек в settings.yaml:
llm:
base_url: "http://localhost:11434/v1"
model: "gemma3:4b"
api_key: "ollama"Пример через переменные окружения:
export LLM__BASE_URL='http://localhost:11434/v1'
export LLM__MODEL='gemma3:4b'
export LLM__API_KEY='ollama'Если ключ не требуется, можно указать любое непустое значение.
settings.yaml — основной источник настроек, если их не перекрыли переменными окружения. Пример структуры:
wildberries: # Блок настроек для Wildberries API.
base_url: "https://feedbacks-api.wildberries.ru" # Базовый URL API отзывов.
request_timeout: 10 # Таймаут HTTP-запросов, секунды.
batch_size: 10 # Сколько отзывов обрабатывать за один запуск.
check_every_minutes: 30 # Период запуска в минутах для cron-режимов.
llm: # Блок настроек LLM-провайдера.
model: "gpt://{FOLDER_ID}/aliceai-llm/latest" # Идентификатор модели; {FOLDER_ID} подставится в YC.
base_url: "https://rest-assistant.api.cloud.yandex.net/v1" # Базовый URL LLM API.
temperature: 0.3 # Степень креативности ответа (меньше = стабильнее).
max_tokens: 600 # Максимум токенов в ответе модели.
instructions: "..." # Системные инструкции модели.
prompt_template: "..." # Шаблон промпта для текста отзыва.
timeout: 10 # Таймаут запросов к LLM, секунды.{FOLDER_ID} в модели автоматически заменяется в Yandex Cloud Functions.
Переменные строятся из вложенных ключей через __:
WILDBERRIES__API_TOKEN— обязательный токен доступа к отзывам.WILDBERRIES__BASE_URL— URL API (обычно не трогается).WILDBERRIES__REQUEST_TIMEOUT,WILDBERRIES__BATCH_SIZE,WILDBERRIES__CHECK_EVERY_MINUTES.LLM__API_KEY— ключ LLM (для YC Functions можно оставить пустым/null).LLM__MODEL,LLM__BASE_URL,LLM__TEMPERATURE,LLM__MAX_TOKENS,LLM__INSTRUCTIONS,LLM__PROMPT_TEMPLATE,LLM__TIMEOUT.
Приоритет источников такой: переменные окружения → .env → файловые секреты → settings.yaml. То есть YAML — это безопасный дефолт, а любые env-настройки его перекрывают.
src/domain— чистые модели и сущности.src/application— оркестрация и порты.src/infra— клиенты API, логирование, интеграции.src/entrypoints— сценарии запуска.tests— тесты, включая архитектурные.
src.entrypoints.yandex_cloud_function— обработчик для Yandex Cloud Functions.src.entrypoints.docker_once— разовый запуск обработки.src.entrypoints.docker_cron— запуск с внутренним расписанием.
Доменные модели не зависят от приложения и инфраструктуры, приложение — от инфраструктуры. Эти границы проверяются тестами в tests/test_architecture.py.
python -m venv .venv
source .venv/bin/activate
pip install -r requirements-dev.txtexport WILDBERRIES__API_TOKEN='your_wb_token'
export LLM__API_KEY='your_llm_api_key'
python -m src.entrypoints.docker_onceexport WILDBERRIES__API_TOKEN='your_wb_token'
python -m src.entrypoints.docker_cronИнтервал берётся из wildberries.check_every_minutes.
- Можно указать
WILDBERRIES__BASE_URLиLLM__BASE_URLна тестовые или локальные сервисы. - Для проверки полной цепочки полезен
tests/test_e2e.py, он поднимает фейковые HTTP-серверы.
Документация по установке: https://cloud.yandex.ru/docs/cli/quickstart
curl https://storage.yandexcloud.net/yandexcloud-yc/install.sh | bash
yc initnpm install
WILDBERRIES__API_TOKEN='your_wb_token' serverless deployОпциональные параметры:
LLM__API_KEY='your_llm_api_key' WILDBERRIES__API_TOKEN='your_wb_token' serverless deploy
WILDBERRIES__CHECK_EVERY_MINUTES='15' WILDBERRIES__API_TOKEN='your_wb_token' serverless deployРасписание берётся из wildberries.check_every_minutes (по умолчанию 30). Для изменения без правки YAML можно передать WILDBERRIES__CHECK_EVERY_MINUTES при деплое и повторить serverless deploy.
serverless removedocker pull eslazarev/ai-wildberries-review-responder:latestПо умолчанию образ запускает режим с расписанием. Для разового прогона укажите src.entrypoints.docker_once.
docker run --rm \
-e WILDBERRIES__API_TOKEN='your_wb_token' \
-e LLM__API_KEY='your_llm_api_key' \
eslazarev/ai-wildberries-review-responder:latest src.entrypoints.docker_oncedocker run --rm \
-e WILDBERRIES__API_TOKEN='your_wb_token' \
-e WILDBERRIES__CHECK_EVERY_MINUTES='15' \
-e LLM__API_KEY='your_llm_api_key' \
eslazarev/ai-wildberries-review-responder:latest- Клиент WB получает список неотвеченных отзывов (
/api/v1/feedbacks). PromptBuilderформирует промпт с полным JSON-пейлоадом отзыва.- LLM возвращает готовый ответ.
- Клиент WB публикует ответ (
/api/v1/feedbacks/answer).
respond_on_reviews в src/application/respond_on_reviews.py управляет потоком: загрузить отзывы, получить ответы, опубликовать их. Конкретные реализации подставляются через порты.
Доменные модели не знают об инфраструктуре, а приложение не зависит от конкретных интеграций. Это позволяет менять клиентов API и LLM без переписывания логики.
pytest -m architecturemake lint
make test
make ciСамый удобный способ — править llm.prompt_template и llm.instructions в settings.yaml. Для быстрых экспериментов можно использовать LLM__PROMPT_TEMPLATE и LLM__INSTRUCTIONS.
Сервис использует OpenAI-совместимый клиент. Достаточно задать:
export LLM__BASE_URL='https://api.openai.com/v1'
export LLM__MODEL='gpt-4o-mini'
export LLM__API_KEY='your_key'Нужно ли задавать LLM__API_KEY в Yandex Cloud Functions?
Если используете YandexGPT внутри Cloud Functions, ключ не обязателен: IAM-токен будет взят из контекста.
Как изменить частоту запуска?
Поменяйте wildberries.check_every_minutes в settings.yaml и задеплойте заново, либо задайте WILDBERRIES__CHECK_EVERY_MINUTES при деплое.
Можно ли отвечать только на часть отзывов?
Сервис обрабатывает пачку неотвеченных отзывов размером wildberries.batch_size. Фильтрация по кастомным правилам не реализована.
- Ответы отправляются последовательно; параллелизм и ретраи не реализованы.
- Нет встроенного ограничения по длине ответа, контроль лежит на промпте и настройках модели.
- История обработанных отзывов не хранится, сервис опирается на флаг
isAnsweredв API Wildberries. - В Docker-режиме расписание работает через встроенный cron APScheduler, а в YC — через серверлесс-триггер.
Идеи, баги и предложения удобно оставлять в Issues. Пулл-реквесты приветствуются — по возможности приложите тесты и краткое описание изменений.
Проект распространяется по лицензии MIT. Подробности — в LICENSE.

