Массовая генерация SEO-текстов через API

Описания товаров, статьи, title и description для тысяч страниц. Один скрипт, один ключ, модели DeepSeek, Qwen, GPT, Gemini и Claude. В Polza.ai токены оплачиваются в рублях, для юрлиц — договор, счёт и УПД.

  • 1 000 описаний — от 97,88 ₽ по ценам каталога
  • 400+ моделей по одному ключу
  • Ответ в JSON по вашей схеме
  • Счёт и УПД для юрлиц
1 000 описаний товаровпо ценам каталога
  • GPT-5 Mini97,88 ₽
  • Gemini 2.5 Flash122 ₽
  • DeepSeek V4 Pro272 ₽
  • Grok 4.3356 ₽
  • Claude Sonnet 51 068 ₽

Тестовый прогон: 40 карточек

Текст и проверка второй моделью, 65 секунд

0,9 ₽

замер 6 октября 2026, по ценам того дня

Расчёт — по текущим ценам каталога Polza.ai, прогон — фактический расход по полю cost_rub ответа API. Как тестировали

Задача

У магазина 5 000 карточек, у половины вместо описания — одна строка из выгрузки поставщика. У агентства 300 статей в месяц на десять клиентов. У сервиса страницы «услуга + город» на 40 городов.

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

Для кого

Сценарий один: структурированные данные на входе, текст по шаблону на выходе. Меняются только данные и промпт.

Интернет-магазин и селлер

Описания карточек по характеристикам из выгрузки: тысячи SKU, одинаковая структура, ключевые фразы из семантики. Из той же таблицы — объявления для Авито и ответы на отзывы к тем же товарам.

Описание, title и description за один запрос.

SEO-агентство

Статьи и тексты категорий для нескольких клиентов. ТЗ готовит специалист, черновик пишет модель, редактор правит.

Один ключ на всех клиентов, расход по ключам в кабинете.

Страницы по шаблону

Услуга × город, товар × сценарий, сравнения моделей. Данные в таблице, текст под каждую строку.

Свой текст для каждой страницы вместо подстановки слов в шаблон.

Маркетинг в компании

Title и description для старых разделов, анонсы для блога, тексты рассылок по базе продуктов.

Платит компания по счёту, бюджет виден заранее.

Сколько стоит генерация 1 000 текстов

Стоимость считается по токенам: вход — задание и данные, выход — готовый текст. В русском тексте один токен — примерно 2–3 символа. Расчёт ниже Polza.ai ведёт по текущим ценам каталога и обновляет каждый час.

Стоимость по текущим ценам каталога
МодельОписания, замер 6 октябряОписания, сейчасСтатьи, сейчасМета-теги, сейчасГде использовать
DeepSeek V4 Flash—23,52 ₽98 ₽7,25 ₽Мета-теги, структура, проверка
GPT-5 Mini77 ₽97,88 ₽460 ₽21,65 ₽Описания со строгим JSON
Gemini 2.5 Flash94 ₽122 ₽572 ₽26,69 ₽Длинные исходники: каталоги, выгрузки
GPT-5.4 Mini—231 ₽1 068 ₽54,28 ₽Статьи с более сложной структурой
DeepSeek V4 Pro19 ₽272 ₽1 133 ₽83,87 ₽Описания и статьи на потоке
Qwen3.6 35B—334 ₽1 101 ₽151 ₽Данные должны храниться в России: цена — по провайдеру в РФ, запрос с provider: {data_residency: "ru"}
Claude Sonnet 5708 ₽1 068 ₽4 864 ₽261 ₽Экспертные статьи, где важен слог

Замер — фактический расход 6 октября 2026 на 5 одинаковых карточках, пересчитанный на 1 000, по ценам того дня. «Сейчас» — расчёт по текущим ценам каталога для объёмов ниже.

Описание товара

1 000 токенов на входе: задание, характеристики, ключевые фразы. 700 на выходе: 1 500–2 000 знаков текста.

Статья

3 000 токенов на входе: ТЗ, структура, выдержки из источников. 3 500 на выходе: около 8 000 знаков.

Title и description

500 токенов на входе, 120 на выходе: две строки под лимиты поисковиков.

Отключите рассуждение

Многие модели по умолчанию сначала рассуждают, и эти токены оплачиваются как выход. В тесте 6 октября DeepSeek V4 Pro с рассуждением потратила 1,19 ₽ и 256 секунд на 3 карточки, без него — 0,04 ₽ и 12 секунд. Передавайте reasoning: {effort: "none"}.

Закрепите провайдера

