Генерация презентаций с ChatGPT

創建於:2024年11月8日

使用 O1 Mini 回答 Chat01

問題

напиши код для генерации презентации с помощью chatgpt и на сервере php, нужен полностью автоматизированный вариант и возможность стилизации и экспорта в формате power point

思考

Создание и интеграция

Я собираюсь создать автоматизатор презентаций на сервере PHP, используя ChatGPT для генерации контента, добавляя стили и экспортируя в PowerPoint.

回答

Создание полностью автоматизированной системы генерации презентаций с использованием ChatGPT на PHP-сервере включает несколько ключевых шагов:

  1. Интеграция с OpenAI API для генерации контента.
  2. Использование PHP-библиотеки для создания PowerPoint-файлов (например, PHPPresentation).
  3. Настройка стилизации презентации.
  4. Автоматизация процесса и экспорт в формате PowerPoint.

Ниже представлен подробный пошаговый план с примерами кода для реализации данной задачи.


1. Требования и Установка

1.1. Необходимые компоненты

  • PHP 7.4+: Убедитесь, что на вашем сервере установлена актуальная версия PHP.
  • Composer: Для управления зависимостями PHP.
  • OpenAI API ключ: Для доступа к ChatGPT.
  • PHPPresentation: PHP-библиотека для создания PowerPoint файлов.

1.2. Установка Composer

Если Composer еще не установлен, выполните следующие команды:

bash
curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer

1.3. Установка PHPPresentation

Перейдите в директорию вашего проекта и выполните:

bash
composer require phpoffice/phppresentation

2. Настройка OpenAI API

2.1. Получение API ключа

Получите ваш API ключ с OpenAI.

2.2. Создание конфигурационного файла

Создайте файл config.php для хранения конфиденциальных данных:

php
<?php // config.php return [ 'openai_api_key' => 'YOUR_OPENAI_API_KEY', ];

Не забудьте добавить config.php в .gitignore, чтобы не раскрыть ваш API ключ.


3. Генерация Контента с Помощью ChatGPT

Создадим функцию для взаимодействия с OpenAI API и получения контента для презентации.

php
<?php // generate_content.php function generatePresentationContent($topic, $sections = 5) { $config = include('config.php'); $apiKey = $config['openai_api_key']; $url = 'https://api.openai.com/v1/chat/completions'; $prompt = "Создай структуру презентации на тему '{$topic}' с {$sections} слайдами. Для каждого слайда предоставь заголовок и краткое описание."; $data = [ 'model' => 'gpt-4', 'messages' => [ ['role' => 'system', 'content' => 'Ты помощник для создания презентаций.'], ['role' => 'user', 'content' => $prompt], ], 'max_tokens' => 1500, ]; $ch = curl_init($url); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', 'Authorization: Bearer ' . $apiKey, ]); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); if(curl_errno($ch)){ throw new Exception('Request Error:' . curl_error($ch)); } curl_close($ch); $responseData = json_decode($response, true); if(isset($responseData['choices'][0]['message']['content'])){ return $responseData['choices'][0]['message']['content']; } else { throw new Exception('Invalid API response'); } }

4. Парсинг Полученного Контента

Предположим, что ChatGPT возвращает структуру в формате:

text
1. Заголовок слайда 1 Краткое описание слайда 1 2. Заголовок слайда 2 Краткое описание слайда 2 ...

Создадим функцию для парсинга этого текста:

php
<?php // parse_content.php function parsePresentationContent($content) { $slides = []; $pattern = '/(\d+)\.\s*(.+)\n(.+)/'; preg_match_all($pattern, $content, $matches, PREG_SET_ORDER); foreach ($matches as $match) { $slides[] = [ 'title' => trim($match[2]), 'description' => trim($match[3]), ]; } return $slides; }

5. Создание PowerPoint Презентации

Используем PHPPresentation для генерации файла.

php
<?php // create_presentation.php require 'vendor/autoload.php'; use PhpOffice\PhpPresentation\PhpPresentation; use PhpOffice\PhpPresentation\IOFactory; use PhpOffice\PhpPresentation\Style\Alignment; use PhpOffice\PhpPresentation\Style\Color; use PhpOffice\PhpPresentation\Style\Fill; function createPowerPoint($slidesData, $outputFile = 'presentation.pptx') { $objPHPPowerPoint = new PhpPresentation(); // Удаляем первый пустой слайд $objPHPPowerPoint->removeSlideByIndex(0); foreach ($slidesData as $slideData) { $currentSlide = $objPHPPowerPoint->createSlide(); // Заголовок $titleShape = $currentSlide->createRichTextShape() ->setHeight(50) ->setWidth(600) ->setOffsetX(170) ->setOffsetY(50); $titleShape->getActiveParagraph()->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER); $textRun = $titleShape->createTextRun($slideData['title']); $textRun->getFont()->setBold(true) ->setSize(24) ->setColor(new Color(Color::COLOR_BLACK)); // Описание $descriptionShape = $currentSlide->createRichTextShape() ->setHeight(300) ->setWidth(600) ->setOffsetX(170) ->setOffsetY(150); $descriptionShape->getActiveParagraph()->getAlignment()->setHorizontal(Alignment::HORIZONTAL_LEFT); $textRun = $descriptionShape->createTextRun($slideData['description']); $textRun->getFont()->setSize(18) ->setColor(new Color(Color::COLOR_DARKGRAY)); } // Сохранение презентации $writer = IOFactory::createWriter($objPHPPowerPoint, 'PowerPoint2007'); $writer->save($outputFile); }

