PHP и ИИ: ChatGPT как ваш новый коллега-программист

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Когда PHP встречает ИИ: почему это работает

Представьте: вы пишете код на PHP, и вдруг у вас появляется коллега, который никогда не спит, не просит зарплату и может за секунду сгенерировать описание для тысячи товаров, написать письмо клиенту или даже помочь отладить сложный SQL-запрос. Звучит как фантастика? А вот и нет. Это реальность с интеграцией ChatGPT в PHP-проекты.

PHP долгое время оставался «рабочей лошадкой» веба, но с приходом ИИ он получил второе дыхание. Больше не нужно писать тонны шаблонного кода вручную — нейросеть берет на себя рутину, а вы сосредотачиваетесь на архитектуре. В этой статье мы разберем, как подключить ChatGPT к вашему PHP-приложению, и сделаем это максимально практично.

Что вам понадобится для старта?

Прежде чем нырять в код, убедитесь, что у вас есть:

  • PHP 8.0+ — для работы с современными фичами (типизация, атрибуты).
  • cURL — чтобы отправлять запросы к OpenAI API.
  • API-ключ OpenAI — регистрируетесь на platform.openai.com и создаете ключ.
  • Composer — для удобного управления зависимостями (хотя можно и без него).

Готовы? Поехали.

Базовое подключение: отправляем первый запрос к ChatGPT

Начнем с самого простого — отправки сообщения в ChatGPT и получения ответа. OpenAI использует REST API, поэтому нам нужен обычный HTTP-запрос. Вот минимальный рабочий класс:

<?php

class ChatGPTClient {
    private string $apiKey;
    private string $apiUrl = 'https://api.openai.com/v1/chat/completions';

    public function __construct(string $apiKey) {
        $this->apiKey = $apiKey;
    }

    public function ask(string $message): string {
        $data = [
            'model' => 'gpt-3.5-turbo',
            'messages' => [
                ['role' => 'user', 'content' => $message]
            ],
            'temperature' => 0.7
        ];

        $ch = curl_init($this->apiUrl);
        curl_setopt_array($ch, [
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_POST => true,
            CURLOPT_HTTPHEADER => [
                'Content-Type: application/json',
                'Authorization: Bearer ' . $this->apiKey
            ],
            CURLOPT_POSTFIELDS => json_encode($data)
        ]);

        $response = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        if ($httpCode !== 200) {
            throw new \RuntimeException("API error: $httpCode - $response");
        }

        $result = json_decode($response, true);
        return $result['choices'][0]['message']['content'] ?? '';
    }
}

// Использование
$client = new ChatGPTClient('your-api-key-here');
echo $client->ask('Напиши короткое приветствие для сайта на PHP');

Этот код — фундамент. Обратите внимание: мы используем gpt-3.5-turbo — он дешевый и быстрый. Для сложных задач можно переключиться на gpt-4, но это дороже.

Обработка ошибок и лимитов

Реальные проекты требуют более надежной обработки. Добавьте ретраи при 429 ошибке (слишком много запросов) и логирование:

public function askWithRetry(string $message, int $maxRetries = 3): string {
    for ($attempt = 1; $attempt <= $maxRetries; $attempt++) {
        try {
            return $this->ask($message);
        } catch (\RuntimeException $e) {
            if (str_contains($e->getMessage(), '429') && $attempt < $maxRetries) {
                sleep(pow(2, $attempt)); // экспоненциальная задержка
                continue;
            }
            throw $e;
        }
    }
}

Продвинутые сценарии: от генерации контента до анализа данных

Теперь, когда база готова, давайте посмотрим, как ChatGPT может реально упростить жизнь PHP-разработчику.

1. Генерация SEO-описаний для товаров

Если у вас интернет-магазин, вы знаете, как мучительно писать описания для сотен товаров. Пусть ИИ делает это за вас:

function generateProductDescription(string $productName, string $category): string {
    $prompt = "Напиши SEO-оптимизированное описание для товара '$productName' в категории '$category'. 
               Используй ключевые слова: купить, цена, доставка. Ограничься 3 предложениями.";
    
    return (new ChatGPTClient(getenv('OPENAI_KEY')))->ask($prompt);
}

// Пример: описание для "Умная лампочка Xiaomi"
echo generateProductDescription('Умная лампочка Xiaomi', 'Умный дом');

2. Умный чат-бот для поддержки

Вместо того чтобы писать сотни if-else для ответов на типовые вопросы, сделайте ИИ-бота, который понимает контекст:

class SupportBot {
    private ChatGPTClient $ai;
    private array $conversationHistory = [];

    public function __construct() {
        $this->ai = new ChatGPTClient(getenv('OPENAI_KEY'));
    }

    public function handleMessage(string $userMessage): string {
        // Добавляем системный промпт для контекста
        $this->conversationHistory[] = [
            'role' => 'system',
            'content' => 'Ты — дружелюбный саппорт интернет-магазина электроники. 
                          Отвечай кратко и по делу. Если вопрос сложный — предложи связаться с оператором.'
        ];
        $this->conversationHistory[] = ['role' => 'user', 'content' => $userMessage];

        // Отправляем всю историю (до 10 последних сообщений для экономии токенов)
        $recentHistory = array_slice($this->conversationHistory, -10);
        $response = $this->ai->askWithContext($recentHistory);

        $this->conversationHistory[] = ['role' => 'assistant', 'content' => $response];
        return $response;
    }
}

Обратите внимание на метод askWithContext — его нужно добавить в ваш клиент, передавая массив messages целиком. Это позволит боту «помнить» предыдущие вопросы.

3. Анализ тональности отзывов

Хотите автоматически определять, хороший отзыв оставил клиент или плохой? ChatGPT справится с этим на ура:

function analyzeSentiment(string $reviewText): string {
    $prompt = "Определи тональность следующего отзыва (положительная, отрицательная, нейтральная). 
               Ответь только одним словом. Отзыв: \"$reviewText\"";
    
    $result = (new ChatGPTClient(getenv('OPENAI_KEY')))->ask($prompt);
    return trim(strtolower($result));
}

$review = "Товар пришел быстро, но качество подкачало";
echo analyzeSentiment($review); // "отрицательная"

Оптимизация: как не разори

Блоги

Рекомендаций по книгам