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 напрямую.

Этого кода достаточно для чата, генерации описаний товаров или разбора текста. Дальше — стриминг ответа, история сообщений и ограничение длины контекста.