Одну модель в Polza.ai обслуживают разные провайдеры по разной цене, в каталоге показана самая низкая. В тесте на 40 карточках без закрепления вышло 1,36 ₽, с сортировкой по цене — 2,17 ₽, с закреплённым провайдером — 0,67 ₽. Имя самого дешёвого — в поле top_provider.name каталога: у DeepSeek V4 Pro сейчас это streamlake/fp8.

Как устроен конвейер

Пять этапов. Дорогая модель работает только там, где пишет текст, остальное делают дешёвые.

  1. Этап 1

    Данные

    Таблица: SKU, название, характеристики, ключевые фразы из семантики. Чем полнее характеристики, тем меньше модель додумывает.

    CSV или выгрузка из CMS

  2. Этап 2

    Текст

    Основная модель пишет описание, title и description и возвращает JSON по схеме. Структура ответа одинакова для всех строк.

    DeepSeek V4 Pro

  3. Этап 3

    Проверка

    Вторая модель сверяет текст с характеристиками: нет ли свойств, которых нет в данных, на месте ли ключевые фразы, уложен ли объём.

    DeepSeek V4 Flash

  4. Этап 4

    Мета-теги

    Если title и description нужны отдельно от текста — короткий запрос к дешёвой модели под лимиты 60 и 160 символов.

    DeepSeek V4 Flash

  5. Этап 5

    Выгрузка

    JSONL по одной строке на товар. Импорт в CMS по SKU, строки с ошибками — в отдельный файл для перезапуска.

    results.jsonl, errors.txt

Во что обошёлся конвейер в тесте

40 карточек 6 октября 2026: текст на DeepSeek V4 Pro — 0,67 ₽, проверка на DeepSeek V4 Flash — 0,23 ₽, по ценам того дня. Title и description модель вернула в том же ответе, отдельный этап не понадобился.

Готовый скрипт на Python

Читает таблицу, отправляет запросы параллельно, повторяет их при ошибках 429 и 5xx и считает расход в рублях. Нужен пакет openai и ключ в переменной POLZA_API_KEY.

Вход: products.csv

Одна строка — один товар. Характеристики через точку с запятой, ключевые фразы так же.

products.csv
sku,name,specs,keywords
LM-12Q,Настольная лампа Lumo Q с беспроводной зарядкой,"12 Вт; беспроводная зарядка Qi 10 Вт; 3000–6000 K; таймер отключения 30 мин; гибкая стойка","лампа с беспроводной зарядкой; настольная лампа с зарядкой"
KT-TC,Чайник с терморегулятором Boil Control,"1,5 л; 5 температур: 40, 70, 80, 90, 100 °C; поддержание температуры 30 мин; 2000 Вт","чайник с выбором температуры; чайник с поддержанием температуры"

Выход: results.jsonl

Одна строка — один JSON с полями по схеме. Импортируется в CMS по SKU.

results.jsonl · одна строка
{
  "sku": "LM-12Q",
  "title": "Настольная лампа Lumo Q с беспроводной зарядкой Qi 10 Вт",
  "description": "Настольная лампа с зарядкой Qi 10 Вт и регулировкой цветовой температуры от 3000 до 6000 K",
  "text": "Настольная лампа с беспроводной зарядкой Lumo Q решает задачу освещения рабочего стола и одновременной подзарядки телефона. Гибкая стойка позволяет направить свет точно туда, где вы читаете или пишете вечером. Встроенная…"
}

Реальный ответ DeepSeek V4 Pro из тестового прогона, текст сокращён.

Python · seo_batch.py
# seo_batch.py — описания товаров из CSV через Polza
import asyncio, csv, json, os
from openai import AsyncOpenAI, APIStatusError

MODEL = "deepseek/deepseek-v4-pro"
# самый дешёвый провайдер модели: поле top_provider.name в каталоге
PROVIDER = "streamlake/fp8"
CONCURRENCY = 10  # сколько запросов идёт одновременно

ai = AsyncOpenAI(base_url="https://polza.ai/api/v1", api_key=os.environ["POLZA_API_KEY"])
SYSTEM = open("prompt.txt", encoding="utf-8").read()

SCHEMA = {
    "name": "product_page",
    "strict": True,
    "schema": {
        "type": "object",
        "properties": {
            "title": {"type": "string"},
            "description": {"type": "string"},
            "text": {"type": "string"},
        },
        "required": ["title", "description", "text"],
        "additionalProperties": False,
    },
}

