1. Go to this page and download the library: Download talismanfr/gigachat-php-sdk library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
talismanfr / gigachat-php-sdk example snippets
$auth = new GigaChatOAuth(
'CLIENT_ID',
'SECRET_ID',
false, // отключаем валидацию https
Scope::GIGACHAT_API_PERS
);
// создаем экземпляр АПИ
$api = new GigaChatApi($auth);
$factory = new DialogFactory();
// формируем объект диалога с system и user промтом. Дефолтные значения настроек.
$dialog = $factory->dialogBase('Ты эксперт в футболе.', 'Сколько должно быть игроков на поле?', Model::createGigaChatPlus());
$response = $api->completions($dialog);
echo $response->getBody()->__toString();
$auth = new GigaChatOAuth(
'CLIENT_ID',
'SECRET_ID',
false, // отключаем валидацию https
Scope::GIGACHAT_API_PERS
);
// создаем экземпляр АПИ
$api = new GigaChatApi($auth);
// создаем экзепляр сервиса для работы с апи GigaChat
$service = new GigaChatService($api, new GigaChatMapper());
// формируем стартовый диалог
$messages = [
new Message(0, 'Ты эксперт в футболе.', Role::SYSTEM, null),
new Message(1, 'Сколько должно быть игроков на поле?', Role::USER, null),
];
// при создания объета диалога можно указать температуру, top_p, а так же зарегистрировать функции
$dialog = Dialog(
Model::createGigaChatPlus(),
new Messages(...$messages)
);
// делаем запрос к апи, в ответе получаем объект
// `Talismanfr\GigaChat\Service\Response\CompletionResponse`
$result = $service->completions($dialog);
echo $result->->choices[0]->message->content;
// output:На поле должно быть 11 игроков от каждой команды.
// в объект $dialog добавил ответ от GPT и вы можете продолжить диалог
$dialog->addMessage(new Message(0, 'Может быть что на поле меньше игроков?', Role::USER));
$service->completions($dialog);
// как и в превом запросе, ответ сразу смапится в объект $dialog
// вы можете получить список всех сообщений в рамках текущего контекста
/** @var \Talismanfr\GigaChat\Domain\VO\Message[] $messages */
$messages = $dialog->getMessages()->getMessages();
echo json_encode($dialog);
$factory = new DialogFactory();
$auth = new GigaChatOAuth(
'CLIENT_ID',
'SECRET_ID',
false, // отключаем валидацию https
Scope::GIGACHAT_API_PERS
);
// создаем экземпляр АПИ
$api = new GigaChatApi($auth);
// создаем экзепляр сервиса для работы с апи GigaChat
$service = new GigaChatService($api, new GigaChatMapper());
// формируем стартовый диалог
$messages = [
new Message(0, 'Ты эксперт в футболе.', Role::SYSTEM, null),
];
// при создания объета диалога можно указать температуру, top_p, а так же зарегистрировать функции
$dialog = Dialog(
Model::createGigaChatPlus(),
new Messages(...$messages)
);
// Создаем объект функции и добавляем к диалогу
$function = $factory->functionModel('player_number_name',
new FunctionParameters(
new FunctionProperties(
new FunctionProperty('soccer_club_name', 'string', 'Название футбольного клуба', true),
new FunctionProperty('player_number', 'integer', 'Номер игрока в футбольном клубе', true),
new FunctionProperty('soccer_league_name', 'string', 'Название футбольной лиги', false, [
'Российская Премьер-лига',
'Первая лига',
'Вторая лига',
]),
)
),
'Возвращает фамилию имя и отчество игрока играющего в футбольном клубе под определенным номером',
[
new FewShotExample('Кто играет в зените под первым номером?', ['soccer_club_name' => 'Зенит', 'player_number' => 1])
]
);
$dialog->addFunction($function);
$dialog->addMessage(new Message(0, 'Кто играет под десятым номером в металлурге-кузбасс?'));
$result = $service->completions($dialog);
// получаем последнее сообщение в диалоге и если это вызов функции
// то buildFunctionResult вернет сообщение для ответа на функцию
// так же можете получить объект Talismanfr\GigaChat\Domain\VO\FunctionCall из $result->choices[0]->message->function_call
$message = $dialog->getMessages()->getLastMessage();
$messageFunctionResponse = $message->buildFunctionResult(
json_encode(['player_number_name' => 'Всеволод Михайлович Бобров'], JSON_UNESCAPED_UNICODE)
);
// добавляем в диалог ответ на функцию и снова обращаемся к GPT
$dialog->addMessage($messageFunctionResponse);
$result = $service->completions($dialog);
// новое сообщение уже содержит ответ от GPT с использованием ответа на нашу функцию
$message = $dialog->getMessages()->getLastMessage();
echo $message->getContent();
// output: Под десятым номером в "Металлург-Кузбасс" играет Всеволод Михайлович Бобров.
// Полная структура диалога в итоге будет выглядеть так
echo json_encode($dialog);
// ... previous build $dialog and functions property
// передаем в диалог экземпляр EventDispatcher (это можно сделать и при создании диалог через конструктор)
$ed = new EventDispatcher();
$dialog->setEventDispatcher($ed);
// добавляем к диспечеру событий обработчик
$ed->addSubscriber(new FunctionCallSubscriber());
// обращаемся к GPT
$service->completions($dialog);
// если gigachat вернул function_call то подписчик автоматически выполнится
class FunctionCallSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return [FunctionCallEvent::class => 'functionCall'];
}
function functionCall(FunctionCallEvent $event)
{
$dialog = $event->getDialog();
$function_name = $event->getMessageFunctionCall()->getFunctionCall()->getName();
// если это нужный нам вызов функции, то формируем ответ и добавляем в диалог
if ($function_name === 'player_number_name') {
$response = $event->getMessageFunctionCall()->buildFunctionResult(json_encode(['player_number_name' => 'Иванов Иван Иванович']));
$dialog->addMessage($response);
}
}
}