Генерация описаний товаров для Wildberries и Ozon через нейросеть

Python-скрипт, который берёт характеристики товаров из CSV, генерирует описания через Zukko, отсеивает тексты с нарушениями и сохраняет результат.

5 мин · · бизнес · автоматизация

Когда в ассортименте сотни позиций, писать описание к каждой карточке на Wildberries и Ozon вручную долго, а описания из каталога поставщика часто сводятся к списку характеристик. Генерация описаний товаров через нейросеть решает это за один прогон: скрипт берёт характеристики из таблицы, модель пишет связный текст, а автоматическая проверка отсеивает явные нарушения. Ниже — готовый скрипт на Python, расчёт стоимости и порядок загрузки на площадки.

Как устроен процесс

  1. Подготовка данных — CSV с артикулом, категорией, названием и характеристиками.
  2. Генерация — для каждого товара характеристики уходят модели с подробным заданием.
  3. Проверка — длина, запрещённые формулировки, контакты и ссылки в тексте.
  4. Выгрузка — CSV с описаниями и статусом проверки; дальше — загрузка в кабинет продавца или через API площадки.

Модель пишет только на основе того, что вы ей дали. Чем точнее характеристики, тем меньше в тексте общих слов и тем меньше риск, что модель «додумает» несуществующие свойства.

Подготовка CSV

Файл products.csv в кодировке UTF-8:

bash
product_id,category,name,characteristics
A-1001,Электроника,Смартфон X15,"Экран 6,5 дюйма, аккумулятор 5000 мАч, основная камера 50 Мп, 128 ГБ памяти"
A-1002,Электроника,Наушники LP12,"Bluetooth 5.3, активное шумоподавление, до 30 часов работы"
A-1003,Дом и сад,Лампа светодиодная 10 Вт,"Цоколь E27, холодный свет 6500 К, 900 лм"

Поля:

  • product_id — ваш артикул, по нему потом сопоставляются результаты;
  • category — категория товара;
  • name — название;
  • characteristics — всё, что известно о товаре: размеры, материалы, комплектация, особенности.

Python-скрипт генерации описаний

Зависимость одна: pip install requests. Ключ — в переменной окружения ZUKKO_API_KEY.

bash
import csv
import os
import re
import sys
from concurrent.futures import ThreadPoolExecutor

import requests

API_URL = "https://api.zukko.pro/v1/chat/completions"
MODEL = "glm-5.3-flash"
MIN_LEN, MAX_LEN = 800, 2000  # границы длины в символах, поставьте свои

FORBIDDEN = ["лучший", "№1", "гарантированно", "100%", "не имеет аналогов"]
CONTACTS_RE = re.compile(

Что в нём важно:

  • Параллельность. ThreadPoolExecutor обрабатывает до четырёх товаров одновременно, а не по одному. Если начнутся ответы 429, уменьшите max_workers.
  • Ошибки не роняют прогон. Сбой на одном товаре попадает в колонку status как error: ..., остальные продолжают обрабатываться.
  • Проверка не заменяет человека. Статус check: ... значит, что текст нужно посмотреть глазами. Статус ok — что явных нарушений не нашлось, но фактические ошибки скрипт не поймает.
  • Учёт токенов. Колонка tokens берётся из поля usage ответа — по ней видно реальный расход.

Запуск

bash
pip install requests
export ZUKKO_API_KEY=fetch_ваш_ключ
python generate_descriptions.py

Результат — descriptions.csv с колонками product_id, name, description, status, tokens. Откройте его в табличном редакторе, отфильтруйте строки со статусом, отличным от ok, и поправьте их вручную или перезапустите для них генерацию.

Расчёт стоимости

Для русского текста токенов обычно больше, чем слов, поэтому прикиньте с запасом: около 300 входных токенов (задание и характеристики) и около 600 выходных на один товар. На 1000 товаров это 0,3M входных и 0,6M выходных токенов.

МодельЦена вход/выход за 1MРасчёт1000 товаров10 000 товаров
glm-5.3-flash$0.04 / $0.040,3 × 0,04 + 0,6 × 0,04$0.036$0.36
gpt-5.6-luna$0.1 / $0.10,3 × 0,1 + 0,6 × 0,1$0.09$0.90
claude-sonnet-5$0.3 / $0.30,3 × 0,3 + 0,6 × 0,3$0.27$2.70

После первого прогона замените оценку на реальные цифры из колонки tokens. Какая модель пишет приемлемые тексты для ваших категорий, проверьте сами: сгенерируйте описания для 20 товаров двумя-тремя моделями и сравните их бок о бок. Актуальный список моделей — GET https://api.zukko.pro/v1/models или страница «Модели» в кабинете, параметры запроса — в документации Chat Completions.

Загрузка на Wildberries и Ozon

Самый надёжный путь для первых партий — загрузить готовые описания через кабинет продавца (массовое редактирование карточек через шаблон таблицы): вы видите, что именно меняется.

Для автоматической загрузки у обеих площадок есть API: Content API у Wildberries (документация на dev.wildberries.ru) и Seller API у Ozon (docs.ozon.ru/api/seller). Названия методов, версии и идентификаторы атрибутов там меняются, поэтому берите их только из актуальной документации, а не из примеров в статьях. Перед массовым обновлением проверьте две вещи:

  • перезаписывает ли метод карточку целиком — если да, сначала получите текущую карточку и меняйте в ней только описание;
  • проходит ли изменённая карточка модерацию — начните с нескольких товаров.

Требования площадок

Правила для описаний у Wildberries и Ozon свои и периодически обновляются: допустимая длина, запрет на контакты и ссылки, ограничения на рекламные формулировки. Сверьте их с актуальными правилами в кабинете продавца и перенесите в скрипт: границы длины — в MIN_LEN и MAX_LEN, запрещённые слова — в FORBIDDEN, сами требования — в текст задания PROMPT.

Частые вопросы

Описания получаются похожими друг на друга — что делать?

Дайте модели больше конкретики. Вместо «смартфон с большим экраном» укажите «экран 6,5 дюйма, аккумулятор 5000 мАч, вес 185 г, цвет чёрный». Чем больше уникальных характеристик в CSV, тем сильнее тексты различаются. Можно добавить в CSV колонку с особенностями товара или целевой аудиторией и подставить её в задание.

Как обработать 10 000 товаров?

Скрипт выше справится, но запускайте частями по 500–1000 строк: так проще проверять результат и перезапускать ошибки. Задайте ключу дневной лимит расходов в кабинете — он защитит от неожиданного перерасхода, если что-то пойдёт не так.

Маркетплейс отклонил описание — почему?

Частые причины: текст длиннее допустимого, в нём есть запрещённые формулировки, контакты или утверждения, которые не подтверждаются характеристиками. Добавьте найденные слова в FORBIDDEN, а требование — в задание.

Можно ли генерировать описания по фотографии товара?

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

zukko

Платите в 25×
меньше

за Claude Code & ChatGPT

Один ключ fetch_* и base URL api.zukko.pro — в Cursor, Claude Code, Codex и любом SDK.