Разработка системы AI-генерации рекламных текстов
AI-система генерирует рекламные тексты для контекстной рекламы, таргетинга, email-маркетинга, лендингов. Масштабирует производство текстов: сотни вариантов за минуты, A/B тестирование без участия копирайтера.
Мультиформатный генератор
from openai import AsyncOpenAI
from dataclasses import dataclass
client = AsyncOpenAI()
@dataclass
class AdBrief:
product: str
usp: str # уникальное торговое предложение
target_audience: str
pain_points: list[str]
platform: str # google_search, yandex_direct, vk, telegram, instagram
goal: str # clicks, conversions, awareness, app_install
brand_tone: str = "professional"
PLATFORM_CONSTRAINTS = {
"google_search": {
"headline_max": 30,
"headline_count": 15,
"description_max": 90,
"description_count": 4
},
"yandex_direct": {
"headline_max": 35,
"headline_count": 8,
"description_max": 81,
"description_count": 2
},
"vk": {
"headline_max": 50,
"body_max": 220,
"cta_options": ["Подробнее", "Купить", "Записаться", "Узнать больше", "Попробовать"]
},
"telegram": {
"title_max": 50,
"description_max": 160,
"button_text_max": 25
}
}
async def generate_ad_copy(
brief: AdBrief,
num_variants: int = 5
) -> list[dict]:
constraints = PLATFORM_CONSTRAINTS.get(brief.platform, {})
response = await client.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "system",
"content": f"""Ты — Performance-маркетолог, специалист по копирайтингу для {brief.platform}.
Создай {num_variants} вариантов рекламного текста.
Ограничения платформы:
{json.dumps(constraints, ensure_ascii=False)}
Принципы:
- Конкретика вместо общих слов ("экономия 30 мин/день" > "экономия времени")
- Выгода в заголовке, не функция
- Триггеры: срочность, социальное доказательство, страх упустить
- Четкий CTA
- Без клише: "лучший", "уникальный", "инновационный"
Верни JSON массив вариантов."""
}, {
"role": "user",
"content": f"""
Продукт: {brief.product}
УТП: {brief.usp}
ЦА: {brief.target_audience}
Болевые точки: {', '.join(brief.pain_points)}
Цель: {brief.goal}
Тон: {brief.brand_tone}
"""
}],
response_format={"type": "json_object"}
)
return json.loads(response.choices[0].message.content)["variants"]
Генератор лендинговых секций
LANDING_SECTIONS = {
"hero": "заголовок + подзаголовок + CTA-кнопка",
"problem": "описание проблемы которую решаем",
"solution": "как продукт решает проблему",
"features": "3-5 ключевых возможностей с описанием",
"social_proof": "отзывы, кейсы, цифры",
"faq": "5-7 вопросов и ответов",
"cta": "финальный призыв к действию"
}
async def generate_landing_copy(brief: AdBrief) -> dict:
sections = {}
for section_name, section_desc in LANDING_SECTIONS.items():
response = await client.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "system",
"content": f"Напиши секцию лендинга: {section_desc}. Без шаблонных фраз. Конкретно и по делу."
}, {
"role": "user",
"content": f"Продукт: {brief.product}. УТП: {brief.usp}. ЦА: {brief.target_audience}."
}]
)
sections[section_name] = response.choices[0].message.content
return sections
Оценка качества текстов
async def score_ad_copy(copy_variants: list[dict], brief: AdBrief) -> list[dict]:
"""Оцениваем каждый вариант по ключевым метрикам"""
response = await client.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "system",
"content": f"""Оцени рекламные тексты для {brief.platform}.
Критерии оценки (каждый 1-10):
- relevance_to_audience: соответствие ЦА
- clarity: ясность и понятность
- urgency: создание срочности
- specificity: наличие конкретики/цифр
- cta_strength: сила призыва к действию
Предскажи CTR потенциал: low/medium/high.
Верни JSON массив оценок."""
}, {
"role": "user",
"content": f"Варианты:\n{json.dumps(copy_variants, ensure_ascii=False)}\n\nПродукт: {brief.product}, ЦА: {brief.target_audience}"
}],
response_format={"type": "json_object"}
)
scores = json.loads(response.choices[0].message.content)["scores"]
for i, variant in enumerate(copy_variants):
if i < len(scores):
variant["scores"] = scores[i]
return copy_variants
Сроки: генератор рекламных текстов с оценкой качества — 1–2 недели. Платформа с интеграцией в Яндекс.Директ/Google Ads API и автоматической загрузкой вариантов — 3–4 недели.







