Зачем PHP-разработчику ChatGPT?
Представьте: вы пишете сайт на PHP, и вдруг понимаете, что вашему пользователю не хватает "умного" помощника. Не простого чата с заготовленными ответами, а настоящего искусственного интеллекта, который умеет писать код, переводить тексты, генерировать идеи или просто поддерживать осмысленный диалог. Звучит как фантастика? А вот и нет.
Сегодня интеграция ChatGPT API на PHP — это не rocket science, а вполне рутинная задача, которую может освоить любой разработчик, знакомый с основами языка. И я вам это докажу.
В этой статье мы не просто скопируем пару строк из документации. Мы разберёмся, как правильно отправлять запросы, обрабатывать ответы, управлять контекстом беседы и не "уронить" сервер. Поехали!
Что нам понадобится для старта?
Прежде чем писать код, давайте убедимся, что у вас есть всё необходимое:
- PHP 8.0+ — на более старых версиях могут быть проблемы с cURL и JSON.
- cURL extension — включите в php.ini (обычно он включён по умолчанию).
- API-ключ OpenAI — регистрируемся на platform.openai.com, переходим в раздел API keys и создаём новый секретный ключ.
- Чуть-чуть терпения — иногда API отвечает не сразу, особенно на сложные запросы.
Важно: храните API-ключ в безопасности. Никогда не вставляйте его прямо в код, который может попасть в публичный репозиторий. Используйте .env файлы или переменные окружения сервера.
Пишем первый запрос к ChatGPT на PHP
Начнём с самого простого: отправим одно сообщение и получим ответ. Это база, на которой строится вся дальнейшая работа с API.
<?php
// Конфигурация
$apiKey = 'sk-ваш_супер_секретный_ключ';
$url = 'https://api.openai.com/v1/chat/completions';
// Данные для запроса
$data = [
'model' => 'gpt-3.5-turbo', // можно gpt-4, если есть доступ
'messages' => [
[
'role' => 'user',
'content' => 'Расскажи шутку про программистов на русском языке'
]
],
'temperature' => 0.7, // чем выше, тем креативнее ответ
'max_tokens' => 500 // максимальная длина ответа
];
// Инициализация cURL
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Bearer ' . $apiKey
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
// Отправка запроса
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
// Обработка ответа
if ($httpCode === 200) {
$result = json_decode($response, true);
$reply = $result['choices'][0]['message']['content'];
echo "ChatGPT говорит: " . $reply;
} else {
echo "Ошибка! HTTP код: " . $httpCode . "<br>";
echo "Ответ сервера: " . $response;
}
?>
Запустили? Поздравляю, вы только что написали свою первую интеграцию ChatGPT API на PHP! Если всё сделано правильно, вы увидите забавную шутку от нейросети.
Разбираем код по косточкам
Давайте посмотрим, что здесь происходит, чтобы вы могли легко адаптировать этот код под свои задачи.
Структура запроса
API OpenAI ожидает от нас JSON с несколькими обязательными полями:
model— какая модель будет отвечать. gpt-3.5-turbo — оптимальный выбор для большинства задач: быстро и дёшево. gpt-4 умнее, но дороже и медленнее.messages— массив сообщений. Каждое сообщение имеетrole(system, user, assistant) иcontent(текст).temperature— насколько "креативным" будет ответ. 0 — строго факты, 1 — полёт фантазии.max_tokens— ограничение длины ответа. 1 токен ≈ 0.75 слова для русского языка.
Работа с cURL
Мы используем классический PHP cURL. Ключевые моменты:
- Обязательно передаём заголовок
Authorization: Bearer {ключ}— это способ аутентификации. - Данные отправляются в формате JSON, поэтому не забываем про
json_encode(). - Всегда проверяем HTTP-код ответа. 200 — успех, 401 — неверный ключ, 429 — превышен лимит запросов.
Добавляем контекст: учим ChatGPT помнить историю диалога
Одиночные запросы — это скучно. Настоящая магия начинается, когда вы строите диалог. Секрет прост: каждое новое сообщение должно содержать всю предыдущую переписку. Да, это не очень эффективно по токенам, но так работает API.
<?php
function askChatGPT($apiKey, $messages) {
$url = 'https://api.openai.com/v1/chat/completions';
$data = [
'model' => 'gpt-3.5-turbo',
'messages' => $messages,
'temperature' => 0.7,
'max_tokens' => 1000
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Bearer ' . $apiKey
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode === 200) {
$result = json_decode($response, true);
return $result['choices'][0]['message']['content'];
}
return false;
}
// Пример использования с сохранением контекста
$history = [
['role' => 'system', 'content' => 'Ты — дружелюбный помощник, который отвечает кратко и по делу.'],
['role' => 'user', 'content' => 'Какая столица Франции?'],
['role' => 'assistant', 'content' => 'Париж.'],
['role' => 'user', 'content' => 'А какая столица Италии?']
];
$answer = askChatGPT('sk-ваш_ключ', $history);
echo $answer; // Ответ