Интеграции

AI-модели в PHP через AI Gateway — SDK openai-php/client

openai-php/client

AI Gateway совместим с популярным SDK openai-php/client: весь код — как в его документации, задаются только базовый URI и ключ. Один клиент даёт доступ ко всем моделям каталога — Claude, GPT, Gemini, DeepSeek — сменой параметра model.

Установка

composer require openai-php/client

Первый запрос

<?php

require 'vendor/autoload.php';

$client = OpenAI::factory()
    ->withBaseUri('ai-gatewey.ru/v1')
    ->withApiKey('sk-aigate-ваш_ключ')
    ->make();

$response = $client->chat()->create([
    'model' => 'deepseek/deepseek-chat',
    'messages' => [
        ['role' => 'user', 'content' => 'Привет!'],
    ],
]);

echo $response->choices[0]->message->content;
Ключ храните в переменной окружения (getenv('AIGATE_API_KEY')) или в .env, а не в коде. В withBaseUri указывается хост с путём без схемы — ai-gatewey.ru/v1.

Стриминг

Ответ частями через Server-Sent Events — метод createStreamed возвращает итератор, который перебирают циклом foreach:

$stream = $client->chat()->createStreamed([
    'model' => 'deepseek/deepseek-chat',
    'messages' => [
        ['role' => 'user', 'content' => 'Расскажи о токенах'],
    ],
]);

foreach ($stream as $response) {
    echo $response->choices[0]->delta->content ?? '';
}

Function calling

Вызов инструментов работает прозрачно — выбирайте модель с поддержкой function calling (бейдж «инструменты» в каталоге). Инструменты передаются в поле tools, а модель возвращает toolCalls:

$response = $client->chat()->create([
    'model' => 'anthropic/claude-sonnet-5',
    'messages' => [
        ['role' => 'user', 'content' => 'Какая погода в Москве?'],
    ],
    'tools' => [[
        'type' => 'function',
        'function' => [
            'name' => 'get_weather',
            'description' => 'Погода в городе',
            'parameters' => [
                'type' => 'object',
                'properties' => ['city' => ['type' => 'string']],
                'required' => ['city'],
            ],
        ],
    ]],
]);

var_dump($response->choices[0]->message->toolCalls);

Обработка ошибок

  • 401 — неверный или отозванный ключ: проверьте значение и что ключ активен в кабинете.
  • 403 — модель сверх тарифа при пустом балансе: пополните баланс или выберите модель тарифа.
  • 429 — исчерпана квота или RPM-лимит ключа: дождитесь окна, поднимите лимит или тариф.
  • 5xx — сбой апстрима: шлюз сам ретраит и переключает провайдера, но свой retry с экспоненциальной паузой в проде не помешает.
use OpenAI\Exceptions\ErrorException;

try {
    $response = $client->chat()->create([
        'model' => 'deepseek/deepseek-chat',
        'messages' => [
            ['role' => 'user', 'content' => 'Привет!'],
        ],
    ]);
} catch (ErrorException $e) {
    // 429 → квота/RPM: подождать и повторить
    echo $e->getErrorType() . ': ' . $e->getMessage();
}

Какую модель выбрать

МодельВвод, ₽/1МВывод, ₽/1МКонтекст
DeepSeek: DeepSeek V331125128K
Anthropic: Claude Sonnet 53141 5681M
OpenAI: GPT-5.4 Mini118705400K
Актуальные цены каталога AI Gateway за 1 млн токенов. Все модели →

Частые вопросы

Есть ли пакет для Laravel?

Да — openai-php/laravel оборачивает тот же клиент фасадом OpenAI и конфигом. Базовый URI и ключ задаются в config/openai.php (base_uri и api_key), после чего фасад ходит в AI Gateway.

Какой HTTP-клиент нужен?

Пакет использует PSR-18: подойдёт Guzzle или любой совместимый клиент. Обычно достаточно composer require guzzlehttp/guzzle, если он ещё не установлен.

Можно ли переключать модели без нового клиента?

Да — клиент создаётся один раз, а модель задаётся в каждом запросе ключом model, поэтому один клиент работает со всеми моделями каталога.

PHP-приложение с AI — за пять минут

Получить ключ