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

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1566 послуг
Реалізація AI-автоматизації підготовки презентацій
Середній
~1-2 тижні
Часті запитання

Напрямки AI-розробки

Етапи розробки AI-рішення

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1284
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1196
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    901
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1119
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    586
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    853

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

Підготовка презентації для pitch або звіту займає 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)

    # Для інших — промпт для генерації зображень
    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, ділиться електронною поштою. Для компаній, які працюють у Google Workspace, це зручніше, ніж генерація PPTX.

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

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

Генератор презентацій з PPTX-експортом та 3 темами оформлення — 2–3 тижні. Платформа з Google Slides інтеграцією, базою шаблонів за галузями та авторозписанням звітів — 6–8 тижнів.