6. Основной Скрипт для Генерации Презентации

Соединим все функции в один скрипт.

php
<?php // generate_presentation.php require 'generate_content.php'; require 'parse_content.php'; require 'create_presentation.php'; try { // Параметры презентации $topic = "Современные технологии в образовании"; $numberOfSlides = 5; // Генерация контента с помощью ChatGPT $rawContent = generatePresentationContent($topic, $numberOfSlides); // Парсинг контента $slidesData = parsePresentationContent($rawContent); // Создание PowerPoint файла $outputFile = 'presentation.pptx'; createPowerPoint($slidesData, $outputFile); echo "Презентация успешно создана: " . $outputFile; } catch (Exception $e) { echo "Ошибка: " . $e->getMessage(); }

Запустите generate_presentation.php через браузер или командную строку:

bash
php generate_presentation.php

7. Стилизация Презентации

PHPPresentation позволяет настраивать стили слайдов, текстов и фонов. В примере выше уже показано, как устанавливать выравнивание, размер шрифта и цвет. Для более сложной стилизации вы можете использовать шаблоны или настраивать каждый элемент по своему усмотрению.

Пример добавления фонового изображения:

php
use PhpOffice\PhpPresentation\Style\Image; // В функции createPowerPoint добавьте после создания слайда: $background = $currentSlide->getBackground(); $background->setImage('path/to/background/image.jpg'); $background->setFillType(Fill::FILL_IMAGE);

Использование Тем:

PHPPresentation поддерживает темы, что позволяет применять единый стиль ко всем слайдам.

php
use PhpOffice\PhpPresentation\Style\Theme; // Пример применения темы $objPHPPowerPoint->getLayoutCollection()->getSlideLayout('TITLE_AND_CONTENT');

Более детальная информация доступна в документации PHPPresentation.


8. Автоматизация и Расширение Функционала

Для полной автоматизации вы можете:

  • Создать веб-интерфейс: Позволяет пользователю вводить тему и количество слайдов.
  • Настроить расписание: Использовать cron для регулярной генерации презентаций.
  • Добавить поддержку других форматов: Например, PDF экспорт.
  • Интегрировать с базой данных: Хранить созданные презентации и их параметры.

Пример Простого Веб-Форма:

Создайте index.php:

php
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <title>Генерация Презентации</title> </head> <body> <h1>Создать Презентацию с помощью ChatGPT</h1> <form action="generate_presentation.php" method="post"> <label for="topic">Тема:</label><br> <input type="text" id="topic" name="topic" required><br><br> <label for="slides">Количество слайдов:</label><br> <input type="number" id="slides" name="slides" min="1" max="20" value="5" required><br><br> <input type="submit" value="Создать"> </form> </body> </html>

Измените generate_presentation.php для обработки POST-запроса:

php
<?php // generate_presentation.php require 'generate_content.php'; require 'parse_content.php'; require 'create_presentation.php'; if ($_SERVER['REQUEST_METHOD'] === 'POST') { try { // Получение данных из формы $topic = $_POST['topic']; $numberOfSlides = intval($_POST['slides']); // Генерация контента с помощью ChatGPT $rawContent = generatePresentationContent($topic, $numberOfSlides); // Парсинг контента $slidesData = parsePresentationContent($rawContent); // Создание PowerPoint файла $outputFile = 'presentation.pptx'; createPowerPoint($slidesData, $outputFile); // Предоставление файла для скачивания header('Content-Description: File Transfer'); header('Content-Type: application/vnd.openxmlformats-officedocument.presentationml.presentation'); header('Content-Disposition: attachment; filename="' . basename($outputFile) . '"'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($outputFile)); readfile($outputFile); exit; } catch (Exception $e) { echo "Ошибка: " . $e->getMessage(); } } else { echo "Неверный метод запроса."; }

Теперь, при заполнении формы на index.php, будет создана и загружена презентация в формате PowerPoint.


9. Дополнительные Улучшения

  • Обработка изображений и графики: Использовать OpenAI для генерации описаний изображений и добавлять их в слайды.
  • Многоязычная поддержка: Поддерживать различные языки для генерации презентаций.
  • Аутентификация и безопасность: Защитить доступ к генерации презентаций с помощью авторизации.

Заключение

Данный пример демонстрирует базовый подход к автоматизированной генерации презентаций с использованием ChatGPT и PHP. В зависимости от ваших требований, вы можете расширять функционал, улучшать стилизацию и интегрировать дополнительные возможности. PHPPresentation предоставляет широкий спектр инструментов для создания профессиональных презентаций, а OpenAI API позволяет генерировать качественный контент автоматически.


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

分享這個問答