Skip to content

πŸš€ YandexGPT PHP - ΠΌΠ½ΠΎΠ³ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с ЯндСкс AI API. ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ YandexGPT ΠΈ YandexART ΠΊ PHP-прилоТСниям с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Laravel. ГСнСрация тСкста, Ρ‡Π°Ρ‚-Π±ΠΎΡ‚Ρ‹, AI-ассистСнты, Alice AI. Полная докумСнтация, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π°. Быстрый старт с ЯндСкс Cloud AI.

License

Notifications You must be signed in to change notification settings

tigusigalpa/yandexgpt-php

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

18 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

YandexGPT PHP SDK

YandexGPT PHP SDK

Latest Version PHP Version License Tests

Π―Π·Ρ‹ΠΊ: Русский | English

PHP SDK для YandexGPT API ΠΈ YandexART. ГСнСрация тСкста, Π΄ΠΈΠ°Π»ΠΎΠ³ΠΈ, изобраТСния, Conversations API. Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π»ΡŽΠ±Ρ‹ΠΌ PHP 8.0+ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Laravel.

Для управлСния ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠΉ инфраструктурой (ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΎΠ±Π»Π°ΠΊΠ°, ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ yandex-cloud-client-php.

ВозмоТности

  • ВсС ΠΌΠΎΠ΄Π΅Π»ΠΈ YandexGPT: Lite, Pro, Alice AI
  • ГСнСрация ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Ρ‡Π΅Ρ€Π΅Π· YandexART
  • Conversations API β€” сСрвСрныС Π΄ΠΈΠ°Π»ΠΎΠ³ΠΈ
  • Π Π΅ΠΆΠΈΠΌ рассуТдСний (Chain of Thought)
  • АвтоматичСскоС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ OAuth/IAM Ρ‚ΠΎΠΊΠ΅Π½Π°ΠΌΠΈ
  • Laravel: Service Provider, Facade, конфигурация
  • PHP 8.0+, Laravel 8.0+, Guzzle HTTP

Установка

Π§Π΅Ρ€Π΅Π· Composer:

composer require tigusigalpa/yandexgpt-php

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ локально для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ»ΠΈ тСстирования:

Бпособ 1: Π§Π΅Ρ€Π΅Π· Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ

  1. ΠšΠ»ΠΎΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈΠ»ΠΈ помСститС ΠΏΠ°ΠΊΠ΅Ρ‚ Π² ΠΏΠ°ΠΏΠΊΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°:
# Π’ ΠΊΠΎΡ€Π½Π΅ вашСго Laravel ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°
mkdir -p packages
cd packages
git clone https://github.com/tigusigalpa/yandexgpt-php.git
# ΠΈΠ»ΠΈ скопируйтС ΠΏΠ°ΠΏΠΊΡƒ с ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ Π² packages/yandexgpt-php
  1. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π² composer.json вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°:
{
    "repositories": [
        {
            "type": "path",
            "url": "./packages/yandexgpt-php"
        }
    ],
    "require": {
        "tigusigalpa/yandexgpt-php": "@dev"
    }
}
  1. УстановитС зависимости:
composer install
# ΠΈΠ»ΠΈ Ссли ΠΏΠ°ΠΊΠ΅Ρ‚ ΡƒΠΆΠ΅ Π±Ρ‹Π» установлСн
composer update tigusigalpa/yandexgpt-php

Бпособ 2: Π§Π΅Ρ€Π΅Π· симлинки

  1. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ симлинк Π² vendor:
# Π£Π΄Π°Π»ΠΈΡ‚Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ (Ссли Π΅ΡΡ‚ΡŒ)
rm -rf vendor/tigusigalpa/yandexgpt-php

# Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ симлинк
ln -s ../../packages/yandexgpt-php vendor/tigusigalpa/yandexgpt-php

Бпособ 3: Π§Π΅Ρ€Π΅Π· VCS Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ

{
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/tigusigalpa/yandexgpt-php.git"
        }
    ],
    "require": {
        "tigusigalpa/yandexgpt-php": "dev-main"
    }
}

Для Laravel

ΠŸΠ°ΠΊΠ΅Ρ‚ автоматичСски рСгистрируСтся Π² Laravel благодаря автодискавСри. ΠžΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»:

php artisan vendor:publish --tag=yandexgpt-config

Настройка

1. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ OAuth Ρ‚ΠΎΠΊΠ΅Π½Π°

ДокумСнтация: OAuth-Ρ‚ΠΎΠΊΠ΅Π½

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ ссылкС для получСния OAuth Ρ‚ΠΎΠΊΠ΅Π½Π°:

https://oauth.yandex.ru/authorize?response_type=token&client_id=1a6990aa636648e9b2ef855fa7bec2fb

2. Настройка окруТСния

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² ваш .env Ρ„Π°ΠΉΠ»:

YANDEX_GPT_OAUTH_TOKEN=your_oauth_token_here
# ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ folder_id Ρ‡Π΅Ρ€Π΅Π· ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ запрос
YANDEX_GPT_FOLDER_ID=your_folder_id_here
YANDEX_GPT_DEFAULT_MODEL=yandexgpt-lite
YANDEX_GPT_TEMPERATURE=0.6
YANDEX_GPT_MAX_TOKENS=2000

3. ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Yandex Cloud

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с YandexGPT API Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ нСсколько шагов Π² Yandex Cloud. SDK Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΠ· Π½ΠΈΡ…, Π½ΠΎ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ процСсс:

3.1. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ IAM Ρ‚ΠΎΠΊΠ΅Π½Π°

ДокумСнтация: ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ IAM-Ρ‚ΠΎΠΊΠ΅Π½Π° для Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° Π½Π° ЯндСксС

IAM Ρ‚ΠΎΠΊΠ΅Π½ получаСтся автоматичСски Ρ‡Π΅Ρ€Π΅Π· SDK с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ OAuth Ρ‚ΠΎΠΊΠ΅Π½Π°. Π’ΠΎΠΊΠ΅Π½ дСйствуСт 12 часов ΠΈ обновляСтся автоматичСски.

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· SDK:

use Tigusigalpa\YandexCloudClient\YandexCloudClient;

// Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Yandex Cloud
$cloudClient = new YandexCloudClient('your_oauth_token');

// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ IAM Ρ‚ΠΎΠΊΠ΅Π½Π°
$iamToken = $cloudClient->getAuthManager()->getIamToken();

echo "IAM Token: " . $iamToken . "\n";

АвтоматичСскоС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠΊΠ΅Π½Π°ΠΌΠΈ Ρ‡Π΅Ρ€Π΅Π· YandexGPTClient:

use Tigusigalpa\YandexGPT\YandexGPTClient;

