ChatGPT API — самый простой способ встроить нейросеть в PHP-проект: обычный HTTP-запрос с JSON. Ниже — минимальный рабочий пример без библиотек и фреймворков.
Ключ и модель
Ключ берём в личном кабинете OpenAI и храним в переменной окружения — в код и в репозиторий он попадать не должен.
export OPENAI_API_KEY="sk-..."
Для старта достаточно gpt-4o-mini: он дешевле старших моделей и хорошо справляется с типовыми задачами.
Запрос через cURL
$payload = [
'model' => 'gpt-4o-mini',
'messages' => [
['role' => 'system', 'content' => 'Ты помогаешь с PHP-кодом. Отвечай коротко.'],
['role' => 'user', 'content' => 'Что делает array_reduce?'],
],
'temperature' => 0.3,
];
$ch = curl_init('https://api.openai.com/v1/chat/completions');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Authorization: Bearer ' . getenv('OPENAI_API_KEY'),
],
CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE),
]);
$raw = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$data = json_decode($raw, true);
if ($status !== 200) {
error_log('OpenAI error: ' . $raw);
exit('Сервис временно недоступен');
}
echo $data['choices'][0]['message']['content'];
Что важно на практике
- Таймаут. Ответ может идти 5–20 секунд — для веб-запроса это много, лучше выносить вызов в очередь.
- Токены. В ответе есть
usage.total_tokens: по нему считается стоимость. Логируйте его хотя бы на старте. - Лимиты. При ответе 429 делайте повтор с задержкой, а не бесконечный ретрай.
- Безопасность. Ключ — только на сервере; из браузера обращайтесь к своему эндпоинту, а не к OpenAI напрямую.
Этого кода достаточно для чата, генерации описаний товаров или разбора текста. Дальше — стриминг ответа, история сообщений и ограничение длины контекста.