Реализация AI-автоматизации подготовки презентаций

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Реализация AI-автоматизации подготовки презентаций
Средняя
~1-2 недели
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    854
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

AI-автоматизация подготовки презентаций

Подготовка презентации для питча или отчёта занимает 4–8 часов дизайнера и 2–3 часа аналитика. AI-система генерирует структуру, тексты слайдов, подбирает иллюстрации и собирает готовый PPTX или Google Slides за 5–15 минут по брифу или набору данных.

Генератор структуры и контента презентации

from openai import AsyncOpenAI
from dataclasses import dataclass
import json

client = AsyncOpenAI()

@dataclass
class PresentationBrief:
    title: str
    purpose: str          # pitch, report, educational, sales, internal
    audience: str         # investors, clients, board, employees, students
    slides_count: int     # желаемое количество слайдов
    key_messages: list[str]
    data_points: list[dict] = None    # {"metric": "...", "value": "...", "context": "..."}
    company_context: str = ""
    duration_minutes: int = 15
    style: str = "professional"       # professional, minimal, bold, corporate

async def generate_presentation_structure(brief: PresentationBrief) -> dict:
    response = await client.chat.completions.create(
        model="gpt-4o",
        messages=[{
            "role": "system",
            "content": f"""Ты — презентационный стратег и сторителлер.
            Создай структуру презентации для аудитории: {brief.audience}.
            Цель: {brief.purpose}. Длительность: {brief.duration_minutes} мин (~{brief.duration_minutes // brief.slides_count * 60} сек/слайд).

            ПРИНЦИПЫ:
            - Один слайд = одна идея
            - Заголовок слайда = вывод, а не тема ("Выручка выросла на 40%" вместо "Финансовые результаты")
            - Открытие: крючок — не "добрый день, меня зовут..."
            - Закрытие: конкретный следующий шаг для аудитории

            Для каждого слайда:
            - slide_type: title, problem, data, solution, case_study, timeline, cta
            - headline: заголовок-вывод
            - key_points: 2–3 тезиса
            - visual_suggestion: что изобразить
            - speaker_notes: 2–3 предложения для спикера

            Верни JSON: {{slides: [...]}}"""
        }, {
            "role": "user",
            "content": f"""
            Тема: {brief.title}
            Ключевые сообщения: {', '.join(brief.key_messages)}
            Данные: {json.dumps(brief.data_points or [], ensure_ascii=False)}
            Контекст компании: {brief.company_context}
            Количество слайдов: {brief.slides_count}
            """
        }],
        response_format={"type": "json_object"}
    )
    return json.loads(response.choices[0].message.content)

Генерация иллюстраций для слайдов

async def generate_slide_visual(
    slide_type: str,
    headline: str,
    data_points: list = None,
    style: str = "professional"
) -> str:
    """Возвращаем либо промпт для DALL-E, либо тип chart для Chart.js"""

    CHART_SLIDES = {"data", "timeline", "comparison"}
    if slide_type in CHART_SLIDES and data_points:
        # Для слайдов с данными — генерируем chart spec
        response = await client.chat.completions.create(
            model="gpt-4o",
            messages=[{
                "role": "system",
                "content": "Создай Chart.js конфигурацию для визуализации данных на слайде. Верни JSON с type, data, options."
            }, {
                "role": "user",
                "content": f"Данные: {json.dumps(data_points, ensure_ascii=False)}\nЗаголовок слайда: {headline}"
            }],
            response_format={"type": "json_object"}
        )
        return json.loads(response.choices[0].message.content)

    # Для остальных — промпт для image generation
    style_map = {
        "professional": "clean corporate illustration, flat design, blue palette",
        "minimal": "minimalist line art, monochrome, white background",
        "bold": "bold graphic design, high contrast, modern typography"
    }
    return f"{headline}, {style_map.get(style, style_map['professional'])}, presentation slide visual, 16:9"

Сборка PPTX через python-pptx

from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN
import io

class PresentationBuilder:
    def __init__(self, theme: dict):
        self.prs = Presentation()
        self.prs.slide_width = Emu(9144000)   # 16:9 widescreen
        self.prs.slide_height = Emu(5143500)
        self.theme = theme

    def add_content_slide(self, headline: str, key_points: list[str], notes: str = "") -> None:
        layout = self.prs.slide_layouts[1]  # Title and Content
        slide = self.prs.slides.add_slide(layout)

        # Заголовок
        title = slide.shapes.title
        title.text = headline
        title.text_frame.paragraphs[0].font.size = Pt(28)
        title.text_frame.paragraphs[0].font.color.rgb = RGBColor(*self.theme["primary"])

        # Контент
        body = slide.placeholders[1]
        tf = body.text_frame
        tf.clear()
        for point in key_points:
            p = tf.add_paragraph()
            p.text = point
            p.font.size = Pt(18)
            p.level = 0

        # Заметки спикера
        if notes:
            notes_slide = slide.notes_slide
            notes_slide.notes_text_frame.text = notes

    def save(self) -> bytes:
        buf = io.BytesIO()
        self.prs.save(buf)
        return buf.getvalue()

Полный pipeline

async def create_presentation(brief: PresentationBrief) -> bytes:
    # 1. Генерируем структуру
    structure = await generate_presentation_structure(brief)

    # 2. Генерируем визуалы параллельно
    visual_tasks = [
        generate_slide_visual(s["slide_type"], s["headline"], brief.data_points, brief.style)
        for s in structure["slides"]
    ]
    import asyncio
    visuals = await asyncio.gather(*visual_tasks)

    # 3. Собираем PPTX
    builder = PresentationBuilder(theme={"primary": (67, 97, 238)})
    for slide_data, visual in zip(structure["slides"], visuals):
        builder.add_content_slide(
            headline=slide_data["headline"],
            key_points=slide_data["key_points"],
            notes=slide_data.get("speaker_notes", "")
        )

    return builder.save()

Экспорт в Google Slides

Через Google Slides API система создаёт презентацию в корпоративном аккаунте: загружает сгенерированный контент, применяет Slides Theme компании, расшаривает по email. Для компаний, работающих в Google Workspace, это удобнее, чем генерация PPTX.

Варианты автоматизации:

  • Webhook из Notion/Confluence → генерация презентации по шаблону страницы
  • Еженедельные отчёты из BI-систем (Metabase, Grafana) → слайды с актуальными данными
  • Pitch deck из одностраничного брифа за 10 минут

Генератор презентаций с PPTX-экспортом и 3 темами оформления — 2–3 недели. Платформа с Google Slides интеграцией, базой шаблонов по отраслям и авторасписанием отчётов — 6–8 недель.