// ΠšΠ»ΠΈΠ΅Π½Ρ‚ автоматичСски ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΈ обновляСт IAM Ρ‚ΠΎΠΊΠ΅Π½Ρ‹
$client = new YandexGPTClient('your_oauth_token', 'your_folder_id');

// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Yandex Cloud ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° для управлСния ΠΎΠ±Π»Π°ΠΊΠΎΠΌ
$cloudClient = $client->getCloudClient();
$iamToken = $cloudClient->getAuthManager()->getIamToken();

Π ΡƒΡ‡Π½ΠΎΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· API:

curl -d "{"yandexPassportOauthToken":"YOUR_OAUTH_TOKEN"}" \
  "https://iam.api.cloud.yandex.net/iam/v1/tokens"

3.2. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Cloud ID

ДокумСнтация: ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ списка рСсурсов Cloud

Π§Π΅Ρ€Π΅Π· SDK:

use Tigusigalpa\YandexCloudClient\YandexCloudClient;

$cloudClient = new YandexCloudClient('your_oauth_token');

// Laravel:
// use Tigusigalpa\YandexGPT\Laravel\Facades\YandexGPT;
// $cloudClient = YandexGPT::getCloudClient();
$clouds = $cloudClient->clouds()->list();

foreach ($clouds as $cloud) {
    echo "Cloud ID: " . $cloud['id'] . "\n";
    echo "Name: " . $cloud['name'] . "\n";
}

Π§Π΅Ρ€Π΅Π· Yandex Cloud CLI:

yc resource-manager cloud list

Π§Π΅Ρ€Π΅Π· Π²Π΅Π±-консоль: Yandex Cloud Console β†’ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΎΠ±Π»Π°ΠΊΠΎ β†’ скопируйтС ID

3.3. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Folder ID

ДокумСнтация: ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ списка рСсурсов Folder Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ ΠΎΠ±Π»Π°ΠΊΠ΅

Π§Π΅Ρ€Π΅Π· SDK:

use Tigusigalpa\YandexCloudClient\YandexCloudClient;

$cloudClient = new YandexCloudClient('your_oauth_token');

// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ²
$folders = $cloudClient->folders()->list('cloud_id');
foreach ($folders as $folder) {
    echo "Folder ID: " . $folder['id'] . "\n";
    echo "Name: " . $folder['name'] . "\n";
}

Π§Π΅Ρ€Π΅Π· Yandex Cloud CLI:

# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°
yc resource-manager folder create --name my-ai-folder --cloud-id YOUR_CLOUD_ID

# Бписок ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ²
yc resource-manager folder list --cloud-id YOUR_CLOUD_ID

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°

use Tigusigalpa\YandexCloudClient\YandexCloudClient;

$cloudClient = new YandexCloudClient('your_oauth_token');

// Laravel:
// use Tigusigalpa\YandexGPT\Laravel\Facades\YandexGPT;
// $cloudClient = YandexGPT::getCloudClient();

// Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°
$folder = $cloudClient->folders()->create('cloud_id', 'my-ai-folder', 'ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ для AI ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²');
$folderId = $folder['metadata']['folderId'];

ДокумСнтация: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°

3.4. НазначСниС Ρ€ΠΎΠ»Π΅ΠΉ Π½Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΈΠ»ΠΈ ΠΎΠ±Π»Π°ΠΊΠΎ

ДокумСнтация:

АутСнтификация Π² API Yandex AI Studio

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ доступом Π² Yandex AI Studio

ΠΠ°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Ρ€ΠΎΠ»ΡŒ Π½Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΈΠ»ΠΈ ΠΎΠ±Π»Π°ΠΊΠΎ

НазначСниС Ρ€ΠΎΠ»ΠΈ Π½Π° ΠΎΠ±Π»Π°ΠΊΠΎ

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Subject для ΠΎΠ±Π»Π°ΠΊΠ°

НазначСниС Ρ€ΠΎΠ»ΠΈ Π½Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Subject для ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°

ΠŸΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹Π΅ инструкции для Identity and Access Management

UserAccount API

Identity and Access Management API, REST: YandexPassportUserAccount.GetByLogin

Π§Π΅Ρ€Π΅Π· SDK:

use Tigusigalpa\YandexCloudClient\YandexCloudClient;

$cloudClient = new YandexCloudClient('your_oauth_token');

// Laravel:
// use Tigusigalpa\YandexGPT\Laravel\Facades\YandexGPT;
// $cloudClient = YandexGPT::getCloudClient();

// 1. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ User ID ΠΏΠΎ Π»ΠΎΠ³ΠΈΠ½Ρƒ Yandex
$userInfo = $cloudClient->yandexPassportUserAccounts()->getByLogin('username@yandex.ru');
$userId = $userInfo['id'];

// 2. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ ΠΏΠΎ UserAccountId
$userAccount = $cloudClient->userAccounts()->get($userId);

// 3. НазначСниС Ρ€ΠΎΠ»ΠΈ Π½Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³
$cloudClient->folders()->updateAccessBindings(
    'folder_id',
    [
        [
            'action' => 'ADD',
            'accessBinding' => [
                'roleId' => 'ai.languageModels.user',
                'subject' => [
                    'id' => $userId,
                    'type' => 'userAccount'
                ]
            ]
        ]
    ]
);

// 4. НазначСниС Ρ€ΠΎΠ»ΠΈ Π½Π° ΠΎΠ±Π»Π°ΠΊΠΎ
$cloudClient->clouds()->updateAccessBindings(
    'cloud_id',
    [
        [
            'action' => 'ADD',
            'accessBinding' => [
                'roleId' => 'viewer',
                'subject' => [
                    'id' => $userId,
                    'type' => 'userAccount'
                ]
            ]
        ]
    ]
);

Π§Π΅Ρ€Π΅Π· Yandex Cloud CLI:

# НазначСниС Ρ€ΠΎΠ»ΠΈ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
yc resource-manager folder add-access-binding \
  --id YOUR_FOLDER_ID \
  --role ai.languageModels.user \
  --user-account-id YOUR_USER_ID

# НазначСниС Ρ€ΠΎΠ»ΠΈ для сСрвисного Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π°
yc resource-manager folder add-access-binding \
  --id YOUR_FOLDER_ID \
  --role ai.languageModels.user \
  --service-account-id YOUR_SERVICE_ACCOUNT_ID

Π§Π΅Ρ€Π΅Π· Π²Π΅Π±-консоль:

  1. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Yandex Cloud Console
  2. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³
  3. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Ρ€Π°Π·Π΄Π΅Π» "ΠŸΡ€Π°Π²Π° доступа"
  4. НаТмитС "ΠΠ°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Ρ€ΠΎΠ»ΠΈ"
  5. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ Ρ€ΠΎΠ»ΡŒ ai.languageModels.user

3.5. ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ настройки

<?php

