Нейросеть для SMM: контент-план и посты пачкой через API

Контент-план на месяц и тридцать постов в одном стиле за один скрипт. Показываем, как описать голос бренда, генерировать пачкой и проверять результат.

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

Нейросеть для SMM чаще всего используют так: открывают чат, просят «пост про скидки» и получают текст, который подошёл бы любому бренду. Проблема не в модели, а в том, что ей не дали голос бренда и структуру. Если описать их один раз и запускать генерацию скриптом, получается контент-план на месяц и серия постов в одном стиле. Ниже схема из четырёх шагов и код, который её реализует.

Нейросеть для SMM, шаг 1: описываем голос бренда один раз

Голос бренда это не «дружелюбный и экспертный». Модели нужны правила, которые можно проверить. Соберите файл brand.md примерно такого вида:

  • Кто говорит и кому. «Магазин товаров для кофе, говорим с домашними любителями на "вы"».
  • Тон. Коротко, без восклицательных знаков, без слов «уникальный» и «лучший».
  • Формат. Длина поста 400–700 знаков, заголовок в первой строке, максимум один эмодзи или ни одного.
  • Запреты. Темы и слова, которые нельзя использовать, обещания, которые нельзя давать.
  • Три-пять реальных удачных постов как образец. Примеры работают лучше любых прилагательных.

Этот блок будет стабильной частью каждого запроса. Важная деталь: он не меняется между запросами, а значит его можно кэшировать, о чём ниже.

Шаг 2. Контент-план в виде JSON

Просите не «план на месяц текстом», а структуру, которую подхватит скрипт:

bash
import json
import os
import anthropic

client = anthropic.Anthropic(
    base_url="https://api.zukko.pro",
    api_key=os.environ["ZUKKO_API_KEY"],
)
BRAND = open("brand.md", encoding="utf-8").read()