async def generate(row, sem, stats):
    prompt = (f"Товар: {row['name']}\n"
              f"Характеристики: {row['specs']}\n"
              f"Ключевые фразы: {row['keywords']}")
    async with sem:
        for attempt in range(5):
            try:
                r = await ai.chat.completions.create(
                    model=MODEL,
                    messages=[{"role": "system", "content": SYSTEM},
                              {"role": "user", "content": prompt}],
                    response_format={"type": "json_schema", "json_schema": SCHEMA},
                    extra_body={
                        # без рассуждений: дешевле и быстрее на шаблонных текстах
                        "reasoning": {"effort": "none"},
                        # без закрепления часть запросов уходит к дорогим провайдерам
                        "provider": {"only": [PROVIDER], "allow_fallbacks": False},
                    },
                )
                break
            except APIStatusError as e:
                if e.status_code in (429, 500, 502, 503) and attempt < 4:
                    await asyncio.sleep(2 ** attempt)  # пауза 1, 2, 4, 8 секунд
                    continue
                raise
    stats["rub"] += r.usage.model_extra.get("cost_rub", 0)  # фактическая стоимость запроса
    return {"sku": row["sku"], **json.loads(r.choices[0].message.content)}

async def main():
    rows = list(csv.DictReader(open("products.csv", encoding="utf-8")))
    sem, stats = asyncio.Semaphore(CONCURRENCY), {"rub": 0}
    results = await asyncio.gather(*(generate(r, sem, stats) for r in rows),
                                   return_exceptions=True)
    ok = 0
    with open("results.jsonl", "w", encoding="utf-8") as out, \
         open("errors.txt", "w", encoding="utf-8") as err:
        for row, res in zip(rows, results):
            if isinstance(res, Exception):
                err.write(f"{row['sku']}\t{res}\n")  # перезапустите только эти строки
            else:
                out.write(json.dumps(res, ensure_ascii=False) + "\n")
                ok += 1
    print(f"Готово {ok} из {len(rows)}, расход {stats['rub']:.2f} ₽")

asyncio.run(main())

Параллельность

CONCURRENCY = 10 — десять запросов одновременно. В тесте так вышло около 2 200 карточек в час без ошибок 429. Если запросов станет больше лимита, API вернёт 429 с заголовком Retry-After, и скрипт повторит запрос после паузы.

Ошибки не теряются

Строки, которые не прошли после пяти попыток, попадают в errors.txt с причиной. Перезапустите скрипт только на них.

Расход видно сразу

Polza.ai возвращает стоимость каждого запроса в поле usage.cost_rub. Скрипт складывает её и печатает итог в рублях. Прогоните 20 строк, умножьте — получите бюджет на весь каталог.

Промпт для описаний товаров

Скрипт читает промпт из файла prompt.txt, поэтому правила меняются без правки кода. Промпт задаёт три вещи: откуда брать факты, как строить текст и что вернуть.

Главное правило — писать только по характеристикам. В первом прогоне модель всё равно дописывала уход, посудомоечную машину и «не впитывает запахи». Вторая версия промпта называет эти темы прямо и задаёт объём через абзацы: текстов нужной длины стало 26 из 40 вместо 14.

Одинаковое начало промпта у всех запросов удешевляет вход у моделей с кэшем. У DeepSeek V4 Flash кэш включается сам, без разметки в запросе: чтение из кэша стоит 1,96 ₽ за миллион токенов против 9,8 ₽ за обычный вход.

prompt.txt
Ты пишешь описания товаров для интернет-магазина.

Правила:
- Пиши только то, что есть в характеристиках. Не
  добавляй свойства, гарантии, цифры и сравнения с
  другими брендами.
- Не пиши про уход, мытьё, посудомоечную машину,
  запахи, вкус, прочность, удары, коррозию и
  материал стенок, если этого нет в характеристиках.
- Первое предложение — что это за товар и для какой
  задачи.
- Дальше — 2–3 абзаца: характеристики как польза для
  покупателя, уход и комплектация, если они есть в
  данных.
- Объём текста — от 700 до 1000 символов: три абзаца
  по 2–3 предложения. Если характеристик мало,
  раскрой каждую через ситуацию, в которой она
  пригодится.
- Каждую ключевую фразу используй один раз. Слова
  фразы оставь те же, менять можно только падеж и
  число.
- Без слов «уникальный», «идеальный», «лучший»,
  «качественный», без восклицательных знаков.

Верни JSON:
- title — до 60 символов, начинается с названия
  товара;
- description — до 160 символов, одна фраза с
  главной характеристикой;
- text — описание.

Контроль качества

Модель пишет быстро, отвечаете за текст вы. Четыре проверки, которые ставят до публикации.

Факты сверяются с данными