use Tigusigalpa\YandexCloudClient\YandexCloudClient;
use Tigusigalpa\YandexGPT\YandexGPTClient;

// 1. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Yandex Cloud ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°
$cloudClient = new YandexCloudClient('your_oauth_token');

// Laravel:
// use Tigusigalpa\YandexGPT\Laravel\Facades\YandexGPT;
// $cloudClient = YandexGPT::getCloudClient();

// 2. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ списка ΠΎΠ±Π»Π°ΠΊΠΎΠ²
$clouds = $cloudClient->clouds()->list();
$cloudId = $clouds[0]['id']; // Π‘Π΅Ρ€Π΅ΠΌ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΎΠ±Π»Π°ΠΊΠΎ

// 3. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° (Ссли Π½ΡƒΠΆΠ½ΠΎ)
$folder = $cloudClient->folders()->create($cloudId, 'ai-projects', 'ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ для AI');
$folderId = $folder['metadata']['folderId'];

// 4. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ User ID ΠΏΠΎ Π»ΠΎΠ³ΠΈΠ½Ρƒ (Ссли Π½ΡƒΠΆΠ½ΠΎ)
$userInfo = $cloudClient->yandexPassportUserAccounts()->getByLogin('username@yandex.ru');
$userId = $userInfo['id'];

// 5. НазначСниС Ρ€ΠΎΠ»ΠΈ Π½Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³
$cloudClient->folders()->updateAccessBindings(
    $folderId,
    [
        [
            'action' => 'ADD',
            'accessBinding' => [
                'roleId' => 'ai.languageModels.user',
                'subject' => ['id' => $userId, 'type' => 'userAccount']
            ]
        ]
    ]
);

// Или Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€ΠΎΠ»ΠΈ Π½Π° ΠΎΠ±Π»Π°ΠΊΠΎ
$cloudClient->clouds()->updateAccessBindings(
    $cloudId,
    [
        [
            'action' => 'ADD',
            'accessBinding' => [
                'roleId' => 'editor',
                'subject' => ['id' => $userId, 'type' => 'userAccount']
            ]
        ]
    ]
);

// 6. ИспользованиС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°
$client = new YandexGPTClient('your_oauth_token', $folderId);
$response = $client->generateText('ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΊΠ°ΠΊ Π΄Π΅Π»Π°?');

echo $response['result']['alternatives'][0]['message']['text'];

3.6. ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ссылки


ИспользованиС

Π‘Π°Π·ΠΎΠ²ΠΎΠ΅ использованиС (Π±Π΅Π· Laravel)

<?php

require_once 'vendor/autoload.php';

use Tigusigalpa\YandexGPT\YandexGPTClient;
use Tigusigalpa\YandexGPT\Models\YandexGPTModel;

// Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°
$client = new YandexGPTClient('your_oauth_token', 'your_folder_id');

// ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ запрос
$response = $client->generateText(
    'РасскаТи ΠΎ прСимущСствах PHP',
    YandexGPTModel::YANDEX_GPT_LITE
);

echo $response['result']['alternatives'][0]['message']['text'];

// ИспользованиС ΠΌΠΎΠ΄Π΅Π»ΠΈ Alice AI для Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡
$response = $client->generateText(
    'ΠŸΡ€ΠΈΠ²Π΅Ρ‚! РасскаТи ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠ½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ',
    YandexGPTModel::ALICE_AI,
    [
        'completionOptions' => [
            'temperature' => 0.7,
            'maxTokens' => 2000
        ]
    ]
);

echo $response['result']['alternatives'][0]['message']['text'];

ИспользованиС с Laravel

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Ρ‡Π΅Ρ€Π΅Π· Service Provider

ΠŸΠ°ΠΊΠ΅Ρ‚ автоматичСски интСгрируСтся с Laravel.

Π§Π΅Ρ€Π΅Π· фасад

<?php

use Tigusigalpa\YandexGPT\Laravel\Facades\YandexGPT;
use Tigusigalpa\YandexGPT\Models\YandexGPTModel;

// ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ запрос
$response = YandexGPT::generateText('ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΊΠ°ΠΊ Π΄Π΅Π»Π°?');

// Π‘ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²
$response = YandexGPT::generateText(
    'Напиши стихотворСниС ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ',
    YandexGPTModel::YANDEX_GPT,
    [
        'completionOptions' => [
            'temperature' => 0.8,
            'maxTokens' => 1000
        ]
    ]
);

echo $response['result']['alternatives'][0]['message']['text'];

Π§Π΅Ρ€Π΅Π· Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимостСй

<?php

use Tigusigalpa\YandexGPT\YandexGPTClient;

class ChatController extends Controller
{
    public function __construct(private YandexGPTClient $yandexGPT)
    {
    }

    public function generateResponse(Request $request)
    {
        $response = $this->yandexGPT->generateText($request->input('message'));
        
        return response()->json([
            'response' => $response['result']['alternatives'][0]['message']['text']
        ]);
    }
}

Π Π°Π±ΠΎΡ‚Π° с Π΄ΠΈΠ°Π»ΠΎΠ³Π°ΠΌΠΈ

use Tigusigalpa\YandexGPT\Laravel\Facades\YandexGPT;

$messages = [
    [
        'role' => 'system',
        'text' => 'Π’Ρ‹ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ-программист'
    ],
    [
        'role' => 'user',
        'text' => 'Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ REST API Π½Π° Laravel?'
    ],
    [
        'role' => 'assistant',
        'text' => 'Для создания REST API Π² Laravel ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ php artisan make:controller...'
    ],
    [
        'role' => 'user',
        'text' => 'А ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡŽ?'
    ]
];

$response = YandexGPT::generateFromMessages($messages);

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами Yandex Cloud

<?php

use Tigusigalpa\YandexGPT\YandexGPTClient;

$client = new YandexGPTClient('oauth_token', 'folder_id');
$authManager = $client->getAuthManager();

// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ IAM Ρ‚ΠΎΠΊΠ΅Π½Π°
$iamToken = $authManager->getIamToken();

// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ списка ΠΎΠ±Π»Π°ΠΊΠΎΠ²
$clouds = $authManager->getClouds($iamToken);

// Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°
$folder = $authManager->createFolder(
    $iamToken,
    'cloud_id',
    'my-yandexgpt-folder',
    'ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с YandexGPT'
);

// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ User ID ΠΏΠΎ Π»ΠΎΠ³ΠΈΠ½Ρƒ Yandex
$userId = $authManager->getUserIdByLogin('username@yandex.ru');

// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅
$userInfo = $authManager->getUserByLogin('username@yandex.ru');
// ΠΈΠ»ΠΈ ΠΏΠΎ UserAccountId
$userAccount = $authManager->getUserAccount($userId);

