Массовая генерация SEO-текстов через API
Описания товаров, статьи, title и description для тысяч страниц. Один скрипт, один ключ, модели DeepSeek, Qwen, GPT, Gemini и Claude. В Polza.ai токены оплачиваются в рублях, для юрлиц — договор, счёт и УПД.
- 1 000 описаний — от 97,88 ₽ по ценам каталога
- 400+ моделей по одному ключу
- Ответ в JSON по вашей схеме
- Счёт и УПД для юрлиц
- 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 Mini | 77 ₽ | 97,88 ₽ | 460 ₽ | 21,65 ₽ | Описания со строгим JSON |
| Gemini 2.5 Flash | 94 ₽ | 122 ₽ | 572 ₽ | 26,69 ₽ | Длинные исходники: каталоги, выгрузки |
| GPT-5.4 Mini | — | 231 ₽ | 1 068 ₽ | 54,28 ₽ | Статьи с более сложной структурой |
| DeepSeek V4 Pro | 19 ₽ | 272 ₽ | 1 133 ₽ | 83,87 ₽ | Описания и статьи на потоке |
| Qwen3.6 35B | — | 334 ₽ | 1 101 ₽ | 151 ₽ | Данные должны храниться в России: цена — по провайдеру в РФ, запрос с provider: {data_residency: "ru"} |
| Claude Sonnet 5 | 708 ₽ | 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
Данные
Таблица: SKU, название, характеристики, ключевые фразы из семантики. Чем полнее характеристики, тем меньше модель додумывает.
CSV или выгрузка из CMS
Этап 2
Текст
Основная модель пишет описание, title и description и возвращает JSON по схеме. Структура ответа одинакова для всех строк.
DeepSeek V4 Pro
Этап 3
Проверка
Вторая модель сверяет текст с характеристиками: нет ли свойств, которых нет в данных, на месте ли ключевые фразы, уложен ли объём.
DeepSeek V4 Flash
Этап 4
Мета-теги
Если title и description нужны отдельно от текста — короткий запрос к дешёвой модели под лимиты 60 и 160 символов.
DeepSeek V4 Flash
Этап 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
Одна строка — один товар. Характеристики через точку с запятой, ключевые фразы так же.
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.
{
"sku": "LM-12Q",
"title": "Настольная лампа Lumo Q с беспроводной зарядкой Qi 10 Вт",
"description": "Настольная лампа с зарядкой Qi 10 Вт и регулировкой цветовой температуры от 3000 до 6000 K",
"text": "Настольная лампа с беспроводной зарядкой Lumo Q решает задачу освещения рабочего стола и одновременной подзарядки телефона. Гибкая стойка позволяет направить свет точно туда, где вы читаете или пишете вечером. Встроенная…"
}Реальный ответ DeepSeek V4 Pro из тестового прогона, текст сокращён.
# 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 ₽ за обычный вход.
Ты пишешь описания товаров для интернет-магазина.
Правила:
- Пиши только то, что есть в характеристиках. Не
добавляй свойства, гарантии, цифры и сравнения с
другими брендами.
- Не пиши про уход, мытьё, посудомоечную машину,
запахи, вкус, прочность, удары, коррозию и
материал стенок, если этого нет в характеристиках.
- Первое предложение — что это за товар и для какой
задачи.
- Дальше — 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 строках.
В папке лежат 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, запись результата обратно в таблицу. Параллельность и повторы настраиваются в свойствах ноды.
Тест редакции: 40 карточек товаров
Мы прогнали скрипт со страницы на каталоге из 40 товаров: термокружки, лампы, рюкзаки и чайники. Бренды и характеристики вымышленные, ключевые фразы — в формулировках из поиска. Замер 6 октября 2026: весь тест, включая неудачные прогоны и сравнение моделей, стоил 11,9 ₽ по ценам того дня.
- Карточек
- 40
- Время
- 65 с
- Расход на API
- 0,9 ₽
- Готовы без правок
- 21 из 40
Три прогона DeepSeek V4 Pro
| Прогон | Расход | Время | Объём 700–1000 | Ключи на месте | Без выдумок по проверке |
|---|---|---|---|---|---|
| Промпт v1, без закрепления провайдера | 1,36 ₽ | 55 с | 14 из 40 | 36 из 40 | 22 из 40 |
| Промпт v2, сортировка по цене | 2,17 ₽ | 54 с | 26 из 40 | 38 из 40 | 28 из 40 |
| Промпт v2, закреплённый провайдер | 0,67 ₽ | 65 с | 22 из 40 | 38 из 40 | 23 из 40 |
«Без выдумок» — по отметкам модели-проверки, она ошибается в обе стороны. Третий прогон редактор прочитал целиком. Расход — по ценам 6 октября 2026.
21 — можно публиковать
Факты из характеристик, ключевые фразы на месте, объём в норме или близко к нему.
9 — править одну фразу
Матовый оттенок у белой кружки, уход сухой тканью у лампы, «быстро сохнет» у рюкзака.
5 — слишком короткие
У этих товаров в данных 4–5 характеристик. Модель не стала растягивать текст и выдала 170–290 знаков.
5 — брак
Ответ не по задаче, пересказ инструкции, посудомоечная машина у бутылки, выдуманная схема работы помпы.
Пять моделей на одних и тех же 5 карточках
| Модель | 1 000 описаний, замер | Ответ | Знаков | Что увидел редактор |
|---|---|---|---|---|
| DeepSeek V4 Pro | 19 ₽ | 11,0 с | 885 | Многословна, выходит за 1 000 знаков, дописывает свойства. Нужна проверка. |
| GPT-5 Mini | 77 ₽ | 10,2 с | 774 | Точна по фактам и объёму. Один раз придумала комплектацию, иногда сливает текст в один абзац. |
| Gemini 2.5 Flash | 94 ₽ | 3,6 с | 850 | Быстрая. Канцелярит: «функциональное решение», «гарантирует». Добавила «без бликов». |
| Grok 4.3 | 129 ₽ | 3,1 с | 521 | Быстрая, но короткая: средний текст около 500 знаков. Придумала «поворотную ручку» и «съёмную подставку». |
| Claude Sonnet 5 | 708 ₽ | 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, российские модели, для бизнеса.