Когда 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); // "отрицательная"