// НазначСниС Ρ€ΠΎΠ»ΠΈ Π½Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³
$authManager->assignRoleToFolder(
    $iamToken,
    $folder['id'],
    $userId,
    'ai.languageModels.user',
    'userAccount'  // ΠΈΠ»ΠΈ 'serviceAccount'
);

// НазначСниС Ρ€ΠΎΠ»ΠΈ Π½Π° ΠΎΠ±Π»Π°ΠΊΠΎ
$authManager->assignRoleToCloud(
    $iamToken,
    'cloud_id',
    $userId,
    'editor',
    'userAccount'
);

ДоступныС ΠΌΠΎΠ΄Π΅Π»ΠΈ

МодСль ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π° ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
yandexgpt-lite YandexGPTModel::YANDEX_GPT_LITE 32K ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ запросы, Ρ‡Π°Ρ‚-Π±ΠΎΡ‚Ρ‹, FAQ
yandexgpt YandexGPTModel::YANDEX_GPT 32K ΠšΠΎΠ½Ρ‚Π΅Π½Ρ‚, Π°Π½Π°Π»ΠΈΠ·, reasoning
aliceai-llm YandexGPTModel::ALICE_AI 32K Π”ΠΈΠ°Π»ΠΎΠ³ΠΈ, ассистСнты

ΠŸΠΎΠ»Π½Ρ‹ΠΉ список: МодСли Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π² Yandex AI Studio

$models = YandexGPT::getAvailableModels();
$descriptions = YandexGPT::getModelDescriptions();

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ

$options = [
    'completionOptions' => [
        'stream' => false,           // ΠŸΠΎΡ‚ΠΎΠΊΠΎΠ²Π°Ρ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° (ΠΏΠΎΠΊΠ° Π½Π΅ поддСрТиваСтся)
        'temperature' => 0.6,        // ΠšΡ€Π΅Π°Ρ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ (0.0 - 1.0)
        'maxTokens' => 2000         // МаксимальноС количСство Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ²
    ]
];

$response = YandexGPT::generateText('Π’Π°Ρˆ запрос', 'yandexgpt-lite', $options);

Π Π΅ΠΆΠΈΠΌ рассуТдСний (Reasoning Mode)

Π Π΅ΠΆΠΈΠΌ рассуТдСний позволяСт ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ€Π°Π·Π±ΠΈΠ²Π°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ Π½Π° этапы ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ вычислСний для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ точности ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ². Π­Ρ‚ΠΎΡ‚ Ρ€Π΅ΠΆΠΈΠΌ особСнно ΠΏΠΎΠ»Π΅Π·Π΅Π½ для Π·Π°Π΄Π°Ρ‡, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… логичСских рассуТдСний.

ДокумСнтация: Π Π΅ΠΆΠΈΠΌ рассуТдСний Π² Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… модСлях

ДоступныС Ρ€Π΅ΠΆΠΈΠΌΡ‹:

  • DISABLED - Ρ€Π΅ΠΆΠΈΠΌ рассуТдСний Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ)
  • ENABLED_HIDDEN - Ρ€Π΅ΠΆΠΈΠΌ рассуТдСний Π²ΠΊΠ»ΡŽΡ‡Π΅Π½, Π½ΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° рассуТдСний Π½Π΅ возвращаСтся Π² ΠΎΡ‚Π²Π΅Ρ‚Π΅

Π£Ρ€ΠΎΠ²Π½ΠΈ усилий (effort):

  • low - ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ экономию Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ²
  • medium - баланс ΠΌΠ΅ΠΆΠ΄Ρƒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ рассуТдСний
  • high - ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ рассуТдСниС

ИспользованиС с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ReasoningOptions

use Tigusigalpa\YandexGPT\Laravel\Facades\YandexGPT;
use Tigusigalpa\YandexGPT\Models\YandexGPTModel;
use Tigusigalpa\YandexGPT\Models\ReasoningOptions;

// Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌ рассуТдСний с Π½ΠΈΠ·ΠΊΠΈΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ усилий
$response = YandexGPT::generateText(
    'Π Π΅ΡˆΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡Ρƒ: Ссли Π² ΠΊΠΎΡ€Π·ΠΈΠ½Π΅ 5 яблок ΠΈ 3 Π³Ρ€ΡƒΡˆΠΈ, сколько всСго Ρ„Ρ€ΡƒΠΊΡ‚ΠΎΠ²?',
    YandexGPTModel::YANDEX_GPT,
    [
        'reasoningOptions' => ReasoningOptions::enabledHidden(ReasoningOptions::EFFORT_LOW)
    ]
);

// Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌ рассуТдСний с высоким ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ усилий
$response = YandexGPT::generateText(
    'ΠžΠ±ΡŠΡΡΠ½ΠΈΡ‚Π΅ ΠΊΠ²Π°Π½Ρ‚ΠΎΠ²ΡƒΡŽ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½ΠΎΡΡ‚ΡŒ простыми словами',
    YandexGPTModel::YANDEX_GPT,
    [
        'reasoningOptions' => ReasoningOptions::enabledHidden(ReasoningOptions::EFFORT_HIGH)
    ]
);

// ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌ рассуТдСний (явно)
$response = YandexGPT::generateText(
    'ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΊΠ°ΠΊ Π΄Π΅Π»Π°?',
    YandexGPTModel::YANDEX_GPT,
    [
        'reasoningOptions' => ReasoningOptions::disabled()
    ]
);

ИспользованиС с массивом

use Tigusigalpa\YandexGPT\Laravel\Facades\YandexGPT;
use Tigusigalpa\YandexGPT\Models\YandexGPTModel;

// Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌ рассуТдСний
$response = YandexGPT::generateText(
    'КакиС прСимущСства использования Docker Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅?',
    YandexGPTModel::YANDEX_GPT,
    [
        'reasoningOptions' => [
            'mode' => 'ENABLED_HIDDEN',
            'effort' => 'medium'
        ]
    ]
);

// Волько Ρ€Π΅ΠΆΠΈΠΌ, Π±Π΅Π· указания уровня усилий
$response = YandexGPT::generateText(
    'ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сортировки ΠΏΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠΌ',
    YandexGPTModel::YANDEX_GPT,
    [
        'reasoningOptions' => [
            'mode' => 'ENABLED_HIDDEN'
        ]
    ]
);

ИспользованиС с диалогами

use Tigusigalpa\YandexGPT\Laravel\Facades\YandexGPT;
use Tigusigalpa\YandexGPT\Models\YandexGPTModel;
use Tigusigalpa\YandexGPT\Models\ReasoningOptions;

$messages = [
    [
        'role' => 'system',
        'text' => 'Π’Ρ‹ матСматичСский ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ'
    ],
    [
        'role' => 'user',
        'text' => 'РСши ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅: 2x + 5 = 15'
    ]
];