def make_plan(month, goals, events):
    prompt = (
        f"Месяц: {month}\nЦели: {goals}\nПоводы и события: {events}\n\n"
        "Составь контент-план на 30 дней. Верни JSON-массив объектов: "

Обратите внимание на base URL: для официального Anthropic SDK он без /v1, SDK добавляет путь сам. Если вы работаете через OpenAI SDK, адрес будет https://api.zukko.pro/v1, но скидку за кэш для Claude в этом формате шлюз не увидит, подробнее в статье про кэш в двух форматах.

Что проверить в плане, прежде чем идти дальше: нет ли двух одинаковых тем, распределены ли рубрики, учтены ли ваши реальные даты акций. Поводы и события модель сама не знает: даты распродаж, релизов и праздников подавайте в запросе.

Шаг 3. Посты пачкой

Теперь для каждой строки плана генерируем текст. Правило: один пост, один запрос. Так проще повторить неудачный и не терять всю пачку.

bash
def write_post(item):
    prompt = (
        f"Рубрика: {item['rubric']}\nТема: {item['topic']}\n"
        f"Цель: {item['goal']}\nФормат: {item['format']}\n"
        f"Первая фраза: {item['hook']}\n\n"
        "Напиши пост строго по правилам голоса бренда. "
        "Не выдумывай цены, сроки и характеристики, которых нет в брифе. "
        "Если данных не хватает, напиши в конце строку 'НУЖНО УТОЧНИТЬ: ...'."
    )
    msg = client.messages.create(
        model="claude-sonnet-5-5",
        max_tokens=800,
        system=[{"type": "text", "text": BRAND,
                 "cache_control": {"type": "ephemeral"}}],
        messages=[{"role": "user", "content": prompt}],
    )
    return msg.content[0].text

plan = make_plan("ноябрь", "рост подписчиков", "распродажа 11.11")
posts = [{"day": it["day"], "text": write_post(it)} for it in plan]

Блок BRAND помечен как кэшируемый: у Anthropic кэш срабатывает, когда повторяющаяся часть запроса достаточно длинная и идёт в начале, подробные условия смотрите в документации Anthropic. Тогда со второго запроса этот блок читается из кэша по более низкой цене.

Шаг 4. Автоматическая проверка перед публикацией

Ставьте простой фильтр между генерацией и календарём публикаций:

  • длина в заданных пределах;
  • нет слов из списка запрещённых;
  • нет строки «НУЖНО УТОЧНИТЬ», иначе пост уходит человеку;
  • числа и даты в тексте совпадают с брифом (проверка регулярным выражением);
  • нет повторяющихся первых фраз у соседних постов.

Затем идёт ручная вычитка. Модель пишет гладко, но не знает, что вы вчера отвечали подписчикам в комментариях и что у вас закончился один из товаров. Ответственность за публикацию остаётся на вас. Если нужны варианты для A/B, повторите запрос с другой «первой фразой» и разной temperature; для параметров сэмплирования см. статью temperature и top_p.

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

Вкус у модели не измерить, поэтому возьмите один и тот же бриф и сравните три модели вслепую на десяти постах. Цены на 18 октября 2026 (Zukko, за 1M токенов, вход / выход):

МодельЦенаИндекс силы
glm-5.3-flash$0.04 / $0.0442
gpt-6.1-sol$0.27 / $1.3252
claude-sonnet-5-5$0.4 / $248

Индекс силы это Intelligence Index от Artificial Analysis, он не говорит, как модель пишет на русском в вашем тоне. Решает слепой тест.

Сколько стоит месяц постов

Допущения: 30 постов, на каждый 1500 токенов входа (из них 1200 токенов блок бренда и 300 токенов задание) и 400 токенов выхода. Формула: (вход × цена входа + выход × цена выхода) / 1 000 000, а с кэшем добавляются строки записи и чтения кэша по их ценам. Для расчёта с кэшем допускаем, что блок бренда проходит минимальный порог длины для кэширования.

  • claude-sonnet-5-5 без кэша: 45 000 × 0.4 / 1 000 000 + 12 000 × 2 / 1 000 000 = 0.018 + 0.024 = $0.042.
  • claude-sonnet-5-5 с кэшем в Anthropic-формате: свежий вход 30 × 300 = 9 000 токенов, 9 000 × 0.4 / 1 000 000 = 0.0036; запись кэша 1 200 × 0.5 / 1 000 000 = 0.0006; чтение 29 × 1 200 = 34 800 токенов, 34 800 × 0.05 / 1 000 000 = 0.00174; выход 0.024. Итого около $0.030.
  • gpt-6.1-sol: 45 000 × 0.27 / 1 000 000 + 12 000 × 1.32 / 1 000 000 = 0.01215 + 0.01584, около $0.028.
  • glm-5.3-flash: (45 000 + 12 000) × 0.04 / 1 000 000, около $0.0023.

Контент-план на 30 дней добавит ещё один запрос на несколько тысяч токенов, это центы. При такой разнице в цене экономить стоит на ручной правке, а не на модели. Текущие цены смотрите в GET https://api.zukko.pro/v1/models.

Подключение

Создайте ключ в кабинете, задайте ему дневной лимит в долларах и сохраните в переменной окружения. Формат запроса из примеров описан в справке по /v1/messages. Баланс пополняется от $1 через СБП (платёжная страница добавляет 8,5%), криптовалюту или карту MasterCard.

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

Как сделать, чтобы посты не звучали как написанные нейросетью?

Дайте реальные образцы, а не описание тона, запретите штампы списком и вычитывайте текст. Самый сильный рычаг это примеры ваших лучших постов в блоке бренда.

Можно ли без подписки на сервисы получать нейросеть для создания текстов?

Да, по API вы платите только за токены, подписки нет. Бесплатного безлимитного доступа это не означает: каждый запрос тарифицируется, но для постов это доли цента.

Нужно ли помечать тексты как созданные ИИ?

Правила разметки зависят от площадки и юрисдикции. Сверьтесь с правилами соцсети, на которой публикуетесь.

Сколько вариантов на пост просить?

Три для сравнения хватает. Больше только увеличивает ручную работу по отбору.

zukko

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

за Claude Code & ChatGPT

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