Этап проверки отдельной моделью: каждое утверждение текста должно найтись в характеристиках. Строки с расхождениями уходят на правку человеку.

Выборку читает редактор

Первые 50 текстов — целиком, дальше 5–10% каждой партии. Правки редактора превращаются в новые правила промпта.

Тексты не повторяют друг друга

Для похожих товаров сравните тексты между собой: одинаковые абзацы на сотне страниц делают их дублями для поисковика.

Ключевые фразы на месте

Простая проверка кодом: каждая фраза из таблицы есть в тексте один раз, title до 60 символов, description до 160.

Сломанные ответы ловит код

В тесте один ответ вместо описания содержал «Для выбора подарка напишите мне.», другой — пересказ инструкции. Модель-проверка оба пропустила. Отсекайте кодом тексты короче 300 знаков и без названия товара.

Проверку тоже проверяют

Модель-проверка ошибается в обе стороны: пропускает выдумки и помечает свойства, которые есть в данных. Её отметки — сигнал для редактора, решение за ним.

Через Claude, OpenAI и Grok — или без кода

Скрипт выше не обязательно писать самому. Его напишет и запустит ИИ-агент, а модели для текстов выбираются в том же каталоге Polza.ai.

Claude Code и Claude Desktop

Положите таблицу и промпт в папку и отдайте Claude задание ниже. Агент сам напишет скрипт, прогонит пробные 20 строк и покажет расход. Работает из России через ключ Polza.

Claude Sonnet 5: 1 000 описаний — 1 068 ₽ по ценам каталога.

Codex и ChatGPT Desktop

То же задание отдаётся Codex CLI: агент OpenAI пишет и запускает скрипт в терминале. Модели GPT подключаются тем же ключом Polza.

GPT-5 Mini: 1 000 описаний — 97,88 ₽ по ценам каталога.

Grok

Модели xAI доступны в том же API. Чтобы писать тексты на Grok, поменяйте в скрипте одну строку: MODEL = "x-ai/grok-4.3".

Grok 4.3: 1 000 описаний — 356 ₽ по ценам каталога.

Задание для агента

Подходит для Claude Code, Codex и других агентов из интеграций. Агент спросит подтверждение перед полным прогоном, поэтому бюджет вы увидите на 20 строках.

задание для Claude Code или Codex
В папке лежат products.csv и prompt.txt.
Напиши и запусти скрипт на Python:
для каждой строки таблицы запрос к https://polza.ai/api/v1
через OpenAI SDK, ключ — в переменной POLZA_API_KEY,
модель deepseek/deepseek-v4-pro без рассуждений
(reasoning: {effort: none}), провайдер streamlake/fp8,
системный промпт — prompt.txt,
ответ — JSON с полями title, description, text.
Сначала прогони 20 строк, покажи результат и расход
в рублях по полю usage.cost_rub.
После моего «ок» — всю таблицу.
Ошибки 429 и 5xx повторяй с паузой,
строки, которые не прошли, сохрани в errors.txt.

Без кода: n8n и Dify

Тот же конвейер собирается из готовых блоков. В n8n: чтение Google-таблицы, нода OpenAI Chat Model с адресом https://polza.ai/api/v1, запись результата обратно в таблицу. Параллельность и повторы настраиваются в свойствах ноды.

n8n

Сценарий по расписанию: новые товары в таблице — новые описания утром.

Нода OpenAI Chat Model с адресом Polza.

Dify

Workflow с этапами текста и проверки, запуск пачкой из интерфейса.

Облако или self-hosted.

Тест редакции: 40 карточек товаров

Мы прогнали скрипт со страницы на каталоге из 40 товаров: термокружки, лампы, рюкзаки и чайники. Бренды и характеристики вымышленные, ключевые фразы — в формулировках из поиска. Замер 6 октября 2026: весь тест, включая неудачные прогоны и сравнение моделей, стоил 11,9 ₽ по ценам того дня.

Карточек
40
Время
65 с
Расход на API
0,9 ₽
Готовы без правок
21 из 40

Три прогона DeepSeek V4 Pro

ПрогонРасходВремяОбъём 700–1000Ключи на местеБез выдумок по проверке
Промпт v1, без закрепления провайдера1,36 ₽55 с14 из 4036 из 4022 из 40
Промпт v2, сортировка по цене2,17 ₽54 с26 из 4038 из 4028 из 40
Промпт v2, закреплённый провайдер0,67 ₽65 с22 из 4038 из 4023 из 40

«Без выдумок» — по отметкам модели-проверки, она ошибается в обе стороны. Третий прогон редактор прочитал целиком. Расход — по ценам 6 октября 2026.