$response = YandexGPT::generateFromMessages(
    $messages,
    YandexGPTModel::YANDEX_GPT,
    [
        'reasoningOptions' => ReasoningOptions::enabledHidden(ReasoningOptions::EFFORT_MEDIUM),
        'completionOptions' => [
            'temperature' => 0.3,
            'maxTokens' => 1000
        ]
    ]
);

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° использования Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² рассуТдСний

ΠŸΡ€ΠΈ использовании Ρ€Π΅ΠΆΠΈΠΌΠ° рассуТдСний ΠΎΡ‚Π²Π΅Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ количСствС Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… для рассуТдСний:

$response = YandexGPT::generateText(
    'БлоТная матСматичСская Π·Π°Π΄Π°Ρ‡Π°...',
    YandexGPTModel::YANDEX_GPT,
    [
        'reasoningOptions' => ReasoningOptions::enabledHidden(ReasoningOptions::EFFORT_HIGH)
    ]
);

// ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² рассуТдСний
if (isset($response['result']['alternatives'][0]['reasoningTokens'])) {
    $reasoningTokens = $response['result']['alternatives'][0]['reasoningTokens'];
    echo "Использовано Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² для рассуТдСний: {$reasoningTokens}\n";
}

echo $response['result']['alternatives'][0]['message']['text'];

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π Π΅ΠΆΠΈΠΌ рассуТдСний доступСн для ΠΌΠΎΠ΄Π΅Π»ΠΈ YandexGPT Pro ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π΅ количСство Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² запроса.


ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок

<?php

use Tigusigalpa\YandexGPT\Exceptions\AuthenticationException;
use Tigusigalpa\YandexGPT\Exceptions\ApiException;
use Tigusigalpa\YandexGPT\Laravel\Facades\YandexGPT;

try {
    $response = YandexGPT::generateText('ΠŸΡ€ΠΈΠ²Π΅Ρ‚!');
} catch (AuthenticationException $e) {
    // Ошибки Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ (Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ Ρ‚ΠΎΠΊΠ΅Π½, ΠΏΡ€Π°Π²Π° доступа)
    Log::error('YandexGPT Auth Error: ' . $e->getMessage());
} catch (ApiException $e) {
    // Ошибки API (Π½Π΅Π²Π΅Ρ€Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Π»ΠΈΠΌΠΈΡ‚Ρ‹)
    Log::error('YandexGPT API Error: ' . $e->getMessage());
} catch (Exception $e) {
    // Π”Ρ€ΡƒΠ³ΠΈΠ΅ ошибки
    Log::error('YandexGPT Error: ' . $e->getMessage());
}

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ

ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» config/yandexgpt.php:

<?php

return [
    // OAuth Ρ‚ΠΎΠΊΠ΅Π½
    'oauth_token' => env('YANDEX_GPT_OAUTH_TOKEN'),
    
    // ID ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°
    'folder_id' => env('YANDEX_GPT_FOLDER_ID'),
    
    // МодСль ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
    'default_model' => env('YANDEX_GPT_DEFAULT_MODEL', 'yandexgpt-lite'),
    
    // ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
    'default_options' => [
        'temperature' => (float) env('YANDEX_GPT_TEMPERATURE', 0.6),
        'maxTokens' => (int) env('YANDEX_GPT_MAX_TOKENS', 2000),
        'stream' => false,
    ],
    
    // Настройки HTTP ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°
    'http_options' => [
        'timeout' => (int) env('YANDEX_GPT_TIMEOUT', 30),
        'connect_timeout' => (int) env('YANDEX_GPT_CONNECT_TIMEOUT', 10),
    ],
];

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

1. Π§Π°Ρ‚-Π±ΠΎΡ‚ для Laravel с историСй Π΄ΠΈΠ°Π»ΠΎΠ³Π°

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Tigusigalpa\YandexGPT\Laravel\Facades\YandexGPT;
use Tigusigalpa\YandexGPT\Models\YandexGPTModel;

class ChatBotController extends Controller
{
    public function chat(Request $request)
    {
        $request->validate([
            'message' => 'required|string|max:1000',
            'history' => 'array'
        ]);

        $messages = $request->input('history', []);
        $messages[] = [
            'role' => 'user',
            'text' => $request->input('message')
        ];

        try {
            $response = YandexGPT::generateFromMessages(
                $messages,
                YandexGPTModel::YANDEX_GPT_LITE
            );

            $botResponse = $response['result']['alternatives'][0]['message']['text'];
            
            $messages[] = [
                'role' => 'assistant',
                'text' => $botResponse
            ];

            return response()->json([
                'success' => true,
                'response' => $botResponse,
                'history' => $messages
            ]);

        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'error' => 'ΠŸΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка ΠΏΡ€ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π°'
            ], 500);
        }
    }
}

2. ГСнСрация SEO-ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°

<?php

use Tigusigalpa\YandexGPT\Laravel\Facades\YandexGPT;
use Tigusigalpa\YandexGPT\Models\YandexGPTModel;

class ContentGenerator
{
    public function generateArticle(string $topic, int $length = 1000): string
    {
        $prompt = "Напиши ΡΡ‚Π°Ρ‚ΡŒΡŽ Π½Π° Ρ‚Π΅ΠΌΡƒ '{$topic}'. Π”Π»ΠΈΠ½Π° ΡΡ‚Π°Ρ‚ΡŒΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ {$length} слов. Π’ΠΊΠ»ΡŽΡ‡ΠΈ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.";

        $response = YandexGPT::generateText(
            $prompt,
            YandexGPTModel::YANDEX_GPT,
            [
                'completionOptions' => [
                    'temperature' => 0.7,
                    'maxTokens' => $length * 2 // ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 2 Ρ‚ΠΎΠΊΠ΅Π½Π° Π½Π° слово
                ]
            ]
        );

        return $response['result']['alternatives'][0]['message']['text'];
    }

    public function generateSEODescription(string $content): string
    {
        $prompt = "Π‘ΠΎΠ·Π΄Π°ΠΉ SEO-описаниС (meta description) для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°. ОписаниС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎ 160 символов:\n\n{$content}";

        $response = YandexGPT::generateText($prompt, YandexGPTModel::YANDEX_GPT_LITE);

        return $response['result']['alternatives'][0]['message']['text'];
    }

    public function generateProductDescription(array $productData): string
    {
        $prompt = "Π‘ΠΎΠ·Π΄Π°ΠΉ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ описаниС Ρ‚ΠΎΠ²Π°Ρ€Π° для ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-ΠΌΠ°Π³Π°Π·ΠΈΠ½Π°:\n";
        $prompt .= "НазваниС: {$productData['name']}\n";
        $prompt .= "Π₯арактСристики: " . implode(', ', $productData['features']) . "\n";
        $prompt .= "ОписаниС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ SEO-ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова ΠΈ ΠΏΡ€ΠΈΠ·Ρ‹Π² ΠΊ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ.";

        $response = YandexGPT::generateText(
            $prompt,
            YandexGPTModel::YANDEX_GPT,
            [
                'completionOptions' => [
                    'temperature' => 0.6,
                    'maxTokens' => 500
                ]
            ]
        );

        return $response['result']['alternatives'][0]['message']['text'];
    }

