PHPackages                             talismanfr/gigachat-php-sdk - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. talismanfr/gigachat-php-sdk

ActiveLibrary[API Development](/categories/api)

talismanfr/gigachat-php-sdk
===========================

GigaChat API SDK for PHP projects

v1.0.0(1y ago)8414—0%1[1 issues](https://github.com/TalismanFR/gigachat-php-sdk/issues)MITPHPPHP &gt;=8.3

Since Dec 15Pushed 1y ago3 watchersCompare

[ Source](https://github.com/TalismanFR/gigachat-php-sdk)[ Packagist](https://packagist.org/packages/talismanfr/gigachat-php-sdk)[ RSS](/packages/talismanfr-gigachat-php-sdk/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (1)Dependencies (10)Versions (2)Used By (0)

GigaChat PHP SDK
================

[](#gigachat-php-sdk)

PHP API SDK для [GigaChat](https://developers.sber.ru/docs/ru/gigachat/overview/).

Установка
---------

[](#установка)

Установите последнюю версию

```
$ composer require talismanfr/gigachat-php-sdk
```

Требования
----------

[](#требования)

PHP &gt;= 8.3

Как использовать
----------------

[](#как-использовать)

### Если необходимо просто получить не обработанный ответ от апи

[](#если-необходимо-просто-получить-не-обработанный-ответ-от-апи)

```
$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();
```

> output

```
{
  "choices": [
    {
      "message": {
        "content": "На поле должно быть 11 игроков от каждой команды.",
        "role": "assistant"
      },
      "index": 0,
      "finish_reason": "stop"
    }
  ],
  "created": 1726261876,
  "model": "GigaChat-Plus:3.1.25.3",
  "object": "chat.completion",
  "usage": {
    "prompt_tokens": 24,
    "completion_tokens": 13,
    "total_tokens": 37
  }
}
```

### Чтобы использовать на полную возможность библиотеки и вести диалог с GPT

[](#чтобы-использовать-на-полную-возможность-библиотеки-и-вести-диалог-с-gpt)

```
$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);
```

> output

```
{
  "model": "GigaChat-Plus",
  "messages": [
    {
      "role": "system",
      "content": "Ты эксперт в футболе.",
      "function_state_id": null
    },
    {
      "role": "user",
      "content": "Сколько должно быть игроков на поле?",
      "function_state_id": null
    },
    {
      "role": "assistant",
      "content": "На поле должно быть 11 игроков от каждой команды.",
      "function_state_id": null
    },
    {
      "role": "user",
      "content": "Может быть что на поле меньше игроков?",
      "function_state_id": null
    },
    {
      "role": "assistant",
      "content": "Да, если команда получает предупреждение (желтую или красную карточку), то игрок должен покинуть поле. В этом случае команда может продолжить игру с десятью или девятью игроками.",
      "function_state_id": null
    }
  ],
  "temperature": 0.2,
  "max_tokens": 1024,
  "top_p": 0.1,
  "repetition_penalty": 1
}
```

### Использование функций

[](#использование-функций)

```
$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);
```

> output

```
{
	"model": "GigaChat-Plus",
	"messages": [
		{
			"role": "user",
			"content": "Кто играет под десятым номером в металлурге-кузбасс?",
			"function_state_id": null,
			"function_call": null,
			"name": null
		},
		{
			"role": "assistant",
			"content": "",
			"function_state_id": null,
			"function_call": {
				"name": "player_number_name",
				"arguments": {
					"player_number": 10,
					"soccer_club_name": "Металлург-Кузбасс"
				}
			},
			"name": null
		},
		{
			"role": "function",
			"content": "{\"player_number_name\":\"Всеволод Михайлович Бобров\"}",
			"function_state_id": null,
			"function_call": null,
			"name": "player_number_name"
		},
		{
			"role": "assistant",
			"content": "Под десятым номером в \"Металлург-Кузбасс\" играет Всеволод Михайлович Бобров.",
			"function_state_id": null,
			"function_call": null,
			"name": null
		}
	],
	"temperature": 0.2,
	"max_tokens": 1024,
	"top_p": 0.1,
	"repetition_penalty": 1,
	"function_call": "auto",
	"functions": [
		{
			"name": "player_number_name",
			"parameters": {
				"properties": {
					"soccer_club_name": {
						"type": "string",
						"description": "Название футбольного клуба"
					},
					"player_number": {
						"type": "integer",
						"description": "Номер игрока в футбольном клубе"
					},
					"soccer_league_name": {
						"type": "string",
						"description": "Название футбольной лиги",
						"enum": [
							"Российская Премьер-лига",
							"Первая лига",
							"Вторая лига"
						]
					}
				},
				"type": "object",
				"required": [
					"soccer_club_name",
					"player_number"
				]
			},
			"description": "Возвращает фамилию имя и отчество игрока играющего в футбольном клубе под определенным номером",
			"few_shot_examples": [
				{
					"request": "Кто играет в зените под первым номером?",
					"params": {
						"soccer_club_name": "Зенит",
						"player_number": 1
					}
				}
			]
		}
	]
}
```

### Handler для автоматической обработки function\_call

[](#handler-для-автоматической-обработки-function_call)

Возможно использовать свои обработчики для каждого ответа GPT с `function_call`. В либе для этого используется `psr/event-dispatcher`.

Если приходит ответ от GPT с запросом на вызов функции то при наличии `EventDispatcher` в объекте `Dialog` кидается событие `FunctionCallEvent`. На это событие можно подписаться любым удобным вам способом, тем самым обеспечив обработку функции.

Ниже и в тестах приведен пример с использованием `symfony/event-dispatcher`.

```
// ... 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);
        }
    }
}
```

Работа с файловым хранилищем
----------------------------

[](#работа-с-файловым-хранилищем)

В разделе документации

[Здесь](docs/FILES.MD)

Работа с историей чата
----------------------

[](#работа-с-историей-чата)

[Здесь](docs/HISTORY.MD)

Tests
-----

[](#tests)

Чтобы запустить интеграционные тесты укажите свои client\_id и secret\_id в файле `phpunit.xml.dist`

```

```

###  Health Score

34

—

LowBetter than 77% of packages

Maintenance38

Infrequent updates — may be unmaintained

Popularity22

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity53

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 87% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

511d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/84d5915086150aaa81d1a2672e72787b4e72c6a54a109ecbdf3e0741c42dbdcd?d=identicon)[talismanfr](/maintainers/talismanfr)

---

Top Contributors

[![TalismanFR](https://avatars.githubusercontent.com/u/2109722?v=4)](https://github.com/TalismanFR "TalismanFR (20 commits)")[![aVadim483](https://avatars.githubusercontent.com/u/2246758?v=4)](https://github.com/aVadim483 "aVadim483 (3 commits)")

---

Tags

gigachatgigachat phpgigachat php apigigachat sdkgigachat sdk phpgigachat api client

###  Code Quality

TestsPHPUnit

Static AnalysisPsalm, Rector

Type Coverage Yes

### Embed Badge

![Health badge](/badges/talismanfr-gigachat-php-sdk/health.svg)

```
[![Health](https://phpackages.com/badges/talismanfr-gigachat-php-sdk/health.svg)](https://phpackages.com/packages/talismanfr-gigachat-php-sdk)
```

###  Alternatives

[sylius/sylius

E-Commerce platform for PHP, based on Symfony framework.

8.4k5.6M650](/packages/sylius-sylius)[irazasyed/telegram-bot-sdk

The Unofficial Telegram Bot API PHP SDK

3.3k4.5M84](/packages/irazasyed-telegram-bot-sdk)[shopware/platform

The Shopware e-commerce core

3.3k1.5M3](/packages/shopware-platform)[wheelpros/fitment-platform-api

Magento 2 (Open Source)

12.1k1.2k](/packages/wheelpros-fitment-platform-api)[tencentcloud/tencentcloud-sdk-php

TencentCloudApi php sdk

3731.2M42](/packages/tencentcloud-tencentcloud-sdk-php)[shopware/core

Shopware platform is the core for all Shopware ecommerce products.

595.2M386](/packages/shopware-core)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
