Π―Π·ΡΠΊ: Π ΡΡΡΠΊΠΈΠΉ | 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ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ°ΠΊΠ΅Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ»ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ:
- ΠΠ»ΠΎΠ½ΠΈΡΡΠΉΡΠ΅ ΠΈΠ»ΠΈ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅Ρ Π² ΠΏΠ°ΠΏΠΊΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°:
# Π ΠΊΠΎΡΠ½Π΅ Π²Π°ΡΠ΅Π³ΠΎ Laravel ΠΏΡΠΎΠ΅ΠΊΡΠ°
mkdir -p packages
cd packages
git clone https://github.com/tigusigalpa/yandexgpt-php.git
# ΠΈΠ»ΠΈ ΡΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ ΠΏΠ°ΠΏΠΊΡ Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠΌ Π² packages/yandexgpt-php- ΠΠΎΠ±Π°Π²ΡΡΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Π² composer.json Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°:
{
"repositories": [
{
"type": "path",
"url": "./packages/yandexgpt-php"
}
],
"require": {
"tigusigalpa/yandexgpt-php": "@dev"
}
}- Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ:
composer install
# ΠΈΠ»ΠΈ Π΅ΡΠ»ΠΈ ΠΏΠ°ΠΊΠ΅Ρ ΡΠΆΠ΅ Π±ΡΠ» ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½
composer update tigusigalpa/yandexgpt-php- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠΈΠΌΠ»ΠΈΠ½ΠΊ Π² vendor:
# Π£Π΄Π°Π»ΠΈΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΠ°ΠΊΠ΅Ρ (Π΅ΡΠ»ΠΈ Π΅ΡΡΡ)
rm -rf vendor/tigusigalpa/yandexgpt-php
# Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠΈΠΌΠ»ΠΈΠ½ΠΊ
ln -s ../../packages/yandexgpt-php vendor/tigusigalpa/yandexgpt-php{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/tigusigalpa/yandexgpt-php.git"
}
],
"require": {
"tigusigalpa/yandexgpt-php": "dev-main"
}
}ΠΠ°ΠΊΠ΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΡΡΡ Π² Laravel Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ Π°Π²ΡΠΎΠ΄ΠΈΡΠΊΠ°Π²Π΅ΡΠΈ. ΠΠΏΡΠ±Π»ΠΈΠΊΡΠΉΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΡΠ°ΠΉΠ»:
php artisan vendor:publish --tag=yandexgpt-configΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ: OAuth-ΡΠΎΠΊΠ΅Π½
ΠΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ OAuth ΡΠΎΠΊΠ΅Π½Π°:
https://oauth.yandex.ru/authorize?response_type=token&client_id=1a6990aa636648e9b2ef855fa7bec2fb
ΠΠΎΠ±Π°Π²ΡΡΠ΅ Π² Π²Π°Ρ .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ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ YandexGPT API Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π³ΠΎΠ² Π² Yandex Cloud. SDK Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΡΠ΅Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΈΠ· Π½ΠΈΡ , Π½ΠΎ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ:
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ: ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ 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"ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ: ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ° ΡΠ΅ΡΡΡΡΠΎΠ² 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
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ: ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ° ΡΠ΅ΡΡΡΡΠΎΠ² 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_IDuse 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'];ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ:
ΠΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π² API Yandex AI Studio
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΡΡΡΠΏΠΎΠΌ Π² Yandex AI Studio
ΠΠ°Π·Π½Π°ΡΠΈΡΡ ΡΠΎΠ»Ρ Π½Π° ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΈΠ»ΠΈ ΠΎΠ±Π»Π°ΠΊΠΎ
ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ»ΠΈ Π½Π° ΠΎΠ±Π»Π°ΠΊΠΎ
ΠΠ±ΡΠ΅ΠΊΡ Subject Π΄Π»Ρ ΠΎΠ±Π»Π°ΠΊΠ°
ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ»ΠΈ Π½Π° ΠΊΠ°ΡΠ°Π»ΠΎΠ³
ΠΠ±ΡΠ΅ΠΊΡ Subject Π΄Π»Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°
ΠΠΎΡΠ°Π³ΠΎΠ²ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π΄Π»Ρ Identity and Access Management
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Π§Π΅ΡΠ΅Π· Π²Π΅Π±-ΠΊΠΎΠ½ΡΠΎΠ»Ρ:
- ΠΡΠΊΡΠΎΠΉΡΠ΅ Yandex Cloud Console
- ΠΡΠ±Π΅ΡΠΈΡΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³
- ΠΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π² ΡΠ°Π·Π΄Π΅Π» "ΠΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ°"
- ΠΠ°ΠΆΠΌΠΈΡΠ΅ "ΠΠ°Π·Π½Π°ΡΠΈΡΡ ΡΠΎΠ»ΠΈ"
- ΠΡΠ±Π΅ΡΠΈΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ ΡΠΎΠ»Ρ
ai.languageModels.user
<?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'];- ΠΡΡΡΡΡΠΉ ΡΡΠ°ΡΡ YandexGPT
- ΠΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π² API
- Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ
- API Foundation Models
- Π’Π°ΡΠΈΡΡ YandexGPT
<?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.
<?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);<?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);Π Π΅ΠΆΠΈΠΌ ΡΠ°ΡΡΡΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΠ°Π·Π±ΠΈΠ²Π°ΡΡ Π·Π°Π΄Π°ΡΡ Π½Π° ΡΡΠ°ΠΏΡ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅ΠΏΠΎΡΠΊΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΡΠΎΡΠ½ΠΎΡΡΠΈ ΠΎΡΠ²Π΅ΡΠΎΠ². ΠΡΠΎΡ ΡΠ΅ΠΆΠΈΠΌ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π΄Π»Ρ Π·Π°Π΄Π°Ρ, ΡΡΠ΅Π±ΡΡΡΠΈΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ°ΡΡΡΠΆΠ΄Π΅Π½ΠΈΠΉ.
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ: Π Π΅ΠΆΠΈΠΌ ΡΠ°ΡΡΡΠΆΠ΄Π΅Π½ΠΈΠΉ Π² Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΌΠΎΠ΄Π΅Π»ΡΡ
ΠΠΎΡΡΡΠΏΠ½ΡΠ΅ ΡΠ΅ΠΆΠΈΠΌΡ:
DISABLED- ΡΠ΅ΠΆΠΈΠΌ ΡΠ°ΡΡΡΠΆΠ΄Π΅Π½ΠΈΠΉ Π²ΡΠΊΠ»ΡΡΠ΅Π½ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ)ENABLED_HIDDEN- ΡΠ΅ΠΆΠΈΠΌ ΡΠ°ΡΡΡΠΆΠ΄Π΅Π½ΠΈΠΉ Π²ΠΊΠ»ΡΡΠ΅Π½, Π½ΠΎ ΡΠ΅ΠΏΠΎΡΠΊΠ° ΡΠ°ΡΡΡΠΆΠ΄Π΅Π½ΠΈΠΉ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² ΠΎΡΠ²Π΅ΡΠ΅
Π£ΡΠΎΠ²Π½ΠΈ ΡΡΠΈΠ»ΠΈΠΉ (effort):
low- ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ Π½Π° ΡΠΊΠΎΡΠΎΡΡΡ ΠΈ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ ΡΠΎΠΊΠ΅Π½ΠΎΠ²medium- Π±Π°Π»Π°Π½Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΊΠΎΡΠΎΡΡΡΡ ΠΈ ΡΠΎΡΠ½ΠΎΡΡΡΡ ΡΠ°ΡΡΡΠΆΠ΄Π΅Π½ΠΈΠΉhigh- ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠ°ΡΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅
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),
],
];<?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);
}
}
}<?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
];
}
}<?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'];
}
}<?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'];
}
}<?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"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.
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'] === trueuse 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');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');Π Π΅ΡΡΡΡΡ:
- ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ: https://yandex.cloud/ru/docs/ai-studio/quickstart/yandexart
- ΠΡΠΏΡΠ°Π²ΠΊΠ° Π·Π°ΠΏΡΠΎΡΠ°
- Π‘Π°ΠΉΡ: https://ya.ru/ai/art
SDK ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ YandexART. ΠΠΎΡΡΡΠΏΠ½Ρ ΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°:
- generateImageAsync β ΠΎΡΠΏΡΠ°Π²ΠΊΠ° Π·Π°ΠΏΡΠΎΡΠ° Π½Π° Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ
- getOperation β ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΡΠ°ΡΡΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎ Π΅Ρ ID
- generateImage β ΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π°Ρ ΠΎΠ±ΡΡΡΠΊΠ° Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ°:
- ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°Π·Π½Π°ΡΠΈΡΡ ΡΠΎΠ»Ρ
ai.imageGeneration.userΠ½Π° ΠΊΠ°ΡΠ°Π»ΠΎΠ³ (Folder), Π³Π΄Π΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ - ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ
ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΡΠ°ΠΊΠΆΠ΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΎΠ»Ρ
ai.languageModels.user
ΠΠΎΠ΄Π΅Π»Ρ YandexART:
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ
yandex-art/latestΡ URI Π²ΠΈΠ΄Π°art://<folder_id>/yandex-art/latest
ΠΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
- ΠΠ°Π·ΠΎΠ²Π°Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π°Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ:
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));
}
}- Π‘ΠΈΠ½Ρ ΡΠΎΠ½Π½Π°Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°:
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'].'">';- ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· 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'].'">';- 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.