    public function generateBlogPost(string $topic, array $keywords): array
    {
        $keywordsList = implode(', ', $keywords);
        $prompt = "Напиши SEO-ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΡΡ‚Π°Ρ‚ΡŒΡŽ для Π±Π»ΠΎΠ³Π° Π½Π° Ρ‚Π΅ΠΌΡƒ: '{$topic}'.\n";
        $prompt .= "ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова: {$keywordsList}.\n";
        $prompt .= "Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°: Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ H1, Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅, 3-4 ΠΏΠΎΠ΄Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° H2 с ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ΠΎΠΌ, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.\n";
        $prompt .= "Π”Π»ΠΈΠ½Π°: 1500-2000 слов.";

        $response = YandexGPT::generateText(
            $prompt,
            YandexGPTModel::YANDEX_GPT,
            [
                'completionOptions' => [
                    'temperature' => 0.7,
                    'maxTokens' => 3000
                ],
                'reasoningOptions' => ReasoningOptions::enabledHidden(ReasoningOptions::EFFORT_MEDIUM)
            ]
        );

        $content = $response['result']['alternatives'][0]['message']['text'];
        $metaDescription = $this->generateSEODescription($content);

        return [
            'content' => $content,
            'meta_description' => $metaDescription,
            'keywords' => $keywords
        ];
    }
}

3. Автоматизация ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²

<?php

use Tigusigalpa\YandexGPT\Laravel\Facades\YandexGPT;
use Tigusigalpa\YandexGPT\Models\YandexGPTModel;

class CustomerSupportBot
{
    private array $knowledgeBase;

    public function __construct()
    {
        $this->knowledgeBase = [
            'Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°Ρ…, услугах, ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ… Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΈ Ρ‚.Π΄.'
        ];
    }

    public function answerQuestion(string $question, array $conversationHistory = []): string
    {
        $systemPrompt = "Π’Ρ‹ β€” ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ слуТбы ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Π±Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ для ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ²:\n";
        $systemPrompt .= implode("\n", $this->knowledgeBase);

        $messages = [
            ['role' => 'system', 'text' => $systemPrompt],
            ...$conversationHistory,
            ['role' => 'user', 'text' => $question]
        ];

        $response = YandexGPT::generateFromMessages(
            $messages,
            YandexGPTModel::ALICE_AI,
            [
                'completionOptions' => [
                    'temperature' => 0.5,
                    'maxTokens' => 1000
                ]
            ]
        );

        return $response['result']['alternatives'][0]['message']['text'];
    }
}

4. Анализ Ρ‚ΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΎΡ‚Π·Ρ‹Π²ΠΎΠ²

<?php

use Tigusigalpa\YandexGPT\Laravel\Facades\YandexGPT;
use Tigusigalpa\YandexGPT\Models\YandexGPTModel;

class ReviewAnalyzer
{
    public function analyzeSentiment(string $review): array
    {
        $prompt = "ΠŸΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉ Ρ‚ΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΎΡ‚Π·Ρ‹Π²Π° ΠΈ Π²Π΅Ρ€Π½ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON:\n";
        $prompt .= "ΠžΡ‚Π·Ρ‹Π²: {$review}\n\n";
        $prompt .= "Π€ΠΎΡ€ΠΌΠ°Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚Π°: {\"sentiment\": \"positive/negative/neutral\", \"score\": 0-10, \"key_points\": [\"ΠΏΡƒΠ½ΠΊΡ‚1\", \"ΠΏΡƒΠ½ΠΊΡ‚2\"]}";

        $response = YandexGPT::generateText(
            $prompt,
            YandexGPTModel::YANDEX_GPT,
            [
                'completionOptions' => [
                    'temperature' => 0.3,
                    'maxTokens' => 500
                ]
            ]
        );

        $result = $response['result']['alternatives'][0]['message']['text'];
        return json_decode($result, true) ?? [];
    }

    public function generateResponse(string $review, string $sentiment): string
    {
        $prompt = "Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠΉ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° ΠΎΡ‚Π·Ρ‹Π² ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (Ρ‚ΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: {$sentiment}):\n{$review}";

        $response = YandexGPT::generateText(
            $prompt,
            YandexGPTModel::YANDEX_GPT,
            [
                'completionOptions' => [
                    'temperature' => 0.7,
                    'maxTokens' => 300
                ]
            ]
        );

        return $response['result']['alternatives'][0]['message']['text'];
    }
}

5. ГСнСрация ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ для ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°

<?php

use Tigusigalpa\YandexGPT\Laravel\Facades\YandexGPT;
use Tigusigalpa\YandexGPT\Models\YandexGPTModel;

class ContentImageGenerator
{
    public function generateArticleImage(string $articleTitle, string $articleSummary): string
    {
        // Π‘Π½Π°Ρ‡Π°Π»Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠΌΠΏΡ‚ для изобраТСния
        $promptGeneration = "Π‘ΠΎΠ·Π΄Π°ΠΉ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠΌΠΏΡ‚ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ изобраТСния ΠΊ ΡΡ‚Π°Ρ‚ΡŒΠ΅:\n";
        $promptGeneration .= "Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ: {$articleTitle}\n";
        $promptGeneration .= "ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ содСрТаниС: {$articleSummary}\n";
        $promptGeneration .= "ΠŸΡ€ΠΎΠΌΠΏΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ, ΡΡ‚ΠΈΠ»ΡŒ, Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρƒ.";

        $textResponse = YandexGPT::generateText(
            $promptGeneration,
            YandexGPTModel::YANDEX_GPT_LITE
        );

        $imagePrompt = $textResponse['result']['alternatives'][0]['message']['text'];

        // Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
        $result = YandexGPT::generateImage($imagePrompt);
        
        // БохраняСм ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
        $filename = 'article_' . time() . '.jpg';
        $path = storage_path('app/public/images/' . $filename);
        file_put_contents($path, base64_decode($result['image_base64']));

        return $filename;
    }
}

ВСстированиС

composer install
composer test
composer test-coverage

Troubleshooting

"Class 'YandexGPTClient' not found" β€” composer show tigusigalpa/yandexgpt-php, Π·Π°Ρ‚Π΅ΠΌ composer dump-autoload.