21 — можно публиковать

Факты из характеристик, ключевые фразы на месте, объём в норме или близко к нему.

9 — править одну фразу

Матовый оттенок у белой кружки, уход сухой тканью у лампы, «быстро сохнет» у рюкзака.

5 — слишком короткие

У этих товаров в данных 4–5 характеристик. Модель не стала растягивать текст и выдала 170–290 знаков.

5 — брак

Ответ не по задаче, пересказ инструкции, посудомоечная машина у бутылки, выдуманная схема работы помпы.

Пять моделей на одних и тех же 5 карточках

Модель1 000 описаний, замерОтветЗнаковЧто увидел редактор
DeepSeek V4 Pro19 ₽11,0 с885Многословна, выходит за 1 000 знаков, дописывает свойства. Нужна проверка.
GPT-5 Mini77 ₽10,2 с774Точна по фактам и объёму. Один раз придумала комплектацию, иногда сливает текст в один абзац.
Gemini 2.5 Flash94 ₽3,6 с850Быстрая. Канцелярит: «функциональное решение», «гарантирует». Добавила «без бликов».
Grok 4.3129 ₽3,1 с521Быстрая, но короткая: средний текст около 500 знаков. Придумала «поворотную ручку» и «съёмную подставку».
Claude Sonnet 5708 ₽7,9 с816Лучший слог и точность: факты из данных, объём в норме.

Промпт v2, рассуждение отключено. Стоимость — фактическая по полю cost_rub, замер 6 октября 2026 по ценам того дня. Время — на один запрос. Стоимость по текущим ценам — в разделе «Стоимость».

Вывод

Для тысяч карточек — DeepSeek V4 Pro или GPT-5 Mini с проверкой и выборочной вычиткой: по текущим ценам каталога 1 000 описаний стоят 272 ₽ и 97,88 ₽. Для категорий, где текст читают внимательно, — Claude Sonnet 5 или GPT-5 Mini. В прогоне DeepSeek V4 Pro половину карточек можно было публиковать сразу, ещё четверть закрывается правкой одной фразы, брак и слишком короткие тексты перегенерируют с дополненными данными. Больше всего на качество влияют данные: чем больше характеристик, тем меньше модель додумывает.

Вопросы

Какую модель выбрать для текстов на русском?

В нашем тесте лучший текст написала Claude Sonnet 5, точнее всех по фактам и объёму среди недорогих — GPT-5 Mini, DeepSeek V4 Pro многословна и требует проверки. По текущим ценам Polza.ai 1 000 описаний стоят: DeepSeek V4 Pro — 272 ₽, GPT-5 Mini — 97,88 ₽, Claude Sonnet 5 — 1 068 ₽. Прогоните 20 своих строк на двух-трёх моделях и прочитайте результат. Смена модели — одна строка в скрипте.

Сколько текстов можно сгенерировать в час?

В тесте при 10 параллельных запросах 40 описаний заняли 65 секунд — это около 2 200 в час. Скорость зависит от модели и длины текста.

Можно ли платить юрлицом?

Да. Polza.ai работает по договору: счёт, УПД и НДС. Расход виден в кабинете по ключам и моделям.

Где хранятся данные, которые я отправляю?

У каждой модели в каталоге Polza.ai указано, есть ли у неё провайдер с хранением данных в России — например, у Qwen3.6 35B из таблицы выше. Чтобы запрос шёл только к таким провайдерам, передайте provider: {data_residency: "ru"}: если подходящего провайдера нет, запрос отклонится.

Как не получить одинаковые тексты для похожих товаров?

Передавайте в запрос все отличия товара и запрещайте в промпте общие фразы. После генерации сравните тексты похожих товаров между собой и перегенерируйте совпадающие.

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

Да. Скрипт тот же, меняются промпт и данные: вместо характеристик — ТЗ со структурой H2 и H3, ключевыми фразами и выдержками из источников.

Другие сценарии: Ответы на отзывы · Объявления для Авито · Тесты по урокам · Письма клиентам · Протоколы встреч

Запустите первые 20 текстов

Ключ, таблица на 20 строк и скрипт со страницы. Прогон показывает и качество, и бюджет на весь каталог.

Остались вопросы? Документация Polza.AI, поддержка в Telegram или support@polza.ai

Страницу проверила редакция Polza.AI, обновлено . Цифры теста — замер 6 октября 2026 по ценам того дня; стоимость «сейчас» Polza.ai считает по каталогу и обновляет каждый час.

Разработчикам: вход через Polza

Связанные страницы: модели для текста, n8n, российские модели, для бизнеса.

Сайт использует cookie.