"OAuth Ρ‚ΠΎΠΊΠ΅Π½ Π½Π΅ настроСн" β€” ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ YANDEX_GPT_OAUTH_TOKEN Π² .env, Π·Π°Ρ‚Π΅ΠΌ php artisan config:clear.

401 Unauthorized β€” ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ OAuth Ρ‚ΠΎΠΊΠ΅Π½ (дСйствуСт 1 Π³ΠΎΠ΄) ΠΈ ΠΏΡ€Π°Π²Π° доступа ΠΊ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ.

403 Forbidden β€” Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Ρ€ΠΎΠ»ΡŒ ai.languageModels.user Π½Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅.

Connection timeout β€” ΡƒΠ²Π΅Π»ΠΈΡ‡ΡŒΡ‚Π΅ timeout Π² config/yandexgpt.php.


Conversations API

SDK ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Conversations API для управлСния Π΄ΠΈΠ°Π»ΠΎΠ³Π°ΠΌΠΈ ΠΈ ΠΈΡ… элСмСнтами Π½Π° сторонС сСрвСра Yandex Cloud.

ДокумСнтация: REST: Conversations

ДоступныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

ΠœΠ΅Ρ‚ΠΎΠ΄ ОписаниС
create() Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π΄ΠΈΠ°Π»ΠΎΠ³Π°
get() ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³Π° ΠΏΠΎ ID
update() ОбновлСниС ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΈΠ°Π»ΠΎΠ³Π°
delete() Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³Π°
createItems() Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнтов Π² Π΄ΠΈΠ°Π»ΠΎΠ³
listItems() ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ списка элСмСнтов Π΄ΠΈΠ°Π»ΠΎΠ³Π°
getItem() ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта Π΄ΠΈΠ°Π»ΠΎΠ³Π°
deleteItem() Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнта ΠΈΠ· Π΄ΠΈΠ°Π»ΠΎΠ³Π°

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³Π°ΠΌΠΈ

use Tigusigalpa\YandexGPT\YandexGPTClient;

$client = new YandexGPTClient('your_oauth_token', 'your_folder_id');

// Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³Π° с ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ
$conversation = $client->conversations()->create([
    'title' => 'ВСхничСская ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ°',
    'user_id' => '12345',
]);

$conversationId = $conversation['id'];
echo "Conversation ID: " . $conversationId . "\n";
echo "Created at: " . $conversation['created_at'] . "\n";

// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³Π°
$conversation = $client->conversations()->get($conversationId);

// ОбновлСниС ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΈΠ°Π»ΠΎΠ³Π°
$conversation = $client->conversations()->update($conversationId, [
    'title' => 'ΠžΠ±Π½ΠΎΠ²Π»Ρ‘Π½Π½Ρ‹ΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ',
    'status' => 'active',
]);

// Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³Π°
$result = $client->conversations()->delete($conversationId);
// $result['deleted'] === true

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнтами Π΄ΠΈΠ°Π»ΠΎΠ³Π°

use Tigusigalpa\YandexGPT\YandexGPTClient;

$client = new YandexGPTClient('your_oauth_token', 'your_folder_id');
$conversationId = 'conv_123';

// Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнтов Π² Π΄ΠΈΠ°Π»ΠΎΠ³
$items = $client->conversations()->createItems($conversationId, [
    [
        'type' => 'message',
        'role' => 'user',
        'content' => [['type' => 'input_text', 'text' => 'ΠŸΡ€ΠΈΠ²Π΅Ρ‚! Как Π΄Π΅Π»Π°?']],
    ],
    [
        'type' => 'message',
        'role' => 'assistant',
        'content' => [['type' => 'output_text', 'text' => 'ЗдравствуйтС! Всё ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ, Ρ‡Π΅ΠΌ ΠΌΠΎΠ³Ρƒ ΠΏΠΎΠΌΠΎΡ‡ΡŒ?']],
    ],
]);

// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ списка элСмСнтов (с ΠΏΠ°Π³ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ)
$items = $client->conversations()->listItems($conversationId, 20, 'asc');
foreach ($items['data'] as $item) {
    echo $item['role'] . ': ' . ($item['content'][0]['text'] ?? '') . "\n";
}

// ΠŸΠ°Π³ΠΈΠ½Π°Ρ†ΠΈΡ: ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ страницы
if ($items['has_more']) {
    $nextPage = $client->conversations()->listItems(
        $conversationId,
        20,
        'asc',
        $items['last_id']
    );
}

// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта
$item = $client->conversations()->getItem($conversationId, 'item_123');

// Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнта
$client->conversations()->deleteItem($conversationId, 'item_123');

ИспользованиС Ρ‡Π΅Ρ€Π΅Π· Laravel Facade

use Tigusigalpa\YandexGPT\Laravel\Facades\YandexGPT;

// Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³Π°
$conversation = YandexGPT::conversations()->create(['title' => 'Новый Π΄ΠΈΠ°Π»ΠΎΠ³']);

// Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ сообщСний
YandexGPT::conversations()->createItems($conversation['id'], [
    [
        'type' => 'message',
        'role' => 'user',
        'content' => [['type' => 'input_text', 'text' => 'Вопрос ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ']],
    ],
]);

// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ истории
$history = YandexGPT::conversations()->listItems($conversation['id'], 50, 'asc');

ГСнСрация ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ (YandexART)

YandexART Hero Image

РСсурсы:

SDK ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ YandexART. Доступны Ρ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

  • generateImageAsync β€” ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° запроса Π½Π° Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ
  • getOperation β€” ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° статуса ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ Π΅Ρ‘ ID
  • generateImage β€” синхронная ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠ° с ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°

ВрСбования доступа:

  • НСобходимо Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Ρ€ΠΎΠ»ΡŒ ai.imageGeneration.user Π½Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ (Folder), Π³Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ гСнСрация ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ
  • Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ тСкстовых ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ трСбуСтся Ρ€ΠΎΠ»ΡŒ ai.languageModels.user

МодСль YandexART:

  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ модСль yandex-art/latest с URI Π²ΠΈΠ΄Π° art://<folder_id>/yandex-art/latest

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования

  1. Базовая асинхронная гСнСрация:
use Tigusigalpa\YandexGPT\YandexGPTClient;

$client = new YandexGPTClient(env('YANDEX_GPT_OAUTH_TOKEN'), env('YANDEX_GPT_FOLDER_ID'));

// Π‘Ρ‚Ρ€ΠΎΠΊΠ° запроса ΠΈΠ»ΠΈ массив сообщСний (см. Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π½ΠΈΠΆΠ΅)
$operation = $client->generateImageAsync('Π‘ΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π±Π΅Ρ€Π΅Π³ Ρƒ моря Π½Π° Π·Π°ΠΊΠ°Ρ‚Π΅, ΡΡ‚ΠΈΠ»ΡŒ Тивопись');
$operationId = $operation['id'];

// ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° статуса ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ
$op = $client->getOperation($operationId);
if (!empty($op['done']) && empty($op['error'])) {
    $imageBase64 = $op['response']['image'] ?? null;
    if ($imageBase64) {
        file_put_contents('art.jpg', base64_decode($imageBase64));
    }
}
  1. Бинхронная гСнСрация с ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°:
use Tigusigalpa\YandexGPT\YandexGPTClient;

$client = new YandexGPTClient(env('YANDEX_GPT_OAUTH_TOKEN'), env('YANDEX_GPT_FOLDER_ID'));

$result = $client->generateImage('ЀутуристичСский Π³ΠΎΡ€ΠΎΠ΄ Π½ΠΎΡ‡ΡŒΡŽ, Π½Π΅ΠΎΠ½ΠΎΠ²Ρ‹Π΅ ΠΎΠ³Π½ΠΈ');
file_put_contents('city.jpg', base64_decode($result['image_base64']));
echo '<img src="data:image/png;base64,'.$response['image_base64'].'">';

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ сгСнСрированного изобраТСния Омска

ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Омска

  1. ИспользованиС Ρ‡Π΅Ρ€Π΅Π· Laravel Facade:
use Tigusigalpa\YandexGPT\Laravel\Facades\YandexGPT;

$result = YandexGPT::generateImage('Π’Ρ‘ΠΏΠ»Ρ‹ΠΉ Π΄ΠΎΠΌΠΈΠΊ Ρƒ ΠΎΠ·Π΅Ρ€Π° Π·ΠΈΠΌΠΎΠΉ, ΡΡ‚ΠΈΠ»ΡŒ Π°ΠΊΠ²Π°Ρ€Π΅Π»ΡŒ');
file_put_contents('lake.jpg', base64_decode($result['image_base64']));
echo '<img src="data:image/png;base64,'.$response['image_base64'].'">';
  1. Prompt chaining (YandexGPT β†’ YandexART):
use Tigusigalpa\YandexGPT\YandexGPTClient;
use Tigusigalpa\YandexGPT\Models\YandexGPTModel;

$client = new YandexGPTClient(env('YANDEX_GPT_OAUTH_TOKEN'), env('YANDEX_GPT_FOLDER_ID'));

// Π‘Π½Π°Ρ‡Π°Π»Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ тСкстовый ΠΏΡ€ΠΎΠΌΠΏΡ‚ Ρ‡Π΅Ρ€Π΅Π· YandexGPT
$textResponse = $client->generateText(
    "Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠΉ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ, Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠΌΠΏΡ‚ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ изобраТСния Π² стилС Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ Тивописи Π½Π° Ρ‚Π΅ΠΌΡƒ: 'ΠŸΠΎΠ»Π΅Ρ‚ Π½Π°Π΄ альпийскими Π³ΠΎΡ€Π°ΠΌΠΈ'. Π£ΠΊΠ°ΠΆΠΈ ΡΡ‚ΠΈΠ»ΡŒ, Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρƒ ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ Π΄Π΅Ρ‚Π°Π»ΠΈ.",
    YandexGPTModel::YANDEX_GPT_LITE
);

$generatedPrompt = $textResponse['result']['alternatives'][0]['message']['text'] ?? null;

// Π—Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΠΉΡΡ ΠΏΡ€ΠΎΠΌΠΏΡ‚ Π² YandexART
if ($generatedPrompt) {
    $result = $client->generateImage($generatedPrompt);
    file_put_contents('alps.jpg', base64_decode($result['image_base64']));
}

Π€ΠΎΡ€ΠΌΠ°Ρ‚ сообщСний для YandexART

ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π»ΠΈΠ±ΠΎ строку (ΠΎΠ΄ΠΈΠ½ запрос), Π»ΠΈΠ±ΠΎ массив сообщСний. КаТдоС сообщСниС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ:

  • строкой: 'описаниС сцСны'
  • массивом: ['text' => 'описаниС', 'weight' => 1]

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ массива сообщСний:

$messages = [
    ['text' => 'Π“ΠΎΡ€Ρ‹ Π½Π° рассвСтС', 'weight' => 1],
    ['text' => 'ΠΎΠ·Π΅Ρ€ΠΎ Π½Π° ΠΏΠ΅Ρ€Π΅Π΄Π½Π΅ΠΌ ΠΏΠ»Π°Π½Π΅', 'weight' => 1],
    ['text' => 'ΡΡ‚ΠΈΠ»ΡŒ импрСссионизм', 'weight' => 1],
];
$operation = $client->generateImageAsync($messages);

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ generationOptions

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ generationOptions (нСобязатСлСн) позволяСт Π·Π°Π΄Π°Ρ‚ΡŒ настройки Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ. Бписок доступных ΠΎΠΏΡ†ΠΈΠΉ зависит ΠΎΡ‚ API YandexART. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΎΠΏΡ†ΠΈΠΉ:

$generationOptions = [
    // ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° изобраТСния ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° (ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚Π΅ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ)
    // @link https://yandex.cloud/ru/docs/ai-studio/quickstart/yandexart#generate-text
    // 'mimeType' => 'image/jpeg',
    // 'size' => ['width' => 1024, 'height' => 1024],
    // 'aspectRatio' => ['widthRatio' => 16, 'heightRatio' => 9],
    // 'seed' => 1863,
];
$operation = $client->generateImageAsync('ОписаниС сцСны', $generationOptions);

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ApiException ΠΈ AuthenticationException. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠΉΡ‚Π΅ ΠΏΠΎΠ»Π΅ error Π² ΠΎΡ‚Π²Π΅Ρ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ поля response.image ΠΏΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ.


ВрСбования

  • PHP 8.0 ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅
  • Laravel 8.0 ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅ (для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с Laravel)
  • Guzzle HTTP 7.0 ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅

ЛицСнзия

Π­Ρ‚ΠΎΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ MIT. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ LICENSE.


Бсылки


УчастиС Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅

ΠœΡ‹ привСтствуСм участиС Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅! ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с руководством ΠΏΠΎ ΡƒΡ‡Π°ΡΡ‚ΠΈΡŽ.


Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ

Если Π²Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈ ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π² бСзопасности, поТалуйста, ΠΎΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ email Π½Π° sovletig@gmail.com вмСсто создания issue.


Автор

Igor Sazonov β€” sovletig@gmail.com

About

πŸš€ YandexGPT PHP - ΠΌΠ½ΠΎΠ³ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с ЯндСкс AI API. ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ YandexGPT ΠΈ YandexART ΠΊ PHP-прилоТСниям с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Laravel. ГСнСрация тСкста, Ρ‡Π°Ρ‚-Π±ΠΎΡ‚Ρ‹, AI-ассистСнты, Alice AI. Полная докумСнтация, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π°. Быстрый старт с ЯндСкс Cloud AI.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages