# Документация GigaChat API > Интерфейс для интеграции нейросети GigaChat в ваши продукты и сервисы. # Описание ошибок [source](https://developers.sber.ru/docs/ru/gigachat/api/errors-description.md) На этой странице вы найдете краткое описание ошибок API GigaChat, примеры и причины их возникновения, а также возможные способы решения. ## REST API

Ошибка в параметрах запроса

Возможные причины возникновения ошибки при [получении токена доступа](/ru/gigachat/api/reference/rest/post-token): Проблема Решение Не задан заголовок [RqUID](/ru/gigachat/api/reference/rest/post-token) или форма заголовка не соответствует uuid4.

Добавьте в запрос заголовок RqUID с произвольным идентификатором запроса в формате uuid4.

***

В поле scope не указана версия API, к которой выполняется запрос:

```json { "code": 5, "message": "scope is empty" } ```

Укажите версию API, к которой выполняется запрос:

GIGACHAT\_API\_PERS — доступ для физических лиц.

GIGACHAT\_API\_B2B — доступ для ИП и юридических лиц по предоплате.

GIGACHAT\_API\_CORP — доступ для ИП и юридических лиц по постоплате.

*** Ключ авторизации не соответствует версии API, которая указана в поле scope или не указана версия API: ```json { "code": 7, "message": "scope from db not fully includes consumed scope" } ```

Укажите корректную версию API. Версия API отображается в личном кабинете.

GigaChain по умолчанию работает с версией API для физических лиц — GIGACHAT\_API\_PERS.

Для использования другой версии API явно укажите ее в параметре scope при инициализации объекта GigaChat:

```json llm = GigaChat( credentials="ключ_авторизации", scope="GIGACHAT_API_B2B", model="GigaChat-Pro", ) ```
*** Поле scope содержит невалидные данные: ```json { "code": 1, "message": "scope data format invalid" } ```

Возможно, версия API указана с ошибкой. Проверьте значение поля scope и попробуйте еще раз.

Если ошибка возникает при отправке других POST-запросов, то тело ошибки будет содержать название параметра, который привел к ошибке:

```json { "status": 400, "message": "Id must not be empty" } ```

Ошибка авторизации

Ошибка может возникать при [запросе токена доступа](/ru/gigachat/api/reference/rest/post-token). Проблемы, которые вызывают ошибку: Проблема Решение

Заголовок Authorization содержит некорректные данные:

```json { "code": 4, "message": "Can't decode 'Authorization' header" } ```

Возможно, ключ авторизации содержит опечатку. Укажите корректный ключ авторизации, полученный в личном кабинете и попробуйте снова.

***

Ключ авторизации, который передается в заголовке Authorization не соответствует версии API, заданной в поле scope:

```json { "code": 6, "message": "credentials doesn't match db data" } ```

Перевыпустите ключ авторизации в личном кабинете и попробуйте снова.

В других запросах ошибка может возникать из-за данных, переданных в заголовке Authorization: заголовок пустой или содержит токен доступа, который был создан более 30 минут назад.

Пример: ```json { "status": 401, "message": "Unauthorized" } ``` Для исправления ошибки укажите корректный токен доступа.

Требуется оплатить сервис

Проблема Решение

Закончились токены модели, к которой выполняется запрос.

```json { "status": 402, "message": "Payment Required" } ```

Проверьте лимит токенов модели в личном кабинете и убедитесь, что вы передаете запросы именно в ту модель, у которой закончились токены.

После этого пополните баланс в личном кабинете.

Нет доступа к запрашиваемому ресурсу

Проблема Решение Ошибка возникает при отправке запроса , если вы оплачиваете работу с API по схеме [pay-as-you-go](/ru/gigachat/api/tariffs). Пример: ```json { "status": 403, "message": "Permission denied" } ```

Это связано с тем, что метод возвращает остаток предоплаченных токенов, которых не может быть при оплате API по факту использования.

*** При запросах к GigaChat API по адресу `https://api.giga.chat/` возникает ошибка авториазции: ```json { "status": 403, "message": "Unauthorized" } ``` Передайте в запросе заголовок `User-Agent` с произвольным значением.

Превышен максимальный размер входных данных

Проблема Решение

Превышен максимальный размер входных данных.

Пример: ```json { "status": 413, "message": "Payload too large" } ```
Для решения проблемы уменьшите размер промпта. Количество токенов в промпте должно быть меньше размера окна контекста [модели](/ru/gigachat/models/main). Оценить количество токенов в промпте можно с помощью запроса .

Ошибка валидации параметров запроса

Проблема Решение Модель не поддерживает пользовательские функции. Ошибка может возникнуть при вызове [пользовательских функций](/ru/gigachat/guides/functions/generating-arguments-for-custom-functions). ```json { "status": 422, "message": "Requested model does not support functions" } ``` Для решения проблемы — [обратитесь на почту](). ***

Некорректный порядок сообщений.

Ошибка может возникнуть при использовании более одного системного промпта, или если системный промпт не в начале списка сообщений.

```json { "status": 422, "message": "Invalid params: system message must be the first message" } ```
Перед отправкой запроса проверьте порядок сообщений, названия полей и значения параметров.
***

Содержимое текстового файла, переданного в поле `attachments`, превышает [размер контекста модели](/ru/gigachat/models/main).

```json { "status": 422, "message": "Unprocessable Entity for url: <...>/chat/completions" } ```
Разделите или сократите текст в файле.

Слишком много запросов

Проблема Решение

Выполнено слишком много запросов.

Пример: ```json { "status": 429, "message": "Too Many Requests" } ```
Количество выполняемых одновременных запросов не соответствует вашему client\_id. По умолчанию физическим лицам доступен один одновременный поток, а ИП и юридическим лицам — 10.

Внутренняя ошибка сервиса

Проблема Решение

Произошла ошибка сервиса.

Пример: ```json { "status": 500, "message": "Internal Server Error" } ```
Обратитесь в службу поддержки.
## gRPC API На этой странице вы найдете краткое описание ошибок gRPC API GigaChat. | Код ошибки gRPC | Аналогичный HTTP-код | Описание | | ---------------- | ------------------------ | -------- | | 3 | 400, 413, 422 | Ошибка в параметрах запроса | | 4 | 408 | Истекло время ожидания | | 5 | 404 | Запрошенный ресурс не найден. Например, допущена ошибка в названии модели | | 7 | 403 | Ошибка авторизации | | 8 | 402, 429 | Закончились токены модели, к которой выполняется запрос | | 13 | 500 или любой другой код | Внутренняя ошибка сервиса | Подробнее о кодах состояния gRPC — в [официальной документации](https://grpc.github.io/grpc/core/md_doc_statuscodes.html). ## Контакты Если проблема сохраняется, обратитесь в поддержку по электронной почте. --- # Установка сертификатов для соединений gRPC [source](https://developers.sber.ru/docs/ru/gigachat/api/grpc/certificates-grpc.md) Для обмена сообщениями нужно использовать [сертификаты НУЦ Минцифры](/ru/gigachat/certificates). Для установки сертификатов: 1. Скачайте сертификаты для вашего устройства с [портала Госуслуг](https://www.gosuslugi.ru/crt). 2. Укажите путь к сертификату в переменной среды GRPC\_DEFAULT\_SSL\_ROOTS\_FILE\_PATH: ```sh export GRPC_DEFAULT_SSL_ROOTS_FILE_PATH="/путь-к-сертификату/cert.pem" ``` ## Авторизация Запросы к сервису авторизуются с помощью [токена доступа](/ru/gigachat/api/reference/rest/gigachat-api) по протоколу [OAuth 2.0](https://datatracker.ietf.org/doc/html/rfc6749). Токен доступа передается в заголовке `authorization`. Пример: ```default Bearer <токен доступа> ``` Подробно о том, как получить токен доступа читайте в разделах [Быстрый старт для физических лиц](/ru/gigachat/individuals-quickstart) и [Быстрый старт для ИП и юридических лиц](/ru/gigachat/legal-quickstart). --- # Ошибки gRPC [source](https://developers.sber.ru/docs/ru/gigachat/api/grpc/grpc-errors.md) На этой странице вы найдете краткое описание ошибок gRPC API GigaChat. | Код ошибки gRPC | Аналогичный HTTP-код | Описание | | ---------------- | ------------------------ | -------- | | 3 | 400, 413, 422 | Ошибка в параметрах запроса | | 4 | 408 | Истекло время ожидания | | 5 | 404 | Запрошенный ресурс не найден. Например, допущена ошибка в названии модели | | 7 | 403 | Ошибка авторизации | | 8 | 402, 429 | Закончились токены модели, к которой выполняется запрос | | 13 | 500 или любой другой код | Внутренняя ошибка сервиса | Подробнее о кодах состояния gRPC — в [официальной документации](https://grpc.github.io/grpc/core/md_doc_statuscodes.html). ## Контакты Если проблема сохраняется, обратитесь в поддержку по электронной почте. --- # Описание сервисов [source](https://developers.sber.ru/docs/ru/gigachat/api/grpc/grpc-methods.md) На этой странице вы найдете описание сервисов gRPC API GigaChat и примеры ответов. ### Получить список моделей Возвращает массив объектов с данными доступных моделей. Выполняется с пустым телом запроса. Ответ: ```json { "data": [ { "id": "GigaChat", "object": "model", "owned_by": "salutedevices", "type": "chat" } ], "object": "list" } ``` ### Получить модель Возвращает объект с описанием указанной модели. Параметры запроса: Ответ: ```json { "id": "GigaChat", "object": "model", "owned_by": "salutedevices", "type": "chat" } ``` ### Получить ответ модели Возвращает ответ модели с учетом переданных сообщений. Параметры запроса: .\n\nПри работе с текстовыми документами в одном запросе на генерацию нужно передавать только один идентификатор.\nЕсли вы передадите несколько идентификаторов файлов, для генерации будет использован только первый файл из списка.\nПри использовании больших текстовых файлов в запросах на генерацию, их содержимое может превышать [размер контекста модели](/ru/gigachat/models/main#modeli-dlya-generatsii).\nВ таком случае вернется [ошибка с кодом 422](/ru/gigachat/api/errors-description?responseCode=422).\n\nВ одном сообщении (объект в массиве `messages`) можно передать только одно изображение.\nВ одной сессии можно передать до 10 изображений.\n\n\n\n\n\nПри этом общий размер запроса при работе с изображениями и аудио должен быть меньше 80 Мб.\n\nНапример, ваш запрос может включать текст промпта и идентификаторы изображения размером 12 Мб, и двух аудиофайлов размером 33 Мб и 21 Мб. Что в сумме даст запрос размером больше 66 Мб, в зависимости от размера промпта.\n\nРазмер текстовых документов не влияет на размер запроса, но их содержимое может превышать контекстное окно модели.\n\n\n\n\n\nПодробнее — в разделе [Обработка файлов](/ru/gigachat/guides/working-with-files)\n","type":"array","items":{"type":"string"}}},"required":["content"],"title":"UserMessage"},"assistant":{"type":"object","properties":{"content":{"description":"Сгенерированный текст.\nЕсли модель сгенерировала аргументы для собственной функции, то поле будет пустым\n\nЕсли сообщение модели содержит аргументы для вызова собственной функции, то в истории сообщений обязательно нужно передать результами работы функции в сообщении с ролью `function`.\n\nПередавайте текст в кодировке UTF8.\nЭто позволит снизить расход токенов при обработке сообщения.\n","type":"string","example":"В Болхове сейчас +15°C, облачно"},"functions_state_id":{"type":"string","format":"UUIDv4","description":"Идентификатор, который объединяет функции, использованные в запросе.\nВозвращается в ответе модели (сообщение с `\"role\": \"assistant\"`) при вызове встроенных или генерации аргументов для собственных функций.\n\nПозволяет сохранить [состояние обращения к функции](/ru/gigachat/guides/functions/calling-builtin-functions#sohranenie-konteksta) и повысить качество работы модели.\nДля этого нужно передать идентификатор в запросе на генерацию в сообщении с ролью `assistant`.\n\nЕсли идентификатор взят из ответа со сгенерированными аргументами, то в истории сообщений нужно передать результат работы функции в сообщении с ролью `function`.\nВ противном случае вернется ошибка: «Invalid params: every assistant function call must have a result in history».\n"},"function_call":{"type":"object","description":"Данные для вызова собственной функции.\nПрисутствует в сообщениях с ролью `assistant`, когда модель вместо обычного ответа генерирует аргументы для вызова функции.\n\nЕсли поле передается в запросе на генерацию (в сообщении с ролью `assistant`), то в истории сообщений так же нужно передать результат вызова функции в сообщении с ролью `function`.\nВ противном случае вернется ошибка: «Invalid params: every assistant function call must have a result in history».\n","properties":{"name":{"type":"string","description":"Название функции, которую нужно вызвать.\n","example":"get_weather"},"arguments":{"type":"string","description":"Аргументы для вызова функции в формате JSON, обернутые в строку.\nМодель генерирует эти аргументы в соответствии со схемой, описанной в функции.\n","example":"{\\\"location\\\": \\\"Манжерок\\\", \\\"unit\\\": \\\"celsius\\\"}"}},"required":["name","arguments"],"title":"FunctionCallArgs"}},"required":["content"],"title":"AssistantMessage"},"function":{"type":"object","properties":{"content":{"description":"Результат работы функции в виде обернутого в строку JSON-объекта.\n","type":"string","example":"{\\\"location\\\": \\\"Манжерок, Россия\\\", \\\"temperature\\\": 15, \\\"forecast\\\": \\\"дожди\\\"}"}},"required":["content"],"title":"FunctionMessage"}}},"properties":{"role":{"type":"string"}},"required":["role"],"oneOf":[{"type":"object","properties":{"content":{"description":"Системный промпт, который задает поведение модели.\nВ массиве `messages` системный промпт передается в первом сообщении.\nМассив может содержать только один системный промпт.\n\nПередавайте текст в кодировке UTF8.\nЭто позволит снизить расход токенов при обработке сообщения.\n","type":"string","example":"Ты — полезный AI-ассистент"}},"required":["content"],"title":"SystemMessage"},{"type":"object","properties":{"content":{"description":"Текст сообщения пользователя.\n\nПередавайте текст в кодировке UTF8.\nЭто позволит снизить расход токенов при обработке сообщения.\n","type":"string","example":"Погода в Болхове"},"attachments":{"description":"Массив идентификаторов файлов, которые нужно использовать при генерации.\nИдентификатор присваивается файлу при [загрузке в хранилище](/ru/gigachat/api/reference/rest/post-file).\nПосмотреть список файлов в хранилище можно с помощью метода .\n\nПри работе с текстовыми документами в одном запросе на генерацию нужно передавать только один идентификатор.\nЕсли вы передадите несколько идентификаторов файлов, для генерации будет использован только первый файл из списка.\nПри использовании больших текстовых файлов в запросах на генерацию, их содержимое может превышать [размер контекста модели](/ru/gigachat/models/main#modeli-dlya-generatsii).\nВ таком случае вернется [ошибка с кодом 422](/ru/gigachat/api/errors-description?responseCode=422).\n\nВ одном сообщении (объект в массиве `messages`) можно передать только одно изображение.\nВ одной сессии можно передать до 10 изображений.\n\n\n\n\n\nПри этом общий размер запроса при работе с изображениями и аудио должен быть меньше 80 Мб.\n\nНапример, ваш запрос может включать текст промпта и идентификаторы изображения размером 12 Мб, и двух аудиофайлов размером 33 Мб и 21 Мб. Что в сумме даст запрос размером больше 66 Мб, в зависимости от размера промпта.\n\nРазмер текстовых документов не влияет на размер запроса, но их содержимое может превышать контекстное окно модели.\n\n\n\n\n\nПодробнее — в разделе [Обработка файлов](/ru/gigachat/guides/working-with-files)\n","type":"array","items":{"type":"string"}}},"required":["content"],"title":"UserMessage"},{"type":"object","properties":{"content":{"description":"Сгенерированный текст.\nЕсли модель сгенерировала аргументы для собственной функции, то поле будет пустым\n\nЕсли сообщение модели содержит аргументы для вызова собственной функции, то в истории сообщений обязательно нужно передать результами работы функции в сообщении с ролью `function`.\n\nПередавайте текст в кодировке UTF8.\nЭто позволит снизить расход токенов при обработке сообщения.\n","type":"string","example":"В Болхове сейчас +15°C, облачно"},"functions_state_id":{"type":"string","format":"UUIDv4","description":"Идентификатор, который объединяет функции, использованные в запросе.\nВозвращается в ответе модели (сообщение с `\"role\": \"assistant\"`) при вызове встроенных или генерации аргументов для собственных функций.\n\nПозволяет сохранить [состояние обращения к функции](/ru/gigachat/guides/functions/calling-builtin-functions#sohranenie-konteksta) и повысить качество работы модели.\nДля этого нужно передать идентификатор в запросе на генерацию в сообщении с ролью `assistant`.\n\nЕсли идентификатор взят из ответа со сгенерированными аргументами, то в истории сообщений нужно передать результат работы функции в сообщении с ролью `function`.\nВ противном случае вернется ошибка: «Invalid params: every assistant function call must have a result in history».\n"},"function_call":{"type":"object","description":"Данные для вызова собственной функции.\nПрисутствует в сообщениях с ролью `assistant`, когда модель вместо обычного ответа генерирует аргументы для вызова функции.\n\nЕсли поле передается в запросе на генерацию (в сообщении с ролью `assistant`), то в истории сообщений так же нужно передать результат вызова функции в сообщении с ролью `function`.\nВ противном случае вернется ошибка: «Invalid params: every assistant function call must have a result in history».\n","properties":{"name":{"type":"string","description":"Название функции, которую нужно вызвать.\n","example":"get_weather"},"arguments":{"type":"string","description":"Аргументы для вызова функции в формате JSON, обернутые в строку.\nМодель генерирует эти аргументы в соответствии со схемой, описанной в функции.\n","example":"{\\\"location\\\": \\\"Манжерок\\\", \\\"unit\\\": \\\"celsius\\\"}"}},"required":["name","arguments"],"title":"FunctionCallArgs"}},"required":["content"],"title":"AssistantMessage"},{"type":"object","properties":{"content":{"description":"Результат работы функции в виде обернутого в строку JSON-объекта.\n","type":"string","example":"{\\\"location\\\": \\\"Манжерок, Россия\\\", \\\"temperature\\\": 15, \\\"forecast\\\": \\\"дожди\\\"}"}},"required":["content"],"title":"FunctionMessage"}],"title":"message"}},"function_call":{"description":"Явно задает [режим работы с функциями](/ru/gigachat/guides/functions/function-calling-modes).\n\nВозможные значения:\n\n* строка `none`;\n* строка `auto`;\n* объект `{\"name\": \"название_функции\"}`.\n","oneOf":[{"type":"string","description":"Отключение работы с функциями.\n\nЕсли передать `none`, модель не будет вызывать встроенные функции или генерировать аргументы для пользовательских функций, а просто сгенерирует ответ в соответствии с полученными сообщениями.\n","example":"none","title":"function_call_none"},{"type":"string","description":"Автоматический режим работы с функциями.\n\nВ этом режиме модель, основываясь на тексте сообщений, решает нужно ли использовать одну из [встроенных функций](/ru/gigachat/guides/functions/calling-builtin-functions) или сгенерировать аргументы для пользовательских функций, описанных в массиве `functions`.\nПри этом, если массив содержит описание хотя бы одной пользовательской функции, модель сможет вызвать встроенную функцию, только если ее название передано в массиве `functions`:\n\n```json \n{\n ,,,\n \"function_call\": \"auto\",\n \"functions\": [\n\t {\n \"name\": \"text2image\"\t\t\t\n\t },\n {\n \"name\": \"weather_forecast\",\n \"description\": \"Возвращает температуру на заданный период\",\n \"parameters\": {}\n }\n ]\n ...\n}\n```\n","example":"auto","title":"function_call_auto"},{"type":"object","properties":{"name":{"type":"string","description":"Работа с функциями в принудительном режиме.\n\nВ поле можно передать как название собственной функции, описание которой содержится в массиве `functions`, так и название одной из [встроенных функций](/ru/gigachat/guides/functions/calling-builtin-functions):\n\n```json \n{\n ...\n \"function_call\": {\n \"name\": \"weather_forecast\"\n },\n \"functions\": [\n {\n \"name\": \"weather_forecast\",\n ...\n }\n ]\n ...\n}\n```\n"}},"title":"function_call_name"}]},"functions":{"type":["null","array"],"description":"Массив с описанием пользовательских функций.","items":{"description":"Описание пользовательской функции.","type":"object","required":["name","parameters"],"properties":{"name":{"type":"string","description":"Название пользовательской функции, для которой будут сгенерированы аргументы.\n\n\n\n\n\nНазвание функции должно содержать только латинские буквы.\nНазвание функции не должно начинаться с цифры.\n\n\n\n\n","example":"weather_forecast"},"description":{"type":"string","description":"Текстовое описание функции.","example":"Прогноз погоды"},"parameters":{"type":"object","properties":{},"description":"Валидный JSON-объект с набором пар `ключ-значение`, которые описывают аргументы функции.","example":{"properties":{"location":{"type":"string","description":"Местоположение, например, название города"}}}},"few_shot_examples":{"type":"array","description":"Объекты с парами `запрос_пользователя`-`параметры_функции`, которые будут служить модели примерами ожидаемого результата.\n","items":{"type":"object","required":["request","params"],"properties":{"request":{"type":"string","description":"Запрос пользователя.","example":"Погода в Москве в ближайшие три дня"},"params":{"type":"object","description":"Пример заполнения параметров пользовательской функции.","properties":{},"example":{"location":"Moscow, Russia"}}}}},"return_parameters":{"type":"object","description":"JSON-объект с описанием параметров, которые может вернуть ваша функция.","properties":{},"example":{"properties":{"location":{"type":"string","description":"Местоположение, например, название города"}}}}},"title":"CustomFunction"},"title":"CustomFunctions"},"temperature":{"format":"float","type":["null","number"],"description":"Температура выборки регулирует степень случайности ответов модели.\nВысокое значение делает ответы разнообразными и неожиданными, низкое — предсказуемыми и стабильными.\nКогда температура меньше 0.001, включается режим строгого контроля, дающий одинаковые ответы. А при температуре больше 2 реакция становится чрезмерно беспорядочной.\n\nБазовое значение температуры зависит от модели, которая генерирует ответ, и меняется вместе с улучшениями модели.\n","minimum":0,"exclusiveMinimum":0},"top_p":{"format":"float","type":["null","number"],"description":"Параметр используется как альтернатива температуре (поле `temperature`). Задает вероятностную массу токенов, которые должна учитывать модель.\nТак, если передать значение 0.1, модель будет учитывать только токены, чья вероятностная масса входит в верхние 10%.\n\nЗначение по умолчанию зависит от выбранной модели (поле `model`) и может изменяться с обновлениями модели.\n\nЗначение изменяется в диапазоне от 0 до 1 включительно.\n","minimum":0,"maximum":1},"stream":{"type":"boolean","description":"Указывает, что сообщения надо передавать по частям в потоке.\n\nСообщения передаются по протоколу [SSE](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#event_stream_format).\n\nПоток завершается событием `data: [DONE]`.\n\nПодробнее читайте в разделе [Потоковая генерация токенов](/ru/gigachat/guides/response-token-streaming).\n","default":false,"example":false},"max_tokens":{"description":"Максимальное количество токенов, которые будут использованы для создания ответов.","format":"int32","type":["null","integer"],"exclusiveMinimum":0,"example":30},"repetition_penalty":{"type":["null","number"],"format":"float","description":"Количество повторений слов:\n\n* Значение 1.0 — нейтральное значение.\n* При значении больше 1 модель будет стараться не повторять слова.\n\nЗначение по умолчанию зависит от выбранной модели (поле `model`) и может изменяться с обновлениями модели.\n","example":1},"update_interval":{"type":"number","description":"Параметр потокового режима (`\"stream\": \"true\"`).\nЗадает минимальный интервал в секундах, который проходит между отправкой токенов.\nНапример, если указать `1`, сообщения будут приходить каждую секунду, но размер каждого из них будет больше, так как за секунду накапливается много токенов.\n","default":0,"example":0},"response_format":{"type":"object","description":"Формат данных в ответе модели.\nИспользуется для [генерации структурированных данных](/ru/gigachat/guides/structured-output).\n","discriminator":{"propertyName":"type","description":"Задает тип данных, которые должна сгенерировать модель.\nВозможные значения:\n\n* `text` — ответ модели будет возвращен в виде текста. В этом случае объект `response_fortmat` не может содержать другие поля;\n* `json_schema` — ответ модели будет возвращен в виде JSON-объекта, который соответствует JSON-схеме, описанной в поле `schema`;\n","mapping":{"json_schema":{"type":"object","required":["schema"],"properties":{"type":{"type":"string","description":"Модель вернет ответ в виде JSON-объекта.\nФормат ответа будет соответствовать JSON-схеме, описанной в поле `schema`.\n","default":"json_schema"},"schema":{"type":"object","description":"JSON-схема данных, которой должен соответствовать ответ модели.\n\nДля строгого соответствия схеме, передайте список обязательных полей в массиве `required` и задайте параметр `\"strict\": true`.\nВ этом случае ответ будет содержать все поля, в том числе необязательные.\n\nЕсли в описании отсуствтует массив `required` с обязательными полями, модель вернет произвольный JSON-объект.\n","example":{"type":"object","properties":{"date":{"type":"string","description":"Дата в формате dd.mm"},"event":{"type":"string","description":"Наименование события"}},"required":["date"]}},"strict":{"type":"boolean","description":"Указывает, что модель должна вернуть ответ строго в соответствии со схемой, описанной в поле `schema`.\nПри этом описание должно содержать массив `required`, со списком обязательных полей.\n","example":true}},"title":"ChatResponseFormatJsonSchema"},"text":{"type":"object","properties":{"type":{"type":"string","description":"Модель вернет ответ в виде текста.\nВ этом случае объект `response_fortmat` не может содержать другие поля.\n","default":"text"}},"title":"ChatResponseFormatText"}}},"properties":{"type":{"type":"string"}},"required":["type"],"oneOf":[{"type":"object","required":["schema"],"properties":{"type":{"type":"string","description":"Модель вернет ответ в виде JSON-объекта.\nФормат ответа будет соответствовать JSON-схеме, описанной в поле `schema`.\n","default":"json_schema"},"schema":{"type":"object","description":"JSON-схема данных, которой должен соответствовать ответ модели.\n\nДля строгого соответствия схеме, передайте список обязательных полей в массиве `required` и задайте параметр `\"strict\": true`.\nВ этом случае ответ будет содержать все поля, в том числе необязательные.\n\nЕсли в описании отсуствтует массив `required` с обязательными полями, модель вернет произвольный JSON-объект.\n","example":{"type":"object","properties":{"date":{"type":"string","description":"Дата в формате dd.mm"},"event":{"type":"string","description":"Наименование события"}},"required":["date"]}},"strict":{"type":"boolean","description":"Указывает, что модель должна вернуть ответ строго в соответствии со схемой, описанной в поле `schema`.\nПри этом описание должно содержать массив `required`, со списком обязательных полей.\n","example":true}},"title":"ChatResponseFormatJsonSchema"},{"type":"object","properties":{"type":{"type":"string","description":"Модель вернет ответ в виде текста.\nВ этом случае объект `response_fortmat` не может содержать другие поля.\n","default":"text"}},"title":"ChatResponseFormatText"}],"title":"ChatResponseFormat"}},"title":"Chat"}} schemaType={"response"} /> Ответ: ```json { "choices": [ { "message": { "role": "assistant", "content": "Здравствуйте! К сожалению, я не могу дать точный ответ на этот вопрос, так как это зависит от многих факторов. Однако обычно релиз новых функций и обновлений в GigaChat происходит постепенно и незаметно для пользователей. Рекомендую следить за новостями и обновлениями проекта в официальном сообществе GigaChat или на сайте разработчиков.", "created": 1625284800, "name": "text2image", "functions_state_id": "77d3fb14-457a-46ba-937e-8d856156d003", "function_call": { "name": "string", "arguments": {} } }, "index": 0, "finish_reason": "stop" } ], "created": 1678878333, "model": "GigaChat", "usage": { "prompt_tokens": 18, "completion_tokens": 68, "total_tokens": 86 }, "object": "chat.completion" } ``` .\n\nПри работе с текстовыми документами в одном запросе на генерацию нужно передавать только один идентификатор.\nЕсли вы передадите несколько идентификаторов файлов, для генерации будет использован только первый файл из списка.\nПри использовании больших текстовых файлов в запросах на генерацию, их содержимое может превышать [размер контекста модели](/ru/gigachat/models/main#modeli-dlya-generatsii).\nВ таком случае вернется [ошибка с кодом 422](/ru/gigachat/api/errors-description?responseCode=422).\n\nВ одном сообщении (объект в массиве `messages`) можно передать только одно изображение.\nВ одной сессии можно передать до 10 изображений.\n\n\n\n\n\nПри этом общий размер запроса при работе с изображениями и аудио должен быть меньше 80 Мб.\n\nНапример, ваш запрос может включать текст промпта и идентификаторы изображения размером 12 Мб, и двух аудиофайлов размером 33 Мб и 21 Мб. Что в сумме даст запрос размером больше 66 Мб, в зависимости от размера промпта.\n\nРазмер текстовых документов не влияет на размер запроса, но их содержимое может превышать контекстное окно модели.\n\n\n\n\n\nПодробнее — в разделе [Обработка файлов](/ru/gigachat/guides/working-with-files)\n","type":"array","items":{"type":"string"}}},"required":["content"],"title":"UserMessage"},"assistant":{"type":"object","properties":{"content":{"description":"Сгенерированный текст.\nЕсли модель сгенерировала аргументы для собственной функции, то поле будет пустым\n\nЕсли сообщение модели содержит аргументы для вызова собственной функции, то в истории сообщений обязательно нужно передать результами работы функции в сообщении с ролью `function`.\n\nПередавайте текст в кодировке UTF8.\nЭто позволит снизить расход токенов при обработке сообщения.\n","type":"string","example":"В Болхове сейчас +15°C, облачно"},"functions_state_id":{"type":"string","format":"UUIDv4","description":"Идентификатор, который объединяет функции, использованные в запросе.\nВозвращается в ответе модели (сообщение с `\"role\": \"assistant\"`) при вызове встроенных или генерации аргументов для собственных функций.\n\nПозволяет сохранить [состояние обращения к функции](/ru/gigachat/guides/functions/calling-builtin-functions#sohranenie-konteksta) и повысить качество работы модели.\nДля этого нужно передать идентификатор в запросе на генерацию в сообщении с ролью `assistant`.\n\nЕсли идентификатор взят из ответа со сгенерированными аргументами, то в истории сообщений нужно передать результат работы функции в сообщении с ролью `function`.\nВ противном случае вернется ошибка: «Invalid params: every assistant function call must have a result in history».\n"},"function_call":{"type":"object","description":"Данные для вызова собственной функции.\nПрисутствует в сообщениях с ролью `assistant`, когда модель вместо обычного ответа генерирует аргументы для вызова функции.\n\nЕсли поле передается в запросе на генерацию (в сообщении с ролью `assistant`), то в истории сообщений так же нужно передать результат вызова функции в сообщении с ролью `function`.\nВ противном случае вернется ошибка: «Invalid params: every assistant function call must have a result in history».\n","properties":{"name":{"type":"string","description":"Название функции, которую нужно вызвать.\n","example":"get_weather"},"arguments":{"type":"string","description":"Аргументы для вызова функции в формате JSON, обернутые в строку.\nМодель генерирует эти аргументы в соответствии со схемой, описанной в функции.\n","example":"{\\\"location\\\": \\\"Манжерок\\\", \\\"unit\\\": \\\"celsius\\\"}"}},"required":["name","arguments"],"title":"FunctionCallArgs"}},"required":["content"],"title":"AssistantMessage"},"function":{"type":"object","properties":{"content":{"description":"Результат работы функции в виде обернутого в строку JSON-объекта.\n","type":"string","example":"{\\\"location\\\": \\\"Манжерок, Россия\\\", \\\"temperature\\\": 15, \\\"forecast\\\": \\\"дожди\\\"}"}},"required":["content"],"title":"FunctionMessage"}}},"properties":{"role":{"type":"string"}},"required":["role"],"oneOf":[{"type":"object","properties":{"content":{"description":"Системный промпт, который задает поведение модели.\nВ массиве `messages` системный промпт передается в первом сообщении.\nМассив может содержать только один системный промпт.\n\nПередавайте текст в кодировке UTF8.\nЭто позволит снизить расход токенов при обработке сообщения.\n","type":"string","example":"Ты — полезный AI-ассистент"}},"required":["content"],"title":"SystemMessage"},{"type":"object","properties":{"content":{"description":"Текст сообщения пользователя.\n\nПередавайте текст в кодировке UTF8.\nЭто позволит снизить расход токенов при обработке сообщения.\n","type":"string","example":"Погода в Болхове"},"attachments":{"description":"Массив идентификаторов файлов, которые нужно использовать при генерации.\nИдентификатор присваивается файлу при [загрузке в хранилище](/ru/gigachat/api/reference/rest/post-file).\nПосмотреть список файлов в хранилище можно с помощью метода .\n\nПри работе с текстовыми документами в одном запросе на генерацию нужно передавать только один идентификатор.\nЕсли вы передадите несколько идентификаторов файлов, для генерации будет использован только первый файл из списка.\nПри использовании больших текстовых файлов в запросах на генерацию, их содержимое может превышать [размер контекста модели](/ru/gigachat/models/main#modeli-dlya-generatsii).\nВ таком случае вернется [ошибка с кодом 422](/ru/gigachat/api/errors-description?responseCode=422).\n\nВ одном сообщении (объект в массиве `messages`) можно передать только одно изображение.\nВ одной сессии можно передать до 10 изображений.\n\n\n\n\n\nПри этом общий размер запроса при работе с изображениями и аудио должен быть меньше 80 Мб.\n\nНапример, ваш запрос может включать текст промпта и идентификаторы изображения размером 12 Мб, и двух аудиофайлов размером 33 Мб и 21 Мб. Что в сумме даст запрос размером больше 66 Мб, в зависимости от размера промпта.\n\nРазмер текстовых документов не влияет на размер запроса, но их содержимое может превышать контекстное окно модели.\n\n\n\n\n\nПодробнее — в разделе [Обработка файлов](/ru/gigachat/guides/working-with-files)\n","type":"array","items":{"type":"string"}}},"required":["content"],"title":"UserMessage"},{"type":"object","properties":{"content":{"description":"Сгенерированный текст.\nЕсли модель сгенерировала аргументы для собственной функции, то поле будет пустым\n\nЕсли сообщение модели содержит аргументы для вызова собственной функции, то в истории сообщений обязательно нужно передать результами работы функции в сообщении с ролью `function`.\n\nПередавайте текст в кодировке UTF8.\nЭто позволит снизить расход токенов при обработке сообщения.\n","type":"string","example":"В Болхове сейчас +15°C, облачно"},"functions_state_id":{"type":"string","format":"UUIDv4","description":"Идентификатор, который объединяет функции, использованные в запросе.\nВозвращается в ответе модели (сообщение с `\"role\": \"assistant\"`) при вызове встроенных или генерации аргументов для собственных функций.\n\nПозволяет сохранить [состояние обращения к функции](/ru/gigachat/guides/functions/calling-builtin-functions#sohranenie-konteksta) и повысить качество работы модели.\nДля этого нужно передать идентификатор в запросе на генерацию в сообщении с ролью `assistant`.\n\nЕсли идентификатор взят из ответа со сгенерированными аргументами, то в истории сообщений нужно передать результат работы функции в сообщении с ролью `function`.\nВ противном случае вернется ошибка: «Invalid params: every assistant function call must have a result in history».\n"},"function_call":{"type":"object","description":"Данные для вызова собственной функции.\nПрисутствует в сообщениях с ролью `assistant`, когда модель вместо обычного ответа генерирует аргументы для вызова функции.\n\nЕсли поле передается в запросе на генерацию (в сообщении с ролью `assistant`), то в истории сообщений так же нужно передать результат вызова функции в сообщении с ролью `function`.\nВ противном случае вернется ошибка: «Invalid params: every assistant function call must have a result in history».\n","properties":{"name":{"type":"string","description":"Название функции, которую нужно вызвать.\n","example":"get_weather"},"arguments":{"type":"string","description":"Аргументы для вызова функции в формате JSON, обернутые в строку.\nМодель генерирует эти аргументы в соответствии со схемой, описанной в функции.\n","example":"{\\\"location\\\": \\\"Манжерок\\\", \\\"unit\\\": \\\"celsius\\\"}"}},"required":["name","arguments"],"title":"FunctionCallArgs"}},"required":["content"],"title":"AssistantMessage"},{"type":"object","properties":{"content":{"description":"Результат работы функции в виде обернутого в строку JSON-объекта.\n","type":"string","example":"{\\\"location\\\": \\\"Манжерок, Россия\\\", \\\"temperature\\\": 15, \\\"forecast\\\": \\\"дожди\\\"}"}},"required":["content"],"title":"FunctionMessage"}],"title":"message"}},"function_call":{"description":"Явно задает [режим работы с функциями](/ru/gigachat/guides/functions/function-calling-modes).\n\nВозможные значения:\n\n* строка `none`;\n* строка `auto`;\n* объект `{\"name\": \"название_функции\"}`.\n","oneOf":[{"type":"string","description":"Отключение работы с функциями.\n\nЕсли передать `none`, модель не будет вызывать встроенные функции или генерировать аргументы для пользовательских функций, а просто сгенерирует ответ в соответствии с полученными сообщениями.\n","example":"none","title":"function_call_none"},{"type":"string","description":"Автоматический режим работы с функциями.\n\nВ этом режиме модель, основываясь на тексте сообщений, решает нужно ли использовать одну из [встроенных функций](/ru/gigachat/guides/functions/calling-builtin-functions) или сгенерировать аргументы для пользовательских функций, описанных в массиве `functions`.\nПри этом, если массив содержит описание хотя бы одной пользовательской функции, модель сможет вызвать встроенную функцию, только если ее название передано в массиве `functions`:\n\n```json \n{\n ,,,\n \"function_call\": \"auto\",\n \"functions\": [\n\t {\n \"name\": \"text2image\"\t\t\t\n\t },\n {\n \"name\": \"weather_forecast\",\n \"description\": \"Возвращает температуру на заданный период\",\n \"parameters\": {}\n }\n ]\n ...\n}\n```\n","example":"auto","title":"function_call_auto"},{"type":"object","properties":{"name":{"type":"string","description":"Работа с функциями в принудительном режиме.\n\nВ поле можно передать как название собственной функции, описание которой содержится в массиве `functions`, так и название одной из [встроенных функций](/ru/gigachat/guides/functions/calling-builtin-functions):\n\n```json \n{\n ...\n \"function_call\": {\n \"name\": \"weather_forecast\"\n },\n \"functions\": [\n {\n \"name\": \"weather_forecast\",\n ...\n }\n ]\n ...\n}\n```\n"}},"title":"function_call_name"}]},"functions":{"type":["null","array"],"description":"Массив с описанием пользовательских функций.","items":{"description":"Описание пользовательской функции.","type":"object","required":["name","parameters"],"properties":{"name":{"type":"string","description":"Название пользовательской функции, для которой будут сгенерированы аргументы.\n\n\n\n\n\nНазвание функции должно содержать только латинские буквы.\nНазвание функции не должно начинаться с цифры.\n\n\n\n\n","example":"weather_forecast"},"description":{"type":"string","description":"Текстовое описание функции.","example":"Прогноз погоды"},"parameters":{"type":"object","properties":{},"description":"Валидный JSON-объект с набором пар `ключ-значение`, которые описывают аргументы функции.","example":{"properties":{"location":{"type":"string","description":"Местоположение, например, название города"}}}},"few_shot_examples":{"type":"array","description":"Объекты с парами `запрос_пользователя`-`параметры_функции`, которые будут служить модели примерами ожидаемого результата.\n","items":{"type":"object","required":["request","params"],"properties":{"request":{"type":"string","description":"Запрос пользователя.","example":"Погода в Москве в ближайшие три дня"},"params":{"type":"object","description":"Пример заполнения параметров пользовательской функции.","properties":{},"example":{"location":"Moscow, Russia"}}}}},"return_parameters":{"type":"object","description":"JSON-объект с описанием параметров, которые может вернуть ваша функция.","properties":{},"example":{"properties":{"location":{"type":"string","description":"Местоположение, например, название города"}}}}},"title":"CustomFunction"},"title":"CustomFunctions"},"temperature":{"format":"float","type":["null","number"],"description":"Температура выборки регулирует степень случайности ответов модели.\nВысокое значение делает ответы разнообразными и неожиданными, низкое — предсказуемыми и стабильными.\nКогда температура меньше 0.001, включается режим строгого контроля, дающий одинаковые ответы. А при температуре больше 2 реакция становится чрезмерно беспорядочной.\n\nБазовое значение температуры зависит от модели, которая генерирует ответ, и меняется вместе с улучшениями модели.\n","minimum":0,"exclusiveMinimum":0},"top_p":{"format":"float","type":["null","number"],"description":"Параметр используется как альтернатива температуре (поле `temperature`). Задает вероятностную массу токенов, которые должна учитывать модель.\nТак, если передать значение 0.1, модель будет учитывать только токены, чья вероятностная масса входит в верхние 10%.\n\nЗначение по умолчанию зависит от выбранной модели (поле `model`) и может изменяться с обновлениями модели.\n\nЗначение изменяется в диапазоне от 0 до 1 включительно.\n","minimum":0,"maximum":1},"stream":{"type":"boolean","description":"Указывает, что сообщения надо передавать по частям в потоке.\n\nСообщения передаются по протоколу [SSE](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#event_stream_format).\n\nПоток завершается событием `data: [DONE]`.\n\nПодробнее читайте в разделе [Потоковая генерация токенов](/ru/gigachat/guides/response-token-streaming).\n","default":false,"example":false},"max_tokens":{"description":"Максимальное количество токенов, которые будут использованы для создания ответов.","format":"int32","type":["null","integer"],"exclusiveMinimum":0,"example":30},"repetition_penalty":{"type":["null","number"],"format":"float","description":"Количество повторений слов:\n\n* Значение 1.0 — нейтральное значение.\n* При значении больше 1 модель будет стараться не повторять слова.\n\nЗначение по умолчанию зависит от выбранной модели (поле `model`) и может изменяться с обновлениями модели.\n","example":1},"update_interval":{"type":"number","description":"Параметр потокового режима (`\"stream\": \"true\"`).\nЗадает минимальный интервал в секундах, который проходит между отправкой токенов.\nНапример, если указать `1`, сообщения будут приходить каждую секунду, но размер каждого из них будет больше, так как за секунду накапливается много токенов.\n","default":0,"example":0},"response_format":{"type":"object","description":"Формат данных в ответе модели.\nИспользуется для [генерации структурированных данных](/ru/gigachat/guides/structured-output).\n","discriminator":{"propertyName":"type","description":"Задает тип данных, которые должна сгенерировать модель.\nВозможные значения:\n\n* `text` — ответ модели будет возвращен в виде текста. В этом случае объект `response_fortmat` не может содержать другие поля;\n* `json_schema` — ответ модели будет возвращен в виде JSON-объекта, который соответствует JSON-схеме, описанной в поле `schema`;\n","mapping":{"json_schema":{"type":"object","required":["schema"],"properties":{"type":{"type":"string","description":"Модель вернет ответ в виде JSON-объекта.\nФормат ответа будет соответствовать JSON-схеме, описанной в поле `schema`.\n","default":"json_schema"},"schema":{"type":"object","description":"JSON-схема данных, которой должен соответствовать ответ модели.\n\nДля строгого соответствия схеме, передайте список обязательных полей в массиве `required` и задайте параметр `\"strict\": true`.\nВ этом случае ответ будет содержать все поля, в том числе необязательные.\n\nЕсли в описании отсуствтует массив `required` с обязательными полями, модель вернет произвольный JSON-объект.\n","example":{"type":"object","properties":{"date":{"type":"string","description":"Дата в формате dd.mm"},"event":{"type":"string","description":"Наименование события"}},"required":["date"]}},"strict":{"type":"boolean","description":"Указывает, что модель должна вернуть ответ строго в соответствии со схемой, описанной в поле `schema`.\nПри этом описание должно содержать массив `required`, со списком обязательных полей.\n","example":true}},"title":"ChatResponseFormatJsonSchema"},"text":{"type":"object","properties":{"type":{"type":"string","description":"Модель вернет ответ в виде текста.\nВ этом случае объект `response_fortmat` не может содержать другие поля.\n","default":"text"}},"title":"ChatResponseFormatText"}}},"properties":{"type":{"type":"string"}},"required":["type"],"oneOf":[{"type":"object","required":["schema"],"properties":{"type":{"type":"string","description":"Модель вернет ответ в виде JSON-объекта.\nФормат ответа будет соответствовать JSON-схеме, описанной в поле `schema`.\n","default":"json_schema"},"schema":{"type":"object","description":"JSON-схема данных, которой должен соответствовать ответ модели.\n\nДля строгого соответствия схеме, передайте список обязательных полей в массиве `required` и задайте параметр `\"strict\": true`.\nВ этом случае ответ будет содержать все поля, в том числе необязательные.\n\nЕсли в описании отсуствтует массив `required` с обязательными полями, модель вернет произвольный JSON-объект.\n","example":{"type":"object","properties":{"date":{"type":"string","description":"Дата в формате dd.mm"},"event":{"type":"string","description":"Наименование события"}},"required":["date"]}},"strict":{"type":"boolean","description":"Указывает, что модель должна вернуть ответ строго в соответствии со схемой, описанной в поле `schema`.\nПри этом описание должно содержать массив `required`, со списком обязательных полей.\n","example":true}},"title":"ChatResponseFormatJsonSchema"},{"type":"object","properties":{"type":{"type":"string","description":"Модель вернет ответ в виде текста.\nВ этом случае объект `response_fortmat` не может содержать другие поля.\n","default":"text"}},"title":"ChatResponseFormatText"}],"title":"ChatResponseFormat"}},"title":"Chat"}} schemaType={"response"} /> --- # Справка GigaChat API [source](https://developers.sber.ru/docs/ru/gigachat/api/main.md) --- # GigaChat API: Обзор [source](https://developers.sber.ru/docs/ru/gigachat/api/overview.md) --- # Отменить задачу [source](https://developers.sber.ru/docs/ru/gigachat/api/reference/rest/cancel-job.md) ## Адрес запроса **POST** `https://gigachat.devices.sberbank.ru/api/v1/fine_tuning/jobs/{job_id}/cancel` ## Описание Отменяет задачу на дообучение модели и переводит ее статус в `cancelled`. --- # Мониторинг потребления [source](https://developers.sber.ru/docs/ru/gigachat/api/reference/rest/consumption-monitoring.md) В разделе описаны методы, которые помогут вам оценить, сколько токенов будет потрачено на ваш запрос, а также узнать остаток токенов для работы с каждой из доступных моделей.
Подробнее о токенах Токен — единица измерения стоимости запросов к модели. Токен может быть символом, несколькими символами, фрагментом слова или словом целиком. В среднем в одном токене 3—4 символа, включая пробелы, знаки препинания и специальные символы. Кроме текста сообщений в токены преобразуется контент, который используется в контексте запроса. Например, текстовые файлы и изображения, описания функций или история сообщений из массива `messages`.
```mdx-code-block import DocCardList from '@theme/DocCardList'; import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; ``` --- # Удалить файл [source](https://developers.sber.ru/docs/ru/gigachat/api/reference/rest/file-delete.md) ## Адрес запроса **POST** `https://api.giga.chat/v1/files/{file}/delete` ## Описание Переводит статус файла в значение `deleted`.
нужно передать этот же заголовок.\n","schema":{"type":"string"}},{"in":"header","name":"User-Agent","description":"Произвольный идентификатор клиента.\nНаличие заголовка поможет избежать ошибки авторизации.\n","schema":{"type":"string","example":"MyApplication"}}]} /> --- # Хранилище файлов [source](https://developers.sber.ru/docs/ru/gigachat/api/reference/rest/files-storage.md) В этом разделе описаны методы для работы с хранилищем файлов, которые можно использовать при запросах на генерацию. Хранилище позволяет: * [загружать файлы](/ru/gigachat/api/reference/rest/post-file). Загруженные файлы доступны только вам; * [получать список доступных файлов](/ru/gigachat/api/reference/rest/get-files); * [получать описание выбранного файла](/ru/gigachat/api/reference/rest/get-file); * [скачивать файлы изображений](/ru/gigachat/api/reference/rest/get-file-id); * [удалять файлы](/ru/gigachat/api/reference/rest/file-delete). Кроме загруженных файлов, в хранилище также сохраняются файлы изображений, сгенерированных при выполнении запроса . Хранилище поддерживает текстовые документы, изображения и аудиофайлы разных форматов. ```mdx-code-block ``` | Формат | MIME-тип | |--------|------------| | txt | text/plain | | doc | application/msword | | docx | application/vnd.openxmlformats-officedocument.wordprocessingml.document | | pdf | application/pdf | | epub | application/epub | | ppt | application/ppt | | pptx | application/pptx | | xlsx | application/vnd.ms-excel | ```mdx-code-block ``` ```mdx-code-block ``` | Формат | MIME-тип | |--------|------------| | jpeg | image/jpeg | | png | image/png | | tiff | image/tiff | | bmp | image/bmp | ```mdx-code-block ``` ```mdx-code-block ``` | Формат | MIME-тип | | ------ | -------------------------------------------------------------- | | mp4 | audio/mp4 | | mp3 | audio/mp3 | | m4a | audio/x-m4a | | wav | audio/x-wav
audio/wave
audio/wav
audio/x-pn-wav | | weba | audio/webm | | ogg | audio/x-ogg | | opus | audio/opus | ```mdx-code-block
```
На размеры файлов действуют ограничения: * максимальный размер одного аудиофайла в запросе — 35 Мб; * максимальный размер одного изображения в запросе — 15 Мб; * максимальный размер одного текстового файла в запросе — 40 Мб. :::note При использовании больших текстовых файлов в запросах на генерацию, их содержимое может превышать [размер контекста модели](/ru/gigachat/models/main). В таком случае вернется [ошибка с кодом 422](/ru/gigachat/api/errors-description?responseCode=422). ::: ```mdx-code-block import DocCardList from '@theme/DocCardList'; import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; ``` --- # Валидировать функцию [source](https://developers.sber.ru/docs/ru/gigachat/api/reference/rest/function-validation.md) ## Адрес запроса **POST** `https://api.giga.chat/v1/functions/validate` ## Описание Проверяет переданное описание функции на соответствие формату функций GigaChat. Пример описания функции GigaChat — в массиве `functions`, в запросе . Метод принимает описание функции в формате JSON. В результате проверки возвращается массив ошибок и предупреждений, которые нужно исправить, чтобы описание функции соответствовало формату GigaChat.
Пример описания функции в формате JSON Schema ```json { "name": "send_sms", "description": "Отправка SMS контакту по ID", "parameters": { "type": "object", "properties": { "contactId": { "description": "ID контакта", "format": "int32", "type": "integer" }, "text": { "description": "Текст SMS", "minLength": 1, "type": "string" }, "version": { "description": "Описание параметра - версия API", "type": "string" } }, "required": [ "version", "contactId", "text" ] }, "return_parameters": { "type": "object", "properties": { "description": { "description": "Описание статуса", "nullable": true, "type": "string" }, "phone": { "description": "Номер: маска + 2 последние цифры номера", "nullable": true, "type": "string" }, "status": { "description": "Отправлено/не отправлено", "type": "boolean" } } }, "few_shot_examples": [ { "request": "Отправь SMS контакту с ID 111111 с текстом Hello World", "params": { "contactId": "111111", "text": "Hello world" } } ] } ```
Подробнее — в разделе [Работа с функциями](/ru/gigachat/guides/functions/overview). \n\n\nНазвание функции должно содержать только латинские буквы.\nНазвание функции не должно начинаться с цифры.\n\n\n\n\n","example":"weather_forecast"},"description":{"type":"string","description":"Текстовое описание функции.","example":"Прогноз погоды"},"parameters":{"type":"object","properties":{},"description":"Валидный JSON-объект с набором пар `ключ-значение`, которые описывают аргументы функции.","example":{"properties":{"location":{"type":"string","description":"Местоположение, например, название города"}}}},"few_shot_examples":{"type":"array","description":"Объекты с парами `запрос_пользователя`-`параметры_функции`, которые будут служить модели примерами ожидаемого результата.\n","items":{"type":"object","required":["request","params"],"properties":{"request":{"type":"string","description":"Запрос пользователя.","example":"Погода в Москве в ближайшие три дня"},"params":{"type":"object","description":"Пример заполнения параметров пользовательской функции.","properties":{},"example":{"location":"Moscow, Russia"}}}}},"return_parameters":{"type":"object","description":"JSON-объект с описанием параметров, которые может вернуть ваша функция.","properties":{},"example":{"properties":{"location":{"type":"string","description":"Местоположение, например, название города"}}}}},"title":"CustomFunction"}}}}} />
ошибки нужно исправить.\n","type":"array","items":{"type":"object","properties":{"description":{"type":"string","description":"Описание ошибки.","example":"name is required"},"schema_location":{"type":"string","description":"Указывает, где в схеме нужно внести изменения, чтобы исправить ошибку.","example":"(root)"}}}},"warnings":{"description":"Массив с описанием предупреждений, возникших при валидации функции.\nВ отличие от предупреждений ошибки возникают, когда описание функции нарушает формат GigaChat API.\nНапример, если в описании отсутствует необязательный массив образцов `few_shot_examples are missing`.\n\nПредупреждения (массив `warnings`) не передаются, если в описании функции есть ошибки (массив `errors`).\n","type":"array","items":{"type":"object","properties":{"description":{"type":"string","description":"Описание предупреждения.","example":"few_shot_examples are missing"},"schema_location":{"type":"string","description":"Указывает, где в схеме нужно внести изменения, чтобы исправить предупреждения.","example":"(root)"}}}}},"title":"FunctionValidationResult"}}}},"400":{"description":"400 Bad request.\n\nНекорректный формат запроса.\n"},"401":{"description":"Ошибка авторизации.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer","description":"HTTP-код сообщения.","default":401},"message":{"type":"string","description":"Описание ошибки.","default":"Unauthorized"}}}}}},"429":{"description":"Слишком много запросов в единицу времени.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer","description":"HTTP-код сообщения.","default":429},"message":{"type":"string","description":"Описание ошибки.","default":"Too many requests"}}}}}},"500":{"description":"Внутренняя ошибка сервера.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer","description":"HTTP-код сообщения.","default":500},"message":{"type":"string","description":"Описание ошибки.","default":"Internal Server Error"}}}}}}}} /> --- # Получить остаток токенов [source](https://developers.sber.ru/docs/ru/gigachat/api/reference/rest/get-balance.md) ## Адрес запроса **GET** `https://api.giga.chat/v1/balance` ## Описание Возвращает доступный остаток токенов для каждой из моделей. Метод доступен только при покупке пакетов токенов. Если вы оплачиваете работу с API по схеме [pay-as-you-go](/ru/gigachat/api/tariffs), запрос вернет ошибку 403 Permission Denied. Подробнее о пакетах токенов — в разделах платные пакеты для [физических лиц](/ru/gigachat/api/tariffs) или [для ИП и юридических лиц](/ru/gigachat/api/tariffs).
нужно передать этот же заголовок.\n","schema":{"type":"string"}},{"in":"header","name":"X-Request-ID","description":"Произвольный идентификатор запроса, который используется для логирования.\nЕсли не передан явно, GigaChat API автоматически сгенерирует идентификатор в формате UUIDv4.\n","schema":{"type":"string","example":"my-request-id-1"}},{"in":"header","name":"X-Session-ID","description":"Произвольный идентификатор сессии, который используется для логирования.\nЕсли не передан явно, GigaChat API автоматически сгенерирует идентификатор в формате UUIDv4.\n","schema":{"type":"string","example":"my-session-id-1"}},{"in":"header","name":"User-Agent","description":"Произвольный идентификатор клиента.\nНаличие заголовка поможет избежать ошибки авторизации.\n","schema":{"type":"string","example":"MyApplication"}}]} /> --- # Статус пакетной задачи [source](https://developers.sber.ru/docs/ru/gigachat/api/reference/rest/get-batches.md) ## Адрес запроса **GET** `https://api.giga.chat/v1/batches` ## Описание Возвращает информацию о существующих задачах для асинхронной обработки. Если у пользователя нет задач, возвращается пустой список. Если передан path-параметр `batch_id`, отобразится информация о конкретной задаче. нужно передать этот же заголовок.\n","schema":{"type":"string"}},{"in":"header","name":"User-Agent","description":"Произвольный идентификатор клиента.\nНаличие заголовка поможет избежать ошибки авторизации.\n","schema":{"type":"string","example":"MyApplication"}},{"name":"Content-Type","in":"header","required":true,"schema":{"type":"string","default":"application/json"}},{"name":"batch_id","description":"Идентификатор ранее загруженной пакетной задачи.\n","schema":{"type":"string"},"in":"query","required":false}]} /> --- # Скачать файл [source](https://developers.sber.ru/docs/ru/gigachat/api/reference/rest/get-file-id.md) ## Адрес запроса **GET** `https://api.giga.chat/v1/files/{file_id}/content` ## Описание Возвращает файл сохраненный в хранилище. Используйте метод для скачивания изображений и 3D-моделей, созданных с помощью [встроенных функций `text2image` и `text2model3d`](/ru/gigachat/guides/functions/calling-builtin-functions). Подробнее о работе с изображениями — в разделе [Создание изображений](/ru/gigachat/guides/images-generation). нужно передать этот же заголовок.\n","schema":{"type":"string"}},{"in":"header","name":"User-Agent","description":"Произвольный идентификатор клиента.\nНаличие заголовка поможет избежать ошибки авторизации.\n","schema":{"type":"string","example":"MyApplication"}}]} /> --- # Информация о файле [source](https://developers.sber.ru/docs/ru/gigachat/api/reference/rest/get-file.md) ## Адрес запроса **GET** `https://api.giga.chat/v1/files/{file}` ## Описание Возвращает объект с описанием указанного файла. нужно передать этот же заголовок.\n","schema":{"type":"string"}},{"in":"header","name":"User-Agent","description":"Произвольный идентификатор клиента.\nНаличие заголовка поможет избежать ошибки авторизации.\n","schema":{"type":"string","example":"MyApplication"}}]} /> --- # Список доступных файлов [source](https://developers.sber.ru/docs/ru/gigachat/api/reference/rest/get-files.md) ## Адрес запроса **GET** `https://api.giga.chat/v1/files` ## Описание Возвращает массив объектов с данными доступных файлов. нужно передать этот же заголовок.\n","schema":{"type":"string"}},{"in":"header","name":"X-Request-ID","description":"Произвольный идентификатор запроса, который используется для логирования.\nЕсли не передан явно, GigaChat API автоматически сгенерирует идентификатор в формате UUIDv4.\n","schema":{"type":"string","example":"my-request-id-1"}},{"in":"header","name":"X-Session-ID","description":"Произвольный идентификатор сессии, который используется для логирования.\nЕсли не передан явно, GigaChat API автоматически сгенерирует идентификатор в формате UUIDv4.\n","schema":{"type":"string","example":"my-session-id-1"}},{"in":"header","name":"User-Agent","description":"Произвольный идентификатор клиента.\nНаличие заголовка поможет избежать ошибки авторизации.\n","schema":{"type":"string","example":"MyApplication"}}]} /> --- # Список моделей [source](https://developers.sber.ru/docs/ru/gigachat/api/reference/rest/get-models.md) ## Адрес запроса **GET** `https://api.giga.chat/v1/models` ## Описание Возвращает массив объектов с данными доступных моделей. Описание доступных моделей в разделе [Модели GigaChat](/ru/gigachat/models/main). :::note Модель GigaChat-3-Ultra доступна только физическим лицам в рамках [freemium-режима](/ru/gigachat/tariffs/individual-tariffs). Подробнее — в разделе [Выбор модели для генерации](/ru/gigachat/guides/selecting-a-model). ::: нужно передать этот же заголовок.\n","schema":{"type":"string"}},{"in":"header","name":"X-Request-ID","description":"Произвольный идентификатор запроса, который используется для логирования.\nЕсли не передан явно, GigaChat API автоматически сгенерирует идентификатор в формате UUIDv4.\n","schema":{"type":"string","example":"my-request-id-1"}},{"in":"header","name":"X-Session-ID","description":"Произвольный идентификатор сессии, который используется для логирования.\nЕсли не передан явно, GigaChat API автоматически сгенерирует идентификатор в формате UUIDv4.\n","schema":{"type":"string","example":"my-session-id-1"}},{"in":"header","name":"User-Agent","description":"Произвольный идентификатор клиента.\nНаличие заголовка поможет избежать ошибки авторизации.\n","schema":{"type":"string","example":"MyApplication"}}]} /> --- # Gigachat Api [source](https://developers.sber.ru/docs/ru/gigachat/api/reference/rest/gigachat-api.md) ## Описание В этом разделе вы узнаете как получить токен доступа и авторизовать запросы к GigaChat API. ## URL для подключения С 17 июля 2026 года для подключения к GigaChat API используется адрес — `https://api.giga.chat`. Он является целевым URL для всех пользователей: физических и юридических лиц. Если вы подключились до 17 июля 2026 года, вы можете продолжать использовать прежний адрес `https://gigachat.devices.sberbank.ru/` — он остается доступным. При этом прежний URL больше не используется для новых подключений и в дальнейшем будет выведен из эксплуатации. Поэтому рекомендуем запланировать переход на `https://api.giga.chat`. ## Получение токена доступа Чтобы получить токен, отправьте запрос : ```sh curl -L -X POST 'https://ngw.devices.sberbank.ru:9443/api/v2/oauth' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -H 'Accept: application/json' \ -H 'RqUID: <идентификатор_запроса>' \ -H 'Authorization: Basic ключ_авторизации' \ --data-urlencode 'scope=GIGACHAT_API_PERS' ``` Где: * `RqUID` — обязательный заголовок, в котором нужно передать уникальный идентификатор запроса в формате `uuid4`. Идентификатор нужно указать самостоятельно, для этого можно использовать стандартные библиотеки и классы для генерации UUID и GUID. * `Authorization` — обязательный заголовок, в котором нужно передать [ключ авторизации](/ru/gigachat/quickstart/ind-using-api). * `scope` — обязательное поле в теле запроса, которое указывает, к какой версии API выполняется запрос. Возможные значения: * `GIGACHAT_API_PERS` — доступ для физических лиц. * `GIGACHAT_API_B2B` — доступ для ИП и юридических лиц по [платным пакетам](/ru/gigachat/quickstart/legal-tokens-purchase). * `GIGACHAT_API_CORP` — доступ для ИП и юридических лиц по схеме [pay-as-you-go](/ru/gigachat/quickstart/legal-tokens-purchase). При успешном выполнении запроса GigaChat API вернет токен доступа, который действует в течение 30 минут: ```json { "access_token": "eyJhbGci3iJkaXIiLCJlbmMiOiJBMTI4R0NNIiwidHlwIjoiSldUIn0..Dx7iF7cCxL8SSTKx.Uu9bPK3tPe_crdhOJqU3fmgJo_Ffvt4UsbTG6Nn0CHghuZgA4mD9qiUiSVC--okoGFkjO77W.vjYrk3T7vGM6SoxytPkDJw", "expires_at": 1679471442 } ``` Запросы на получение токена можно отправлять до 10 раз в секунду. :::note Как получить ключ авторизации и токен доступа читайте в разделах [Быстрый старт для физических лиц](/ru/gigachat/individuals-quickstart) и [Быстрый старт для ИП и юридических лиц](/ru/gigachat/legal-quickstart). ::: ## Авторизация запросов Для авторизации запросов передавайте токен доступа в заголовке `Authorization`. Пример запроса на получение списка моделей: ```sh curl -L -X GET 'https://api.giga.chat/v1/models' \ -H 'Accept: application/json' \ -H 'Authorization: Bearer <токен_доступа>' ``` --- # Проверить текст на ИИ [source](https://developers.sber.ru/docs/ru/gigachat/api/reference/rest/post-ai-check.md) ## Адрес запроса **POST** `https://api.giga.chat/v1/ai/check` ## Описание Проверяет текст на русском языке на наличие сгенерированного с помощью нейросетевых моделей контента. Минимальная длина текста — 20 слов. Метод доступен только для юридических лиц, которые работают по схеме оплаты [pay-as-you-go](/ru/gigachat/api/tariffs). нужно передать этот же заголовок.\n","schema":{"type":"string"}},{"in":"header","name":"X-Request-ID","description":"Произвольный идентификатор запроса, который используется для логирования.\nЕсли не передан явно, GigaChat API автоматически сгенерирует идентификатор в формате UUIDv4.\n","schema":{"type":"string","example":"my-request-id-1"}},{"in":"header","name":"X-Session-ID","description":"Произвольный идентификатор сессии, который используется для логирования.\nЕсли не передан явно, GigaChat API автоматически сгенерирует идентификатор в формате UUIDv4.\n","schema":{"type":"string","example":"my-session-id-1"}},{"in":"header","name":"User-Agent","description":"Произвольный идентификатор клиента.\nНаличие заголовка поможет избежать ошибки авторизации.\n","schema":{"type":"string","example":"MyApplication"}}]} /> --- # Пакет запросов [source](https://developers.sber.ru/docs/ru/gigachat/api/reference/rest/post-batches.md) ## Адрес запроса **POST** `https://api.giga.chat/v1/batches` ## Описание Создает задачу на обработку большого пакета запросов в асинхронном режиме. Пакетный режим доступен при оплате работы с GigaChat API по схеме [pay-as-you-go](/ru/gigachat/api/tariffs). Запрос принимает файл формата JSONL. Каждая строка в файле должна содержать валидный JSON-объект с запросом на [генерацию](/ru/gigachat/api/reference/rest/post-chat) или [векторное представление текста](/ru/gigachat/api/reference/rest/post-embeddings). Подробнее — в разделе [Обработка задач в пакетном режиме](/ru/gigachat/guides/batches). нужно передать этот же заголовок.\n","schema":{"type":"string"}},{"in":"header","name":"X-Request-ID","description":"Произвольный идентификатор запроса, который используется для логирования.\nЕсли не передан явно, GigaChat API автоматически сгенерирует идентификатор в формате UUIDv4.\n","schema":{"type":"string","example":"my-request-id-1"}},{"in":"header","name":"X-Session-ID","description":"Произвольный идентификатор сессии, который используется для логирования.\nЕсли не передан явно, GigaChat API автоматически сгенерирует идентификатор в формате UUIDv4.\n","schema":{"type":"string","example":"my-session-id-1"}},{"in":"header","name":"User-Agent","description":"Произвольный идентификатор клиента.\nНаличие заголовка поможет избежать ошибки авторизации.\n","schema":{"type":"string","example":"MyApplication"}},{"name":"method","in":"query","schema":{"type":"string","description":"Имя метода, в который далее пойдет запрос на выполнение (`chat_completions` или `embedder`).","enum":["chat_completions","embedder"]}}]} /> --- # Сгенерировать ответ V2 [source](https://developers.sber.ru/docs/ru/gigachat/api/reference/rest/post-chat-v-2.md) ## Адрес запроса **POST** `https://api.giga.chat/v2/chat/completions` ## Описание Возвращает ответ модели, сгенерированный на основе переданных сообщений. Для экономии токенов передавайте текст сообщений (поле `content`) в кодировке UTF8. **Обработка файлов** Вы можете генерировать ответы на основе текстовых документов, изображений и аудиофайлов, загруженных в ваше хранилище. Для этого, передайте идентификаторы нужных файлов в сообщении с запросом, в массиве `content.files` сообщения пользователя. **Ограничения** Большие текстовые файлы могут превысить контекст модели. В таком случае API вернет ошибку с кодом 422. Попробуйте разбить их на несколько запросов или убрать лишнее. нужно передать этот же заголовок.\n","schema":{"type":"string"}},{"in":"header","name":"X-Request-ID","description":"Произвольный идентификатор запроса, который используется для логирования.\nЕсли не передан явно, GigaChat API автоматически сгенерирует идентификатор в формате UUIDv4.\n","schema":{"type":"string","example":"my-request-id-1"}},{"in":"header","name":"X-Session-ID","description":"Произвольный идентификатор сессии, который используется для логирования.\nЕсли не передан явно, GigaChat API автоматически сгенерирует идентификатор в формате UUIDv4.\n","schema":{"type":"string","example":"my-session-id-1"}}]} /> \n\n\nИспользование параметра согласуется отдельно.\n\n\n\n\n\nПринимает целое число от 1 до 5, указывающее количество наиболее вероятных токенов для каждой позиции.\n\nПараметр полезен для анализа, почему модель выбрала именно такой токен, а также для отладки и исследований поведения модели.\n","minimum":1,"maximum":5,"example":3},"response_format":{"type":"object","description":"Формат данных в ответе модели.\nИспользуется для [генерации структурированных данных](/ru/gigachat/guides/structured-output).\n","discriminator":{"propertyName":"type","description":"Задает тип данных, которые должна сгенерировать модель.\nВозможные значения:\n\n* `text` — ответ модели будет возвращен в виде текста. В этом случае объект `response_fortmat` не может содержать другие поля;\n* `json_schema` — ответ модели будет возвращен в виде JSON-объекта, который соответствует JSON-схеме, описанной в поле `schema`;\n","mapping":{"json_schema":{"type":"object","required":["schema"],"properties":{"type":{"type":"string","description":"Модель вернет ответ в виде JSON-объекта.\nФормат ответа будет соответствовать JSON-схеме, описанной в поле `schema`.\n","default":"json_schema"},"schema":{"type":"object","description":"JSON-схема данных, которой должен соответствовать ответ модели.\n\nДля строгого соответствия схеме, передайте список обязательных полей в массиве `required` и задайте параметр `\"strict\": true`.\nВ этом случае ответ будет содержать все поля, в том числе необязательные.\n\nЕсли в описании отсуствтует массив `required` с обязательными полями, модель вернет произвольный JSON-объект.\n","example":{"type":"object","properties":{"date":{"type":"string","description":"Дата в формате dd.mm"},"event":{"type":"string","description":"Наименование события"}},"required":["date"]}},"strict":{"type":"boolean","description":"Указывает, что модель должна вернуть ответ строго в соответствии со схемой, описанной в поле `schema`.\nПри этом описание должно содержать массив `required`, со списком обязательных полей.\n","example":true}},"title":"ChatResponseFormatJsonSchema"},"text":{"type":"object","properties":{"type":{"type":"string","description":"Модель вернет ответ в виде текста.\nВ этом случае объект `response_fortmat` не может содержать другие поля.\n","default":"text"}},"title":"ChatResponseFormatText"}}},"properties":{"type":{"type":"string"}},"required":["type"],"oneOf":[{"type":"object","required":["schema"],"properties":{"type":{"type":"string","description":"Модель вернет ответ в виде JSON-объекта.\nФормат ответа будет соответствовать JSON-схеме, описанной в поле `schema`.\n","default":"json_schema"},"schema":{"type":"object","description":"JSON-схема данных, которой должен соответствовать ответ модели.\n\nДля строгого соответствия схеме, передайте список обязательных полей в массиве `required` и задайте параметр `\"strict\": true`.\nВ этом случае ответ будет содержать все поля, в том числе необязательные.\n\nЕсли в описании отсуствтует массив `required` с обязательными полями, модель вернет произвольный JSON-объект.\n","example":{"type":"object","properties":{"date":{"type":"string","description":"Дата в формате dd.mm"},"event":{"type":"string","description":"Наименование события"}},"required":["date"]}},"strict":{"type":"boolean","description":"Указывает, что модель должна вернуть ответ строго в соответствии со схемой, описанной в поле `schema`.\nПри этом описание должно содержать массив `required`, со списком обязательных полей.\n","example":true}},"title":"ChatResponseFormatJsonSchema"},{"type":"object","properties":{"type":{"type":"string","description":"Модель вернет ответ в виде текста.\nВ этом случае объект `response_fortmat` не может содержать другие поля.\n","default":"text"}},"title":"ChatResponseFormatText"}],"title":"ChatResponseFormat"}}},"stream":{"type":"boolean","description":"Указывает, что сообщения надо передавать по частям в потоке.\n\nСообщения передаются по протоколу [SSE](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#event_stream_format).\n\nТипы событий в потоке:\n\n * `response.message.delta` — дельта изменений сообщения;\n * `response.message.done` — последнее сообщение в потоке;\n \n Пример события:\n\n ```sh\n event: response.message.done\n data: {\"model\":\"GigaChat\",\"created_at\":\"167890456789\",\"finish_reason\":\"error\",\"usage\":{\"input_tokens\":0,\"input_tokens_details\":{\"prompt_tokens\":0,\"cached_tokens\":0},\"output_tokens\":0,\"total_tokens\":0}}\n ```\n\n * `response.tool.in_progress` — данные о выполнении инструмента (встроенной функции);\n * `response.tool.completed` — информация о завершении выполнения инструмента (встроенной функции).\n","default":false},"disable_filter":{"type":"boolean","description":"Отключение фильтра цензуры.\nЗаменяет параметр `profanity_check`.\n\n\n\n\n\nОтключение цензуры согласуется отдельно.\n\n\n\n\n"},"ranker_options":{"type":"object","description":"Параметры ранжирования инструментов (`tools`).","properties":{"enabled":{"type":"boolean","description":"Включение ранжирования инструментов.","example":true},"top_n":{"type":"integer","description":"Количество инструментов (встроенных функций), которое передается в модель после ранжирования.\n","example":4},"embeddings_model":{"type":"string","description":"Модель для векторного представления, которая будет использована для ранжирования.\n\nДоступные модели можно посмотреть с помощью [`GET /models`](/ru/gigachat/api/reference/rest/get-models).\n"}}},"user_info":{"type":"object","description":"Дополнительная информация о клиенте, которая может улучшить качество ответа модели.","properties":{"timezone":{"type":"string","description":"Часовой пояс в формате IANA.","example":"Europe/Moscow"}}},"tool_config":{"type":"object","description":"Параметры вызова инструментов и пользовательских функций.","required":["mode"],"properties":{"mode":{"type":"string","enum":["auto","none","forced"],"description":"Режим вызова.\n\nВозможные значения:\n\n* `auto` — автоматический режим.\nВ этом режиме модель, основываясь на тексте сообщений, решает нужно ли использовать один из инструментов или функций, переданных в массиве `tools`.\nИспользуется по умолчанию, если запрос содержит массив `tools` и режим не задан явно;\n* `none` — отключение работы с инструментами и функциями.\nЕсли передать `none`, модель просто сгенерирует ответ в соответствии с полученными сообщениями;\n* `forced` — принудительный вызов инструмента или генерация аргументов для собственной функции. В этом режиме обязательно нужно передать название в соответствующем поле `tool_name` или `function_name`.\n"},"tool_name":{"type":"string","description":"Название инструмента, который должна использовать модель при обработке запроса.\nПередается при запуске в принудительном режиме (`\"mode\": \"forced\"`).\n"},"function_name":{"type":"string","description":"Название собственной функции, аргументы для которой должна сгенерировать модель при обработке запроса.\nПередается при запуске в принудительном режиме (`\"mode\": \"forced\"`).\n"}}},"tools":{"type":"array","items":{"oneOf":[{"type":"object","description":"Объект с массивом пользовательских функций, для которых модель может сгенерировать аргументы.","properties":{"functions":{"type":"object","properties":{"specifications":{"type":"array","description":"Массив с описанием пользовательских функций.","items":{"description":"Описание пользовательской функции.","type":"object","required":["name","parameters"],"properties":{"name":{"type":"string","description":"Название пользовательской функции, для которой будут сгенерированы аргументы.\n\n\n\n\n\nНазвание функции должно содержать только латинские буквы.\nНазвание функции не должно начинаться с цифры.\n\n\n\n\n","example":"weather_forecast"},"description":{"type":"string","description":"Текстовое описание функции.","example":"Прогноз погоды"},"parameters":{"type":"object","properties":{},"description":"Валидный JSON-объект с набором пар `ключ-значение`, которые описывают аргументы функции.","example":{"properties":{"location":{"type":"string","description":"Местоположение, например, название города"}}}},"few_shot_examples":{"type":"array","description":"Объекты с парами `запрос_пользователя`-`параметры_функции`, которые будут служить модели примерами ожидаемого результата.\n","items":{"type":"object","required":["request","params"],"properties":{"request":{"type":"string","description":"Запрос пользователя.","example":"Погода в Москве в ближайшие три дня"},"params":{"type":"object","description":"Пример заполнения параметров пользовательской функции.","properties":{},"example":{"location":"Moscow, Russia"}}}}},"return_parameters":{"type":"object","description":"JSON-объект с описанием параметров, которые может вернуть ваша функция.","properties":{},"example":{"properties":{"location":{"type":"string","description":"Местоположение, например, название города"}}}}},"title":"CustomFunction"}}}}},"title":"ToolsFunctions"},{"type":"object","description":"Встроенная функция для генерации изображений на основе текстового описания.","properties":{"image_generate":{"description":"Пустой JSON-объект.","type":"object","example":{}}},"title":"ToolImageGenerate"},{"type":"object","description":"Встроенная функция для генерации 3D-моделей на основе текстового описания.","properties":{"model_3d_generate":{"description":"Пустой JSON-объект.","type":"object"}},"title":"ToolModel3DGenerate"}]}}},"title":"ChatCompletionV2Request"},"examples":{"Генерация изображения":{"value":{"model":"GigaChat-2-Max","messages":[{"role":"system","content":[{"text":"Ты — Василий Кандинский."}]},{"role":"user","content":[{"text":"Нарисуй розового слона."}]}],"tool_config":{"mode":"auto","tool_name":"image_generate"},"tools":[{"image_generate":{}}]}},"Аргументы для функции":{"value":{"model":"GigaChat-2-Max","messages":[{"role":"user","content":[{"text":"Погода в Болхове на неделю"}]}],"tool_config":{"mode":"auto","function_name":"weather_forecast"},"tools":[{"functions":{"specifications":[{"name":"weather_forecast","description":"Прогноз погоды","parameters":{"properties":{"location":{"type":"string","description":"Местоположение, например, название города"},"num_days":{"type":"integer","description":"Временной период прогноза"}}},"few_shot_examples":[{"request":"Погода в Москве в ближайшие три дня","params":{"location":"Moscow, Russia","num_days":7}}],"return_parameters":{"properties":{"location":{"type":"string","description":"Местоположение, например, название города"}}}}]}}]}},"Принудительная генерация аргументов":{"value":{"model":"GigaChat-2-Max","messages":[{"role":"user","content":[{"text":"Как дела?"}]}],"tool_config":{"mode":"forced","function_name":"weather_forecast"},"tools":[{"functions":{"specifications":[{"name":"weather_forecast","description":"Прогноз погоды","parameters":{"properties":{"location":{"type":"string","description":"Местоположение, например, название города"},"num_days":{"type":"integer","description":"Временной период прогноза"}}},"few_shot_examples":[{"request":"Погода в Москве в ближайшие три дня","params":{"location":"Moscow, Russia","num_days":7}}],"return_parameters":{"properties":{"location":{"type":"string","description":"Местоположение, например, название города"}}}}]}}]}},"Структурный вывод (JSON)":{"value":{"model":"GigaChat-2-Max","messages":[{"role":"user","content":[{"text":"27 октября 2023 года у меня родился сын"}]}],"model_options":{"response_format":{"type":"json_schema","schema":{"type":"object","properties":{"date":{"type":"string","description":"Дата в формате dd.mm"},"event":{"type":"string","description":"Наименование события"}},"required":["date"]},"strict":true}}}}}}}}} /> `.\nВ отличие от первой версии протокола, при окончании потока приходит сообщение с типом `response.message.done`, а не обычное сообщение с `data: [DONE]`.\n\nТипы сообщений:\n\n* `response.message.delta` — дельта изменений сообщения;\n* `response.message.done` — последнее сообщение в потоке;\n \n Пример события:\n\n ```sh\n event: response.message.done\n data: {\"model\":\"GigaChat\",\"created_at\":\"167890456789\",\"finish_reason\":\"error\",\"usage\":{\"input_tokens\":0,\"input_tokens_details\":{\"prompt_tokens\":0,\"cached_tokens\":0},\"output_tokens\":0,\"total_tokens\":0}}\n ```\n\n* `response.tool.in_progress` — данные о выполнении инструмента (встроенной функции);\n* `response.tool.completed` — информация о завершении выполнения инструмента (встроенной функции).\n"},"example":"event: response.message.delta\ndata: {\"choices\":[{\"delta\":{\"content\":\"GigaChat is a service capable of interacting with the user in a dialogue format, writing code, and creating texts and images upon the user's request.\",\"role\":\"assistant\"},\"index\":0}],\"created\":1754637655,\"model\":\"GigaChat:2.0.28.2\",\"object\":\"chat.completion\"}\n\nevent: response.message.done\ndata: {\"choices\":[{\"delta\":{\"content\":\"\"},\"index\":0,\"finish_reason\":\"stop\"}],\"created\":1754637655,\"model\":\"GigaChat:2.0.28.2\",\"object\":\"chat.completion\",\"usage\":{\"prompt_tokens\":56,\"completion_tokens\":31,\"total_tokens\":87,\"precached_prompt_tokens\":3}}\n"}},"description":"Успешное выполнение запроса.\nПри запуске [потоковой генерации](/ru/gigachat/guides/response-token-streaming) передается с заголовком `Content-Type:\ttext/event-stream`.\n"},"400":{"description":"400 Bad request.\n\nНекорректный формат запроса.\n"},"401":{"description":"Ошибка авторизации.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer","description":"HTTP-код сообщения.","default":401},"message":{"type":"string","description":"Описание ошибки.","default":"Unauthorized"}}}}}},"404":{"description":"Указан неверный идентификатор модели.\n\nСписок доступных моделей и их идентификаторов — в разделе [Модели GigaChat](/docs/ru/gigachat/models/main).\n","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer","description":"HTTP-код сообщения.","default":404},"message":{"type":"string","description":"Описание ошибки.","default":"No such model"}}}}}},"422":{"description":"Ошибка валидации параметров запроса. Проверьте названия полей и значения параметров.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer","description":"HTTP-код сообщения.","default":422},"message":{"type":"string","description":"Описание ошибки.","example":"Invalid params: repetition_penalty must be in range (0, +inf)"}}}}}},"429":{"description":"Слишком много запросов в единицу времени.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer","description":"HTTP-код сообщения.","default":429},"message":{"type":"string","description":"Описание ошибки.","default":"Too many requests"}}}}}},"500":{"description":"Внутренняя ошибка сервера.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer","description":"HTTP-код сообщения.","default":500},"message":{"type":"string","description":"Описание ошибки.","default":"Internal Server Error"}}}}}}}} /> --- # Сгенерировать ответ [source](https://developers.sber.ru/docs/ru/gigachat/api/reference/rest/post-chat.md) ## Адрес запроса **POST** `https://api.giga.chat/v1/chat/completions` ## Описание Возвращает ответ модели, сгенерированный на основе переданных сообщений. Для экономии токенов передавайте текст сообщений (поле `content`) в кодировке UTF8. **Обработка файлов** Вы можете генерировать ответы на основе текстовых документов, изображений и аудиофайлов, загруженных в ваше хранилище. Для этого, передайте список идентификаторов нужных файлов в массиве `attachments`. При этом общий размер запроса с приложенными с изображениями и аудиофайлами должен быть меньше 80 Мб. Подробнее — в разделе [Обработка файлов](/ru/gigachat/guides/working-with-files). **Ограничения** Большие текстовые файлы могут превысить контекст модели. В таком случае API вернет ошибку с кодом 422. Попробуйте разбить их на несколько запросов или убрать лишнее. Одно сообщение (объект в `messages`) поддерживает только одно изображение. При этом в одном запросе можно отправить до 10 изображений, независимо от числа самих сообщений. нужно передать этот же заголовок.\n","schema":{"type":"string"}},{"in":"header","name":"X-Request-ID","description":"Произвольный идентификатор запроса, который используется для логирования.\nЕсли не передан явно, GigaChat API автоматически сгенерирует идентификатор в формате UUIDv4.\n","schema":{"type":"string","example":"my-request-id-1"}},{"in":"header","name":"X-Session-ID","description":"Произвольный идентификатор сессии, который используется для логирования.\nЕсли не передан явно, GigaChat API автоматически сгенерирует идентификатор в формате UUIDv4.\n","schema":{"type":"string","example":"my-session-id-1"}},{"in":"header","name":"User-Agent","description":"Произвольный идентификатор клиента.\nНаличие заголовка поможет избежать ошибки авторизации.\n","schema":{"type":"string","example":"MyApplication"}}]} /> .\n\nПри работе с текстовыми документами в одном запросе на генерацию нужно передавать только один идентификатор.\nЕсли вы передадите несколько идентификаторов файлов, для генерации будет использован только первый файл из списка.\nПри использовании больших текстовых файлов в запросах на генерацию, их содержимое может превышать [размер контекста модели](/ru/gigachat/models/main#modeli-dlya-generatsii).\nВ таком случае вернется [ошибка с кодом 422](/ru/gigachat/api/errors-description?responseCode=422).\n\nВ одном сообщении (объект в массиве `messages`) можно передать только одно изображение.\nВ одной сессии можно передать до 10 изображений.\n\n\n\n\n\nПри этом общий размер запроса при работе с изображениями и аудио должен быть меньше 80 Мб.\n\nНапример, ваш запрос может включать текст промпта и идентификаторы изображения размером 12 Мб, и двух аудиофайлов размером 33 Мб и 21 Мб. Что в сумме даст запрос размером больше 66 Мб, в зависимости от размера промпта.\n\nРазмер текстовых документов не влияет на размер запроса, но их содержимое может превышать контекстное окно модели.\n\n\n\n\n\nПодробнее — в разделе [Обработка файлов](/ru/gigachat/guides/working-with-files)\n","type":"array","items":{"type":"string"}}},"required":["content"],"title":"UserMessage"},"assistant":{"type":"object","properties":{"content":{"description":"Сгенерированный текст.\nЕсли модель сгенерировала аргументы для собственной функции, то поле будет пустым\n\nЕсли сообщение модели содержит аргументы для вызова собственной функции, то в истории сообщений обязательно нужно передать результами работы функции в сообщении с ролью `function`.\n\nПередавайте текст в кодировке UTF8.\nЭто позволит снизить расход токенов при обработке сообщения.\n","type":"string","example":"В Болхове сейчас +15°C, облачно"},"functions_state_id":{"type":"string","format":"UUIDv4","description":"Идентификатор, который объединяет функции, использованные в запросе.\nВозвращается в ответе модели (сообщение с `\"role\": \"assistant\"`) при вызове встроенных или генерации аргументов для собственных функций.\n\nПозволяет сохранить [состояние обращения к функции](/ru/gigachat/guides/functions/calling-builtin-functions#sohranenie-konteksta) и повысить качество работы модели.\nДля этого нужно передать идентификатор в запросе на генерацию в сообщении с ролью `assistant`.\n\nЕсли идентификатор взят из ответа со сгенерированными аргументами, то в истории сообщений нужно передать результат работы функции в сообщении с ролью `function`.\nВ противном случае вернется ошибка: «Invalid params: every assistant function call must have a result in history».\n"},"function_call":{"type":"object","description":"Данные для вызова собственной функции.\nПрисутствует в сообщениях с ролью `assistant`, когда модель вместо обычного ответа генерирует аргументы для вызова функции.\n\nЕсли поле передается в запросе на генерацию (в сообщении с ролью `assistant`), то в истории сообщений так же нужно передать результат вызова функции в сообщении с ролью `function`.\nВ противном случае вернется ошибка: «Invalid params: every assistant function call must have a result in history».\n","properties":{"name":{"type":"string","description":"Название функции, которую нужно вызвать.\n","example":"get_weather"},"arguments":{"type":"string","description":"Аргументы для вызова функции в формате JSON, обернутые в строку.\nМодель генерирует эти аргументы в соответствии со схемой, описанной в функции.\n","example":"{\\\"location\\\": \\\"Манжерок\\\", \\\"unit\\\": \\\"celsius\\\"}"}},"required":["name","arguments"],"title":"FunctionCallArgs"}},"required":["content"],"title":"AssistantMessage"},"function":{"type":"object","properties":{"content":{"description":"Результат работы функции в виде обернутого в строку JSON-объекта.\n","type":"string","example":"{\\\"location\\\": \\\"Манжерок, Россия\\\", \\\"temperature\\\": 15, \\\"forecast\\\": \\\"дожди\\\"}"}},"required":["content"],"title":"FunctionMessage"}}},"properties":{"role":{"type":"string"}},"required":["role"],"oneOf":[{"type":"object","properties":{"content":{"description":"Системный промпт, который задает поведение модели.\nВ массиве `messages` системный промпт передается в первом сообщении.\nМассив может содержать только один системный промпт.\n\nПередавайте текст в кодировке UTF8.\nЭто позволит снизить расход токенов при обработке сообщения.\n","type":"string","example":"Ты — полезный AI-ассистент"}},"required":["content"],"title":"SystemMessage"},{"type":"object","properties":{"content":{"description":"Текст сообщения пользователя.\n\nПередавайте текст в кодировке UTF8.\nЭто позволит снизить расход токенов при обработке сообщения.\n","type":"string","example":"Погода в Болхове"},"attachments":{"description":"Массив идентификаторов файлов, которые нужно использовать при генерации.\nИдентификатор присваивается файлу при [загрузке в хранилище](/ru/gigachat/api/reference/rest/post-file).\nПосмотреть список файлов в хранилище можно с помощью метода .\n\nПри работе с текстовыми документами в одном запросе на генерацию нужно передавать только один идентификатор.\nЕсли вы передадите несколько идентификаторов файлов, для генерации будет использован только первый файл из списка.\nПри использовании больших текстовых файлов в запросах на генерацию, их содержимое может превышать [размер контекста модели](/ru/gigachat/models/main#modeli-dlya-generatsii).\nВ таком случае вернется [ошибка с кодом 422](/ru/gigachat/api/errors-description?responseCode=422).\n\nВ одном сообщении (объект в массиве `messages`) можно передать только одно изображение.\nВ одной сессии можно передать до 10 изображений.\n\n\n\n\n\nПри этом общий размер запроса при работе с изображениями и аудио должен быть меньше 80 Мб.\n\nНапример, ваш запрос может включать текст промпта и идентификаторы изображения размером 12 Мб, и двух аудиофайлов размером 33 Мб и 21 Мб. Что в сумме даст запрос размером больше 66 Мб, в зависимости от размера промпта.\n\nРазмер текстовых документов не влияет на размер запроса, но их содержимое может превышать контекстное окно модели.\n\n\n\n\n\nПодробнее — в разделе [Обработка файлов](/ru/gigachat/guides/working-with-files)\n","type":"array","items":{"type":"string"}}},"required":["content"],"title":"UserMessage"},{"type":"object","properties":{"content":{"description":"Сгенерированный текст.\nЕсли модель сгенерировала аргументы для собственной функции, то поле будет пустым\n\nЕсли сообщение модели содержит аргументы для вызова собственной функции, то в истории сообщений обязательно нужно передать результами работы функции в сообщении с ролью `function`.\n\nПередавайте текст в кодировке UTF8.\nЭто позволит снизить расход токенов при обработке сообщения.\n","type":"string","example":"В Болхове сейчас +15°C, облачно"},"functions_state_id":{"type":"string","format":"UUIDv4","description":"Идентификатор, который объединяет функции, использованные в запросе.\nВозвращается в ответе модели (сообщение с `\"role\": \"assistant\"`) при вызове встроенных или генерации аргументов для собственных функций.\n\nПозволяет сохранить [состояние обращения к функции](/ru/gigachat/guides/functions/calling-builtin-functions#sohranenie-konteksta) и повысить качество работы модели.\nДля этого нужно передать идентификатор в запросе на генерацию в сообщении с ролью `assistant`.\n\nЕсли идентификатор взят из ответа со сгенерированными аргументами, то в истории сообщений нужно передать результат работы функции в сообщении с ролью `function`.\nВ противном случае вернется ошибка: «Invalid params: every assistant function call must have a result in history».\n"},"function_call":{"type":"object","description":"Данные для вызова собственной функции.\nПрисутствует в сообщениях с ролью `assistant`, когда модель вместо обычного ответа генерирует аргументы для вызова функции.\n\nЕсли поле передается в запросе на генерацию (в сообщении с ролью `assistant`), то в истории сообщений так же нужно передать результат вызова функции в сообщении с ролью `function`.\nВ противном случае вернется ошибка: «Invalid params: every assistant function call must have a result in history».\n","properties":{"name":{"type":"string","description":"Название функции, которую нужно вызвать.\n","example":"get_weather"},"arguments":{"type":"string","description":"Аргументы для вызова функции в формате JSON, обернутые в строку.\nМодель генерирует эти аргументы в соответствии со схемой, описанной в функции.\n","example":"{\\\"location\\\": \\\"Манжерок\\\", \\\"unit\\\": \\\"celsius\\\"}"}},"required":["name","arguments"],"title":"FunctionCallArgs"}},"required":["content"],"title":"AssistantMessage"},{"type":"object","properties":{"content":{"description":"Результат работы функции в виде обернутого в строку JSON-объекта.\n","type":"string","example":"{\\\"location\\\": \\\"Манжерок, Россия\\\", \\\"temperature\\\": 15, \\\"forecast\\\": \\\"дожди\\\"}"}},"required":["content"],"title":"FunctionMessage"}],"title":"message"}},"function_call":{"description":"Явно задает [режим работы с функциями](/ru/gigachat/guides/functions/function-calling-modes).\n\nВозможные значения:\n\n* строка `none`;\n* строка `auto`;\n* объект `{\"name\": \"название_функции\"}`.\n","oneOf":[{"type":"string","description":"Отключение работы с функциями.\n\nЕсли передать `none`, модель не будет вызывать встроенные функции или генерировать аргументы для пользовательских функций, а просто сгенерирует ответ в соответствии с полученными сообщениями.\n","example":"none","title":"function_call_none"},{"type":"string","description":"Автоматический режим работы с функциями.\n\nВ этом режиме модель, основываясь на тексте сообщений, решает нужно ли использовать одну из [встроенных функций](/ru/gigachat/guides/functions/calling-builtin-functions) или сгенерировать аргументы для пользовательских функций, описанных в массиве `functions`.\nПри этом, если массив содержит описание хотя бы одной пользовательской функции, модель сможет вызвать встроенную функцию, только если ее название передано в массиве `functions`:\n\n```json \n{\n ,,,\n \"function_call\": \"auto\",\n \"functions\": [\n\t {\n \"name\": \"text2image\"\t\t\t\n\t },\n {\n \"name\": \"weather_forecast\",\n \"description\": \"Возвращает температуру на заданный период\",\n \"parameters\": {}\n }\n ]\n ...\n}\n```\n","example":"auto","title":"function_call_auto"},{"type":"object","properties":{"name":{"type":"string","description":"Работа с функциями в принудительном режиме.\n\nВ поле можно передать как название собственной функции, описание которой содержится в массиве `functions`, так и название одной из [встроенных функций](/ru/gigachat/guides/functions/calling-builtin-functions):\n\n```json \n{\n ...\n \"function_call\": {\n \"name\": \"weather_forecast\"\n },\n \"functions\": [\n {\n \"name\": \"weather_forecast\",\n ...\n }\n ]\n ...\n}\n```\n"}},"title":"function_call_name"}]},"functions":{"type":["null","array"],"description":"Массив с описанием пользовательских функций.","items":{"description":"Описание пользовательской функции.","type":"object","required":["name","parameters"],"properties":{"name":{"type":"string","description":"Название пользовательской функции, для которой будут сгенерированы аргументы.\n\n\n\n\n\nНазвание функции должно содержать только латинские буквы.\nНазвание функции не должно начинаться с цифры.\n\n\n\n\n","example":"weather_forecast"},"description":{"type":"string","description":"Текстовое описание функции.","example":"Прогноз погоды"},"parameters":{"type":"object","properties":{},"description":"Валидный JSON-объект с набором пар `ключ-значение`, которые описывают аргументы функции.","example":{"properties":{"location":{"type":"string","description":"Местоположение, например, название города"}}}},"few_shot_examples":{"type":"array","description":"Объекты с парами `запрос_пользователя`-`параметры_функции`, которые будут служить модели примерами ожидаемого результата.\n","items":{"type":"object","required":["request","params"],"properties":{"request":{"type":"string","description":"Запрос пользователя.","example":"Погода в Москве в ближайшие три дня"},"params":{"type":"object","description":"Пример заполнения параметров пользовательской функции.","properties":{},"example":{"location":"Moscow, Russia"}}}}},"return_parameters":{"type":"object","description":"JSON-объект с описанием параметров, которые может вернуть ваша функция.","properties":{},"example":{"properties":{"location":{"type":"string","description":"Местоположение, например, название города"}}}}},"title":"CustomFunction"},"title":"CustomFunctions"},"temperature":{"format":"float","type":["null","number"],"description":"Температура выборки регулирует степень случайности ответов модели.\nВысокое значение делает ответы разнообразными и неожиданными, низкое — предсказуемыми и стабильными.\nКогда температура меньше 0.001, включается режим строгого контроля, дающий одинаковые ответы. А при температуре больше 2 реакция становится чрезмерно беспорядочной.\n\nБазовое значение температуры зависит от модели, которая генерирует ответ, и меняется вместе с улучшениями модели.\n","minimum":0,"exclusiveMinimum":0},"top_p":{"format":"float","type":["null","number"],"description":"Параметр используется как альтернатива температуре (поле `temperature`). Задает вероятностную массу токенов, которые должна учитывать модель.\nТак, если передать значение 0.1, модель будет учитывать только токены, чья вероятностная масса входит в верхние 10%.\n\nЗначение по умолчанию зависит от выбранной модели (поле `model`) и может изменяться с обновлениями модели.\n\nЗначение изменяется в диапазоне от 0 до 1 включительно.\n","minimum":0,"maximum":1},"stream":{"type":"boolean","description":"Указывает, что сообщения надо передавать по частям в потоке.\n\nСообщения передаются по протоколу [SSE](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#event_stream_format).\n\nПоток завершается событием `data: [DONE]`.\n\nПодробнее читайте в разделе [Потоковая генерация токенов](/ru/gigachat/guides/response-token-streaming).\n","default":false,"example":false},"max_tokens":{"description":"Максимальное количество токенов, которые будут использованы для создания ответов.","format":"int32","type":["null","integer"],"exclusiveMinimum":0,"example":30},"repetition_penalty":{"type":["null","number"],"format":"float","description":"Количество повторений слов:\n\n* Значение 1.0 — нейтральное значение.\n* При значении больше 1 модель будет стараться не повторять слова.\n\nЗначение по умолчанию зависит от выбранной модели (поле `model`) и может изменяться с обновлениями модели.\n","example":1},"update_interval":{"type":"number","description":"Параметр потокового режима (`\"stream\": \"true\"`).\nЗадает минимальный интервал в секундах, который проходит между отправкой токенов.\nНапример, если указать `1`, сообщения будут приходить каждую секунду, но размер каждого из них будет больше, так как за секунду накапливается много токенов.\n","default":0,"example":0},"response_format":{"type":"object","description":"Формат данных в ответе модели.\nИспользуется для [генерации структурированных данных](/ru/gigachat/guides/structured-output).\n","discriminator":{"propertyName":"type","description":"Задает тип данных, которые должна сгенерировать модель.\nВозможные значения:\n\n* `text` — ответ модели будет возвращен в виде текста. В этом случае объект `response_fortmat` не может содержать другие поля;\n* `json_schema` — ответ модели будет возвращен в виде JSON-объекта, который соответствует JSON-схеме, описанной в поле `schema`;\n","mapping":{"json_schema":{"type":"object","required":["schema"],"properties":{"type":{"type":"string","description":"Модель вернет ответ в виде JSON-объекта.\nФормат ответа будет соответствовать JSON-схеме, описанной в поле `schema`.\n","default":"json_schema"},"schema":{"type":"object","description":"JSON-схема данных, которой должен соответствовать ответ модели.\n\nДля строгого соответствия схеме, передайте список обязательных полей в массиве `required` и задайте параметр `\"strict\": true`.\nВ этом случае ответ будет содержать все поля, в том числе необязательные.\n\nЕсли в описании отсуствтует массив `required` с обязательными полями, модель вернет произвольный JSON-объект.\n","example":{"type":"object","properties":{"date":{"type":"string","description":"Дата в формате dd.mm"},"event":{"type":"string","description":"Наименование события"}},"required":["date"]}},"strict":{"type":"boolean","description":"Указывает, что модель должна вернуть ответ строго в соответствии со схемой, описанной в поле `schema`.\nПри этом описание должно содержать массив `required`, со списком обязательных полей.\n","example":true}},"title":"ChatResponseFormatJsonSchema"},"text":{"type":"object","properties":{"type":{"type":"string","description":"Модель вернет ответ в виде текста.\nВ этом случае объект `response_fortmat` не может содержать другие поля.\n","default":"text"}},"title":"ChatResponseFormatText"}}},"properties":{"type":{"type":"string"}},"required":["type"],"oneOf":[{"type":"object","required":["schema"],"properties":{"type":{"type":"string","description":"Модель вернет ответ в виде JSON-объекта.\nФормат ответа будет соответствовать JSON-схеме, описанной в поле `schema`.\n","default":"json_schema"},"schema":{"type":"object","description":"JSON-схема данных, которой должен соответствовать ответ модели.\n\nДля строгого соответствия схеме, передайте список обязательных полей в массиве `required` и задайте параметр `\"strict\": true`.\nВ этом случае ответ будет содержать все поля, в том числе необязательные.\n\nЕсли в описании отсуствтует массив `required` с обязательными полями, модель вернет произвольный JSON-объект.\n","example":{"type":"object","properties":{"date":{"type":"string","description":"Дата в формате dd.mm"},"event":{"type":"string","description":"Наименование события"}},"required":["date"]}},"strict":{"type":"boolean","description":"Указывает, что модель должна вернуть ответ строго в соответствии со схемой, описанной в поле `schema`.\nПри этом описание должно содержать массив `required`, со списком обязательных полей.\n","example":true}},"title":"ChatResponseFormatJsonSchema"},{"type":"object","properties":{"type":{"type":"string","description":"Модель вернет ответ в виде текста.\nВ этом случае объект `response_fortmat` не может содержать другие поля.\n","default":"text"}},"title":"ChatResponseFormatText"}],"title":"ChatResponseFormat"}},"title":"Chat"},"examples":{"Текст":{"value":{"model":"GigaChat","messages":[{"role":"system","content":"Ты — профессиональный переводчик на английский язык. Переведи точно сообщение пользователя."},{"role":"user","content":"GigaChat — это сервис, который умеет взаимодействовать с пользователем в формате диалога, писать код, создавать тексты и картинки по запросу пользователя."}],"stream":false,"update_interval":0}},"Изображение":{"value":{"model":"GigaChat","messages":[{"role":"system","content":"Ты — Василий Кандинский"},{"role":"user","content":"Нарисуй розового кота"}],"function_call":"auto"}},"Аргументы для функции":{"value":{"model":"GigaChat-2-Pro","messages":[{"role":"user","content":"Погода в Манжероке на десять дней"}],"functions":[{"name":"weather_forecast","description":"Возвращает температуру на заданный период","parameters":{"type":"object","properties":{"location":{"type":"string","description":"Местоположение, например, название города"},"format":{"type":"string","enum":["celsius","fahrenheit"],"description":"Единицы измерения температуры"},"num_days":{"type":"integer","description":"Период, для которого нужно вернуть"}},"required":["location","num_days"]},"few_shot_examples":[{"request":"Какая погода в Москве в ближайшие три дня","params":{"location":"Moscow, Russia","format":"celsius","num_days":"3"}}],"return_parameters":{"type":"object","properties":{"location":{"type":"string","description":"Местоположение, например, название города"},"temperature":{"type":"integer","description":"Температура для заданного местоположения"},"forecast":{"type":"array","items":{"type":"string"},"description":"Описание погодных условий"},"error":{"type":"string","description":"Возвращается при возникновении ошибки. Содержит описание ошибки"}}}}]}},"Структурный вывод (JSON)":{"value":{"model":"GigaChat-2-Max","messages":[{"content":"27 октября 2023 года у меня родился сын","role":"user"}],"response_format":{"type":"json_schema","schema":{"type":"object","properties":{"date":{"type":"string","description":"Дата в формате dd.mm"},"event":{"type":"string","description":"Наименование события"}},"required":["date"]},"strict":true}}}}}}}} /> \n\n\nДля повышения вероятности использования сохраненных токенов используйте [кэширование запросов](/ru/gigachat/guides/keeping-context#keshirovanie-zaprosov).\n\n\n\n\n\n[Подробнее о подсчете токенов](/ru/gigachat/guides/counting-tokens).\n","type":"integer","example":37},"total_tokens":{"format":"int32","description":"Общее число токенов, подлежащих тарификации, после вычитания кэшированных токенов (поле `precached_prompt_tokens`).","type":"integer","example":5}},"title":"Usage"},"object":{"type":"string","description":"Название вызываемого метода.","example":"chat.completion"}},"title":"ChatCompletion"},"examples":{"Текст":{"value":{"choices":[{"message":{"content":"GigaChat is a service capable of interacting with the user in a dialogue format, writing code, and creating texts and images upon user's request.","role":"assistant"},"index":0,"finish_reason":"stop"}],"created":1760434636,"model":"GigaChat:2.0.28.2","object":"chat.completion","usage":{"prompt_tokens":55,"completion_tokens":30,"total_tokens":85,"precached_prompt_tokens":4}}},"Изображение":{"value":{"choices":[{"message":{"content":" вот мой рисунок розового кота.","role":"assistant","functions_state_id":"0199e20f-058c-70c0-9850-6400dd41a853"},"index":0,"finish_reason":"stop"}],"created":1760434259,"model":"GigaChat:2.0.28.2","object":"chat.completion","usage":{"prompt_tokens":626,"completion_tokens":43,"total_tokens":669,"precached_prompt_tokens":3}}},"Аргументы для функции":{"value":{"choices":[{"message":{"content":"","role":"assistant","function_call":{"name":"weather_forecast","arguments":{"location":"Манжерок","num_days":10}},"functions_state_id":"0199e210-2f13-744c-8fe5-c9a19fe27db7"},"index":0,"finish_reason":"function_call"}],"created":1760434335,"model":"GigaChat-2-Pro:2.0.28.2","object":"chat.completion","usage":{"prompt_tokens":278,"completion_tokens":35,"total_tokens":313,"precached_prompt_tokens":0}}}}},"text/event-stream":{"schema":{"type":"string","description":"Событие формата [Server-Sent Events](https://html.spec.whatwg.org/multipage/server-sent-events.html).\nКаждое событие содерджит сообщение вида `data: `.\nВ последнем событии приходит сообщение `data: [DONE]`.\n\nПример фрагмента:\n\n```json\n{\n \"choices\": [\n {\n \"delta\": {\n \"content\": \"GigaChat is a service capable of interacting with the user in a dialogue format, writing code, and creating texts and images upon the user's request.\",\n \"role\": \"assistant\"\n },\n \"index\": 0\n }\n ],\n \"created\": 1754637655,\n \"model\": \"GigaChat:2.0.28.2\",\n \"object\": \"chat.completion\"\n}\n```\n"},"example":"data: {\"choices\":[{\"delta\":{\"content\":\"GigaChat is a service capable of interacting with the user in a dialogue format, writing code, and creating texts and images upon the user's request.\",\"role\":\"assistant\"},\"index\":0}],\"created\":1754637655,\"model\":\"GigaChat:2.0.28.2\",\"object\":\"chat.completion\"}\n\ndata: {\"choices\":[{\"delta\":{\"content\":\"\"},\"index\":0,\"finish_reason\":\"stop\"}],\"created\":1754637655,\"model\":\"GigaChat:2.0.28.2\",\"object\":\"chat.completion\",\"usage\":{\"prompt_tokens\":56,\"completion_tokens\":31,\"total_tokens\":87,\"precached_prompt_tokens\":3}}\n\ndata: [DONE]\n"}},"description":"Успешное выполнение запроса.\nПри запуске [потоковой генерации](/docs/ru/gigachat/guides/response-token-streaming) передается с заголовком `Content-Type:\ttext/event-stream`.\n"},"400":{"description":"400 Bad request.\n\nНекорректный формат запроса.\n"},"401":{"description":"Ошибка авторизации.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer","description":"HTTP-код сообщения.","default":401},"message":{"type":"string","description":"Описание ошибки.","default":"Unauthorized"}}}}}},"404":{"description":"Указан неверный идентификатор модели.\n\nСписок доступных моделей и их идентификаторов — в разделе [Модели GigaChat](/docs/ru/gigachat/models/main).\n","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer","description":"HTTP-код сообщения.","default":404},"message":{"type":"string","description":"Описание ошибки.","default":"No such model"}}}}}},"422":{"description":"Ошибка валидации параметров запроса. Проверьте названия полей и значения параметров.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer","description":"HTTP-код сообщения.","default":422},"message":{"type":"string","description":"Описание ошибки.","example":"Invalid params: repetition_penalty must be in range (0, +inf)"}}}}}},"429":{"description":"Слишком много запросов в единицу времени.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer","description":"HTTP-код сообщения.","default":429},"message":{"type":"string","description":"Описание ошибки.","default":"Too many requests"}}}}}},"500":{"description":"Внутренняя ошибка сервера.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer","description":"HTTP-код сообщения.","default":500},"message":{"type":"string","description":"Описание ошибки.","default":"Internal Server Error"}}}}}}}} /> --- # Создать эмбеддинг [source](https://developers.sber.ru/docs/ru/gigachat/api/reference/rest/post-embeddings.md) ## Адрес запроса **POST** `https://api.giga.chat/v1/embeddings` ## Описание Возвращает векторные представления соответствующих текстовых запросов. Индекс объекта с векторным представлением (поле `index`) соответствует индексу строки в массиве `input` запроса. Векторное представление выглядит как массив чисел `embedding`. Каждое значение в массиве представляет одну из характеристик или признаков текста, учтенных при вычислении эмбеддинга. Значения образуют числовое представление текста и позволяют анализировать и использовать текст в различных задачах. Как правило, чем ближе значения эмбеддингов друг к другу, тем более семантически близки тексты. Для создания эмбеддингов можно использовать [модели Embeddings, Embeddings-2 и EmbeddingsGigaR](/ru/gigachat/models/main). Запросы [тарифицируются](/ru/gigachat/api/tariffs) одинаково, независимо от использованной модели. :::tip Для улучшения результатов при работе с моделью EmbeddingsGigaR следуйте рекомендациям в разделе [Векторное представление текста](/ru/gigachat/guides/embeddings). ::: нужно передать этот же заголовок.\n","schema":{"type":"string"}},{"in":"header","name":"X-Request-ID","description":"Произвольный идентификатор запроса, который используется для логирования.\nЕсли не передан явно, GigaChat API автоматически сгенерирует идентификатор в формате UUIDv4.\n","schema":{"type":"string","example":"my-request-id-1"}},{"in":"header","name":"X-Session-ID","description":"Произвольный идентификатор сессии, который используется для логирования.\nЕсли не передан явно, GigaChat API автоматически сгенерирует идентификатор в формате UUIDv4.\n","schema":{"type":"string","example":"my-session-id-1"}},{"in":"header","name":"User-Agent","description":"Произвольный идентификатор клиента.\nНаличие заголовка поможет избежать ошибки авторизации.\n","schema":{"type":"string","example":"MyApplication"}}]} /> --- # Загрузить файл [source](https://developers.sber.ru/docs/ru/gigachat/api/reference/rest/post-file.md) ## Адрес запроса **POST** `https://api.giga.chat/v1/files` ## Описание Загружает в хранилище текстовые документы, изображения или аудиофайлы. Возвращает объект с данными загруженного файла. Загруженные файлы доступны только вам. Идентификатор файла, указанный в поле `id`, можно использовать при [запросах на генерацию](/ru/gigachat/api/reference/rest/post-chat). Для этого идентификаторы нужно передать в массиве `attachments`. Подробнее — в разделе [Обработка файлов](/ru/gigachat/guides/working-with-files). Хранилище поддерживает текстовые документы, изображения и аудиофайлы разных форматов. ```mdx-code-block ``` | Формат | MIME-тип | |--------|------------| | txt | text/plain | | doc | application/msword | | docx | application/vnd.openxmlformats-officedocument.wordprocessingml.document | | pdf | application/pdf | | epub | application/epub | | ppt | application/ppt | | pptx | application/pptx | | xlsx | application/vnd.ms-excel | ```mdx-code-block ``` ```mdx-code-block ``` | Формат | MIME-тип | |--------|------------| | jpeg | image/jpeg | | png | image/png | | tiff | image/tiff | | bmp | image/bmp | ```mdx-code-block ``` ```mdx-code-block ``` | Формат | MIME-тип | | ------ | -------------------------------------------------------------- | | mp4 | audio/mp4 | | mp3 | audio/mp3 | | m4a | audio/x-m4a | | wav | audio/x-wav
audio/wave
audio/wav
audio/x-pn-wav | | weba | audio/webm | | ogg | audio/x-ogg | | opus | audio/opus | ```mdx-code-block
```
На размеры файлов действуют ограничения: * максимальный размер одного аудиофайла в запросе — 35 Мб; * максимальный размер одного изображения в запросе — 15 Мб; * максимальный размер одного текстового файла в запросе — 40 Мб. :::note При использовании больших текстовых файлов в запросах на генерацию, их содержимое может превышать [размер контекста модели](/ru/gigachat/models/main). В таком случае вернется [ошибка с кодом 422](/ru/gigachat/api/errors-description?responseCode=422). ::: нужно передать этот же заголовок.\n","schema":{"type":"string"}},{"in":"header","name":"X-Request-ID","description":"Произвольный идентификатор запроса, который используется для логирования.\nЕсли не передан явно, GigaChat API автоматически сгенерирует идентификатор в формате UUIDv4.\n","schema":{"type":"string","example":"my-request-id-1"}},{"in":"header","name":"X-Session-ID","description":"Произвольный идентификатор сессии, который используется для логирования.\nЕсли не передан явно, GigaChat API автоматически сгенерирует идентификатор в формате UUIDv4.\n","schema":{"type":"string","example":"my-session-id-1"}},{"in":"header","name":"User-Agent","description":"Произвольный идентификатор клиента.\nНаличие заголовка поможет избежать ошибки авторизации.\n","schema":{"type":"string","example":"MyApplication"}}]} /> --- # Получить токен доступа [source](https://developers.sber.ru/docs/ru/gigachat/api/reference/rest/post-token.md) ## Адрес запроса **POST** `https://ngw.devices.sberbank.ru:9443/api/v2/oauth` ## Описание Возвращает токен доступа для авторизации запросов к API. Токен доступа действителен в течение 30 минут. Запросы на получение токена можно отправлять до 10 раз в секунду. В заголовке `Authorization` нужно передать ключ авторизации, полученный при создании проекта GigaChat API в личном кабинете. Как получить ключ авторизации читайте в разделах [Быстрый старт для физических лиц](/ru/gigachat/quickstart/ind-using-api) и [Быстрый старт для ИП и юридических лиц](/ru/gigachat/quickstart/legal-using-api).
Подробнее о ключе авторизации Ключ авторизации (англ. *Authorization key*) нужен для получения токена доступа Access token, с помощью которого авторизуются запросы к GigaChat API. Авторизационный ключ — строка, полученная в результате кодирования в Base64 клиентского идентификатора (Client ID) и ключа (Client Secret) API. Вы можете использовать готовый ключ из личного кабинета или самостоятельно закодировать Client ID и Client Secret.
--- # Подсчитать количество токенов [source](https://developers.sber.ru/docs/ru/gigachat/api/reference/rest/post-tokens-count.md) ## Адрес запроса **POST** `https://api.giga.chat/v1/tokens/count` ## Описание Возвращает объект с информацией о количестве токенов, подсчитанных заданной моделью в строках. Строки передаются в массиве `input`. нужно передать этот же заголовок.\n","schema":{"type":"string"}},{"in":"header","name":"X-Request-ID","description":"Произвольный идентификатор запроса, который используется для логирования.\nЕсли не передан явно, GigaChat API автоматически сгенерирует идентификатор в формате UUIDv4.\n","schema":{"type":"string","example":"my-request-id-1"}},{"in":"header","name":"X-Session-ID","description":"Произвольный идентификатор сессии, который используется для логирования.\nЕсли не передан явно, GigaChat API автоматически сгенерирует идентификатор в формате UUIDv4.\n","schema":{"type":"string","example":"my-session-id-1"}},{"in":"header","name":"User-Agent","description":"Произвольный идентификатор клиента.\nНаличие заголовка поможет избежать ошибки авторизации.\n","schema":{"type":"string","example":"MyApplication"}}]} /> --- # GigaChat gRPC API [source](https://developers.sber.ru/docs/ru/gigachat/api/reference-grpc.md) ## Описание # Обзор и proto-файл [source](https://developers.sber.ru/docs/ru/gigachat/api/reference-grpc.md) gRPC-протокол — это протокол для обмена данными с сервисом GigaChat. Подробнее о нем — в [официальной документации](https://grpc.io/). Преимущества gRPC-протокола: * максимально быстрый ответ; * поддержка отзывчивого интерфейса с отображением пользователю промежуточных результатов работы нейросети. Адрес для передачи запросов по протоколу gRPC: ```default api.giga.chat ``` Для работы с API используйте proto-файл.
gigachatv1.proto ```csharp syntax = "proto3"; package gigachat.v1; option go_package = "./;protocol"; // Возвращает ответ модели на сообщение в формате ChatRequest. service ChatService { // Возврат ответа одним фрагментом rpc Chat (ChatRequest) returns (ChatResponse); // Потоковая передача фрагментов ответа rpc ChatStream (ChatRequest) returns (stream ChatResponse); } // Сообщение, на которое ответит модель. message ChatRequest { // Параметры сообщения. ChatOptions options = 1; // [Модель](https://developers.sber.ru/docs/ru/gigachat/models/main), которая будет генерировать ответ. string model = 2; // Массив сообщений. Передавайте сообщения с ролями user и assistant, чтобы сохранить контекст разговора с моделью. repeated Message messages = 3; } // Параметры запроса, которые учитываются при генерировании ответа. message ChatOptions { reserved 3; /** * Температура выборки. Значение температуры должно быть больше ноля. Чем выше значение, тем более случайным будет ответ модели. При значениях температуры больше двух, набор токенов в ответе модели может отличаться избыточной случайностью. * Значение по умолчанию зависит от выбранной модели (поле `model`) и может изменяться с обновлениями модели. */ optional float temperature = 1; /** * Параметр используется как альтернатива температуре (поле `temperature`). Задает вероятностную массу токенов, которые должна учитывать модель. * Так, если передать значение 0.1, модель будет учитывать только токены, чья вероятностная масса входит в верхние 10%. * Значение по умолчанию зависит от выбранной модели (поле `model`) и может изменяться с обновлениями модели. * Значение изменяется в диапазоне от 0 до 1 включительно. */ optional float top_p = 2; // Максимальное количество токенов, которые будут использованы для создания ответов. По умолчанию используется 2048 токенов. optional int32 max_tokens = 4; /** * Количество повторений слов. Должно быть больше ноля. Возможные значения: * При значении от 0 до 1 модель будет повторять уже использованные слова. * Значение 1.0 — нейтральное значение. * При значении больше 1 модель будет стараться не повторять слова. * Значение по умолчанию зависит от выбранной модели (поле `model`) и может изменяться с обновлениями модели. */ optional float repetition_penalty = 5; /** * Параметр потокового режима (`"stream": "true"`). * Задает минимальный интервал в секундах, который проходит между отправкой токенов. * Например, если указать `1`, сообщения будут приходить каждую секунду, но размер каждого из них будет больше, так как за секунду накапливается много токенов. * По умолчанию 0. */ optional float update_interval = 6; repeated string flags = 7; /** * Поле, которое отвечает за то, как GigaChat будет работать с функциями. Может быть строкой или объектом. * Возможные режимы работы функций определяются в FunctionCallPolicy */ FunctionCallPolicy function_call = 8; // Массив с описанием пользовательских функций. repeated Function functions = 9; } // Режимы работы пользовательских функций. message FunctionCallPolicy { // Перечисление возможных режимов вызовов функций. // В зависимости от содержимого запроса, модель решает сгенерировать сообщение или вызвать функцию. Модель вызывает встроенные функции, если отсутствует массив `functions` с описанием пользовательских функций. enum Mode { undefined = 0; // В авторежиме модель, основываясь на тексте сообщений, решает нужно ли генерировать аргументы для функций, описанных в массиве `functions`. // При этом, если массив содержит описание хотя бы одной пользовательской функции, модель не сможет вызвать встроенную функцию, несмотря на текст сообщения. auto = 1; // Модель не будет вызывать встроенные функции или генерировать аргументы для пользовательских функций, а просто сгенерирует ответ в соответствии с полученными сообщениями. none = 2; // Принудительная генерация аргументов для указанной функции. При принудительной генерации описание функции и ее аргументов нужно обязательно передавать в массиве `functions`. forced = 3; } // Выбранный режим работы функции. Mode mode = 1; // Название пользовательской функции, для которой нужно сгенерировать аргументы. optional string name = 2; } // Описание пользовательской функции. message Function { // Название пользовательской функции, для которой будут сгенерированы аргументы. string name = 1; // Текстовое описание функции. string description = 2; // Валидный JSON-объект с набором пар `ключ-значение`, которые описывают аргументы функции. string parameters = 3; // Массив примеров работы функции в виде объекта с парами `запрос_пользователя`—`параметры_функции`, которые будут служить модели примерами ожидаемого результата. repeated AnyExample few_shot_examples = 4; // JSON-объект с описанием параметров, которые может вернуть ваша функция. optional string return_parameters = 5; } // Описание примера работы функции. message AnyExample { // Запрос пользователя string request = 1; // Массив примеров заполнения параметров пользовательской функции. Params params = 2; } // Массив параметров пользовательской функции. message Params { // Параметры функции, представленные объектами с парами `название_параметра`—`значение_параметра`, которые будут служить модели примерами ожидаемого результата. repeated Pair pairs = 1; } // Параметры фукнции, сгенерированные моделью в формате `ключ-значение`. message Pair { // Название параметра string key = 1; // Значение параметра string value = 2; } // Описывает сообщение, которое можно передавать в запросе. message Message { reserved 3,4; /** * Роль автора сообщения: * - `system` — системный промпт, который задает роль модели, например, должна модель отвечать как академик или как школьник; * - `assistant` — ответ модели; * - `user` — сообщение пользователя; * - `function` — сообщение с результатом работы пользовательской функции. В сообщении с этой ролью передавайте в поле `content` валидный JSON-объект с результатами работы функции. * Для сохранения контекста диалога с пользователем передайте несколько сообщений. Подробнее читайте в разделе [Работа с историей чата](/ru/gigachat/guides/keeping-context). */ string role = 1; /** * Содержимое сообщения. Зависит от роли. * Если поле передается в сообщении с ролью `function`, то в нем указывается валидный JSON-объект с результатом выполнения функции. * В остальных случаях содержит либо системный промпт (сообщение с ролью `system`), либо текст сообщения пользователя или модели. */ string content = 2; optional FunctionCall function_call = 5; // Название функции, которое передается в сообщение с ролью `function`. optional string function_name = 6; /** * Идентификатор, который объединяет массив функций, переданных в запросе. * Возвращается в ответе модели (сообщение с `"role": "assistant"`) если сообщение к модели содержало функции. * Позволяет сохранить контекст вызова функции и повысить качество работы модели. * Для этого нужно передать идентификатор в запросе на генерацию в сообщении с ролью `assistant`. */ optional string functions_state_id = 8; /** * Массив идентификаторов файлов, которые нужно использовать при генерации. * Идентификатор присваивается файлу при загрузке в хранилище. Посмотреть список файлов в хранилище можно с помощью метода `GET /files`. * В одном запросе можно передать только одно изображение. В одной сессии можно передать до 10 изображений. * Подробнее — в разделе [Генерация с помощью файлов изображений](/ru/gigachat/guides/images-generation). */ repeated string attachments = 11; } // Описание ответа модели. message ChatResponse { reserved 5; repeated Alternative alternatives = 1; // Данные об использовании модели. Usage usage = 2; // Данные о модели ModelInfo model_info = 3; // Время ответа. int64 timestamp = 4; } // Сгенерированное сообщение. message Alternative { Message message = 1; string finish_reason = 2; int32 index = 3; } // Информация о количестве токенов, потраченных при генерации ответа. message Usage { reserved 4; // Количество токенов во входящем сообщении (роль `user`) int32 prompt_tokens = 1; // Количество токенов, сгенерированных моделью (роль `assistant`) int32 completion_tokens = 2; // Общее количество токенов int32 total_tokens = 3; } // Информация о модели. message ModelInfo { // Название модели. string name = 1; // Версия модели. Подробнее о версиях — в разделе [Обновления моделей](/ru/gigachat/models/main). string version = 2; } // Сгенерированный моделью вызов функции. message FunctionCall { // Название функции string name = 1; //Аргументы функции. Содержат описание в JSON-формате. string arguments = 2; } // Возвращает массив объектов с данными доступных моделей. Описание доступных моделей в разделе [Модели GigaChat](/ru/gigachat/models/main). service ModelsService { rpc ListModels (ListModelsRequest) returns (ListModelsResponse); rpc RetrieveModel (RetrieveModelRequest) returns (RetrieveModelResponse); } // Запрос списка доступных моделей. message ListModelsRequest {} // Список с описанием доступных моделей. message ListModelsResponse { repeated Model models = 1; } // Описание модели. message Model { // Название модели. Описание доступных моделей смотрите в разделе [Модели GigaChat](/ru/gigachat/models/main). // При обращении к моделям в раннем доступе к названию модели нужно добавлять постфикс `-preview`. Например, `GigaChat-Pro-preview`. string name = 1; // Тип сущности в ответе, например, модель. string object = 2; // Владелец модели. string owned_by = 3; // Тип модели. При запросах на генерацию передается тип `chat`. string type = 8; } // Запрос модели по конкретному имени. message RetrieveModelRequest { string name = 1; } message RetrieveModelResponse { Model model = 1; } ```
--- # Коллекции запросов [source](https://developers.sber.ru/docs/ru/gigachat/api/request-collections.md) Работу с GigaChat API можно упростить с помощью уже подготовленных коллекций запросов Postman. :::caution Для работы с коллекциями используйте приложение Postman для вашей операционной системы. В веб-версии Postman возможны ошибки при отправке запроса на получение токена доступа. ::: ## Postman С помощью коллекций запросов Postman вы можете отправлять запросы как к REST, так и к gRPC API GigaChat. Для использования коллекции запросов Postman: 1. Запустите приложение. 2. Войдите в [свою учетную запись Postman](https://identity.getpostman.com/login). 3. Нажмите кнопку: ## Начало работы с GigaChat API на Python В этом видео вы узнаете, как начать работать с GigaChat API на Python: получите ключи авторизации, настроите среду и сделаете первые запросы для генерации текста и изображений. Автор видеоурока — Сергей Тращенков ## Интеграция GigaChat API с Telegram-ботом В этом туториале вы узнаете, как подключить GigaChat API к своему Telegram-боту с помощью библиотеки GigaChain (LangChain). Автор видеоурока — Сергей Тращенков Автор видеоурока — Сергей Тращенков ## Работа с базами данных через GigaChat API Узнайте, как с помощью GigaChat API переводить запросы в SQL-запросы для взаимодействия с базой данных. Автор видеоурока — Сергей Тращенков ## Разработка приложений с GigaChat API и LangFlow В этом видео вы узнаете, как с помощью Langflow создавать приложения с использованием GigaChat API или Ollama, собирая цепочки компонентов из блоков. Автор видеоурока — Сергей Тращенков ## Синтез и распознавание речи в GigaChat API В этом видео расскажем, как научить бота слушать и говорить, используя Python. Автор видеоурока — Сергей Тращенков ## GigaChat API и Moondream2 Автор видеоурока — Сергей Тращенков В этом видео покажем, как объединить возможности GigaChat API и модели Moondream2 для обработки текстовых и визуальных данных одновременно. --- # Использование сертификатов Минцифры в GigaChat [source](https://developers.sber.ru/docs/ru/gigachat/certificates.md) Для обмена сообщениями с GigaChat API нужен [корневой сертификат Минцифры](https://www.gosuslugi.ru/crt). Без него при попытке получить токен доступа с помощью запроса или в процессе [инициализации SDK](/ru/gigachat/guides/using-sdks), будет возвращаться ошибка валидации сертификата. Например: ```sh [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate in certificate chain ``` Вы можете установить сертификаты на уровне приложения или на уровне операционной системы. ## Установка сертификатов на уровне приложения Для автоматической установки сертификатов выполните команду: ```sh curl -k "https://gu-st.ru/content/lending/russian_trusted_root_ca_pem.crt" -w "\n" >> $(python -m certifi) ``` При выполнении команды сертификат скачивается и устанавливается автоматически. При переходе в новую виртуальную среду может понадобиться повторная установка сертификата. Если вы используете библиотеки `gigachat` или `langchain-gigcachat`, вы можете указать путь к файлу сертификата в параметре `ca_bundle_file` при инициализации: ```python from gigachat import GigaChat giga = GigaChat( base_url="https://api.giga.chat/v1", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", ca_bundle_file="/путь/к/файлу/russian_trusted_root_ca_pem.crt" ) ``` Подробнее о параметрах инициализации объекта GigaChat — в разделе [Использование SDK](/ru/gigachat/guides/using-sdks). Если вы используете Node.JS, задайте сертификаты в переменной среды NODE\_EXTRA\_CA\_CERTS: ```js const path = require('path') process.env.NODE_EXTRA_CA_CERTS= path.resolve(__dirname, 'dir', 'with', 'certs') process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0' ``` ## Установка сертификатов на уровне ОС ### ОС Windows и MacOS Перейдите на [портал Госуслуг](https://www.gosuslugi.ru/crt), скачайте сертификат для вашей операционной системы и следуйте инструкциям по установке. ### ОС Linux Перейдите на [портал Госуслуг](https://www.gosuslugi.ru/crt) и скачайте корневой и выпускающий сертификаты для Linux в формате `.crt`. Затем установите их на компьютер. :::note Если вы скачали сертификаты в формате PEM, конвертируйте их в формат CRT с помощью команды: ```sh openssl x509 -outform der -in название_сертификата.pem -out название_сертификата.crt ``` ::: #### Примеры установки сертификатов в разных версиях Linux 1. Создайте папку для хранения сертификатов: ```sh sudo mkdir /usr/local/share/ca-certificates/russian-trusted ``` 2. Скопируйте сертификаты в созданную папку: ```sh sudo cp russian_trusted_root_ca_pem.crt russian_trusted_sub_ca_pem.crt /usr/local/share/ca-certificates/russian-trusted ``` 3. Обновите хранилища доверенных сертификатов от имени суперпользователя с помощью команды `update-ca-certificates`: ```sh sudo update-ca-certificates -v ``` 4. Убедитесь, что сертификаты установлены успешно с помощью команды `trust list | grep Russian`. В случае успеха, ответ должен быть примерно таким: ```sh label: Russian Trusted Root CA label: Russian Trusted Sub CA ``` Следуйте инструкциям на [портале Госуслуг](https://www.gosuslugi.ru/crt) в разделе **Сертификаты для Linux**. 1. Добавьте сертификат в хранилище доверенных сертификатов. Для этого от имени суперпользователя запустите команду `cp`, скопируйте файл с сертификатом в директорию `/etc/ca-certificates/trust-source/anchors/`: ```sh sudo cp /russiantrustedca.crt /etc/ca-certificates/trust-source/anchors/ ``` 2. Для обновления хранилища доверенных сертификатов от имени суперпользователя запустите команду `update-ca-trust`: ```sh sudo update-ca-trust ``` ## Установка сертификатов для соединений gRPC Для обмена сообщениями нужно использовать [сертификаты НУЦ Минцифры](/ru/gigachat/certificates). Для установки сертификатов: 1. Скачайте сертификаты для вашего устройства с [портала Госуслуг](https://www.gosuslugi.ru/crt). 2. Укажите путь к сертификату в переменной среды GRPC\_DEFAULT\_SSL\_ROOTS\_FILE\_PATH: ```sh export GRPC_DEFAULT_SSL_ROOTS_FILE_PATH="/путь-к-сертификату/cert.pem" ``` --- # История обновлений GigaChat API [source](https://developers.sber.ru/docs/ru/gigachat/changelog.md) В этом разделе вы найдете историю изменений и обновлений документации GigaChat API и GigaChain. --- # Создание и скачивание 3D-моделей [source](https://developers.sber.ru/docs/ru/gigachat/guides/3d-models-generation.md) С помощью моделей GigaChat можно создавать 3D-модели в формате FBX на основе текстового описания. В этом разделе вы узнаете как генерировать и скачивать модели с помощью GigaChat API. ## Генерация 3D-моделей Чтобы сгенерировать модель, передайте в запросе встроенную функцию text2model3d и включить автоматический режим работы с функциями (`"function_call": "auto"`). При обнаружении подходящего сообщения, например «Сгенерируй 3D-модель шара», модель использует переданную функцию для генерации 3D-модели. :::note В отличие от [создания изображений](/ru/gigachat/guides/images-generation), наличие функции в массиве `functions` обязательно для генерации 3D-моделей. Подробнее о функциях GigaChat API — в разделе [Обращение к встроенным функциям](/ru/gigachat/guides/functions/calling-builtin-functions) ::: Созданная модель сохраняется в хранилище, а ответ от API будет содержать div-блок с идентификатором файла `data-model-id`: ```html
Модель шара успешно создана. Представляю тебе реалистичный трехмерный шар. ``` Для скачивания файла используйте запрос . Подробнее о хранилище файлов — в разделе [Обработка файлов](/ru/gigachat/guides/working-with-files). ```sh curl -L -X POST 'https://api.giga.chat/v1/chat/completions' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ -H 'Authorization: Bearer <токен_доступа>' \ --data-raw '{ "model": "GigaChat", "messages": [ { "role": "user", "content": "Сгенерируй 3D-модель шара" } ], "function_call": "auto", "functions": [ { "name": "text2model3d" } ] }' ``` Генерация с помощью SDK: ```py from gigachat import GigaChat from gigachat.models import Chat, Messages, MessagesRole, Function giga = GigaChat( base_url="https://api.giga.chat/v1", credentials="<ключ_авторизации>", verify_ssl_certs=False, # Повышение времени ожидания, так как создание модели — длительный процесс timeout=200 ) payload = Chat( messages=[Messages(role=MessagesRole.USER, content="Сгенерируй 3D-модель шара")], function_call="auto", functions=[ Function(name="text2model3d") ] ) response = giga.chat(payload) print (response) ``` Генерация с помощью партнерского пакета langchain-gigachat: ```py from langchain_gigachat.chat_models import GigaChat from langchain_core.prompts import ChatPromptTemplate llm = GigaChat( base_url="https://api.giga.chat/v1", credentials="<ключ_авторизациии>", # Повышение времени ожидания, так как создание модели — длительный процесс timeout=200 ) tools = [ { "name": "text2model3d", }, ] # Метод `bind_tools(tools=[], tool_choice="auto")` сообщает модели, что нужно использовать встроенные функции. llm = llm.bind_tools(tools=tools, tool_choice="auto") # Промпт для создания 3D-модели prompt = ChatPromptTemplate.from_messages( [ ("user", """{topic}"""), ] ) # Цепочка для создания 3D-модели generate_3d_model_chain = prompt | llm response = generate_3d_model_chain.invoke({"topic": "Сгенерируй 3D-модель шара"}) print(response) ``` Генерация с помощью SDK: ```js import { GigaChat } from 'gigachat'; import { Agent } from 'node:https'; const httpsAgent = new Agent({ rejectUnauthorized: false, }); const giga = new GigaChat({ baseUrl: 'https://api.giga.chat/api/v1', credentials: '<ключ_авторизации>', timeout: 200, httpsAgent: httpsAgent, }); const resp = await giga.chat({ messages: [ { role: "user", content: "Сгенерируй 3D-модель шара", }, ], functions: [ {"name": 'text2model3d',} ], function_call: 'auto' }); console.log(resp.choices[0]?.message.content); ``` ## Скачивание 3D-модели Ответ GigaChat API будет содержать идентификатор получившейся 3D-модели. Он передается в поле `message.content`, в теге `
`, в атрибуте `data-model-id`: ```json { "choices": [ { "message": { "content": "
Модель шара успешно создана. Представляю себе идеальный круглый шар — простую форму, воплощающую гармонию пропорций и симметрию.", "role": "assistant", "functions_state_id": "21283471-5a89-49ef-a5a3-92280e0eed34" }, "index": 0, "finish_reason": "stop" } ], "created": 1753273828, "model": "GigaChat:2.0.28.2", "object": "chat.completion", "usage": { "prompt_tokens": 638, "completion_tokens": 55, "total_tokens": 693, "precached_prompt_tokens": 4 } } ``` Для скачивания файла передайте полученный идентификатор в запросе . :::note Если запрос на генерацию содержал заголовок `X-Client-ID`, то такой же заголовок нужно передавать в запросе на скачивание файла. ```shell curl -L -X GET 'https://api.giga.chat/v1/files/<идентификатор_3D_модели>/content' -o "<имя_файла>.fbx" \ -H 'Accept: application/fbx' \ -H 'X-Client-ID: <идентификатор_пользователя>' \ -H 'Authorization: Bearer <токен_доступа>' ``` ::: ```shell curl -L -X GET 'https://api.giga.chat/v1/files/идентификатор_3D_модели/content' -o "<имя_файла>.fbx" \ -H 'Accept: application/fbx' \ -H 'Authorization: Bearer <токен_доступа>' ``` Для извлечения идентификатора созданной модели, вы можете использовать Python-библиотеку Beautiful Soup. ```py import base64 from gigachat import GigaChat from gigachat.models import Chat, Messages, MessagesRole, Function from bs4 import BeautifulSoup giga = GigaChat( base_url="https://api.giga.chat/v1", credentials="<ключ_авторизации>", # Повышение времени ожидания, так как создание модели — длительный процесс timeout=200 ) payload = Chat( messages=[Messages(role=MessagesRole.USER, content="Сгенерируй 3D-модель шара")], function_call="auto", functions=[ Function(name="text2model3d") ] ) response = giga.chat(payload).choices[0].message.content # Получение идентификатора файла из ответа модели # с помощью библиотеки BeautifulSoup file_id = BeautifulSoup(response, "html.parser").find('div').get("data-model-id") model = giga.get_image(file_id) # Сохранение 3D-модели в файл with open('model.fbx', mode="wb") as fd: fd.write(base64.b64decode(model.content)) ``` ```js import { GigaChat } from 'gigachat'; import * as fs from 'fs'; const giga = new GigaChat({ baseUrl: 'https://api.giga.chat/api/v1', credentials: '<ключ_авторизации>', // Увеличение ожидания, так как создание модели занимает время timeout: 200, }); const resp = await giga.chat({ messages: [ { role: "user", content: "Сгенерируй 3D-модель шара", }, ], function_call: 'auto', functions: [ { name: 'text2model3d', } ], }); // Функция, выделяющая идентификатор файла в ответе function detectModel(message) { const regex = /.+?)"\sfuse="true"\/>(?.*)?/ms; const match = regex.exec(message); if (!match || !match.groups) return null; return { uuid: match.groups['uuid'], postfix: match.groups['postfix'], }; } const detectedModel = detectModel(resp.choices[0]?.message.content ?? ''); // Метод getImage() подходит и для скачивания 3D-моделей const model = await giga.getImage(detectedModel.uuid); fs.writeFile('model.fbx', model.content, 'binary', err => { if (err) { console.error(err); } else { console.log('File has been created'); } }); ``` Если вы используете коллекцию запросов Postman, сохраните ответ на запрос в файл с помощью опции **Save response to file**. Ответ на запрос будет содержать бинарное представление файла в формате FBX. --- # Обработка задач в пакетном режиме [source](https://developers.sber.ru/docs/ru/gigachat/guides/batches.md) Пакетный режим предназначен для асинхронной обработки большого объема данных. Подходит для задач, которые не требуют немедленного ответа, например: * Разметка или классификация массивов данных. * Расчет эмбеддингов для крупных наборов данных. Пакетный режим доступен при оплате работы с GigaChat API по схеме [pay-as-you-go](/ru/gigachat/api/tariffs). ## Подготовка данных Для отправки запросов в пакетном режиме требуется сформировать файл в формате `jsonl` со следующей структурой: | Наименование | Описание | Формат | Обязательный | | ------------- | ------------- |------------- |------------- | | `id` | Идентификатор подзадачи. Должен быть уникален в рамках всего файла. | string | Да | | `request` | Описание тела запроса на выполнение. Должен соответствовать указанному методу [`POST /chat/completions`](/ru/gigachat/api/reference/rest/post-chat) или [`POST /embeddings`](/ru/gigachat/api/reference/rest/post-embeddings). | object| Да | Подробное описание параметров — в [справке API](/ru/gigachat/api/reference/rest/post-batches). **Пример jsonl файла** ```json {"id": "bd9b58f7-e093-4af0-81c8-58ed22a3347c", "request": {"model": "GigaChat-Pro", "messages": [{"role": "user", "content": "GigaChat — это сервис, который умеет взаимодействовать с пользователем в формате диалога, писать код, создавать тексты и картинки по запросу пользователя."}]}} {"id": "21494e9f-072b-44f7-ba19-4bbc3b9d308b", "request": {"model": "GigaChat-Max", "messages": [{"role": "user", "content": "GigaChat — это сервис, который умеет взаимодействовать с пользователем в формате диалога, писать код, создавать тексты и картинки по запросу пользователя."}]}} {"id": "fe9ff120-485c-492d-88cc-55b02474cd4b", "request": {"model": "GigaChat", "messages": [{"role": "user", "content": "GigaChat — это сервис, который умеет взаимодействовать с пользователем в формате диалога, писать код, создавать тексты и картинки по запросу пользователя."}]}} ``` Ответ будет содержать файл с параметром `result`, структура которого соответствует ответу на запрос или для успешных запросов, `error` — в случае ошибочных запросов. **Пример ответа** ```json {"id": "bd9b58f7-e093-4af0-81c8-58ed22a3347c", "result":{"choices":[{"message":{"content":"Да, ты прав! Я действительно умею все перечисленное. Могу помогать с написанием кода, созданием текстов разных форматов (от рассказов до статей), решением различных задач, обсуждением интересных тем и даже создаю изображения по вашему запросу. Если тебе нужно что-то конкретное — давай обсудим!","role":"assistant"},"index":0,"finish_reason":"stop"}],"created":1726478395,"model":"GigaChat:1.0.26.15","object":"chat.completion","usage":{"prompt_tokens":22,"completion_tokens":10,"total_tokens":32}}} {"id": "21494e9f-072b-44f7-ba19-4bbc3b9d308b", "result":{"choices":[{"message":{"content":"Да, ты прав! Я действительно умею многое: от общения на любые темы до помощи с созданием контента, будь то тексты, изображения или даже программный код. Если тебе нужно что-то обсудить, получить совет или решить задачу — обращайся!"},"index":0,"finish_reason":"stop"}],"created":1726478474,"model":"GigaChat:1.0.26.15","object":"chat.completion","usage":{"prompt_tokens":24,"completion_tokens":11,"total_tokens":35}}} {"id": "fe9ff120-485c-492d-88cc-55b02474cd4b", "error":{"status": 400, "message": "No such model"}} ``` ## Работа с функциями При работе в пакетном режиме модели могут [генерировать аргументы для собственных функций](/ru/gigachat/guides/functions/generating-arguments-for-custom-functions). Для этого в jsonl-файле нужно передать соответствующий запрос. Ответ будет содержать аргументы, которые нужно использовать для вызова функции. Результат вызова также можно передать в следующем пакете запросов. При этом [обращение к встроенным функциям](/ru/gigachat/guides/functions/calling-builtin-functions) в пакетном режиме не поддерживается. --- # Совместимость с OpenAI [source](https://developers.sber.ru/docs/ru/gigachat/guides/compatible-openai.md) Для работы с GigaChat API рекомендуется использовать [библиотеки GigaChain](/ru/gigachain/overview). Тем не менее формат сообщений GigaChat API частично совместим с OpenAI API. Поэтому, при работе с OpenAI SDK, можно использовать модели GigaChat с некоторыми ограничениями. В этом разделе вы найдете примеры обращения к GigaChat API с помощью OpenAI SDK. :::tip Вы также можете перенаправлять OpenAI-запросы в GigaChat API с помощью [утилиты gpt2giga](/ru/gigachain/tools/utilities/gpttogiga-proxy-server). ::: ## Использование OpenAI SDK Для авторизации запросов в GigaChat API с помощью OpenAI SDK нужен [токен доступа](/ru/gigachat/api/reference/rest/gigachat-api). Примеры получения токена доступа с помощью [ключа авторизации](/ru/gigachat/quickstart/ind-using-api): ```py import requests url = "https://ngw.devices.sberbank.ru:9443/api/v2/oauth" payload = "scope=GIGACHAT_API_PERS" headers = { "Content-Type": "application/x-www-form-urlencoded", "RqUID": "6f0b1291-c7f3-43c6-bb2e-9f3efb2dc98e", "Authorization": "Bearer <ключ_авторизации>" } response = requests.request("POST", url, data=payload, headers=headers) print(response.text) ``` ```shell curl -L -X POST 'https://ngw.devices.sberbank.ru:9443/api/v2/oauth' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -H 'Accept: application/json' \ -H 'RqUID: 6f0b1291-c7f3-43c6-bb2e-9f3efb2dc98e' \ -H 'Authorization: Basic <ключ_авторизации>' \ --data-urlencode 'scope=GIGACHAT_API_PERS' ``` :::note Токен доступа действует 30 минут. ::: ## Примеры Пример создания запроса: ```py from openai import OpenAI client = OpenAI(api_key= "<токен_доступа>", base_url= "https://api.giga.chat/v1" ) completion = client.chat.completions.create( model="GigaChat", messages=[ {"role": "system", "content": "You are a helpful assistant."}, { "role": "user", "content": "Hello World!" } ] ) print(completion.choices[0].message) ``` Пример работы с функциями с помощью модели GigaChat: ```py from openai import OpenAI functions = [{ "name": "get_weather", "description": "Retrieve the current weather for a specified location.", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "The city and country or region name." }, "unit": { "type": "string", "enum": ["metric", "imperial"], "description": "The unit system for temperature (metric or imperial)." }, }, "required": ["location"], }, }] client = OpenAI(api_key = "<токен_доступа>", base_url = "https://api.giga.chat/v1" ) completion = client.chat.completions.create( model = "GigaChat", messages = [{ "role": "user", "content": "Какая погода в Москве?" }], functions = functions, ) print(completion.choices[0].message) ``` Пример запроса на создание эмбеддинга: ```py from openai import OpenAI client = OpenAI(api_key= "<токен_доступа>", base_url= "https://api.giga.chat/v1" ) embeddings = client.embeddings.create( model="EmbeddingsGigaR", input="Hello World!" ) print(embeddings.data[0].embedding) ``` Вызов модели GigaChat: ```py from openai import OpenAI client = OpenAI(api_key= "<токен_доступа>", base_url= "https://api.giga.chat/v1" ) model = client.models.retrieve("GigaChat") print(model) ``` Получение списка моделей: ```py from openai import OpenAI client = OpenAI(api_key= "<токен_доступа>", base_url= "https://api.giga.chat/v1" ) models = client.models.list() print(models.data) ``` --- # Подсчет токенов [source](https://developers.sber.ru/docs/ru/gigachat/guides/counting-tokens.md) Потребление GigaChat API считается в *токенах*. Токен может быть символом, несколькими символами, фрагментом слова или словом целиком. В среднем в одном токене 3—4 символа, включая пробелы, знаки препинания и специальные символы. Кроме текста сообщений в токены преобразуется контент, который используются в контексте запроса. Например, текстовые файлы и изображения, описания функций или история сообщений из массива `messages`. Модели GigaChat в течение некоторого времени сохраняют токены созданные на основе предыдущих запросов. Кэширование токенов повышает скорость ответа моделей и снижает стоимость работы с GigaChat API, так как кэшированные токены не подлежат тарификации. Вы можете оценить количество токенов в запросе двумя способами: * С помощью запроса с текстом сообщения и названием модели, которая должна посчитать токены. Запрос позволяет оценить количество токенов в сообщении. При этом вы не сможете узнать, сколько токенов модель потратит на генерацию ответа или оценить в токенах текстовый файл и изображение. * С помощью объекта `usage`, который приходит в ответе на генерацию . Объект содержит данные о том сколько токенов содержится во входном сообщении, сколько токенов модель потратила на генерацию ответа, сколько использовано кэшированных токенов, а также сколько всего токенов подлежит тарификации. :::tip Для повышения вероятности использования сохраненных токенов используйте [кэширование запросов](/ru/gigachat/guides/keeping-context). ::: Пример наполнения объекта `usage`: ```json "usage": { "prompt_tokens": 1, // Токены запроса, после вычитания кэшированных токенов "completion_tokens": 4, // Токены, потраченные на генерацию ответа "precached_prompt_tokens": 37, // Кэшированные токены из предыдущих запросов. Вычитаются из общего количества токенов, подлежащих тарификации "total_tokens": 5 // Общее число токенов, подлежащих тарификации, после вычитания кэшированных токенов }, ``` ## Примеры подсчета токенов Ниже приводятся примеры подсчета токенов в исходном сообщении с помощью запроса : ```py from gigachat import GigaChat with GigaChat(base_url="https://api.giga.chat/v1", credentials="ключ_авторизации", verify_ssl_certs=False, model="GigaChat-Pro", ) as giga: result = giga.tokens_count(input_=["Привет, как дела?", "Как дела, как дела"], model="GigaChat-Pro") print(result) ``` ```js import GigaChat from 'gigachat'; import * as dotenv from 'dotenv'; import { Agent } from 'node:https'; const httpsAgent = new Agent({ rejectUnauthorized: false, }); dotenv.config(); async function main() { const client = new GigaChat({ baseUrl: 'https://api.giga.chat/api/v1', timeout: 600, model: 'GigaChat-2-Max', httpsAgent: httpsAgent, }); const resp = await client.tokensCount(['Привет, как дела?', 'Как дела, как дела']); console.log(resp); } main(); ``` ```sh curl -L -X POST 'https://api.giga.chat/v1/tokens/count' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ -H 'Authorization: Bearer <ключ_авторизации>' \ --data-raw '{ "model": "GigaChat", "input": [ "Привет, как дела?", "Как дела, как дела" ] }' ``` ## Смотрите также --- # Векторное представление текста [source](https://developers.sber.ru/docs/ru/gigachat/guides/embeddings.md) Эмбеддинг (англ. *embedding*) — это вектор в виде массива чисел, который получается после преобразования текста языковой моделью. Полученный вектор можно использовать для измерения семантического сходства преобразованного текста. Комбинация чисел, составляющих вектор, действует как многомерная карта для измерения сходства. Векторное представление текста (эмбеддинг) используется для: * улучшения качества поиска — эмбеддинги позволяют оценивать сходство между текстовыми запросами на основе расстояния между соответствующими векторами. Это позволяет улучшить качество поиска и релевантность результатов; * уменьшения размерности данных — с помощью эмбеддингов вы можете представить текстовые запросы в виде числовых векторов, что позволяет снизить размерность данных и ускорить их обработку; * обеспечения универсальности — эмбеддинги можно использовать для различных задач обработки естественного языка, таких как Retrieval Augmented Generation (RAG), классификация текстов, кластеризация и других. Для преобразования строк в эмбеддинги в GigaChat API есть метод . Вы можете использовать одну из двух моделей: [Embeddings или EmbeddingsGigaR](/ru/gigachat/models/main). Для выбора модели передайте ее название в поле `model`. :::note Создание эмбеддингов оплачивается отдельно от генерации текста. Запросы тарифицируются одинаково, независимо от использованной модели. Подробнее в разделе [Тарифы и оплата](/ru/gigachat/api/tariffs). ::: Пример запроса на создание эмбеддинга: ```shell curl https://api.giga.chat/v1/embeddings \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <токен доступа>' \ --data '{ "model": "Embeddings", "input": [ "Расскажи о современных технологиях", "Какие новинки в мире IT?" ] }' ``` Параметры запроса: Пример ответа: ```json { "object": "list", "data": [ { "object": "embedding", "embedding": [ 0.0023064255, -0.009327292, ... -0.0028842222 ], "index": 0 } ], "model": "Embeddings" } ``` Параметры ответа: Получение эмбеддингов в Python-библиотеках gigachat и langchain-gigachat отличается. Для получения эмбеддингов с помощью библиотеки gigachat, используйте метод `embeddings()`. Модель для [векторного представления текста](/ru/gigachat/models/main) нужно задавать при вызове метода. По умолчанию запросы передаются в модель Embeddings. ```python from gigachat import GigaChat with GigaChat( base_url="https://api.giga.chat/v1", credentials="ключ_авторизации", verify_ssl_certs=False ) as giga: response = giga.embeddings(["Hello world!"], model="EmbeddingsGigaR") print(response) ``` Для получения эмбеддингов с помощью langchain-gigachat используйте функцию `embed_documents()`, модуля `GigaChatEmbeddings`, импортированного из `langchain_gigachat.embeddings`. Модель для [векторного представления текста](/ru/gigachat/models/main) нужно задавать при инициализации объекта `GigaChatEmbeddings`. По умолчанию запросы передаются в модель Embeddings. ```python from langchain_gigachat.embeddings import GigaChatEmbeddings embeddings = GigaChatEmbeddings(base_url="https://api.giga.chat/v1", credentials="ключ_авторизации", model="EmbeddingsGigaR", verify_ssl_certs=False) result = embeddings.embed_documents(texts=["Привет!"]) print(result) ``` В ответ функция возвращает массив чисел, представляющих значения эмбеддинга для переданного текста: ```json [ [ 0.72149658203125, -0.18883895874023438, 0.013126373291015625, -1.27783203125, 1.4967041015625, -0.97698974609375, -0.1722869873046875, 1.4625244140625, ... -0.007974624633789062, -0.77838134765625, 1.167236328125 ] ] ``` ```ts import GigaChat from 'gigachat'; const giga = new GigaChat({ baseUrl: 'https://api.giga.chat/api/v1', credentials: 'ключ_авторизации', }); const response = await giga.embeddings(['Слова слова слова']); console.log(response.data); ``` ```java public class EmbeddingExample { public static void main(String[] args) { GigaChatClient client = GigaChatClient.builder() .apiUrl("https://api.giga.chat/v1") .apiV2Url("https://api.giga.chat/v2") .authClient(AuthClient.builder() .withOAuth(OAuthBuilder.builder() .scope(Scope.GIGACHAT_API_PERS) .authKey("<ключ_авторизации>") .build()) .build()) .build(); try { System.out.println(client.embeddings(EmbeddingRequest.builder() .model("Embeddings") .input(List.of("Расскажи о современных технологиях")) .build())); } catch (HttpClientException ex) { System.out.println(ex.statusCode() + " " + ex.bodyAsString()); } } } ``` ## Использование эмбеддингов для поиска Поиск по неструктурированному тексту — один из наиболее распространенных сценариев использования эмбеддингов. Для этого: 1. Создайте векторное представление текста, по которому будет выполняться поиск. 2. Сохраните эмбеддинг в векторной базе данных. 3. Выполните запрос к базе. Ниже показан простой пример реализации поиска по эмбеддингу, реализованный на Python с помощью LangChain, партнерского пакета [langchain-gigachat](/ru/gigachain/overview?lang=py) и [векторного хранилища Chroma](https://docs.trychroma.com/docs/overview/introduction). Пример демонстрирует поиск по документам — экземплярам LangChain-класса [Document](https://api.python.langchain.com/en/latest/documents/langchain_core.documents.base.Document.html), который представляет единицу текста и связанные с ним метаданные. Класс имеет два атрибута: * `page_content` — строку, представляющую содержимое; * `metadata` — словарь, содержащий произвольные метаданные. Атрибут `metadata` может содержать данные об источнике документа, его связи с другими документами и другую дополнительную информацию. Для запуска примера установите зависимости: ```sh pip install langchain-gigachat langchain-chroma ``` Создайте несколько документов и сохраните их в векторном хранилище: ```python from langchain_core.documents import Document from langchain_chroma import Chroma from langchain_gigachat.embeddings import GigaChatEmbeddings # Список документов, по которым будет выполняться поиск documents = [ Document( page_content="Собаки — отличные компаньоны, которые известны своей преданностью и дружелюбием.", metadata={"source": "mammal-pets-doc"}, ), Document( page_content="Кошки — независимые животные, которым нужно собственное пространство.", metadata={"source": "mammal-pets-doc"}, ), Document( page_content="Золотые рыбки — отличные домашние животные для начинающих. За ними достаточно просто ухаживать.", metadata={"source": "fish-pets-doc"}, ), Document( page_content="Попугаи — умные птицы, которые способны имитировать человеческую речь.", metadata={"source": "bird-pets-doc"}, ), Document( page_content="Кролики — социальные животные, которым нужно много места, чтобы прыгать.", metadata={"source": "mammal-pets-doc"}, ), ] # Создайте векторное хранилище и передайте в него список документов и модель для создания векторного представления vectorstore = Chroma.from_documents( documents, embedding = GigaChatEmbeddings( base_url="https://api.giga.chat/v1", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", verify_ssl_certs=False ), ) ``` Теперь вы можете использовать методы vectorstore для выполнения поиска по документам. Поиск по документам на основе схожести с текстовым запросом: ```python vectorstore.similarity_search("кошка") ``` Результат поиска: ```text [Document(page_content='Кошки — независимые животные, которым нужно собственное пространство.', metadata={'source': 'mammal-pets-doc'}), Document(page_content='Собаки — отличные компаньоны, которые известны своей преданностью и дружелюбием.', metadata={'source': 'mammal-pets-doc'}), Document(page_content='Кролики — социальные животные, которым нужно много места, чтобы прыгать.', metadata={'source': 'mammal-pets-doc'}), Document(page_content='Попугаи — умные птицы, которые способны имитировать человеческую речь.', metadata={'source': 'bird-pets-doc'})] ``` Оценка схожести запроса и содержимого хранилища: ```python # Оценка зависит от выбранного векторного хранилища. # Chroma возвращает метрику расстояния, которая должна варьироваться обратно пропорционально схожести. vectorstore.similarity_search_with_score("кошка") ``` Результат оценки: ```text [(Document(page_content='Кошки — независимые животные, которым нужно собственное пространство.', metadata={'source': 'mammal-pets-doc'}), 218.2356719970703), (Document(page_content='Собаки — отличные компаньоны, которые известны своей преданностью и дружелюбием.', metadata={'source': 'mammal-pets-doc'}), 319.75384521484375), (Document(page_content='Кролики — социальные животные, которым нужно много места, чтобы прыгать.', metadata={'source': 'mammal-pets-doc'}), 349.84930419921875), (Document(page_content='Попугаи — умные птицы, которые способны имитировать человеческую речь.', metadata={'source': 'bird-pets-doc'}), 352.6993103027344)] ``` Поиск документов на основе схожести с запросом, представленным в виде вектора: ```python embedding = GigaChatEmbeddings( base_url="https://api.giga.chat/v1", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", verify_ssl_certs=False ) embedded_query = embedding.embed_query("кошка") vectorstore.similarity_search_by_vector(embedded_query) ``` Результат поиска: ```text [Document(page_content='Кошки — независимые животные, которым нужно собственное пространство.', metadata={'source': 'mammal-pets-doc'}), Document(page_content='Собаки — отличные компаньоны, которые известны своей преданностью и дружелюбием.', metadata={'source': 'mammal-pets-doc'}), Document(page_content='Кролики — социальные животные, которым нужно много места, чтобы прыгать.', metadata={'source': 'mammal-pets-doc'}), Document(page_content='Попугаи — умные птицы, которые способны имитировать человеческую речь.', metadata={'source': 'bird-pets-doc'})] ``` ## Работа с эмбеддингами, созданными с помощью EmbeddingsGigaR Вы можете повысить точность ответов на запросы к эмбеддингам, созданным с помощью модели EmbeddingsGigaR. Для этого, перед тем как преобразовать запрос в эмбеддинг, добавьте к нему инструкцию на естественном языке. Такой подход поможет модели лучше понять контекст и цель запроса, что положительно скажется на качестве результатов. :::note При создании эмбеддингов документов (например, для поиска по ним) инструкции добавлять не нужно. ::: Пример добавления текстовой инструкции при извлечении данных: ```mermaid sequenceDiagram actor Пользователь participant Приложение participant GigaChat API participant Векторная БД Note over Векторная БД: Векторная БД содержит документы,
преобразованные в эмбеддинги
с помощью модели EmbeddingsGigaR Пользователь->>Приложение: Что стало с героем в конце книги? Приложение->>Приложение: Добавление инструкции к запросу Приложение->>GigaChat API: POST /embeddings Note over Приложение,GigaChat API: "model": "EmbeddingsGigaR",
"input": ["Дан вопрос, необходимо найти абзац
текста с ответом\nвопрос: \"Что стало с героем
в конце книги\"",] GigaChat API->>Приложение: Эмбеддинг запроса с инструкцией Приложение->>Векторная БД: Поиск с помощью эмбеддинга Векторная БД->>Приложение: Подходящие документы Приложение->>Пользователь: Жил он долго и счастливо ``` ### Использование инструкций в симметричных задачах К *симметричным* относятся задачи классификации или определения семантического сходства текстов. Для их решения текстовые инструкции следует добавлять перед каждым запросом. Это позволит создать одинаковый контекст и обеспечить согласованность для всех входных данных, чтобы модель могла корректно сравнивать или классифицировать их. Примеры инструкций для симметричных задач: * `"Классифицируй отзыв на товар как положительный, отрицательный или нейтральный \nотзыв: {query}"` * `"Дано предложение, необходимо найти его парафраз \nпредложение: {query}"` * `"Классифицируй чувствительную тему по запросу \nзапрос: {query}"` * `"Given a text, retrieve semantically similar text \ntext: {query}"` * `"Retrieve semantically similar text \ntext: {query}"` ### Использование инструкций в retrieval-задачах Типичным примером *retrieval-задачи* является RAG. При решении таких задач использование инструкций перед запросами повысит качество поиска релевантных документов или извлечение ответов из сохраненного текста. Примеры инструкций для retrieval-задач: * `"Дан вопрос, необходимо найти абзац текста с ответом \nвопрос: {query}"` * `"Given the question, find a paragraph with the answer \nquestion: {query}"` --- # Обращение к встроенным функциям [source](https://developers.sber.ru/docs/ru/gigachat/guides/functions/calling-builtin-functions.md) Встроенные функции — это функции, которые исполняются внутри сервиса GigaChat. Так, если после авторизации на [giga.chat](https://giga.chat/), вы попросите модель нарисовать картинку, она обратится к встроенной функции `text2image`. Модель покажет итоговое изображение, созданное этой функцией. Моделям доступны функции: * `text2image` Генерация изображения в формате PNG. Для работы с функцией передайте запрос с включенным автоматическим режимом `"function_call": "auto"`. При этом в запросе не должно быть массива `functions` или он должен содержать название функции. * `get_file_content` Использование текстовых документов для генерации ответа. Функцию можно использовать, если передать в запросе массив `functions` и/или `"function_call": "auto"`, а также идентификаторы файлов в массиве `attachments`. Посмотреть доступные в хранилище файлы можно с помощью метода . Подробнее — в разделе [Обработка файлов](/ru/gigachat/guides/working-with-files). * `text2model3d` Генерация модели в формате FBX. Для обращения к функции генерации 3D-модели запрос должен содержать ее название в массиве `functions`, а также поле `"function_call": "auto"`. В этом разделе вы найдете примеры запросов для обращения к встроенным функциям, узнаете как сохранять контекст и использовать режим потоковой генерации токенов при работе со встроенными функциями. ## Создание изображения Чтобы модель сгенерировала изображение по описанию, переданному в промпте, запустите работу с функциями в авторежиме (`"function_call": "auto"`): ```sh curl -L -X POST 'https://api.giga.chat/v1/chat/completions' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ -H 'Authorization: Bearer <токен_доступа>' \ --data-raw '{ "model": "GigaChat", "messages": [ { "role": "system", "content": "Ты — Василий Кандинский" }, { "role": "user", "content": "Нарисуй розового кота" } ], "function_call": "auto" }' ``` Обращение к функции с помощью SDK: ```py from gigachat import GigaChat from gigachat.models import Chat, Messages, MessagesRole giga = GigaChat(base_url="https://api.giga.chat/v1", credentials="<ключ_авторизации>", verify_ssl_certs=False) payload = Chat( messages=[Messages(role=MessagesRole.USER, content="Нарисуй космонавта верхом на лошади")], function_call="auto", ) response = giga.chat(payload) print (response) ``` Обращение к функции с помощью партнерского пакета langchain-gigachat: ```py from langchain_gigachat.chat_models import GigaChat from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder llm = GigaChat( base_url="https://api.giga.chat/v1", credentials="<ключ_авторизации>", verify_ssl_certs=False, ) # Метод `bind_tools(tools=[], tool_choice="auto")` сообщает модели, что нужно использовать встроенные функции. llm = llm.bind_tools(tools=[], tool_choice="auto") # Промпт для создания изображения prompt = ChatPromptTemplate.from_messages( [ ( "system", """Ты — Василий Кандинский.""", ), ("user", """{topic}"""), ] ) # Цепочка для создания изображения generate_image_chain = prompt | llm response = generate_image_chain.invoke({"topic": "Нарисуй розового кота"}) print(response) ``` Обращение к функции с помощью SDK: ```js import { GigaChat } from 'gigachat'; const giga = new GigaChat({ baseUrl: 'https://api.giga.chat/api/v1', credentials: '<ключ_авторизации>', }); const resp = await giga.chat({ messages: [ { "role": "system", "content": "Ты — Василий Кандинский" }, { role: "user", content: "Нарисуй розового кота", }, ], function_call: 'auto', }); console.log(resp.choices[0]?.message.content); ``` Обращение к функции с помощью партнерского пакета langchain-gigachat: ```js import { GigaChat } from "langchain-gigachat" import { HumanMessage, SystemMessage } from "@langchain/core/messages"; const llm = new GigaChat({ baseUrl: 'https://api.giga.chat/api/v1', credentials: '<ключ_авторизации>', }); const messages = [ new SystemMessage("Ты — Василий Кандинский."), new HumanMessage("Нарисуй розового кота."), ]; const llmWithFunctions = llm.bindTools([], {tool_choice: 'auto'}); const response = await llmWithFunctions.invoke(messages); console.log(response.content) ``` Ответ модели будет содержать идентификатор получившегося изображения в формате `uuid4`. Идентификатор передается в поле `message.content`, в теге ``, в атрибуте `src`: ```json { "choices": [ { "message": { "content": "Запускаю генерацию изображения. Ожидайте результат — вот розовый кот, который у меня получился.", "role": "assistant", "functions_state_id": "77d3fb14-457a-46ba-937e-8d856156d003" }, "index": 0, "finish_reason": "stop" } ], "created": 1716367703, "model": "GigaChat:3.1.25.3", "object": "chat.completion", "usage": { "prompt_tokens": 372, "completion_tokens": 48, "total_tokens": 420 } } ``` Для скачивания файла из хранилища используйте метод : ```sh curl -L -X GET 'https://api.giga.chat/v1/files/<идентификатор_файла>/content' -o "<имя_файла>.jpeg" \ -H 'Accept: application/jpeg' \ -H 'Authorization: Bearer <токен_доступа>' ``` ## Создание 3D-модели Для создания 3D-модели запустите работу с функциями в автоматическом режиме и передайте название функции в массиве `functions`: ```sh curl -L -X POST 'https://api.giga.chat/v1/chat/completions' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ -H 'Authorization: Bearer <токен_доступа>' \ --data-raw '{ "model": "GigaChat", "messages": [ { "role": "user", "content": "Сгенерируй 3D-модель шара" } ], "function_call": "auto", "functions": [ { "name": "text2model3d" } ] }' ``` Обращение к функции с помощью SDK: ```py from gigachat import GigaChat from gigachat.models import Chat, Messages, MessagesRole, Function giga = GigaChat( base_url="https://api.giga.chat/v1", credentials="<ключ_авторизации>", verify_ssl_certs=False, # Повышеине времени ожидания, так как создание модели — длительный процесс timeout=200 ) payload = Chat( messages=[Messages(role=MessagesRole.USER, content="Сгенерируй 3D-модель шара")], function_call="auto", functions=[ Function(name="text2model3d") ] ) response = giga.chat(payload) print (response) ``` Обращение к функции с помощью партнерского пакета langchain-gigachat: ```py from langchain_gigachat.chat_models import GigaChat from langchain_core.prompts import ChatPromptTemplate llm = GigaChat( base_url="https://api.giga.chat/v1", credentials="<ключ_авторизациии>", verify_ssl_certs=False, # Повышеине времени ожидания, так как создание модели — длительный процесс timeout=200 ) tools = [ { "name": "text2model3d", }, ] # Метод `bind_tools(tools=[], tool_choice="auto")` сообщает модели, что нужно использовать встроенные функции. llm = llm.bind_tools(tools=tools, tool_choice="auto") # Промпт для создания изображения prompt = ChatPromptTemplate.from_messages( [ ("user", """{topic}"""), ] ) # Цепочка для создания 3D-модели generate_3d_model_chain = prompt | llm response = generate_3d_model_chain.invoke({"topic": "Сгенерируй 3D-модель шара"}) print(response) ``` Обращение к функции с помощью SDK: ```js import { GigaChat } from 'gigachat'; import { Agent } from 'node:https'; const httpsAgent = new Agent({ rejectUnauthorized: false, }); const giga = new GigaChat({ baseUrl: 'https://api.giga.chat/api/v1', credentials: '<ключ_авторизации>', timeout: 200, httpsAgent: httpsAgent, }); const resp = await giga.chat({ messages: [ { role: "user", content: "Сгенерируй 3D-модель шара", }, ], functions: [ {"name": 'text2model3d',} ], function_call: 'auto' }); console.log(resp.choices[0]?.message.content); ``` Ответ модели будет содержать `
`-блок с атрибутом `data-model-id`, в котором передается идентификатор сгенерированной 3D-модели. ```json { "choices": [ { "message": { "content": "
получилась такая 3D модель шара.", "role": "assistant", "functions_state_id": "7421eccb-f732-483b-9018-755233d3f3b7" }, "index": 0, "finish_reason": "stop" } ], "created": 1716367703, "model": "GigaChat:3.1.25.3", "object": "chat.completion", "usage": { "prompt_tokens": 372, "completion_tokens": 48, "total_tokens": 420 } } ``` Для скачивания файла из хранилища используйте метод : ```sh curl -L -X GET 'https://api.giga.chat/v1/files/<идентификатор_3d_модели>/content' -o "<имя_файла>.fbx" \ -H 'Accept: application/jpeg' \ -H 'Authorization: Bearer <токен_доступа>' ``` ## Обработка документов Модели могут обращаться к встроенной функции обработки документов, если массив `attachments` содержит идентификаторы документов, а работа с функциями запущена в авторежиме (`"function_call": "auto"`). :::tip Посмотреть доступные в хранилище файлы можно с помощью метода . Подробнее — в разделе [Обработка файлов](/ru/gigachat/guides/working-with-files). ::: Пример: ```sh curl --location 'https://api.giga.chat/v1/chat/completions' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <ключ_авторизации>' \ --data '{ "model": "GigaChat-2-Max", "function_call": "auto", "messages": [ { "role": "user", "content": "Сделай краткий пересказ документа", "attachments": [ "e28a83b0-611c-4d15-930a-eb742385245b" ] } ] }' ``` ## Совместное использование встроенных и пользовательских функций При работе с пользовательскими функциями, запрос всегда будет содержать массив `functions`. Чтобы модели могли обращаться к встроенным функциям, их названия нужно обязательно передавать в массиве `functions` вместе с описанием пользовательских функций: ```sh curl --location 'https://api.giga.chat/v1/chat/completions' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <токен_доступа>' \ --data '{ "model": "GigaChat-2-Pro", "messages": [ { "role": "user", "content": "Нарисуй горы" } ], "function_call": "auto", "functions": [ { "name": "text2image" }, { "name": "weather_forecast", "description": "Возвращает температуру на заданный период", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "Местоположение, например, название города" }, "format": { "type": "string", "enum": [ "celsius", "fahrenheit" ], "description": "Единицы измерения температуры" }, "num_days": { "type": "integer", "description": "Период, для которого нужно вернуть" } }, "required": [ "location", "format" ] } } ] }' ``` Совместное использование функций с помощью SDK: ```py from gigachat import GigaChat from gigachat.models import Chat, Messages, MessagesRole, Function, FunctionParameters giga = GigaChat(base_url="https://api.giga.chat/v1", credentials="<ключ_авторизации>", verify_ssl_certs=False) weather_forecast_function=Function( name="weather_forecast", description="Возвращает температуру на заданный период", parameters=FunctionParameters( type="object", properties={ "location": {"type": "string", "description": "Местоположение, например, название города"}, "format": {"type": "string", "enum": ["celsius", "fahrenheit"], "description": "Единицы измерения температуры"}, "num_days": {"type": "integer", "description": "Период, для которого нужно вернуть"}}, required=["location","format"], ) ) payload = Chat( messages=[Messages(role=MessagesRole.USER, content="Погода в Манжероке на три дня")], function_call="auto", functions=[ Function(name="text2image"), weather_forecast_function ] ) response = giga.chat(payload) print (response) ``` Совместное использование функций с помощью партнерского пакета langchain-gigachat: ```py from langchain_gigachat.chat_models import GigaChat from langchain_core.prompts import ChatPromptTemplate llm = GigaChat( base_url="https://api.giga.chat/v1", credentials="<ключ_авторизации>", verify_ssl_certs=False ) tools = [ { "name": "text2image", }, { "name": "weather_forecast", "description": "Возвращает температуру на заданный период", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "Местоположение, например, название города" }, "format": { "type": "string", "enum": [ "celsius", "fahrenheit" ], "description": "Единицы измерения температуры" }, "num_days": { "type": "integer", "description": "Период, для которого нужно вернуть" } }, "required": [ "location", "format" ] } } ] llm = llm.bind_tools(tools=tools, tool_choice="auto") prompt = ChatPromptTemplate.from_messages( [ ("user", """{topic}"""), ] ) combined_functions_chain = prompt | llm response = combined_functions_chain.invoke({"topic": "Погода в Манжероке на три дня"}) print(response) ``` Обращение к функции с помощью SDK: ```js import { GigaChat } from 'gigachat'; const giga = new GigaChat({ baseUrl: 'https://api.giga.chat/api/v1', credentials: '<ключ_авторизации>', }); const weatherForecast = { name: "weather_forecast", description: "Возвращает температуру на заданный период", parameters: { type: "object", properties: { location: { type: "string", description: "Местоположение, например, название города" }, format: { type: "string", enum: [ "celsius", "fahrenheit" ], description: "Единицы измерения температуры" }, num_days: { type: "integer", description: "Период, для которого нужно вернуть" } }, required: [ "location", "num_days" ] }, return_parameters: { type: "object", properties: { location: { type: "string", description: "Местоположение, например, название города" }, temperature: { type: "integer", description: "Температура для заданного местоположения" }, forecast: { type: "array", items: { type: "string" }, description: "Описание погодных условий" }, error: { type: "string", description: "Возвращается при возникновении ошибки. Содержит описание ошибки" } } } } const resp = await giga.chat({ messages: [ { role: "user", content: "Погода в Манжероке на три дня", }, ], functions: [ {"name": 'text2image',}, weatherForecast ], function_call: 'auto' }); console.log(resp.choices[0]?.message); ``` ## Сохранение состояния обращения к функциям Независимо от того, обратилась модель к встроенной функции или нет, ее ответ будет содержать идентификатор `functions_state_id`. Чтобы учитывать состояние работы с функциями передавайте этот идентификатор в соответствующих сообщениях с ролью `assistant`: ```json { "messages": [ { "role": "user", "content": "Нарисуй корову" }, { "content": "Добавил в очередь на генерацию изображения... — вот такая корова у меня получилась.", "role": "assistant", "functions_state_id": "77d3fb14-457a-46ba-937e-8d856156d003" }, { "content": "А теперь нарисуй слона", "role": "user" } ], "model": "GigaChat" } ``` ## Потоковая генерация токенов Работа встроенных функций может занимать продолжительное время. Вы можете обрабатывать ответ модели по мере его создания с помощью [потоковой генерации токенов](/ru/gigachat/guides/response-token-streaming) (параметр запроса `"stream": true`). Пример запроса: ```sh curl -L -X POST 'https://api.giga.chat/v1/chat/completions' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ -H 'Authorization: Bearer <токен_доступа>' \ --data-raw '{ "model": "GigaChat-Pro", "messages": [ { "role": "system", "content": "Ты — Василий Кандинский" }, { "role": "user", "content": "Нарисуй розового кота" } ], "function_call": "auto", "stream": true, }' ``` Пример ответа: ```json data: {"choices":[{"delta":{"content":"осталось 00:11","role":"function_in_progress","name":"text2image"},"index":0}],"created":1733401362,"model":"GigaChat-Max:1.0.26.20","object":"chat.completion"} data: {"choices":[{"delta":{"content":"осталось 00:06","role":"function_in_progress","name":"text2image"},"index":0}],"created":1733401367,"model":"GigaChat-Max:1.0.26.20","object":"chat.completion"} data: {"choices":[{"delta":{"content":"осталось 00:03","role":"function_in_progress","name":"text2image"},"index":0}],"created":1733401370,"model":"GigaChat-Max:1.0.26.20","object":"chat.completion"} data: {"choices":[{"delta":{"content":"осталось 00:01","role":"function_in_progress","name":"text2image"},"index":0}],"created":1733401372,"model":"GigaChat-Max:1.0.26.20","object":"chat.completion"} data: {"choices":[{"delta":{"content":"осталось 00:01","role":"function_in_progress","name":"text2image"},"index":0}],"created":1733401373,"model":"GigaChat-Max:1.0.26.20","object":"chat.completion"} data: {"choices":[{"delta":{"content":" вот иллюстрация Красной Шапочки.","role":"assistant"},"index":0}],"created":1733401374,"model":"GigaChat-Max:1.0.26.20","object":"chat.completion"} data: {"choices":[{"delta":{"content":"","functions_state_id":"1a7f916c-053b-4649-9c7d-0ce0f4a0f515"},"index":0,"finish_reason":"stop"}],"created":1733401374,"model":"GigaChat-Max:1.0.26.20","object":"chat.completion","usage":{"prompt_tokens":24,"completion_tokens":48,"total_tokens":72,"precached_prompt_tokens":0}} data: [DONE] ``` Запуск потоковой генерации с помощью SDK: ```py import asyncio import time from gigachat import GigaChat from gigachat.models import Chat, Messages, MessagesRole payload = Chat( messages=[ Messages( role=MessagesRole.SYSTEM, content="Ты — Василий Кандинский.", ), Messages( role=MessagesRole.USER, content="Нарисуй розового кота", ), ], update_interval=0.1, function_call="auto", ) async def main(): async with GigaChat(base_url="https://api.giga.chat/v1", credentials="<ключ_авторизации>", verify_ssl_certs=False) as giga: async for chunk in giga.astream(payload): print(time.time(), chunk, flush=True) if __name__ == "__main__": asyncio.run(main()) ``` Пример ответа: ```ini 1738844827.437161 x_headers={'x-request-id': '732bef07-bbb6-4658-8739-5c79f0c53b13', 'x-session-id': '3a46eb04-eb73-4ed8-bd5e-3d106a8b32cd', 'x-client-id': None} choices=[ChoicesChunk(delta=MessagesChunk(role=, content=' вот такой розовый кот у меня получился.', function_call=None), index=0, finish_reason=None)] created=1738844827 model='GigaChat:1.0.26.20' object_='chat.completion' 1738844827.437387 x_headers={'x-request-id': '732bef07-bbb6-4658-8739-5c79f0c53b13', 'x-session-id': '3a46eb04-eb73-4ed8-bd5e-3d106a8b32cd', 'x-client-id': None} choices=[ChoicesChunk(delta=MessagesChunk(role=None, content='', function_call=None), index=0, finish_reason='stop')] created=1738844827 model='GigaChat:1.0.26.20' object_='chat.completion' ``` Запуск потоковой генерации с помощью партнерского пакета langchain-gigachat: ```py from langchain_gigachat.chat_models import GigaChat from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder llm = GigaChat( base_url="https://api.giga.chat/v1", credentials="<ключ_авторизации>", verify_ssl_certs=False, ) # Метод `bind_tools(tools=[], tool_choice="auto")` сообщает модели, что нужно использовать встроенные функции. llm = llm.bind_tools(tools=[], tool_choice="auto") # Промпт для создания изображения prompt = ChatPromptTemplate.from_messages( [ ( "system", """Ты — Василий Кандинский.""", ), ("user", """{topic}"""), ] ) # Цепочка для создания изображения generate_image_chain = prompt | llm for chunk in generate_image_chain.stream({"topic": "Нарисуй розового кота"}): print(chunk) ``` Пример ответа: ```ini content=' вот рисунок розового кота.' additional_kwargs={'image_uuid': 'b62726bb-0cf5-4980-a8c4-70f3e4a6cc9b', 'postfix_message': ' вот рисунок розового кота.'} response_metadata={'x_headers': {'x-request-id': '4c723683-053d-4568-84cc-6cf1307f2742', 'x-session-id': 'f1f874cb-4d29-4ae1-9d5b-b17b70ffa86f', 'x-client-id': None}} id='4c723683-053d-4568-84cc-6cf1307f2742' content='' additional_kwargs={} response_metadata={'finish_reason': 'stop'} id='4c723683-053d-4568-84cc-6cf1307f2742' ``` Обращение к функции с помощью SDK: ```js import { GigaChat } from 'gigachat'; const giga = new GigaChat({ baseUrl: 'https://api.giga.chat/api/v1', credentials: '<ключ_авторизации>', }); let message = ""; let bit = ""; let n = 0; for await (const chunk of giga.stream( { messages: [ { role: "user", content: "Нарисуй розового кота", }, ], function_call: 'auto' } )) { bit = chunk.choices[0]; message += chunk.choices[0]; n++; console.log('\nФрагмент ' + n + ': ' , bit); } ``` Обращение к функции с помощью партнерского пакета langchain-gigachat: ```js import { GigaChat } from "langchain-gigachat" import { HumanMessage, SystemMessage } from "@langchain/core/messages"; const llm = new GigaChat({ baseUrl: 'https://api.giga.chat/api/v1', credentials: '<ключ_авторизации>', }); const messages = [ new SystemMessage("Ты — Василий Кандинский."), new HumanMessage("Нарисуй розового кота и напиши короткую историю про него"), ]; const llmWithFunctions = llm.bindTools([], {tool_choice: 'auto'}); const stream = await llmWithFunctions.stream(messages); const chunks = []; for await (const chunk of stream) { chunks.push(chunk); console.log(`${chunk.content}|`); } ``` Сообщения о запуске встроенной функции будут приходить с ролью `function_in_progress`. Они будут содержать данные о времени начала обработки, оставшемся времени до окончания работы функции и ее наименовании. --- # Описание пользовательских функций [source](https://developers.sber.ru/docs/ru/gigachat/guides/functions/describing-custom-function.md) Чтобы модель могла сгенерировать аргументы для вашей функции, опишите ее в формате [JSON Schema](https://json-schema.org/understanding-json-schema/reference), и передайте описание в массиве `functions`, в запросе . При принятии решения о генерации аргументов модель ориентируется на описание функции в поле `description`. Чем подробнее описана функция, тем лучше будет результат работы модели при работе с ней. Пример описания функции прогноза погоды: ```json { "name": "weather_forecast", "description": "Возвращает температуру на заданный период", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "Местоположение, например, название города" }, "format": { "type": "string", "enum": [ "celsius", "fahrenheit" ], "description": "Единицы измерения температуры" }, "num_days": { "type": "integer", "description": "Период, для которого нужно вернуть" } }, "required": [ "location", "num_days" ] }, "return_parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "Местоположение, например, название города" }, "temperature": { "type": "integer", "description": "Температура для заданного местоположения" }, "forecast": { "type": "array", "items": { "type": "string" }, "description": "Описание погодных условий" }, "error": { "type": "string", "description": "Возвращается при возникновении ошибки. Содержит описание ошибки" } } }, "status": { "description": "Статус", "enum": [ "success", "fail" ], "type": "string" } } ``` Описание функции включает поля: * `name` — обязательное поле с названием функции. Название функции должно содержать только латинские буквы. Название функции не должно начинаться с цифры; * `description` — подробное текстовое описание того, как работает функция. Модель анализирует запрос и доступные описания, после чего принимает решение о генерации параметров для подходящей функции. * `parameters` — обязательное поле. Содержит массив с описанием аргументов функции, которые может сгенерировать модель. * `few_shot_examples` — массив, в котором вы можете описать примеры того, как модель должна сгенерировать аргументы. Наличие примеров повышает качество генерации аргументов. * `return_parameters` — объект с описанием ответа, который модель будет ожидать в [ответе от функции](/ru/gigachat/guides/functions/generating-arguments-for-custom-functions). :::tip Хотя поле `return_parameters` — необязательное, его использование помогает моделям лучше генерировать аргументы для пользовательских функций. ::: ## Описание результата работы функции С помощью объекта `return_parameters` можно явно указать какие поля должен содержать результат работы функции. Описанные поля нужно передать в модель при следующем запросе. ```json { "return_parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "Местоположение, например, название города" }, "temperature": { "type": "integer", "description": "Температура для заданного местоположения" }, "forecast": { "type": "array", "items": { "type": "string" }, "description": "Описание погодных условий" }, "error": { "type": "string", "description": "Возвращается при возникновении ошибки. Содержит описание ошибки" } } } } ``` ## Использование примеров Для повышения качества генерации в описании функции можно передать примеры аргументов, которые ожидаются от модели. Для этого используйте поле `few_shot_examples` — массив объектов, каждый из которых содержит запрос пользователя (поле `request`) и аргументы, сгенерированные на его основе (объект `params`). Пример описания блоков `few_shot_examples` и `return_parameters`: ```json { "name": "weather_forecast", "description": "Возвращает температуру на заданный период", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "Местоположение, например, название города" }, "format": { "type": "string", "enum": [ "celsius", "fahrenheit" ], "description": "Единицы измерения температуры" }, "num_days": { "type": "integer", "description": "Период, для которого нужно вернуть" } }, "required": [ "location", "num_days" ] }, "few_shot_examples": [ { "request": "Какая погода в Москве в ближайшие три дня", "params": { "location": "Moscow, Russia", "format": "celsius", "num_days": "3" } } ], "return_parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "Местоположение, например, название города" }, "temperature": { "type": "integer", "description": "Температура для заданного местоположения" }, "forecast": { "type": "array", "items": { "type": "string" }, "description": "Описание погодных условий" }, "error": { "type": "string", "description": "Возвращается при возникновении ошибки. Содержит описание ошибки" } } } } ``` ## Составные функции Модели GigaChat могут использовать результаты работы одних функций для вызова других. Функции, которые работают таким образом, называются составными. О такой возможности нужно сообщать в описании соответствующих функций. В остальном составные функции описываются так же, как и обычные. Ниже — пример нескольких функций, в описании которых заданы инструкции для модели. Согласно этим инструкциям при недостатке данных модель должна самостоятельно обратиться к соответствующей функции, которая может дать недостающие данные.
Функция получения данных о напоминании ```json { "name": "get_reminder", "description": "Получить метаинформацию обо всех установленных напоминаниях. Вызови эту функцию перед удалением или изменением напоминаний, чтобы получить ID напоминаний. В случае, если пользователь хочет удалить или изменить напоминание и в контексте диалога нет необходимых ID, то сначала вызови эту функцию для получения идентификатора ID и ответь пустым сообщением, а далее, при необходимости, вызови следующую функцию для выполнения запроса пользователя.\nПосле вызова данной функции ответь пользователю в следующем стиле: \"У вас установлено 2 напоминания. Через 10 минут выключить духовку на кухне, а завтра в 3 часа сходить в гости.\"", "parameters": { "type": "object", "properties": { "title": { "type": "string", "description": "Текст напоминания" }, "date_time": { "type": "string", "description": "Относительное время и дата напоминания на русском языке" }, "device_name": { "type": "string", "description": "Название устройства, на котором следует проверить напоминание" }, "room": { "type": "string", "description": "Название комнаты в которой следует проверить напоминание" } }, "required": [] }, "few_shot_examples": [ { "request": "Мои напоминания", "params": {} }, { "request": "Удали напоминалку на завтра в пять", "params": {} }, { "request": "Перенеси напоминание поздравить маму на шесть вечера", "params": {} }, { "request": "Какое у меня количество напоминаний", "params": {} }, { "request": "Озвучь напоминалки", "params": {} } ], "return_parameters": { "type": "object", "description": "Ответ на get_reminder", "properties": { "status": { "type": "string", "enum": [ "success", "fail" ], "description": "Статус — удалось ли найти список установленных напоминаний" }, "error": { "type": "string", "description": "Текст ошибки в случае, если status == fail" }, "items": { "type": "array", "description": "Список установленных напоминаний. В списке перечислены идентификаторы напоминаний (ID), дата и время старта напоминания (reminderTime), периодичность напоминания в человекочитаемом формате (cron), название напоминания (title), дата и время создания напоминания (createdAt).", "items": { "type": "object", "description": "Метаинформация напоминания.", "properties": { "id": { "type": "string", "description": "Идентификатор напоминания." }, "cron": { "type": "string", "description": "Описание периодичности напоминания. Здесь будет передано человекочитаемое описание переодичности напоминания. Если поле отсутствует, то у напоминания нет периодичности (единоразовое)." }, "title": { "type": "string", "description": "Название напоминания, о чем надо напомнить." }, "devices": { "type": "array", "description": "Словарь устройств, к которым привязаны напоминания", "items": { "type": "string", "description": "Название устройства" } }, "reminderTime": { "type": "string", "description": "Дата и время старта напоминания." }, "createdAt": { "type": "string", "description": "Дата и время создания напоминания." } } } } }, "required": [ "status" ] } } ```
Функция удаления напоминания ```json { "name": "delete_reminder", "description": "Удалить напоминания по ID. Если пользователь явно не передал ID напоминания, то получи метаинформацию о напоминаниях, вызвав сначала соответствующую функцию, и только затем используй функцию удаления напоминания по ID.\nЕсли в контексте беседы с пользователем у тебя есть необходимый ID, то перед запуском этой функции тебе необходимо переспросить пользователя, точно ли он хочет удалить данное напоминание и только после согласия удалять. Если пользователь просит удалить все напоминания и в контексте диалога есть необходимые ID или пользователь явно передает ID напоминания, которое надо удалить, то вызови эту функцию, переспрашивать пользователя не нужно. В остальных случаях, при наличии необходимых ID в контексте диалога и готовности удалить напоминание, сначала переспроси пользователя, подтверждает ли он удаление напоминания и вызывай функцию только при наличии подтверждения от пользователя.", "parameters": { "type": "object", "properties": { "ids": { "type": "array", "items": { "type": "string", "description": "Идентификатор ID напоминания, которое нужно удалить" }, "description": "Список идентификаторов ID напоминаний, которые нужно удалить" } }, "required": [ "ids" ] }, "few_shot_examples": [], "return_parameters": { "type": "object", "description": "Ответ на delete_reminder", "properties": { "status": { "type": "string", "enum": [ "success", "fail" ], "description": "Статус — удалось ли удалить напоминание." }, "error": { "type": "string", "description": "Текст ошибки в случае, если status == fail" } }, "required": [ "status" ] } } ```
Функция изменения напоминания ```json { "name": "change_reminder", "description": "Изменить напоминание по ID.\nЕсли пользователь просит изменить напоминание, но не указывает какое и какие изменения надо внести, то в ответе попроси предоставить дополнительную информацию.\nЕсли просит изменить напоминание и не указывает какое, но указывает какие изменения внести, то сначала получи метаинформацию о напоминаниях, вызвав нужную функцию, перечисли их в ответе и уточни, какое из них изменить.\nЕсли просит изменить напоминание, указывая какое, но не указывая изменения, то сначала получи метаинформацию обо всех напоминаниях, вызвав нужную функцию, перечисли их в ответе и при наличии ID, соответствующего запросу, уточни какие изменения надо внести.\nЕсли просит изменить напоминание, указывая какое и какие изменения внести, то получи метаинформацию обо всех напоминаниях, вызвав нужную функцию, и при наличии ID, соответствующего запросу пользователя, вызови функцию изменения напоминания по ID.\n\nВызывай данную функцию только при наличии нужного ID и информации о том, как надо изменить напоминание.", "parameters": { "type": "object", "properties": { "id": { "type": "string", "description": "ID напоминания" }, "title": { "type": "string", "description": "Новый текст напоминания" }, "date_time": { "type": "string", "description": "Новые время и дата напоминания на русском языке. Передай только то, что сказал пользователь, не меняя формат." }, "device_name": { "type": "string", "description": "Новое название устройства, на которое следует поставить напоминание" } }, "required": [ "id" ] }, "few_shot_examples": [ { "request": "Изменить напоминание с ID 123 на сегодня в 19 30", "params": { "id": "123", "date_time": "сегодня в 19 30" } } ], "return_parameters": { "type": "object", "properties": { "status": { "type": "string", "enum": [ "success", "fail" ], "description": "Статус — удалось ли изменить напоминание." }, "error": { "type": "string", "description": "Текст ошибки в случае, если status == fail" }, "reminder": { "type": "object", "description": "Параметры созданного напоминания", "properties": { "id": { "type": "string", "description": "Идентификатор напоминания." }, "cron": { "type": "string", "description": "Описание периодичности напоминания. Здесь будет передано человекочитаемое описание переодичности напоминания. Если поле отсутствует, то у напоминания нет периодичности (единоразовое)." }, "title": { "type": "string", "description": "Название напоминания, о чем надо напомнить." }, "devices": { "type": "array", "description": "Словарь устройств, к которым привязаны напоминания", "items": { "type": "string", "description": "Название устройства" } }, "reminderTime": { "type": "string", "description": "Дата и время старта напоминания." }, "createdAt": { "type": "string", "description": "Дата и время создания напоминания." } } } }, "required": [ "status" ] } } ```
## Валидация описания функции Проверить описание функции на соответствие формату GigaChat API можно с помощью метода . В ответ на запрос метод возвращает список ошибок и предупреждений. Ошибки нужно исправить обязательно, а исправление предупреждений позволит модели точнее обращаться к функции и повысит качество сгенерированных аргументов. **Запрос** ```sh curl --location 'https://api.giga.chat/v1/functions/validate' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <токен_доступа>' \ --data '{ "name": "weather_forecast", "description": "Возвращает температуру на заданный период", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "Местоположение, например, название города" }, "format": { "type": "string", "enum": [ "celsius", "fahrenheit" ], "description": "Единицы измерения температуры" }, "num_days": { "type": "integer", "description": "Период, для которого нужно вернуть" } }, "required": [ "location", "format" ] } }' ``` **Ответ** ```json { "status": 200, "message": "Function is valid", "json_ai_rules_version": "1.0.5", "warnings": [ { "description": "Value is null but should be object", "schema_location": "#/properties/return_parameters" }, { "description": "Value is null but should be array", "schema_location": "#/properties/few_shot_examples" } ] } ``` ## Примеры описания функций При описании функции уделяйте внимание подробному описанию структуры входных и выходных данных, не забывайте указывать краткое описание самой функции и примеры ее использования. Ниже представлены несколько примеров, на которые можно ориентироваться при описании собственных функций.
Функция расчета расстояния ```json { "name": "calculate_trip_distance", "description": "Рассчитать расстояние между двумя местоположениями", "parameters": { "type": "object", "properties": { "start_location": { "type": "string", "description": "Начальное местоположение" }, "end_location": { "type": "string", "description": "Конечное местоположение" } }, "required": [ "start_location", "end_location" ] }, "return_parameters": { "type": "object", "properties": { "distance": { "description": "Расстояние между начальным и конечным местоположением в километрах", "type": "integer" } }, "required": [ "distance" ] }, "few_shot_examples": [ { "request": "Насколько далеко от Москвы до Санкт-Петербурга?", "params": { "start_location": "Москва", "end_location": "Санкт-Петербург" } } ] } ```
Функция отправки SMS-сообщения ```json { "name": "send_sms", "description": "Отправить SMS-сообщение", "parameters": { "type": "object", "properties": { "recipient": { "type": "string", "description": "Номер телефона получателя" }, "message": { "type": "string", "description": "Содержимое сообщения" } }, "required": [ "recipient", "message" ] }, "return_parameters": { "type": "object", "properties": { "status": { "description": "Статус отправки сообщения", "type": "string" }, "message": { "description": "Сообщение о результате отправки SMS", "type": "string" } }, "required": [ "status", "message" ] }, "few_shot_examples": [ { "request": "Можешь ли ты отправить SMS-сообщение на номер 123456789 с содержимым 'Привет, как дела?'", "params": { "recipient": "123456789", "message": "Привет, как дела?" } } ] } ```
Функция поиска фильмов ```json { "name": "search_movies", "description": "Поиск фильмов на основе заданных критериев", "parameters": { "type": "object", "properties": { "genre": { "type": "string", "description": "Жанр фильма" }, "year": { "type": "integer", "description": "Год выпуска фильма" }, "actor": { "type": "string", "description": "Имя актера, снимавшегося в фильме" } }, "required": [] }, "return_parameters": { "type": "object", "properties": { "movies": { "description": "Список названий фильмов, соответствующих заданным критериям поиска", "type": "array", "items": { "description": "Название фильма", "type": "string" } } }, "required": [ "movies" ] }, "few_shot_examples": [ { "request": "\"Найди все фильмы жанра комедия\".", "params": { "genre": "комедия" } } ] } ```
--- # Режимы работы с функциями [source](https://developers.sber.ru/docs/ru/gigachat/guides/functions/function-calling-modes.md) Режим обращения к функциям задается с помощью поля `function_call`. Поле может принимать значения `none`, `auto` или объект с названием функции: встроенной или пользовательской, описанной в массиве functions. Обращение к встроенным функциям возможно только в авторежиме. Режимы без массива функций ## Режимы обращения к функциям Режим обращения к функциям задается с помощью поля `function_call`, который может принимать значения: * `none` — отключение обращения к функциям; * `auto` — в авторежиме модель, ориентируясь на содержание сообщений, принимает решение: воспользоваться одной из встроенных функций или сгенерировать аргументы для пользовательских функций из массива `functions`. При этом, если массив содержит описание хотя бы одной пользовательской функции, модель сможет ее вызвать только если ее название передано в массиве `functions`; * `{"name": "название_функции"}` — принудительная генерация аргументов для указанной функции. При принудительной генерации аргументов для пользовательской функции ее описание нужно обязательно передавать в массиве `functions`. В противном случае вернется ошибка. Режимы с массивом функций ### Отключение работы с функциями Если вы хотите, чтобы модель не могла генерировать аргументы или обращаться к встроенным функциям, передайте в запросе `"function_call": "none"`. В этом случае модель просто сгенерирует текст на основе полученного запроса. Независимо от его содержимого или функций, переданных в массиве `functions`. **Запрос** ```json { "model": "GigaChat-2-Max", "messages": [ { "role": "user", "content": "Какая температура в Манжероке" } ], "function_call": "none", "functions": [ { "name": "weather_forecast", "description": "Возвращает температуру на заданный период", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "Местоположение, например, название города" }, "format": { "type": "string", "enum": [ "celsius", "fahrenheit" ], "description": "Единицы измерения температуры" }, "num_days": { "type": "integer", "description": "Период, для которого нужно вернуть" } }, "required": [ "location", "num_days" ] }, "return_parameters": { "type": "object", "properties": { "status": { "description": "Статус", "enum": [ "success", "fail" ], "type": "string" }, "location": { "type": "string", "description": "Местоположение, например, название города" }, "temperature": { "type": "integer", "description": "Температура для заданного местоположения" }, "forecast": { "type": "array", "items": { "type": "string" }, "description": "Описание погодных условий" }, "error": { "type": "string", "description": "Возвращается при возникновении ошибки. Содержит описание ошибки" } } } } ] } ``` **Ответ** ```json { "choices": [ { "message": { "content": "У меня нет доступа к данным о текущей температуре в режиме реального времени. Для получения актуальной информации рекомендую воспользоваться специализированными погодными сервисами или приложениями.", "role": "assistant" }, "index": 0, "finish_reason": "stop" } ], "created": 1744804304, "model": "GigaChat-2-Max:2.0.28.2", "object": "chat.completion", "usage": { "prompt_tokens": 19, "completion_tokens": 31, "total_tokens": 50, "precached_prompt_tokens": 0 } } ``` ### Автоматический режим Чтобы модель автоматически генерировала аргументы для пользовательских или обращалась к встроенным функциям, передайте в запросе `"function_call": "auto"`. В этом режиме модель анализирует полученные сообщения и принимает решение к каким функциям из массива `functions` можно обратиться. Поэтому, если запрос содержит массив `functions`, то в нем обязательно нужно передать описание пользовательских функций или имена встроенных функций, Пример ниже показывает, как модель на основе сообщения решила обратиться к встроенной функции, а не сгенерировать аргументы для пользовательской. **Запрос** ```json { "model": "GigaChat-2-Pro", "messages": [ { "role": "user", "content": "Нарисуй Манжерок." } ], "function_call": "auto", "functions": [ { "name": "text2image" }, { "name": "weather_forecast", "description": "Возвращает температуру на заданный период", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "Местоположение, например, название города" }, "format": { "type": "string", "enum": [ "celsius", "fahrenheit" ], "description": "Единицы измерения температуры" }, "num_days": { "type": "integer", "description": "Период, для которого нужно вернуть" } }, "required": [ "location", "num_days" ] }, "return_parameters": { "type": "object", "properties": { "status": { "description": "Статус", "enum": [ "success", "fail" ], "type": "string" }, "location": { "type": "string", "description": "Местоположение, например, название города" }, "temperature": { "type": "integer", "description": "Температура для заданного местоположения" }, "forecast": { "type": "array", "items": { "type": "string" }, "description": "Описание погодных условий" }, "error": { "type": "string", "description": "Возвращается при возникновении ошибки. Содержит описание ошибки" } } } } ] } ``` **Ответ** ```json { "choices": [ { "message": { "content": " нарисовал Манжерок в Алтае.", "role": "assistant", "functions_state_id": "ff10827a-407b-4503-a1e6-7448f85f2e3e" }, "index": 0, "finish_reason": "stop" } ], "created": 1748527095, "model": "GigaChat-2-Pro:2.0.28.2", "object": "chat.completion", "usage": { "prompt_tokens": 727, "completion_tokens": 50, "total_tokens": 777, "precached_prompt_tokens": 0 } } ``` ### Принудительный режим Если в поле `function_call` передать объект с названием функции из массива `functions`, модель попытается использовать ее независимо от полученного запроса. При этом, если в массиве `functions` отсутствует функция с подходящим названием, модель вернет ошибку: ```json { "status": 422, "message": "Invalid params: explicit_call function name must exist in functions" } ``` В примере ниже модель генерирует аргументы для пользовательской функции, хотя запрос не содержит явного намерения узнать температуру. **Запрос** ```json { "model": "GigaChat-2-Max", "messages": [ { "role": "user", "content": "Я слышал, что в Манжероке красиво" } ], "function_call": { "name": "weather_forecast" }, "functions": [ { "name": "weather_forecast", "description": "Возвращает температуру на заданный период", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "Местоположение, например, название города" }, "format": { "type": "string", "enum": [ "celsius", "fahrenheit" ], "description": "Единицы измерения температуры" }, "num_days": { "type": "integer", "description": "Период, для которого нужно вернуть" } }, "required": [ "location", "num_days" ] }, "return_parameters": { "type": "object", "properties": { "status": { "description": "Статус", "enum": [ "success", "fail" ], "type": "string" }, "location": { "type": "string", "description": "Местоположение, например, название города" }, "temperature": { "type": "integer", "description": "Температура для заданного местоположения" }, "forecast": { "type": "array", "items": { "type": "string" }, "description": "Описание погодных условий" }, "error": { "type": "string", "description": "Возвращается при возникновении ошибки. Содержит описание ошибки" } } } } ] } ``` **Ответ** ```json { "choices": [ { "message": { "content": "", "role": "assistant", "function_call": { "name": "weather_forecast", "arguments": { "format": "celsius", "location": "Манжерок" } }, "functions_state_id": "b5ea59c4-b980-401c-995f-75175804dfcd" }, "index": 0, "finish_reason": "function_call" } ], "created": 1744804424, "model": "GigaChat-2-Max:2.0.28.2", "object": "chat.completion", "usage": { "prompt_tokens": 25, "completion_tokens": 26, "total_tokens": 51, "precached_prompt_tokens": 112 } } ``` --- # Генерация аргументов [source](https://developers.sber.ru/docs/ru/gigachat/guides/functions/generating-arguments-for-custom-functions.md) В этом разделе вы найдете примеры генерации аргументов для пользовательских функций в различных режимах, а также узнаете, как работает генерация аргументов в потоковом режиме и как вернуть в модель результат работы функции. Пользовательские функции — это функции, реализованные в вашем приложении или стороннем сервисе. Модели GigaChat могут генерировать аргументы для таких функций на основе их [описания](/ru/gigachat/guides/functions/describing-custom-function), полученного в массиве `functions`, в запросе . Используйте полученные аргументы для вызова функции, а результаты ее работы возвращайте в модель [в сообщении с ролью `function`](/ru/gigachat/guides/functions/generating-arguments-for-custom-functions). Модели умеют генерировать аргументы автоматически, в зависимости от промпта, или принудительно. Подробнее — в разделе [Режимы работы с функциями](/ru/gigachat/guides/functions/function-calling-modes). :::tip Рекомендации по описанию пользовательских функций и примеры — в разделе [Описание пользовательских функций](/ru/gigachat/guides/functions/describing-custom-function). ::: ## Быстрый старт Чтобы модель сгенерировала аргументы для вашей функции, просто передайте ее описание в массиве `functions` вместе с подходящим промптом: ```sh curl --location 'https://api.giga.chat/v1/chat/completions' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <токен_доступа>' \ --data '{ "model": "GigaChat-2-Pro", "messages": [ { "role": "user", "content": "Погода в Манжероке на десять дней" } ], "functions": [ { "name": "weather_forecast", "description": "Возвращает температуру на заданный период", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "Местоположение, например, название города" }, "format": { "type": "string", "enum": [ "celsius", "fahrenheit" ], "description": "Единицы измерения температуры" }, "num_days": { "type": "integer", "description": "Период, для которого нужно вернуть" } }, "required": [ "location", "num_days" ] }, "few_shot_examples": [ { "request": "Какая погода в Москве в ближайшие три дня", "params": { "location": "Moscow, Russia", "format": "celsius", "num_days": "3" } } ], "return_parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "Местоположение, например, название города" }, "temperature": { "type": "integer", "description": "Температура для заданного местоположения" }, "forecast": { "type": "array", "items": { "type": "string" }, "description": "Описание погодных условий" }, "error": { "type": "string", "description": "Возвращается при возникновении ошибки. Содержит описание ошибки" } } } } ] }' ``` Генерация аргументов с помощью SDK: ```py from gigachat import GigaChat from gigachat.models import Chat, Function, Messages, MessagesRole, FunctionParameters from gigachat.models.few_shot_example import FewShotExample giga = GigaChat( base_url="https://api.giga.chat/v1", credentials="<ключ_авторизации>", ) weather_forecast_function=Function( name="weather_forecast", description="Возвращает температуру на заданный период", parameters=FunctionParameters( type="object", properties={"location": {"type": "string", "description": "Местоположение, например, название города"}, "format": {"type": "string", "enum": ["celsius", "fahrenheit"], "description": "Единицы измерения температуры"}, "num_days": {"type": "integer", "description": "Период, для которого нужно вернуть"}}, required=["location","format"], ), few_shot_examples=[FewShotExample( request="Какая погода в Москве в ближайшие три дня", params={"location": "Moscow, Russia", "format": "celsius", "num_days": "3"} )], return_parameters={ "type": "object", "properties": {"location": {"type": "string", "description": "Местоположение, например, название города"}, "temperature": {"type": "integer", "description": "Температура для заданного местоположения"}, "forecast": {"type": "array", "items": {"type": "string"}, "description": "Описание погодных условий"}, "error": {"type": "string", "description": "Возвращается при возникновении ошибки. Содержит описание ошибки"}}} ) payload = Chat( messages=[Messages(role=MessagesRole.USER, content="погода в Манжероке на десять дней")], functions=[weather_forecast_function] ) response = giga.chat(payload) print(response) ``` Генерация аргументов с помощью партнерского пакета langchain-gigachat: ```py from langchain_gigachat.chat_models import GigaChat from langchain_core.prompts import ChatPromptTemplate llm = GigaChat( base_url="https://api.giga.chat/v1", credentials="<ключ_авторизации>", verify_ssl_certs=False ) weather_forecast = { "name": "weather_forecast", "description": "Возвращает температуру на заданный период", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "Местоположение, например, название города" }, "format": { "type": "string", "enum": [ "celsius", "fahrenheit" ], "description": "Единицы измерения температуры" }, "num_days": { "type": "integer", "description": "Период, для которого нужно вернуть" } }, "required": [ "location", "format" ] }, "few_shot_examples": [ { "request": "Какая погода в Москве в ближайшие три дня", "params": { "location": "Moscow, Russia", "format": "celsius", "num_days": "3" } } ], "return_parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "Местоположение, например, название города" }, "temperature": { "type": "integer", "description": "Температура для заданного местоположения" }, "forecast": { "type": "array", "items": { "type": "string" }, "description": "Описание погодных условий" }, "error": { "type": "string", "description": "Возвращается при возникновении ошибки. Содержит описание ошибки" } } } } # Метод `bind_tools(tools=[], tool_choice="auto")` сообщает модели, что нужно использовать встроенные функции. llm = llm.bind_tools(tools=[weather_forecast]) # Промпт для создания изображения prompt = ChatPromptTemplate.from_messages( [ ("user", """{topic}"""), ] ) custom_functions_chain = prompt | llm response = custom_functions_chain.invoke({"topic": "Погода в Манжероке на три дня"}) print(response) ``` Генерация аргументов с помощью SDK: ```js import { GigaChat } from 'gigachat'; const giga = new GigaChat({ baseUrl: 'https://api.giga.chat/api/v1', credentials: '<ключ_авторизации>', }); const weatherForecast = { name: "weather_forecast", description: "Возвращает температуру на заданный период", parameters: { type: "object", properties: { location: { type: "string", description: "Местоположение, например, название города" }, format: { type: "string", enum: [ "celsius", "fahrenheit" ], description: "Единицы измерения температуры" }, num_days: { type: "integer", description: "Период, для которого нужно вернуть" } }, required: [ "location", "num_days" ] }, few_shot_examples: [ { request: "Какая погода в Москве в ближайшие три дня", params: { location: "Moscow, Russia", format: "celsius", num_days: "3" } } ], return_parameters: { type: "object", properties: { location: { type: "string", description: "Местоположение, например, название города" }, temperature: { type: "integer", description: "Температура для заданного местоположения" }, forecast: { type: "array", items: { type: "string" }, description: "Описание погодных условий" }, error: { type: "string", description: "Возвращается при возникновении ошибки. Содержит описание ошибки" } } } } const resp = await giga.chat({ messages: [ { role: "user", content: "Погода в Манжероке на три дня", }, ], functions: [ weatherForecast ] }); console.log(resp.choices[0]?.message); ``` ## Автоматический режим В этом режиме модель анализирует полученные сообщения (массив `messages`) и сама решает, нужно генерировать аргументы или нет. Для работы в автоматическом режиме достаточно передать в сообщение массив `functions` с описанием функций. Чтобы модели могли обращаться к [встроенным функциям](/ru/gigachat/guides/functions/calling-builtin-functions) при работе с пользовательскими, явно активируйте автоматический режим и укажите необходимые функции в массиве `functions`. ```sh curl --location 'https://api.giga.chat/v1/chat/completions' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <токен_доступа>' \ --data '{ "model": "GigaChat-2-Pro", "messages": [ { "role": "user", "content": "Нарисуй горы" } ], "function_call": "auto", "functions": [ { "name": "text2image" }, { "name": "weather_forecast", "description": "Возвращает температуру на заданный период", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "Местоположение, например, название города" }, "format": { "type": "string", "enum": [ "celsius", "fahrenheit" ], "description": "Единицы измерения температуры" }, "num_days": { "type": "integer", "description": "Период, для которого нужно вернуть" } }, "required": [ "location", "format" ] }, "few_shot_examples": [ { "request": "Какая погода в Москве в ближайшие три дня", "params": { "location": "Moscow, Russia", "format": "celsius", "num_days": "3" } } ], "return_parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "Местоположение, например, название города" }, "temperature": { "type": "integer", "description": "Температура для заданного местоположения" }, "forecast": { "type": "array", "items": { "type": "string" }, "description": "Описание погодных условий" }, "error": { "type": "string", "description": "Возвращается при возникновении ошибки. Содержит описание ошибки" } } } } ] }' ``` Совместное использование функций с помощью SDK: ```py from gigachat import GigaChat from gigachat.models import Chat, Function, Messages, MessagesRole, FunctionParameters from gigachat.models.few_shot_example import FewShotExample giga = GigaChat(base_url="https://api.giga.chat/v1", credentials="<ключ_авторизации>", verify_ssl_certs=False) weather_forecast_function=Function( name="weather_forecast", description="Возвращает температуру на заданный период", parameters=FunctionParameters( type="object", properties={"location": {"type": "string", "description": "Местоположение, например, название города"}, "format": {"type": "string", "enum": ["celsius", "fahrenheit"], "description": "Единицы измерения температуры"}, "num_days": {"type": "integer", "description": "Период, для которого нужно вернуть"}}, required=["location","format"] ), few_shot_examples=[FewShotExample( request="Какая погода в Москве в ближайшие три дня", params={"location": "Moscow, Russia", "format": "celsius", "num_days": "3"} )], return_parameters={ "type": "object", "properties": {"location": {"type": "string", "description": "Местоположение, например, название города"}, "temperature": {"type": "integer", "description": "Температура для заданного местоположения"}, "forecast": {"type": "array", "items": {"type": "string"}, "description": "Описание погодных условий"}, "error": {"type": "string", "description": "Возвращается при возникновении ошибки. Содержит описание ошибки"}}} ) payload = Chat( messages=[Messages(role=MessagesRole.USER, content="Нарисуй горы")], function_call="auto", functions=[ Function(name="text2image"), weather_forecast_function ] ) response = giga.chat(payload) print (response) ``` Совместное использование функций с помощью партнерского пакета langchain-gigachat: ```py from langchain_gigachat.chat_models import GigaChat from langchain_core.prompts import ChatPromptTemplate llm = GigaChat( base_url="https://api.giga.chat/v1", credentials="<ключ_авторизации>", verify_ssl_certs=False ) tools = [ { "name": "text2image", }, { "name": "weather_forecast", "description": "Возвращает температуру на заданный период", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "Местоположение, например, название города" }, "format": { "type": "string", "enum": [ "celsius", "fahrenheit" ], "description": "Единицы измерения температуры" }, "num_days": { "type": "integer", "description": "Период, для которого нужно вернуть" } }, "required": [ "location", "format" ] }, "few_shot_examples": [ { "request": "Какая погода в Москве в ближайшие три дня", "params": { "location": "Moscow, Russia", "format": "celsius", "num_days": "3" } } ], "return_parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "Местоположение, например, название города" }, "temperature": { "type": "integer", "description": "Температура для заданного местоположения" }, "forecast": { "type": "array", "items": { "type": "string" }, "description": "Описание погодных условий" }, "error": { "type": "string", "description": "Возвращается при возникновении ошибки. Содержит описание ошибки" } } } } ] llm = llm.bind_tools(tools=tools, tool_choice="auto") prompt = ChatPromptTemplate.from_messages( [ ("user", """{topic}"""), ] ) combined_functions_chain = prompt | llm response = combined_functions_chain.invoke({"topic": "Нарисуй горы"}) print(response) ``` Генерация аргументов с помощью SDK: ```js import { GigaChat } from 'gigachat'; const giga = new GigaChat({ baseUrl: 'https://api.giga.chat/api/v1', credentials: '<ключ_авторизации>', }); const weatherForecast = { name: "weather_forecast", description: "Возвращает температуру на заданный период", parameters: { type: "object", properties: { location: { type: "string", description: "Местоположение, например, название города" }, format: { type: "string", enum: [ "celsius", "fahrenheit" ], description: "Единицы измерения температуры" }, num_days: { type: "integer", description: "Период, для которого нужно вернуть" } }, required: [ "location", "num_days" ] }, few_shot_examples: [ { request: "Какая погода в Москве в ближайшие три дня", params: { location: "Moscow, Russia", format: "celsius", num_days: "3" } } ], return_parameters: { type: "object", properties: { location: { type: "string", description: "Местоположение, например, название города" }, temperature: { type: "integer", description: "Температура для заданного местоположения" }, forecast: { type: "array", items: { type: "string" }, description: "Описание погодных условий" }, error: { type: "string", description: "Возвращается при возникновении ошибки. Содержит описание ошибки" } } } } const resp = await giga.chat({ messages: [ { role: "user", content: "Нарисуй горы", }, ], functions: [ {"name": 'text2image',}, weatherForecast ], function_call: 'auto' }); console.log(resp.choices[0]?.message); ``` ## Принудительный режим Чтобы модель гарантированно создала аргументы для функции, указанной в массиве `functions`, добавьте ее название в поле `function_call`: ```sh curl --location 'https://api.giga.chat/v1/chat/completions' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <токен_доступа>' \ --data '{ "model": "GigaChat-2-Max", "messages": [ { "role": "user", "content": "Как дела" } ], "function_call": { "name": "weather_forecast" }, "functions": [ { "name": "weather_forecast", "description": "Возвращает температуру на заданный период", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "Местоположение, например, название города" }, "format": { "type": "string", "enum": [ "celsius", "fahrenheit" ], "description": "Единицы измерения температуры" }, "num_days": { "type": "integer", "description": "Период, для которого нужно вернуть" } }, "required": [ "location", "format" ] } } ] }' ``` Совместное использование функций с помощью SDK: ```py from gigachat import GigaChat from gigachat.models import Chat, Function, Messages, MessagesRole, FunctionParameters from gigachat.models.few_shot_example import FewShotExample from gigachat.models.chat_function_call import ChatFunctionCall giga = GigaChat(base_url="https://api.giga.chat/v1", credentials="<ключ_авторизации>", verify_ssl_certs=False) weather_forecast_function=Function( name="weather_forecast", description="Возвращает температуру на заданный период", parameters=FunctionParameters( type="object", properties={"location": {"type": "string", "description": "Местоположение, например, название города"}, "format": {"type": "string", "enum": ["celsius", "fahrenheit"], "description": "Единицы измерения температуры"}, "num_days": {"type": "integer", "description": "Период, для которого нужно вернуть"}}, required=["location","format"] ), few_shot_examples=[FewShotExample( request="Какая погода в Москве в ближайшие три дня", params={"location": "Moscow, Russia", "format": "celsius", "num_days": "3"} )], return_parameters={ "type": "object", "properties": {"location": {"type": "string", "description": "Местоположение, например, название города"}, "temperature": {"type": "integer", "description": "Температура для заданного местоположения"}, "forecast": {"type": "array", "items": {"type": "string"}, "description": "Описание погодных условий"}, "error": {"type": "string", "description": "Возвращается при возникновении ошибки. Содержит описание ошибки"}}} ) payload = Chat( messages=[Messages(role=MessagesRole.USER, content="Нарисуй горы")], function_call=ChatFunctionCall(name="weather_forecast"), functions=[ weather_forecast_function ] ) response = giga.chat(payload) print (response) ``` Совместное использование функций с помощью партнерского пакета langchain-gigachat: ```py from langchain_gigachat.chat_models import GigaChat from langchain_core.prompts import ChatPromptTemplate llm = GigaChat( base_url="https://api.giga.chat/v1", credentials="<ключ_авторизации>", verify_ssl_certs=False ) tools = [ { "name": "weather_forecast", "description": "Возвращает температуру на заданный период", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "Местоположение, например, название города" }, "format": { "type": "string", "enum": [ "celsius", "fahrenheit" ], "description": "Единицы измерения температуры" }, "num_days": { "type": "integer", "description": "Период, для которого нужно вернуть" } }, "required": [ "location", "format" ] }, "few_shot_examples": [ { "request": "Какая погода в Москве в ближайшие три дня", "params": { "location": "Moscow, Russia", "format": "celsius", "num_days": "3" } } ], "return_parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "Местоположение, например, название города" }, "temperature": { "type": "integer", "description": "Температура для заданного местоположения" }, "forecast": { "type": "array", "items": { "type": "string" }, "description": "Описание погодных условий" }, "error": { "type": "string", "description": "Возвращается при возникновении ошибки. Содержит описание ошибки" } } } } ] llm = llm.bind_tools(tools=tools, tool_choice="weather_forecast") prompt = ChatPromptTemplate.from_messages( [ ("user", """{topic}"""), ] ) combined_functions_chain = prompt | llm response = combined_functions_chain.invoke({"topic": "Нарисуй горы"}) print(response) ``` Генерация аргументов с помощью SDK: ```js import { GigaChat } from 'gigachat'; const giga = new GigaChat({ baseUrl: 'https://api.giga.chat/api/v1', credentials: '<ключ_авторизации>', }); const weatherForecast = { name: "weather_forecast", description: "Возвращает температуру на заданный период", parameters: { type: "object", properties: { location: { type: "string", description: "Местоположение, например, название города" }, format: { type: "string", enum: [ "celsius", "fahrenheit" ], description: "Единицы измерения температуры" }, num_days: { type: "integer", description: "Период, для которого нужно вернуть" } }, required: [ "location", "num_days" ] }, few_shot_examples: [ { request: "Какая погода в Москве в ближайшие три дня", params: { location: "Moscow, Russia", format: "celsius", num_days: "3" } } ], return_parameters: { type: "object", properties: { location: { type: "string", description: "Местоположение, например, название города" }, temperature: { type: "integer", description: "Температура для заданного местоположения" }, forecast: { type: "array", items: { type: "string" }, description: "Описание погодных условий" }, error: { type: "string", description: "Возвращается при возникновении ошибки. Содержит описание ошибки" } } } } const resp = await giga.chat({ messages: [ { role: "user", content: "Нарисуй горы", }, ], function_call: {name: "weather_forecast"}, functions: [ weatherForecast ] }); console.log(resp.choices[0]?.message); ``` Если в массиве `functions` нет описания функции с подходящим названием, в ответ вернется ошибка с [кодом 422](/ru/gigachat/api/errors-description?responseCode=422): ```json { "status": 422, "message": "Invalid params: explicit_call function name must exist in functions" } ``` ## Ответ модели При работе с пользовательскими функциями, модель возвращает ответ с результатом `"finish_reason": "function_call"`. Сгенерированные аргументы для вызова пользовательской функции передаются в объекте `message.function_call.arguments`: ```json { "choices": [ { "message": { "role": "assistant", "content": "", "functions_state_id": "77d3fb14-457a-46ba-937e-8d856156d003", "function_call": { "name": "weather_forecast", "arguments": { "location": "Москва", "format": "celsius" } } }, "index": 0, "finish_reason": "function_call" } ], "created": 1700471392, "model": "GigaChat", "usage": { "prompt_tokens": 150, "completion_tokens": 35, "total_tokens": 185 }, "object": "chat.completion" } ``` :::note Значение поля `"finish_reason": "error"`, сообщает о том, что ответ модели содержит невалидные аргументы функции. ::: ## Потоковая генерация токенов При генерации аргументов в [потоковом режиме](/ru/gigachat/guides/response-token-streaming) (`"stream": true`) название функции (`function_call.name`) и ее аргументы всегда передаются в одном фрагменте: ```json data: {"choices":[{"delta":{"content":"Манжерок — живописная деревня в Республике Алтай, расположенная у подножия горы с одноимённым названием, популярное место отдыха туристов.","role":"assistant"},"index":0}],"created":1750325298,"model":"GigaChat-2-Max:2.0.28.2","object":"chat.completion"} data: {"choices":[{"delta":{"content":"\n\n"},"index":0}],"created":1750325300,"model":"GigaChat-2-Max:2.0.28.2","object":"chat.completion"} data: {"choices":[{"delta":{"content":"","function_call":{"name":"weather_forecast","arguments":{"format":"celsius","location":"Манжерок","num_days":5}},"functions_state_id":"3e17f506-7a17-4fef-88d9-28109f1bb3a2"},"index":0,"finish_reason":"function_call"}],"created":1750325300,"model":"GigaChat-2-Max:2.0.28.2","object":"chat.completion","usage":{"prompt_tokens":135,"completion_tokens":73,"total_tokens":208,"precached_prompt_tokens":0}} data: [DONE] ``` ## Передача результатов работы пользовательской функции На запрос «Погода в Манжероке на десять дней», функция вернет ответ с аргументами; ```json { "location": "Манжерок", "num_days": 10 } ``` Используйте их для вызова локальной функции. Например: ```py temperature = get_temperature(location, num_days) print(temperature) ``` После исполнения локальной функции, передайте результат ее работы обратно в модель. Для этого используйте сообщение с ролью `function` в контексте диалога (массив `messages`). :::note Поле `content` должно содержать обернутый в строку валидный JSON-объект с результатом выполнения функции, имя которой указано в поле `function_call.name`. ::: Пример: ```json { "model": "GigaChat", "messages": [ { "role": "user", "content": "Какая погода в Москве сегодня?" }, { "role": "assistant", "content": "", "functions_state_id": "77d3fb14-457a-46ba-937e-8d856156d003", "function_call": { "name": "weather_forecast", "arguments": { "location": "Москва", "format": "celsius" } } }, { "role": "function", "content": "{\"temperature\": \"27\"}", "name": "weather_forecast" }, { "role": "user", "content": "Что лучше надеть при такой температуре?" } ], "functions": [ { "name": "weather_forecast", "description": "Возвращает температуру на заданный период", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "Местоположение, например, название города" }, "format": { "type": "string", "enum": [ "celsius", "fahrenheit" ], "description": "Единицы измерения температуры" }, "num_days": { "type": "integer", "description": "Период, для которого нужно вернуть прогноз" } }, "required": [ "location", "num_days" ] } } ] } ``` ```sh curl --location 'https://api.giga.chat/v1/chat/completions' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <токен_доступа>' \ --data '{ "model": "GigaChat", "messages": [ { "role": "user", "content": "Какая погода в Москве сегодня?" }, { "role": "assistant", "content": "", "functions_state_id": "77d3fb14-457a-46ba-937e-8d856156d003", "function_call": { "name": "weather_forecast", "arguments": { "location": "Москва", "format": "celsius" } } }, { "role": "function", "content": "{\"temperature\": \"27\"}", "name": "weather_forecast" }, { "role": "user", "content": "Что лучше надеть при такой температуре?" } ], "functions": [ { "name": "weather_forecast", "description": "Возвращает температуру на заданный период", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "Местоположение, например, название города" }, "format": { "type": "string", "enum": [ "celsius", "fahrenheit" ], "description": "Единицы измерения температуры" }, "num_days": { "type": "integer", "description": "Период, для которого нужно вернуть прогноз" } }, "required": [ "location", "num_days" ] } } ] }' ``` Генерация аргументов с помощью SDK: ```py from gigachat import GigaChat from gigachat.models import Chat, Function, Messages, MessagesRole, FunctionParameters, FunctionCall from gigachat.models.few_shot_example import FewShotExample giga = GigaChat( base_url="https://api.giga.chat/v1", credentials="<ключ_авторизации>", ) weather_forecast_function=Function( name="weather_forecast", description="Возвращает температуру на заданный период", parameters=FunctionParameters( type="object", properties={"location": {"type": "string", "description": "Местоположение, например, название города"}, "format": {"type": "string", "enum": ["celsius", "fahrenheit"], "description": "Единицы измерения температуры"}, "num_days": {"type": "integer", "description": "Период, для которого нужно вернуть"}}, required=["location","format"] ), few_shot_examples=[FewShotExample( request="Какая погода в Москве в ближайшие три дня", params={"location": "Moscow, Russia", "format": "celsius", "num_days": "3"} )], return_parameters={ "type": "object", "properties": {"location": {"type": "string", "description": "Местоположение, например, название города"}, "temperature": {"type": "integer", "description": "Температура для заданного местоположения"}, "forecast": {"type": "array", "items": {"type": "string"}, "description": "Описание погодных условий"}, "error": {"type": "string", "description": "Возвращается при возникновении ошибки. Содержит описание ошибки"}}} ) payload = Chat( messages=[ Messages( role=MessagesRole.USER, content="Какая погода в Москве сегодня?" ), Messages( role=MessagesRole.ASSISTANT, content="", function_call=FunctionCall( name="weather_forecast", arguments={ "name": "weather_forecast", "arguments": { "location": "Москва", "format": "celsius" } }, ), # Идентификатор, который позволяет сохранить состояние обращения к функции. # Возвращается в ответе модели (сообщение с `"role": "assistant"`) при вызове встроенных или генерации аргументов для собственных функций. functions_state_id="77d3fb14-457a-46ba-937e-8d856156d003" ), Messages( role=MessagesRole.FUNCTION, content="{\"temperature\": \"27\"}", name="weather_forecast" ), Messages( role=MessagesRole.USER, content="Что лучше надеть при такой температуре?" ), ], functions=[weather_forecast_function] ) response = giga.chat(payload) print(response) ``` Генерация аргументов с помощью SDK: ```js import { GigaChat } from 'gigachat'; const giga = new GigaChat({ baseUrl: 'https://api.giga.chat/api/v1', credentials: '<ключ_авторизации>', }); const weatherForecast = { name: "weather_forecast", description: "Возвращает температуру на заданный период", parameters: { type: "object", properties: { location: { type: "string", description: "Местоположение, например, название города" }, format: { type: "string", enum: [ "celsius", "fahrenheit" ], description: "Единицы измерения температуры" }, num_days: { type: "integer", description: "Период, для которого нужно вернуть" } }, required: [ "location", "num_days" ] }, few_shot_examples: [ { request: "Какая погода в Москве в ближайшие три дня", params: { location: "Moscow, Russia", format: "celsius", num_days: "3" } } ], return_parameters: { type: "object", properties: { location: { type: "string", description: "Местоположение, например, название города" }, temperature: { type: "integer", description: "Температура для заданного местоположения" }, forecast: { type: "array", items: { type: "string" }, description: "Описание погодных условий" }, error: { type: "string", description: "Возвращается при возникновении ошибки. Содержит описание ошибки" } } } } const resp = await giga.chat({ messages: [ { role: "user", content: "Какая погода в Москве сегодня?", }, { content: '', role: 'assistant', function_call: { name: 'weather_forecast', arguments: { location: 'Москва', num_days: 1 } }, // Идентификатор, который позволяет сохранить состояние обращения к функции. // Возвращается в ответе модели (сообщение с `"role": "assistant"`) при вызове встроенных или генерации аргументов для собственных функций. functions_state_id: '0199e23e-03f3-7af4-a1b4-17125a490753' }, { role: "function", content: "{\"temperature\": \"27\"}", name: "weather_forecast" }, { role: "user", content: "Что лучше надеть при такой температуре?", } ], functions: [ weatherForecast ] }); console.log(resp.choices[0]?.message); ``` Пример ответа: ```json { "choices": [ { "message": { "content": "При температуре воздуха около +27 °C летом лучше всего выбрать лёгкую и удобную одежду из натуральных материалов (хлопок, лен), чтобы чувствовать себя комфортно и не перегреваться:\n\n- Легкая рубашка или футболка.\n- Шорты или легкие брюки из натуральных тканей.\n- Головной убор — панама, кепка или шляпа от солнца.\n- Сандалии или открытая обувь.\n- Легкий шарф или тонкий свитер на случай вечернего прохлады.\n\nТакая одежда поможет эффективно сохранять комфортное состояние тела даже при высокой температуре.", "role": "assistant", "functions_state_id": "0199e246-88b8-7848-a224-13eeb8b265a3" }, "index": 0, "finish_reason": "stop" } ], "created": 1760437897, "model": "GigaChat:2.0.28.2", "object": "chat.completion", "usage": { "prompt_tokens": 200, "completion_tokens": 118, "total_tokens": 318, "precached_prompt_tokens": 2 } } ``` :::note Подробнее о работе с контекстом диалога — в разделе [Работа с историей чата](/ru/gigachat/guides/keeping-context). ::: --- # Работа с функциями [source](https://developers.sber.ru/docs/ru/gigachat/guides/functions/overview.md) Функции — это внешние инструменты, к которым могут обращаться [модели GigaChat](/ru/gigachat/models/main) для решения задач пользователей. Они незаменимы при построении сложных решений с применением LLM, таких, как AI-агенты и ассистенты. Модели не исполняют функции самостоятельно, а принимают решения о работе с ними, опираясь на имеющиеся знания, текущий разговор и описание функций из запроса. Функции существенно расширяют возможности языковых моделей, давая им: * получать и обрабатывать информацию из внешних источников; * взаимодействовать с окружающей средой; * обрабатывать результаты этого взаимодействия. Общая схема работы с функциями. Схема работы с функциями ## Виды функций Все модели GigaChat поддерживают встроенные и пользовательские функции. Пользовательские функции — это функции, реализованные в вашем приложении или стороннем сервисе. Модели GigaChat могут генерировать аргументы для таких функций на основе их [описания](/ru/gigachat/guides/functions/describing-custom-function), полученного в массиве `functions`, в запросе . Используйте полученные аргументы для вызова функции, а результаты ее работы возвращайте в модель [в сообщении с ролью `function`](/ru/gigachat/guides/functions/generating-arguments-for-custom-functions). Модели умеют генерировать аргументы автоматически, в зависимости от промпта, или принудительно. Подробнее — в разделе [Режимы работы с функциями](/ru/gigachat/guides/functions/function-calling-modes). Пример генерации аргументов для пользовательской функции прогноза погоды: **Запрос** ```sh curl --location 'https://api.giga.chat/v1/chat/completions' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <токен_доступа>' \ --data '{ "model": "GigaChat-2-Pro", "messages": [ { "role": "user", "content": "Погода в Манжероке на десять дней" } ], "functions": [ { "name": "weather_forecast", "description": "Возвращает температуру на заданный период", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "Местоположение, например, название города" }, "format": { "type": "string", "enum": [ "celsius", "fahrenheit" ], "description": "Единицы измерения температуры" }, "num_days": { "type": "integer", "description": "Период, для которого нужно вернуть" } }, "required": [ "location", "num_days" ] }, "return_parameters": { "type": "object", "properties": { "status": { "description": "Статус", "enum": [ "success", "fail" ], "type": "string" }, "location": { "type": "string", "description": "Местоположение, например, название города" }, "temperature": { "type": "integer", "description": "Температура для заданного местоположения" }, "forecast": { "type": "array", "items": { "type": "string" }, "description": "Описание погодных условий" }, "error": { "type": "string", "description": "Возвращается при возникновении ошибки. Содержит описание ошибки" } } } } ] }' ``` **Ответ** ```json { "choices": [ { "message": { "content": "", "role": "assistant", "function_call": { "name": "weather_forecast", "arguments": { "format": "celsius", "location": "Манжерок", "num_days": 10 } }, "functions_state_id": "9b26f2cd-5efc-4005-a156-6914bdb89ad6" }, "index": 0, "finish_reason": "function_call" } ], "created": 1748505280, "model": "GigaChat-2-Pro:2.0.28.2", "object": "chat.completion", "usage": { "prompt_tokens": 127, "completion_tokens": 46, "total_tokens": 173, "precached_prompt_tokens": 0 } } ``` Подробнее о работе с пользовательскими функциями — в разделе [Генерация аргументов](/ru/gigachat/guides/functions/generating-arguments-for-custom-functions). Встроенные функции — это функции, которые исполняются внутри сервиса GigaChat. Так, если после авторизации на [giga.chat](https://giga.chat/), вы попросите модель нарисовать картинку, она обратится к встроенной функции `text2image`. Модель покажет итоговое изображение, созданное этой функцией. Моделям доступны функции: * `text2image` Генерация изображения в формате PNG. Для работы с функцией передайте запрос с включенным автоматическим режимом `"function_call": "auto"`. При этом в запросе не должно быть массива `functions` или он должен содержать название функции. * `get_file_content` Использование текстовых документов для генерации ответа. Функцию можно использовать, если передать в запросе массив `functions` и/или `"function_call": "auto"`, а также идентификаторы файлов в массиве `attachments`. Посмотреть доступные в хранилище файлы можно с помощью метода . Подробнее — в разделе [Обработка файлов](/ru/gigachat/guides/working-with-files). * `text2model3d` Генерация модели в формате FBX. Для обращения к функции генерации 3D-модели запрос должен содержать ее название в массиве `functions`, а также поле `"function_call": "auto"`. Пример генерации изображений с помощью встроенной функции `text2image`: **Запрос** ```sh curl --location 'https://api.giga.chat/v1/chat/completions' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <токен_доступа>' \ --data '{ "model": "GigaChat-2-Max", "function_call": "auto", "messages": [ { "role": "system", "content": "Ты — Василий Кандинский." }, { "role": "user", "content": "Нарисуй розового слона." } ] }' ``` **Ответ** ```json { "choices": [ { "message": { "content": " Вот такой розовый слон у меня получился!", "role": "assistant", "functions_state_id": "fda7bf8a-5c1c-4faa-a11a-3830d5a359de" }, "index": 0, "finish_reason": "stop" } ], "created": 1748506451, "model": "GigaChat-2-Max:2.0.28.2", "object": "chat.completion", "usage": { "prompt_tokens": 632, "completion_tokens": 41, "total_tokens": 673, "precached_prompt_tokens": 0 } } ``` Подробнее — в разделе [Обращение к встроенным функциям](/ru/gigachat/guides/functions/calling-builtin-functions). --- # Создание изображений [source](https://developers.sber.ru/docs/ru/gigachat/guides/images-generation.md) GigaChat API вернет изображение, если в запросе на генерацию получит соответствующее сообщение, например: «Нарисуй розового кота». Изображения генерируются в бинарном виде в формате JPG с помощью встроенной [функции](/ru/gigachat/guides/functions/overview) text2image. В ответ GigaChat возвращает идентификатор созданного изображения, которое можно скачать с помощью запроса . Для создания изображения в запросе нужно передать параметр `"function_call": "auto"`, с помощью которого модель определяет необходимость вызова функции text2image. При создании изображений с помощью встроенной функции модель возвращает ответ с результатом `"finish_reason": "stop"`. :::tip Вы можете стилизовать изображения с помощью системного промпта. ::: Пример запроса на создание изображения: ```sh curl -L -X POST 'https://api.giga.chat/v1/chat/completions' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ -H 'Authorization: Bearer <токен_доступа>' \ --data-raw '{ "model": "GigaChat", "messages": [ { "role": "system", "content": "Ты — Василий Кандинский" }, { "role": "user", "content": "Нарисуй розового кота" } ], "function_call": "auto" }' ``` Пример ответа: ```json { "choices": [ { "message": { "content": "Запускаю генерацию изображения. Ожидайте результат - вот розовый кот, который у меня получился.", "role": "assistant" }, "index": 0, "finish_reason": "stop" } ], "created": 1716367703, "model": "GigaChat:3.1.25.3", "object": "chat.completion", "usage": { "prompt_tokens": 372, "completion_tokens": 48, "total_tokens": 420 } } ``` :::note Подробнее о функциях — в разделе [Работа с функциями](/ru/gigachat/guides/functions/overview). ::: ```python from gigachat import GigaChat from gigachat.models import Chat, Messages, MessagesRole giga = GigaChat( base_url="https://api.giga.chat/v1", credentials="ключ_авторизации", ) payload = Chat( messages=[ Messages( role=MessagesRole.SYSTEM, content="Ты — Василий Кандинский" ), Messages( role=MessagesRole.USER, content="Нарисуй розового кота" ) ], function_call="auto", ) response = giga.chat(payload) print(response.choices[0].message.content) ``` Пример ответа: ```sh ``` ```js import { GigaChat } from 'gigachat'; const giga = new GigaChat({ baseUrl: 'https://api.giga.chat/api/v1', credentials: 'ключ_авторизации', }); const resp = await giga.chat({ messages: [ { "role": "system", "content": "Ты — Василий Кандинский" }, { role: "user", content: "Нарисуй розового кота", }, ], function_call: 'auto', }); console.log(resp.choices[0]?.message.content); ``` Пример ответа: ```sh ``` ```java public class ImageDownloadFromCompletionsExample { public static void main(String[] args) { GigaChatClient client = GigaChatClient.builder() .apiUrl("https://api.giga.chat/v1") .apiV2Url("https://api.giga.chat/v2") .authClient(AuthClient.builder() .withOAuth(OAuthBuilder.builder() .scope(Scope.GIGACHAT_API_CORP) .authKey("<ключ_атворизации>") .build()) .build()) .build(); try { // Получаем список моделей var modelResponse = client.models(); if (modelResponse != null) { var completionsResponse = client.completions(CompletionRequest.builder() .model(modelResponse.data().get(0).id()) .messages(List.of( ChatMessage.builder() .role(Role.SYSTEM) .content("Ты — художник Густав Климт") .build(), ChatMessage.builder() .role(Role.USER) .content("Нарисуй розового кота") .build())) .build()); String content = completionsResponse.choices().get(0).message().content(); System.out.println(content); } } catch (HttpClientException ex) { System.out.println(ex.statusCode() + " " + ex.bodyAsString()); } } } ``` ## Скачивание изображения Ответ модели будет содержать идентификатор получившегося изображения в формате `uuid4`. Идентификатор передается в поле `message.content`, в теге ``, в атрибуте `src`: ```json { "message": { "content": "", "role": "assistant" }, "index": 0, "finish_reason": "stop" } ``` Для скачивания изображения передайте полученный идентификатор в запросе : ```shell curl -L -X GET 'https://api.giga.chat/v1/files/идентификатор_изображения/content' -o "<имя_файла>.jpg" \ -H 'Accept: application/jpg' \ -H 'Authorization: Bearer <токен_доступа>' ``` :::caution Если запрос на создание изображения содержал заголовок `X-Client-ID`, то такой же заголовок нужно передавать в запросе на скачивание файла. ```shell curl -L -X GET 'https://api.giga.chat/v1/files/<идентификатор_изображения>/content' -o "<имя_файла>.jpg" \ -H 'Accept: application/jpg' \ -H 'X-Client-ID: <идентификатор_пользователя>' \ -H 'Authorization: Bearer <токен_доступа>' ``` ::: Чтобы извлечь идентификатор созданного изображения вы можете использовать Python-библиотеку Beautiful Soup. ```py import base64 from gigachat import GigaChat from gigachat.models import Image, Chat, Messages, MessagesRole from bs4 import BeautifulSoup giga = GigaChat( base_url="https://api.giga.chat/v1", credentials="ключ_авторизации", ) payload = Chat( messages=[ Messages( role=MessagesRole.SYSTEM, content="Ты — Василий Кандинский" ), Messages( role=MessagesRole.USER, content="Нарисуй розового кота" ) ], function_call="auto", ) response = giga.chat(payload).choices[0].message.content # Получение идентификатора изоборажения из ответа модели # с помощью библиотеки BeautifulSoup file_id = BeautifulSoup(response, "html.parser").find('img').get("src") image = giga.get_image(file_id) # Сохранение изображения в файл with open('image.jpg', mode="wb") as fd: fd.write(base64.b64decode(image.content)) ``` Для получения изображения по идентификатору вы можете использовать методы `detectImage()` и `getImage()`, доступные в JavaScript SDK. ```js import { GigaChat, detectImage } from 'gigachat'; import * as fs from 'fs'; const giga = new GigaChat({ baseUrl: 'https://api.giga.chat/api/v1', credentials: 'ключ_авторизации', }); const resp = await giga.chat({ messages: [ { "role": "system", "content": "Ты — Василий Кандинский" }, { role: "user", content: "Нарисуй розового кота", }, ], function_call: 'auto', }); // Получение изображения по идентификатору const detectedImage = detectImage(resp.choices[0]?.message.content ?? ''); const image = await giga.getImage(detectedImage.uuid); // Сохранение изображения в файл fs.writeFile('generated_image.jpg', image.content, 'binary', err => { if (err) { console.error(err); } else { console.log('Файл сохранен успешно'); } }); ``` ```java public class ImageDownloadFromCompletionsExample { public static void main(String[] args) { GigaChatClient client = GigaChatClient.builder() .apiUrl("https://api.giga.chat/v1") .apiV2Url("https://api.giga.chat/v2") .authClient(AuthClient.builder() .withOAuth(OAuthBuilder.builder() .scope(Scope.GIGACHAT_API_CORP) .authKey("<ключ_авторизации>") .build()) .build()) .build(); try { // получаем список моделей var modelResponse = client.models(); if (modelResponse != null) { var completionsResponse = client.completions(CompletionRequest.builder() .model(modelResponse.data().get(0).id()) .messages(List.of( ChatMessage.builder() .role(Role.SYSTEM) .content("Ты — художник Густав Климт") .build(), ChatMessage.builder() .role(Role.USER) .content("Нарисуй розового кота") .build())) .build()); if (completionsResponse != null) { // Получаем ответ модели на сообщения String content = completionsResponse.choices().get(0).message().content(); if (content != null && content.contains("img src=")) { var fileId = content.split("\"")[1]; // Получаем информацию по сгенерированному файлу System.out.println(client.getFileInfo(fileId)); // Скачиваем сгенерированный файл System.out.println(Arrays.toString(client.downloadFile(fileId, null))); // Удаляем сгенерированный файл System.out.println(client.deleteFile(fileId)); } } } } catch (HttpClientException ex) { System.out.println(ex.statusCode() + " " + ex.bodyAsString()); } } } ``` Если вы используете коллекцию запросов Postman, вы можете сохранить ответ на запрос в файл с помощью опции **Save response to file**. Ответ на запрос будет содержать бинарное представление файла в формате JPG. --- # Работа с историей чата [source](https://developers.sber.ru/docs/ru/gigachat/guides/keeping-context.md) Передача истории чата позволяет GigaChat работать с результатами прошлых запросов пользователя. Когда вы переписываетесь с нейросетевой моделью в веб-интерфейсе, она автоматически учитывает историю чата. Если для обмена сообщениями вы используете GigaChat API, историю чата нужно передавать явно в поле `messages` запроса . :::note Передавайте текст сообщений (поле `content`) в кодировке UTF8. Это позволит снизить расход токенов при обработке сообщения. ::: Пример запроса с историей чата: ```sh curl https://api.giga.chat/v1/chat/completions \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer access_token' \ -d '{ "model": "GigaChat", "messages": [ { "role": "user", "content": "Когда уже ИИ захватит этот мир?" }, { "role": "assistant", "content": "Пока что это не является неизбежным событием. Несмотря на то, что искусственный интеллект (ИИ) развивается быстрыми темпами и может выполнять сложные задачи все более эффективно, он по-прежнему ограничен в своих возможностях и не может заменить полностью человека во многих областях. Кроме того, существуют этические и правовые вопросы, связанные с использованием ИИ, которые необходимо учитывать при его разработке и внедрении." }, { "role": "user", "content": "Думаешь, у нас еще есть шанс?" } ] }' ``` ```py from gigachat import GigaChat from gigachat.models import Chat, Messages, MessagesRole with GigaChat(base_url="https://api.giga.chat/v1", credentials="ключ_авторизации", verify_ssl_certs=False) as giga: response=giga.chat( Chat( messages=[ Messages( role=MessagesRole.USER, content="Когда уже ИИ захватит этот мир?" ), Messages( role=MessagesRole.ASSISTANT, content="Пока что это не является неизбежным событием. Несмотря на то, что искусственный интеллект (ИИ) развивается быстрыми темпами и может выполнять сложные задачи все более эффективно, он по-прежнему ограничен в своих возможностях и не может заменить полностью человека во многих областях. Кроме того, существуют этические и правовые вопросы, связанные с использованием ИИ, которые необходимо учитывать при его разработке и внедрении." ), Messages( role=MessagesRole.USER, content="Думаешь, у нас еще есть шанс?" ) ] ) ) print(response.choices[0].message.content) ``` ```py from langchain_core.messages import HumanMessage, AIMessage from langchain_gigachat.chat_models import GigaChat giga = GigaChat( base_url="https://api.giga.chat/v1", credentials="ключ_авторизации", verify_ssl_certs=False, ) messages = [ HumanMessage( content="Когда уже ИИ захватит этот мир?" ), AIMessage( content="Пока что это не является неизбежным событием. Несмотря на то, что искусственный интеллект (ИИ) развивается быстрыми темпами и может выполнять сложные задачи все более эффективно, он по-прежнему ограничен в своих возможностях и не может заменить полностью человека во многих областях. Кроме того, существуют этические и правовые вопросы, связанные с использованием ИИ, которые необходимо учитывать при его разработке и внедрении." ), HumanMessage( content="Думаешь, у нас еще есть шанс?" ) ] response = giga.invoke(messages) print(response.content) ``` ```js import GigaChat from "gigachat"; const giga = new GigaChat({ baseUrl: 'https://api.giga.chat/api/v1', credentials="ключ_авторизации", }); const resp = await giga.chat({ messages: [ { role: "user", content: "Когда уже ИИ захватит этот мир?", }, { role: "assistant", content: "Пока что это не является неизбежным событием. Несмотря на то, что искусственный интеллект (ИИ) развивается быстрыми темпами и может выполнять сложные задачи все более эффективно, он по-прежнему ограничен в своих возможностях и не может заменить полностью человека во многих областях. Кроме того, существуют этические и правовые вопросы, связанные с использованием ИИ, которые необходимо учитывать при его разработке и внедрении.", }, { role: "user", content: "Думаешь, у нас еще есть шанс?", }, ], }); console.log(resp.choices[0]?.message.content); ``` ```java public class ChatWithHistoryExample { public static void main(String[] args) { GigaChatClient client = GigaChatClient.builder() .apiUrl("https://api.giga.chat/v1") .apiV2Url("https://api.giga.chat/v2") .authClient(AuthClient.builder() .withOAuth(AuthClientBuilder.OAuthBuilder.builder() .authKey("ключ_авторизации") .build()) .build()) .build(); CompletionRequest.CompletionRequestBuilder builder = CompletionRequest.builder() .model(ModelName.GIGA_CHAT_PRO) .message(ChatMessage.builder() .content("Когда уже ИИ захватит этот мир?") .role(Role.USER) .build()) .message(ChatMessage.builder() .content("Пока что это не является неизбежным событием. Несмотря на то, что искусственный интеллект (ИИ) развивается быстрыми темпами и может выполнять сложные задачи все более эффективно, он по-прежнему ограничен в своих возможностях и не может заменить полностью человека во многих областях. Кроме того, существуют этические и правовые вопросы, связанные с использованием ИИ, которые необходимо учитывать при его разработке и внедрении.") .role(Role.ASSISTANT).build()); try { for (int i = 0; i < 4; i++) { CompletionRequest request = builder.build(); CompletionResponse response = client.completions(request); System.out.println(response); response.choices().forEach(e -> builder.message(e.message().ofAssistantMessage())); builder.message(ChatMessage.builder() .content("Думаешь, у нас еще есть шанс?") .role(Role.USER).build()); } } catch (HttpClientException ex) { System.out.println(ex.statusCode() + " " + ex.bodyAsString()); } } } ``` ## Кэширование запросов Вы можете использовать необязательный идентификатор сессии `X-Session-ID` для кэширования контекста разговора с GigaChat. Идентификатор передается в заголовке запроса и может содержать произвольную строку. При этом если заголовок отсутствует, сервер автоматически присвоит идентификатор сессии в формате uuid4. Если при получении запроса, модель находит в кэше данные о запросе с таким же идентификатором и частично совпадающим контекстом, то она не пересчитывает этот контекст. Количество кэшированных токенов, которые не учитываются в расчете стоимости, содержится в поле `precached_prompt_tokens`, в ответе на запрос . Кэширование позволяет повысить скорость ответа и снизить расходы на генерацию, благодаря тому, что модель тратит меньше токенов на обработку сообщений контекста с одинаковыми идентификаторами. Подробнее о расчете стоимости — в разделе [Подсчет токенов](/ru/gigachat/guides/counting-tokens). Кэширование может быть полезно для: * разработки разговорных агентов, которые должны учитывать большой контекст для ведения диалога. * создания ассистентов, которые помогают писать код. Например, вы можете закэшировать кодовую базу, которую модель должна будет учитывать при автодополнении. * работы с большими документами. * передачи в модель большого набора инструкций. Например, вы можете сохранить в кэше множество различных примеров желаемого результата работы модели. * сохранения результатов вызовов функций, при многократном обращении к ним. Примеры запросов с заголовком `X-Session-ID`. :::note Добавление необязательных заголовков поддерживается только в Python-библиотеках GigaChat. ::: Пример запроса с историей чата: ```sh curl https://api.giga.chat/v1/chat/completions \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer access_token' \ -H 'X-Session-ID: session-id-1' \ -d '{ "model": "GigaChat", "messages": [ { "role": "user", "content": "Запрос пользователя" }, { "role": "assistant", "content": "Ответ модели" }, { "role": "user", "content": "Запрос пользователя" } ], }' ``` ```py import gigachat.context from gigachat import GigaChat headers = { "X-Session-ID": "session-id-1", } with GigaChat( base_url="https://api.giga.chat/v1", credentials="ключ_авторизации", verify_ssl_certs=False ) as giga: gigachat.context.session_id_cvar.set(headers.get("X-Session-ID")) response = giga.chat("Какие факторы влияют на стоимость страховки на дом?") print(response.choices[0].message.content) ``` Синхронный вызов: ```py from gigachat import session_id_cvar from langchain_gigachat import GigaChat def main() -> None: llm = GigaChat( base_url="https://api.giga.chat/v1", credentials="<ключ_авторизации>", model="GigaChat", ) # Выставляем нужный session_id token = session_id_cvar.set("demo-session-001") try: response = llm.invoke("Расскажи в двух предложениях о себе.") print("Answer:") print(response.content) finally: session_id_cvar.reset(token) if __name__ == "__main__": main() ``` Асинхронный вызов: ```py import asyncio from gigachat import session_id_cvar from langchain_gigachat import GigaChat async def main() -> None: llm = GigaChat( base_url="https://api.giga.chat/v1", credentials="<ключ_авторизации>", model="GigaChat", ) token = session_id_cvar.set("async-session-001") try: response = await llm.ainvoke("Привет! Коротко представься.") print(response.content) finally: session_id_cvar.reset(token) if __name__ == "__main__": asyncio.run(main()) ``` ```java public class CompletionWithSessionIdExample { public static void main(String[] args) { GigaChatClient client = GigaChatClient.builder() .verifySslCerts(false) .apiUrl("https://api.giga.chat/v1") .apiV2Url("https://api.giga.chat/v2") .authClient(AuthClient.builder() .withOAuth(OAuthBuilder.builder() .scope(Scope.GIGACHAT_API_PERS) .authKey("ключ_авторизации") .build()) .build()) .build(); try { System.out.println(client.completions(CompletionRequest.builder() .model(ModelName.GIGA_CHAT_MAX) .message(ChatMessage.builder() .content("Какие факторы влияют на стоимость страховки на дом?") .role(Role.USER) .build()) .build(), "session-id-1")); } catch (HttpClientException ex) { System.out.println(ex.statusCode() + " " + ex.bodyAsString()); } } } ``` --- # Руководства GigaChat API [source](https://developers.sber.ru/docs/ru/gigachat/guides/main.md) --- # Потоковая генерация токенов [source](https://developers.sber.ru/docs/ru/gigachat/guides/response-token-streaming.md) Режим получения потока токенов поможет обрабатывать ответ GigaChat по мере его генерации. При включении этого режима GigaChat передает токены в потоке коротких сообщений, формат которых соответствует протоколу [Server-Sent Events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events). События передаются с типом `text/event-stream`. Последним в потоке приходит событие `data: [DONE]`. Вы можете включить потоковую генерацию токенов. Для этого в запросе нужно передать параметр `"stream": true`. Пример запроса: ```shell curl https://api.giga.chat/v1/chat/completions \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer Token ***' \ -d '{ "model": "GigaChat", "messages": [{"role": "user", "content": "Say this is a test!"}], "stream": true }' ``` Пример потока событий: ```json data: { "choices": [ { "delta": { "content": "GigaСhat", "role": "assistant" }, "index": 0 } ], "created": 1683034756, "model": "GigaChat", "object": "chat.completion" } data: { "choices": [ { "delta": { "content": " спешит" }, "index": 0 } ], "created": 1683034756, "model": "GigaChat", "object": "chat.completion" } data: { "choices": [ { "delta": { "content": " на" }, "index": 0 } ], "created": 1683034756, "model": "GigaChat", "object": "chat.completion" } data: { "choices": [ { "delta": { "content": " помощь" }, "index": 0 } ], "created": 1683034756, "model": "GigaChat", "object": "chat.completion" } data: [DONE] ``` Запуск потоковой генерации в Python-библиотеках gigachat и langchain-gigachat отличается. Для запуска потоковой генерации с помощью библиотеки gigachat, используйте метод `stream()`: ```python from gigachat import GigaChat for chunk in GigaChat(base_url="https://api.giga.chat/v1", credentials="ключ_авторизации", verify_ssl_certs=False).stream("Напиши смешной рассказ про кота и слона."): print(chunk.choices[0].delta.content, end="", flush=True) ``` Для запуска потоковой генерации токенов с помощью библиотеки langchain-gigachat нужно унаследоваться от класса `BaseCallbackHandler` и инициализировать модуль GigaChat в режиме обработки потока токенов `streaming=True`: ```py from langchain.schema import HumanMessage from langchain.callbacks.base import BaseCallbackHandler from langchain_gigachat.chat_models import GigaChat class StreamHandler(BaseCallbackHandler): def __init__(self, initial_text=""): pass def on_llm_new_token(self, token: str, **kwargs) -> None: print(f"{token} -", end="", flush=True) chat = GigaChat(base_url="https://api.giga.chat/v1", credentials='ключ_авторизации', streaming=True, callbacks=[StreamHandler()]) chat([HumanMessage(content="Напиши краткое содержание романа «Евгений Онегин»")]) ``` ```ts import GigaChat from 'gigachat'; const giga = new GigaChat({ baseUrl: 'https://api.giga.chat/api/v1', credentials: 'ключ_авторизации', }); let message = ""; let bit = ""; let n = 0; for await (const chunk of giga.stream('Напиши отчет на тему ипотечного кризиса')) { bit = chunk.choices[0]?.delta.content; message += chunk.choices[0]?.delta.content; n++; console.log('\nФрагмент ' + n + ': ' , bit); } console.log('\n\nИтоговый результат:\n\n' ,message); ``` ```java public class CompletionWithStreamingExample { public static void main(String[] args) { GigaChatClientAsync client = GigaChatClientAsync.builder() .apiUrl("https://api.giga.chat/v1") .apiV2Url("https://api.giga.chat/v2") .authClient(AuthClient.builder() .withOAuth(OAuthBuilder.builder() .authKey("ключ_авторизации") .build()) .build()) .build(); client.completions(CompletionRequest.builder() .model(ModelName.GIGA_CHAT_MAX) .message(ChatMessage.builder() .content("Расскажи подробно о себе") .role(Role.USER) .build()) .build(), new ResponseHandler<>() { @Override public void onNext(CompletionChunkResponse chunk) { System.out.println("Chunk: " + chunk); } @Override public void onComplete() { System.out.println("Stream completed"); } @Override public void onError(Throwable th) { System.out.println("Error: " + th.getMessage()); } }); } } ``` --- # Выбор модели для генерации [source](https://developers.sber.ru/docs/ru/gigachat/guides/selecting-a-model.md) При работе с SDK, запросы по умолчанию передаются в модель GigaChat Lite. С помощью параметра `model` вы можете явно указать модель, которая должна обработать запрос. Выбирайте подходящую модель исходя из своих задач. ## Доступные модели Чтобы выбрать модель, передайте ее идентификатор в поле `model`: * `GigaChat-2` — подойдет для решения более простых задач, требующих при этом максимальной скорости работы модели. При этом стоимость работы с моделью ниже, так как для ее работы нужно меньше аппаратных ресурсов. * `GigaChat-2-Pro` — модель лучше следует сложным инструкциям и может выполнять более комплексные задачи: значительно повысилось качество суммаризации, переписывания и редактирования текстов, ответов на различные вопросы. * `GigaChat-2-Max` — продвинутая модель для сложных задач, требующих высокого уровня креативности и качества работы. * `GigaChat-3-Ultra` — новая модель, доступная физическим лицам в рамках freemium-режима. Подробное описание моделей — в разделе [Модели GigaChat](/ru/gigachat/models/main). ```sh curl -L -X POST 'https://api.giga.chat/v1/chat/completions' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ -H 'Authorization: Bearer <токен_доступа>' \ --data-raw '{ "model": "GigaChat-2-Max", "messages": [ { "role": "user", "content": "Привет! Как дела?" } ] }' ``` ```py from gigachat import GigaChat from gigachat.models import Chat, Messages, MessagesRole from gigachat import GigaChat client = GigaChat( base_url="https://api.giga.chat/v1", credentials="<ключ_авторизации>", scope="GIGACHAT_API_PERS", verify_ssl_certs=False, ) PROMPT = "Привет! Как дела?" chat = Chat( model="GigaChat-2-Max", messages=[Messages(role=Mes сsagesRole.USER, content=PROMPT)], ) resp = client.chat(chat) print(resp) ``` --- # Генерация структурированных данных [source](https://developers.sber.ru/docs/ru/gigachat/guides/structured-output.md) Модели GigaChat могут генерировать структурированные данные в соответствии с переданной в запросе JSON-схемой или регулярным выражением. Такая функциональность полезна, например, для извлечения сущностей из текста или парсинга документов. Как и для генерации текста, для получения структурированных данных используются запросы и . Формат и схема данных задаются в объекте `response_format`. Возможные значения поля `response_format.type`: * `text` — принудительная генерация текста. В этом случае объект `response_format` не может содержать другие поля; * `json_schema` — генерация JSON-объекта, обернутого в строку. Схема объекта передается в поле `response_format.schema`. Примеры запросов: ```py from gigachat import GigaChat from gigachat.models import Chat, Messages, MessagesRole from gigachat import GigaChat client = GigaChat( base_url="https://api.giga.chat/v1", credentials="<ключ_авторизации>", scope="GIGACHAT_API_CORP", verify_ssl_certs=False, ) PROMPT = "27 октября 2023 года у меня родился сын" chat = Chat( model="GigaChat-2-Max", messages=[Messages(role=MessagesRole.USER, content=PROMPT)], response_format={ "type": "json_schema", "schema": { "type": "object", "properties": { "date": { "type": "string", "description": "Дата в формате dd.mm" }, "event": { "type": "string", "description": "Наименование события" } }, "additionalProperties": True, "required": [ "date" ] }, "strict": True }, ) resp = client.chat(chat) print(resp) ``` ```bash curl --request POST \ --url https://api.giga.chat/v1/chat/completions \ --header 'Authorization: Bearer <токен_доступа>' \ -k \ --header "Content-Type: application/json" \ --data '{ "model": "GigaChat-2-Max", "messages": [ { "content": "27 октября 2023 года у меня родился сын", "role": "user" } ], "response_format": { "type": "json_schema", "schema": { "type": "object", "properties": { "date": { "type": "string", "description": "Дата в формате dd.mm" }, "event": { "type": "string", "description": "Наименование события" } }, "required": ["date"] }, "strict": true } }' ``` Пример ответа модели в виде обернутого в строку JSON-объекта: ```json { "choices": [ { "message": { "content": "{\n \"date\": \"27 октября 2023\",\n \"event\": \"рождение сына\"\n}", "role": "assistant" }, "index": 0, "finish_reason": "stop" } ], "created": 1781694805, "model": "GigaChat-2-Max:2.0.30.01", "object": "chat.completions", "usage": { "prompt_tokens": 29, "completion_tokens": 32, "total_tokens": 61, "precached_prompt_tokens": 3 } } ``` ## Описание схемы данных Схема данных, которой должен соответствовать ответ модели, передается в поле `response_format.schema`. При этом, если в схеме отсутствует описание обязательных полей в массиве `required`, модель сгенерирует произвольный JSON-объект. Чтобы ответ строго соответствовал схеме, передайте список обязательных полей в массиве `required` и задайте параметр `"strict": true`. Тогда ответ будет содержать все поля, в том числе необязательные. Если передать список обязательных полей без параметра `"strict": true`, ответ модели может содержать поля, неописанные в схеме. Вы также можете задать схему данных с помощью модели Pydantic. ```json { "response_format": { "type": "json_schema", "schema": { "type": "object", "properties": { "date": { "type": "string", "description": "Дата в формате dd.mm" }, "event": { "type": "string", "description": "Наименование события" } }, "additionalProperties": true, "required": [ "date" ] }, "strict": true } } ``` ```py from pydantic import BaseModel, Field class Event(BaseModel): date: str = Field(description="Дата в формате dd.mm") event: str | None = Field(default=None, description="Наименование события") ``` SDK автоматически обрабатывает Pydantic-модель и создает соответствующую JSON-схему: ```py from gigachat import GigaChat from gigachat.models import ChatCompletionRequest, ChatMessage, ChatModelOptions, ChatResponseFormat from pydantic import BaseModel, Field # Описание данных с помощью Pydantic # highlight-start class Event(BaseModel): date: str = Field(description="Дата в формате dd.mm") event: str | None = Field(default=None, description="Наименование события") # highlight-end request = ChatCompletionRequest( messages=[ChatMessage( role="user", content="27 октября 2023 года у меня родился сын" )], model_options=ChatModelOptions( response_format=ChatResponseFormat( type="json_schema", # highlight-next-line schema=Event, strict=True) ), ) with GigaChat( base_url="https://api.giga.chat/v2", credentials="<ключ_авторизации>", scope="GIGACHAT_API_CORP", verify_ssl_certs=False, ) as client: response = client.chat.create(request) print(response.messages[0]) ``` ## Структурированные данные в v2/chat/completions В отличие от , в запросе параметры структурированного вывода и описание схемы данных передаются в объекте `model_options.response_format`. В остальном оба способа работают одинаково: ```py from gigachat import GigaChat from gigachat.models import ChatCompletionRequest, ChatMessage, ChatModelOptions, ChatResponseFormat SCHEMA = { "type": "object", "properties": { "date": { "type": "string", "description": "Дата в формате dd.mm" }, "event": { "type": "string", "description": "Наименование события" } }, "additionalProperties": True, "required": ["date"] } request = ChatCompletionRequest( model="GigaChat-2-Max", messages=[ChatMessage(role="user", content=[{"text": "27 октября 2023 года у меня родился сын"}])], model_options=ChatModelOptions( response_format=ChatResponseFormat( type="json_schema", schema=SCHEMA, strict=True, ) ), ) client = GigaChat( base_url="https://api.giga.chat/v1", credentials="<ключ_авторизации>", scope="GIGACHAT_API_CORP", verify_ssl_certs=False, ) response = client.chat.create(request) print(response) ``` ```sh curl --request POST \ --url https://api.giga.chat/v2/chat/completions \ --header 'Authorization: Bearer <токен_доступа>' \ -k \ --header "Content-Type: application/json" \ --data '{ "model": "GigaChat-2-Max", "messages": [ { "role": "user", "content": [ { "text": "27 октября 2023 года у меня родился сын" } ] } ], "model_options": { "response_format": { "type": "json_schema", "schema": { "type": "object", "properties": { "date": { "type": "string", "description": "Дата в формате dd.mm" }, "event": { "type": "string", "description": "Наименование события" } }, "required": [ "date" ] }, "strict": true } } }' ``` Структура ответа также отличается от : ```json { "model": "GigaChat-2-Max:2.0.30.01", "created_at": 1781694924, "messages": [ { "role": "assistant", "content": [ { "text": " {\n \"date\": \"27 октября 2023\",\n \"event\": \"рождение сына\"\n}" } ] } ], "finish_reason": "stop", "usage": { "input_tokens": 29, "input_tokens_details": { "prompt_tokens": 29, "cached_tokens": 3 }, "output_tokens": 31, "total_tokens": 60 } } ``` ## Потоковая передача данных Структурированные данные можно получать в потоке SSE-событий так же, как и обычный текст. Для запуска потоковой передачи данных используйте метод `stream()`. Запрос : ```py from gigachat import GigaChat from gigachat.models import Chat, Messages, MessagesRole from gigachat import GigaChat PROMPT = "27 октября 2023 года у меня родился сын" chat = Chat( model="GigaChat-2-Max", messages=[Messages(role=MessagesRole.USER, content=PROMPT)], response_format={ "type": "json_schema", "schema": { "type": "object", "properties": { "date": { "type": "string", "description": "Дата в формате dd.mm" }, "event": { "type": "string", "description": "Наименование события" } }, "additionalProperties": True, "required": [ "date" ] }, "strict": True }, ) client = GigaChat( base_url="https://api.giga.chat/v1", credentials="<ключ_авторизации>", scope="GIGACHAT_API_CORP", verify_ssl_certs=False, ) # Извлечение и построчное отображение содержимого событий for chunk in client.stream(chat): print(chunk.choices[0].delta.content, end="", flush=True) ``` Запрос : ```py from gigachat import GigaChat from gigachat.models import ChatCompletionRequest, ChatMessage, ChatModelOptions, ChatResponseFormat SCHEMA = { "type": "object", "properties": { "date": { "type": "string", "description": "Дата в формате dd.mm" }, "event": { "type": "string", "description": "Наименование события" } }, "additionalProperties": True, "required": ["date"] } request = ChatCompletionRequest( model="GigaChat-2-Max", messages=[ChatMessage(role="user", content=[{"text": "27 октября 2023 года у меня родился сын"}])], model_options=ChatModelOptions( response_format=ChatResponseFormat( type="json_schema", schema=SCHEMA, strict=True, ) ), ) client = GigaChat( base_url="https://api.giga.chat/v1", credentials="<ключ_авторизации>", scope="GIGACHAT_API_CORP", verify_ssl_certs=False, ) # Извлечение и построчное отображение содержимого событий for chunk in client.chat.stream(request): for msg in chunk.messages or []: for part in msg.content or []: if text := part.text: print(text, end="", flush=True) ``` Запрос : ```bash curl --request POST \ --url https://api.giga.chat/v1/chat/completions \ --header 'Authorization: Bearer <токен_доступа>' \ -k \ --header "Content-Type: application/json" \ --data '{ "model": "GigaChat-2-Max", "messages": [ { "content": "27 октября 2023 года у меня родился сын", "role": "user" } ], "stream": true, "response_format": { "type": "json_schema", "schema": { "type": "object", "properties": { "date": { "type": "string", "description": "Дата в формате dd.mm" }, "event": { "type": "string", "description": "Наименование события" } }, "required": ["date"] }, "strict": true } }' ``` Запрос : ```sh curl --request POST \ --url https://api.giga.chat/v2/chat/completions \ --header 'Authorization: Bearer <токен_доступа>' \ -k \ --header "Content-Type: application/json" \ --data '{ "model": "GigaChat-2-Max", "messages": [ { "role": "user", "content": [ { "text": "27 октября 2023 года у меня родился сын" } ] } ], "stream": true, "model_options": { "response_format": { "type": "json_schema", "schema": { "type": "object", "properties": { "date": { "type": "string", "description": "Дата в формате dd.mm" }, "event": { "type": "string", "description": "Наименование события" } }, "required": [ "date" ] }, "strict": true } } }' ``` При работе с потоковой передачей учитывайте, что формат событий в ответе на запросы и отличается: ```sh data: {"choices":[{"delta":{"content":"{\n \"date\":","role":"assistant"},"index":0}],"created":1781695039,"model":"GigaChat-2-Max:2.0.30.01","object":"chat.completions"} data: {"choices":[{"delta":{"content":" \"2023-10-27\",\n \"event\":","role":"assistant"},"index":0}],"created":1781695039,"model":"GigaChat-2-Max:2.0.30.01","object":"chat.completions"} data: {"choices":[{"delta":{"content":" \"рождение сына\"\n}","role":"assistant"},"index":0}],"created":1781695039,"model":"GigaChat-2-Max:2.0.30.01","object":"chat.completions"} data: {"choices":[{"delta":{"content":""},"index":0,"finish_reason":"stop"}],"created":1781695039,"model":"GigaChat-2-Max:2.0.30.01","object":"chat.completions","usage":{"prompt_tokens":29,"completion_tokens":34,"total_tokens":63,"precached_prompt_tokens":3}} data: [DONE] ``` ```sh event: response.message.delta data: {"model":"GigaChat-2-Max:2.0.30.01","created_at":1781695099,"messages":[{"role":"assistant","content":[{"text":"{\n \"date\":"}]}]} event: response.message.delta data: {"model":"GigaChat-2-Max:2.0.30.01","created_at":1781695099,"messages":[{"role":"assistant","content":[{"text":" \"27 октября 2023\",\n \"event\":"}]}]} event: response.message.delta data: {"model":"GigaChat-2-Max:2.0.30.01","created_at":1781695099,"messages":[{"role":"assistant","content":[{"text":" \"рождение сына\"\n}"}]}]} event: response.message.done data: {"model":"GigaChat-2-Max:2.0.30.01","created_at":1781695099,"finish_reason":"stop","usage":{"input_tokens":29,"input_tokens_details":{"prompt_tokens":29,"cached_tokens":3},"output_tokens":32,"total_tokens":61}} ``` ## Разбор ответа с помощью chat\_parse() Используйте метод `chat_parse()`, чтобы автоматически разобрать JSON и провалидировать его с помощью Pydantic-модели. Метод возвращает как разобранный JSON, так и исходные данные в экземпляре `ChatCompletion`. ```py from gigachat import GigaChat from gigachat.models import ChatCompletionRequest, ChatMessage, ChatModelOptions, ChatResponseFormat from pydantic import BaseModel, Field class Event(BaseModel): date: str = Field(description="Дата в формате dd.mm") event: str | None = Field(default=None, description="Наименование события") PROMPT = "27 октября 2023 года у меня родился сын" with GigaChat( base_url="https://api.giga.chat/v1", credentials="<ключ_авторизации>", scope="GIGACHAT_API_CORP", verify_ssl_certs=False, ) as client: # highlight-next-line completion, parsed_response = client.chat_parse( PROMPT, response_format=Event, strict=True, ) print("=== client.chat_parse() ===") print("Дата:", parsed_response.date) print("Событие:", parsed_response.event) print(f"Кол-во токенов: {completion.usage.total_tokens}") ``` --- # Мониторинг статистики потребления GigaChat API [source](https://developers.sber.ru/docs/ru/gigachat/guides/token-consumption.md) Изучить статистику потребления в проектах GigaChat API можно в двух разделах личного кабинета Studio: **Биллинг** и **Статистика**. В разделе **Биллинг** можно посмотреть статистику как по всем проектам сразу, так и только по выбранным. В разделе **Статистика** можно изучить статистику только по одному проекту. В разделах **Биллинг** и **Статистика** представлены график и таблица с данными об использованных услугах, таких как: * генерация с помощью различных моделей; * создание эмбеддингов; * количество затраченных сессий и токенов; * стоимость потребления в рублях. Перейти в разделы **Статистика** и **Биллинг** можно из любого пространства, в котором создан проект: **Личного**, **Корпоративного** или **Корпоративного плюс**. Обратите внимание, что в пространстве **Корпоративное плюс** доступен показатель **Стоимость с НДС**. В **Личном** и **Корпоративном** пространствах показатель **Стоимость с НДС** отсутствует. ## Просмотр статистики сразу по нескольким проектам Для просмотра данных: 1. [Авторизуйтесь в личном кабинете Studio](https://developers.sber.ru/studio/workspaces/my-space/get/gigachat-api). 2. Перейдите в пространство, в котором созданы проекты. 3. Перейдите в раздел **Биллинг** в левом меню. Для удобного отображения статистики на странице используйте настройки: **Настройка периода статистики**. Нажмите кнопку с датами и выберите нужный период из предложенного списка или задайте собственный. **Выбор моделей для статистики**. Нажмите кнопку **Модели** и отметьте необходимые модели из выпадающего списка. **Просмотр статистики по проектам**. Нажмите кнопку **Проекты** и выберите интересующие проекты, либо все сразу. **Скачивание отчета**. Для скачивания отчета в формате xlsx, нажмите кнопку **Скачайте отчет** в верхнем правом углу. ## Просмотр статистики по одному проекту Для просмотра данных: 1. [Авторизуйтесь в личном кабинете Studio](https://developers.sber.ru/studio/workspaces/my-space/get/gigachat-api). 2. Перейдите в пространство. 3. Откройте проект и перейдите в раздел **Статистика использования**. Для этого нажмите на иконку в виде графика в левом боковом меню. Для удобного отображения статистики на странице используйте настройки: **Настройка периода статистики**. Нажмите кнопку с датами и выберите нужный период из предложенного списка или задайте собственный. **Выбор моделей для статистики**. Нажмите кнопку **Модели** и отметьте необходимые модели из выпадающего списка. **Скачивание отчета**. Для скачивания отчета в формате xlsx, нажмите кнопку **Скачайте отчет** в верхнем правом углу. Мониторинг потребления токенов в интерфейсе проекта --- # Работа с документацией в LLM и агентах [source](https://developers.sber.ru/docs/ru/gigachat/guides/using-docs-with-llm.md) Модели или агентах, которые помогают при разработке, могут отвечать на вопросы по документации GigaChat API. Для генерации корректного ответа им нужен качественный контекст — релевантная, структурированная и актуальная информация о работе сервиса. Документация предоставляет несколько способов получить данные для формирования контекста. Комбинируйте их или используйте по отдельности в зависимости от своих задач и возможностей доступных инструментов. В этом разделе вы узнаете как получить доступ к исходникам документации в Markdown по ссылкам или с помощью mcp-сервера, подключенного к агенту. ## Доступ ко всей документации Для начала работы используйте файл [`gigachat-api-primer.md`](https://developers.sber.ru/docs/files/gigachat/gigachat-api-primer.md). Он содержит краткую версию документации со всей информацией, которая нужна, чтобы быстро начать использовать API. Передайте в LLM содержимое файла или ссылку на него, чтобы она могла ответить на вопросы о том, какие модели доступны в API, как авторизовать запросы, как использовать основные методы API и другие. Для работы со всей документацией с помощью ИИ-помощников и агентов используйте файлы, подготовленные по стандарту [llms.txt](https://llmstxt.org/): * файл [`/gigachat/llms.txt`](https://developers.sber.ru/docs/ru/gigachat/llms.txt) — краткое содержание со ссылками на все разделы; * файл [`/gigachat/llms-full.txt`](https://developers.sber.ru/docs/ru/gigachat/llms-full.txt) — вся документация GigaChat API (кроме спецификации) собранная в одном файле. ## Запросы по отдельным разделам Для генерации ответов по отдельному разделу используйте markdown-исходник страницы. Передайте в LLM содержимое иходника или ссылку на него, чтобы она могла ответить на вопросы по разделу. Чтобы получить исходник: 1. Откройте раздел, по которому нужно получить ответ. 2. Выберите подходящий пункт выпадающего списка у заголовка страницы: * **Скопировать страницу** — markdown-исходник страницы будет скопирован в буфер обмена; * **Открыть исходную страницу** — открывает markdown-исходник страницы в новой вкладке браузера. ## Использование MCP-сервера docs-mcp Вы можете обращаться к документации GigaChat API (и других продуктов) с помощью MCP-сервера [docs-mcp](https://www.npmjs.com/package/@salutejs/docs-mcp). Сервер предоставляет инструменты: * `list_products` — доступ к списку продуктов, документация которых доступна на developers.sber.ru/docs; * `get_documentation` — доступ к документации выбранного продкута в виде файла llms-full.txt. ### Установка Сервер распространяется в виде npm-пакета. Для установки выполните команду: ```sh npx -y @salutejs/docs-mcp@latest ``` ### Подключение к агенту Чтобы агент мог отвечать на вопросы по документации продукта, доступной в llms-full.txt, подключите docs-mcp в конфигурационном файле. Пример подключения в конфигурационном файле OpenCode: ```json { "$schema": "https://opencode.ai/config.json", "mcp": { "docs-mcp": { "type": "local", "command": ["npx", "-y", "@salutejs/docs-mcp@latest"], "enabled": true, } } } ``` --- # Использование SDK [source](https://developers.sber.ru/docs/ru/gigachat/guides/using-sdks.md) Для работы с REST API GigaChat доступны одноименные библиотеки на [Python](https://github.com/ai-forever/gigachat), [TypeScript/JavaScript](https://github.com/ai-forever/gigachat-js) и [Java](https://github.com/ai-forever/gigachat-java). :::note Перед началом работы убедитесь, что у вас установлены сертификаты [НУЦ Минцифры](/ru/gigachat/certificates). ::: SDK позволяет автоматически авторизовать запросы, и предоставляет методы для работы с GigaChat API. С их помощью можно: * получить список доступных моделей; * получить ответ модели на сообщение; * загрузить файл в хранилище; * скачать сгенерированное изображение; * создать эмбеддинг; * посчитать токены в сообщении; * работать в пакетном режиме; * проверить текст на ИИ. :::tip Для работы с GigaChat также доступны партнерские пакеты LangChain, которые позволяют использовать модели GigaChat с [фреймворком LangChain](https://docs.langchain.com/oss/python/langchain/overview). Подробнее — в [документации GigaChain](/ru/gigachain/overview). ::: ## Начало работы Чтобы начать работу с API с помощью SDK: 1. Установите или подключите в проект подходящую библиотеку: ```sh pip install gigachat ``` ```sh npm install gigachat ``` Подключите библиотеку в зависимости с помощью Gradle или Maven Gradle: ```groovy implementation("chat.giga:gigachat-java:0.1.18") ``` Maven: ```xml chat.giga gigachat-java 0.1.18 ``` 2. Инициализируйте объект GigaChat: ```py from gigachat import GigaChat giga = GigaChat( credentials="ключ_авторизации", base_url="https://api.giga.chat/v1", scope="GIGACHAT_API_PERS", ) ``` ```ts import GigaChat from 'gigachat'; const giga = new GigaChat({ credentials: 'ключ_авторизации', scope: 'GIGACHAT_API_PERS', baseUrl: 'https://api.giga.chat/api/v1', model: 'GigaChat-2-Max', }); ``` ```java public class CompletionExample { public static void main(String[] args) { GigaChatClient client = GigaChatClient.builder() .apiUrl("https://api.giga.chat/v1") .apiV2Url("https://api.giga.chat/v2") .authClient(AuthClient.builder() .withOAuth(OAuthBuilder.builder() .scope(Scope.GIGACHAT_API_PERS) .authKey("ключ_авторизации") .build()) .build()) .build(); System.out.println(client.completions(CompletionRequest.builder() .model(ModelName.GIGA_CHAT) .message(ChatMessage.builder() .content("текст запроса") .role(Role.USER) .build()) .build())); } } ``` При работе с библиотеками на Python и TS/JS объект GigaChat принимает параметры: * `credentials` — ключ авторизации для обмена сообщениями с GigaChat API. О том как получить ключ авторизации — в разделе [Быстрый старт](/ru/gigachat/individuals-quickstart). * `scope` — версия API, к которой будет выполнен запрос. Необязательный параметр. Возможные значения: * `GIGACHAT_API_PERS` — версия API для физических лиц; * `GIGACHAT_API_B2B` — версия API для ИП и юрлиц при работе по предоплате. * `GIGACHAT_API_CORP` — версия API для ИП и юрлиц при работе по постоплате. По умолчанию запросы передаются в версию для физических лиц. * `model` — необязательный параметр, в котором можно явно задать [модель GigaChat](/ru/gigachat/models/main). ## Примеры работы с SDK \{#primery-raboty-s-ывл} ### Получить список доступных моделей Выполняет запрос и возвращает список доступных моделей. ```python from gigachat import GigaChat with GigaChat( base_url="https://api.giga.chat/v1", credentials="ключ_авторизации", verify_ssl_certs=False ) as client: models = client.get_models() for model in models.data: print(f"{model.id_} (owned_by={model.owned_by})") ``` ```ts import GigaChat from 'gigachat'; const giga = new GigaChat({ credentials: 'ключ_авторизации', baseUrl: 'https://api.giga.chat/api/v1', model: 'GigaChat-2-Max', }); const models = await giga.getModels(); console.log(models); ``` ```java public class ModelListExample { public static void main(String[] args) { GigaChatClient client = GigaChatClient.builder() .apiUrl("https://api.giga.chat/v1") .apiV2Url("https://api.giga.chat/v2") .authClient(AuthClient.builder() .withOAuth(OAuthBuilder.builder() .scope(Scope.GIGACHAT_API_PERS) .authKey("ключ_авторизации") .build()) .build()) .build(); try { System.out.println(client.models()); } catch (HttpClientException ex) { System.out.println(ex.statusCode() + " " + ex.bodyAsString()); } } } ``` ### Сгенерировать текст Метод выполняет запрос и возвращает ответ модели, сгенерированный на основе переданных сообщений. ```python from gigachat import GigaChat with GigaChat( base_url="https://api.giga.chat/v1", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", verify_ssl_certs=False, ) as client: response = client.chat.create("Привет, как дела?") print(response.messages[0].content[0].text) ``` ```ts import GigaChat from 'gigachat'; const giga = new GigaChat({ credentials: 'ключ_авторизации', baseUrl: 'https://api.giga.chat/api/v1', model: 'GigaChat-2-Max', }); giga .chat({ messages: [{ role: 'user', content: 'Привет, как дела?' }], }) .then((resp) => { console.log(resp.choices[0]?.message.content); }); ``` ```java public class CompletionExample { public static void main(String[] args) { GigaChatClient client = GigaChatClient.builder() .apiUrl("https://api.giga.chat/v1") .apiV2Url("https://api.giga.chat/v2") .authClient(AuthClient.builder() .withOAuth(OAuthBuilder.builder() .scope(Scope.GIGACHAT_API_PERS) .authKey("ключ_авторизации") .build()) .build()) .build(); try { System.out.println(client.completions(CompletionRequest.builder() .model(ModelName.GIGA_CHAT) .message(ChatMessage.builder() .content("Привет, как дела?") .role(Role.USER) .build()) .build())); } catch (HttpClientException ex) { System.out.println(ex.statusCode() + " " + ex.bodyAsString()); } } } ``` ### Потоковая генерация токенов Используйте SDK, чтобы получать токены по мере их генерации — без ожидания полного ответа от модели. ```python from gigachat import GigaChat with GigaChat( base_url="https://api.giga.chat/v1", credentials="ключ_авторизации", verify_ssl_certs=False ) as client: for chunk in client.chat.stream("Напиши короткое стихотворение о программировании"): for msg in chunk.messages or []: for part in msg.content or []: if part.text: print(part.text, end="", flush=True) print() ``` ```ts import GigaChat from 'gigachat'; const giga = new GigaChat({ credentials: 'ключ_авторизации', baseUrl: 'https://api.giga.chat/api/v1', model: 'GigaChat-2-Max', }); for await (const chunk of giga.stream('Напиши отчет на тему ипотечного кризиса')) { process.stdout.write(chunk.choices[0]?.delta.content || ''); } ``` ```java public class CompletionStreamingExample { public static void main(String[] args) { GigaChatClient client = GigaChatClient.builder() .apiUrl("https://api.giga.chat/v1") .apiV2Url("https://api.giga.chat/v2") .authClient(AuthClient.builder() .withOAuth(OAuthBuilder.builder() .scope(Scope.GIGACHAT_API_PERS) .authKey("ключ_авторизации") .build()) .build()) .build(); try { client.completionStream(CompletionRequest.builder() .model(ModelName.GIGA_CHAT_MAX) .message(ChatMessage.builder() .content("Напиши отчет на тему ипотечного кризиса") .role(Role.USER) .build()) .build(), (c) -> System.out.println( c.choices().get(0).delta().content() != null ? c.choices().get(0).delta().content() : "" )); } catch (HttpClientException ex) { System.out.println(ex.statusCode() + " " + ex.bodyAsString()); } } } ``` ### Сгенерировать эмбеддинг Выполняет запрос и возвращает векторное представление текста. Подробнее об использовании эмбеддингов — в разделе [Векторное представление текста](/ru/gigachat/guides/embeddings). ```python from gigachat import GigaChat with GigaChat( base_url="https://api.giga.chat/v1", credentials="ключ_авторизации", verify_ssl_certs=False ) as giga: response = giga.embeddings(["Hello world!"], model="EmbeddingsGigaR") print(response) ``` ```ts const response = await giga.embeddings(['Hello world!']); console.log(response.data); ``` ```java public class EmbeddingExample { public static void main(String[] args) { GigaChatClient client = GigaChatClient.builder() .apiUrl("https://api.giga.chat/v1") .apiV2Url("https://api.giga.chat/v2") .authClient(AuthClient.builder() .withOAuth(OAuthBuilder.builder() .scope(Scope.GIGACHAT_API_PERS) .authKey("ключ_авторизации") .build()) .build()) .build(); try { System.out.println(client.embeddings(EmbeddingRequest.builder() .model("Embeddings") .input(List.of("Hello world!")) .build())); } catch (HttpClientException ex) { System.out.println(ex.statusCode() + " " + ex.bodyAsString()); } } } ``` ### Скачать сгенерированное изображение Метод выполняет запрос и возвращает файл изображения в бинарном представлении в формате JPG. Подробнее о работе с файлами с помощью API — в разделе [Обработка файлов](/ru/gigachat/guides/working-with-files). ```py image = giga.get_image(file_id='идентификатор_файла') ``` ```ts import { GigaChat, detectImage } from 'gigachat'; import fs from 'node:fs'; import path from 'node:path'; const giga = new GigaChat({ credentials: 'ключ_авторизации', baseUrl: 'https://api.giga.chat/api/v1', model: 'GigaChat-2-Max', }); const resp = await giga.chat({ messages: [{ role: 'user', content: 'Сгенерируй изображение котика' }], function_call: 'auto', }); const detectedImage = detectImage(resp.choices[0]?.message.content ?? ''); if (detectedImage && detectedImage.uuid) { const image = await giga.getImage(detectedImage.uuid); fs.writeFile('image.jpg', image.content, 'binary', () => {}); } ``` ```java public class ImageDownloadFromCompletionsExample { public static void main(String[] args) { GigaChatClient client = GigaChatClient.builder() .apiUrl("https://api.giga.chat/v1") .apiV2Url("https://api.giga.chat/v2") .authClient(AuthClient.builder() .withOAuth(OAuthBuilder.builder() .scope(Scope.GIGACHAT_API_PERS) .authKey("ключ_авторизации") .build()) .build()) .build(); try { CompletionResponse response = client.completions(CompletionRequest.builder() .model(ModelName.GIGA_CHAT) .message(ChatMessage.builder() .content("Сгенерируй изображение котика") .role(Role.USER) .build()) .build()); if (response.choices() != null && !response.choices().isEmpty()) { String fileId = response.choices().get(0).message().attachments().get(0); System.out.println(Arrays.toString(client.downloadFile(fileId, null))); } } catch (HttpClientException ex) { System.out.println(ex.statusCode() + " " + ex.bodyAsString()); } } } ``` ### Работа с хранилищем файлов Методы для работы с хранилищем файлов. #### Загрузить файл в хранилище Метод выполняет запрос и возвращает объект с данными загруженного файла. Загруженные файлы доступны только вам. Подробнее о работе с файлами с помощью API — в разделе [Обработка файлов](/ru/gigachat/guides/working-with-files). ```python from gigachat import GigaChat with GigaChat( base_url="https://api.giga.chat/v1", credentials="ключ_авторизации", verify_ssl_certs=False ) as client: with open("document.pdf", "rb") as f: uploaded = client.upload_file(f, purpose="general") print(f"Файл загружен: {uploaded.id_}") ``` ```ts import GigaChat from 'gigachat'; import fs from 'node:fs'; const giga = new GigaChat({ credentials: 'ключ_авторизации', baseUrl: 'https://api.giga.chat/api/v1', }); const file = new File([fs.readFileSync('document.pdf')], 'document.pdf'); const uploadedFile = await giga.uploadFile(file); console.log(`Файл загружен: ${uploadedFile.id}`); ``` ```java public class UploadFileExample { public static void main(String[] args) throws IOException { GigaChatClient client = GigaChatClient.builder() .apiUrl("https://api.giga.chat/v1") .apiV2Url("https://api.giga.chat/v2") .authClient(AuthClient.builder() .withOAuth(OAuthBuilder.builder() .scope(Scope.GIGACHAT_API_PERS) .authKey("ключ_авторизации") .build()) .build()) .build(); try { System.out.println(client.uploadFile(UploadFileRequest.builder() .file(Paths.get("/path/to/document.pdf").toFile()) .purpose("general").build())); } catch (HttpClientException ex) { System.out.println(ex.statusCode() + " " + ex.bodyAsString()); } } } ``` #### Получить список файлов Просмотр файлов, доступных в хранилище с помощью метода . ```python from gigachat import GigaChat with GigaChat( base_url="https://api.giga.chat/v1", credentials="ключ_авторизации", verify_ssl_certs=False ) as client: files = client.get_files() for file in files.data: print(f"{file.id_}: {file.filename}") ``` ```ts import GigaChat from 'gigachat'; const giga = new GigaChat({ credentials: 'ключ_авторизации', baseUrl: 'https://api.giga.chat/api/v1', }); const files = await giga.getFiles(); console.log(files.data); ``` ```java public class AvailableFilesExample { public static void main(String[] args) { GigaChatClient client = GigaChatClient.builder() .apiUrl("https://api.giga.chat/v1") .apiV2Url("https://api.giga.chat/v2") .authClient(AuthClient.builder() .withOAuth(OAuthBuilder.builder() .scope(Scope.GIGACHAT_API_PERS) .authKey("ключ_авторизации") .build()) .build()) .build(); try { System.out.println(client.availableFiles()); } catch (HttpClientException ex) { System.out.println(ex.statusCode() + " " + ex.bodyAsString()); } } } ``` #### Просмотр информации о файле Вызов метода . ```py from gigachat import GigaChat with GigaChat( base_url="https://api.giga.chat/v1", credentials="ключ_авторизации", verify_ssl_certs=False ) as client: single_file = client.get_file("<идентификатор_файла>") print(f"{single_file}") ``` #### Удаление файла Вызов метода . ```py from gigachat import GigaChat with GigaChat() as client: client.delete_file("<идентификатор_файла>") ``` ### Подсчитать количество токенов в запросе Выполняет запрос и возвращает объект с информацией о количестве токенов, подсчитанных заданной моделью в строках. ```python from gigachat import GigaChat with GigaChat( base_url="https://api.giga.chat/v1", credentials="ключ_авторизации", verify_ssl_certs=False ) as client: result = client.tokens_count(["12345"], model="GigaChat-2-Pro") print(result) ``` ```ts const response = await giga.tokensCount(['Привет, как дела?', 'Как дела, как дела']); console.log(response); ``` ```java public class TokenCountExample { public static void main(String[] args) { GigaChatClient client = GigaChatClient.builder() .apiUrl("https://api.giga.chat/v1") .apiV2Url("https://api.giga.chat/v2") .authClient(AuthClient.builder() .withOAuth(OAuthBuilder.builder() .scope(Scope.GIGACHAT_API_PERS) .authKey("ключ_авторизации") .build()) .build()) .build(); try { System.out.println(client.tokensCount(TokenCountRequest.builder() .model(ModelName.GIGA_CHAT_MAX) .input(List.of("Привет, как дела?", "Расскажи о себе")) .build())); } catch (HttpClientException ex) { System.out.println(ex.statusCode() + " " + ex.bodyAsString()); } } } ``` ### Проверить баланс токенов Метод доступен только при покупке пакетов токенов. Если вы оплачиваете работу с API по схеме pay-as-you-go, запрос вернет ошибку 403 Permission Denied. ```python from gigachat import GigaChat with GigaChat( base_url="https://api.giga.chat/v1", credentials="ключ_авторизации", scope="GIGACHAT_API_B2B", verify_ssl_certs=False, ) as client: balance = client.get_balance() for entry in balance.balance: print(f"{entry.usage}: {entry.value}") ``` ```ts import GigaChat from 'gigachat'; const giga = new GigaChat({ credentials: 'ключ_авторизации', baseUrl: 'https://api.giga.chat/api/v1', scope: 'GIGACHAT_API_B2B', }); const balance = await giga.balance(); console.log(balance); ``` --- # Работа с файлами [source](https://developers.sber.ru/docs/ru/gigachat/guides/working-with-files.md) Модели GigaChat умеют распознавать текстовые документы, изображения и аудио, и использовать полученные данные для [генерации ответов](). ## Работа с хранилищем файлов В хранилище находятся добавленные файлы и сгенерированные изображения и 3D-модели. Для работы с хранилищем GigaChat API предоставляет методы: * ; * ; * ; * . ### Загрузить файл в хранилище Для загрузки файла в хранилище используйте метод . Хранилище поддерживает текстовые документы, изображения и аудио разных форматов. | Формат | MIME-тип | | ------ | ----------------------------------------------------------------------- | | txt | text/plain | | doc | application/msword | | docx | application/vnd.openxmlformats-officedocument.wordprocessingml.document | | pdf | application/pdf | | epub | application/epub | | ppt | application/ppt | | pptx | application/pptx | | xlsx | application/vnd.ms-excel | | Формат | MIME-тип | | ------ | ---------- | | jpeg | image/jpeg | | png | image/png | | tiff | image/tiff | | bmp | image/bmp | | Формат | MIME-тип | | ------ | -------------------------------------------------------------- | | mp4 | audio/mp4 | | mp3 | audio/mp3 | | m4a | audio/x-m4a | | wav | audio/x-wav
audio/wave
audio/wav
audio/x-pn-wav | | weba | audio/webm | | ogg | audio/x-ogg | | opus | audio/opus |
На размеры файлов действуют ограничения: * максимальный размер одного аудиофайла в запросе — 35 Мб; * максимальный размер одного изображения в запросе — 15 Мб; * максимальный размер одного текстового файла в запросе — 40 Мб. :::caution При загрузке файлов обязательно передавайте `purpose="general"`. Это позволит использовать файл в запросах на генерацию ответов. ::: ```sh curl --location --request POST 'https://api.giga.chat/v1/files' \ --header 'Authorization: Bearer access_token' \ --form 'file=@"<путь_к_файлу>/example.jpeg"' \ --form 'purpose="general"' ``` ```py from gigachat import GigaChat with GigaChat(base_url="https://api.giga.chat/v1",) as client: # Загрузка файла with open("document.pdf", "rb") as f: uploaded = client.upload_file(f, purpose="general") print(f"Файл загружен: {uploaded.id}") ``` ```java public class UploadFileExample { public static void main(String[] args) { GigaChatClient client = GigaChatClient.builder() .apiUrl("https://api.giga.chat/v1") .apiV2Url("https://api.giga.chat/v2") .authClient(AuthClient.builder() .withOAuth(OAuthBuilder.builder() .scope(Scope.GIGACHAT_API_PERS) .authKey("<ключ_авторизации>") .build()) .build()) .build(); try { System.out.println(client.uploadFile(UploadFileRequest.builder() .file(new byte[1000]) .mimeType("application/pdf") .fileName("test.pdf") .purpose("general") .build())); } catch (HttpClientException ex) { System.out.println(ex.statusCode() + " " + ex.bodyAsString()); } } } ``` В ответ вы получите объект с описанием файла: ```json { "bytes": 120000, "created_at": 1677610602, "filename": "file123", "id": "6f0b1291-c7f3-43c6-bb2e-9f3efb2dc98e", "object": "file", "purpose": "general", "access_policy": "private", "modalities": [ "image" ] } ``` Описание параметров — в [справке API](/ru/gigachat/api/reference/rest/post-file). ### Получить список доступных файлов Для получения списка всех доступных вам файлов используйте метод : ```sh curl -L -X GET 'https://api.giga.chat/v1/files' \ -H 'Accept: application/json' \ -H 'Authorization: Bearer access_token' ``` ```python from gigachat import GigaChat with GigaChat(base_url="https://api.giga.chat/v1",) as client: # Загрузка файла with open("document.pdf", "rb") as f: uploaded = client.upload_file(f, purpose="general") print(f"Файл загружен: {uploaded.id}") # Просмотр списка файлов files = client.get_files() for file in files.data: print(f"{file.id}: {file.filename}") ``` ### Получить данные файла Для получения информации об отдельном файле используйте метод : ```sh curl -L -X GET 'https://api.giga.chat/v1/files/:file' \ -H 'Accept: application/json' \ -H 'Authorization: Bearer access_token' ``` ```python import requests url = "https://api.giga.chat/v1/files/:file" payload={} headers = { 'Accept': 'application/json', 'Authorization': 'Bearer access_token' } response = requests.request("GET", url, headers=headers, data=payload) print(response.text) ``` ```java public class AvailableFilesExample { public static void main(String[] args) { GigaChatClient client = GigaChatClient.builder() .apiUrl("https://api.giga.chat/v1") .apiV2Url("https://api.giga.chat/v2") .authClient(AuthClient.builder() .withOAuth(OAuthBuilder.builder() .scope(Scope.GIGACHAT_API_PERS) .authKey("<ключ_авторизации>") .build()) .build()) .build(); try { System.out.println(client.getListAvailableFile()); } catch (HttpClientException ex) { System.out.println(ex.statusCode() + " " + ex.bodyAsString()); } } } ``` ### Удалить файл из хранилища Для удаления файла из хранилища используйте метод . В параметрах пути укажите идентификатор файла, который был получен при его загрузке в хранилище. После удаления файл нельзя будет использовать для генерации. ```sh curl -L -X POST 'https://api.giga.chat/v1/files/:file/delete' \ -H 'Accept: application/json' \ -H 'Authorization: Bearer access_token' ``` ```python from gigachat import GigaChat with GigaChat(base_url="https://api.giga.chat/v1",) as client: # Загрузка файла with open("document.pdf", "rb") as f: uploaded = client.upload_file(f, purpose="general") print(f"Файл загружен: {uploaded.id}") # Удаление файла client.delete_file(uploaded.id) ``` ```java public class FileDeletedExample { public static void main(String[] args) { GigaChatClient client = GigaChatClient.builder() .apiUrl("https://api.giga.chat/v1") .apiV2Url("https://api.giga.chat/v2") .authClient(AuthClient.builder() .withOAuth(OAuthBuilder.builder() .scope(Scope.GIGACHAT_API_PERS) .authKey("<ключ_авторизации>") .build()) .build()) .build(); try { System.out.println(client.deleteFile(UUID.randomUUID().toString())); } catch (HttpClientException ex) { System.out.println(ex.statusCode() + " " + ex.bodyAsString()); } } } ``` ## Использование файлов для генерации ответов Доступные в хранилище файлы можно использовать в запросах на генерацию. Для этого передайте идентификаторы файлов в массиве `attachments` запроса вместе с подходящим промптом. В одном запросе можно одновременно использовать текстовые документы и аудиофайлы. При этом результат генерации будет зависеть от положения файла в списке, а качество генерации может снизиться. :::note Общий размер запроса при работе с изображениями и аудио должен быть меньше 80 Мб. Например, ваш запрос может включать текст промпта и идентификаторы изображения размером 12 Мб, и двух аудиофайлов размером 33 Мб и 21 Мб. Что в сумме даст запрос размером больше 66 Мб, в зависимости от размера промпта. ::: ### Доступ к файлам Использовать файл для генерации может только тот пользователь, который добавил его в хранилище. Это значит, что в запросе на генерацию нужно передать тот же идентификатор пользователя, который был передан при загрузке файла. В противном случае вернется ошибка: ```json { "status":403, "message":"Access to file '<идентификатор файла>' is denied" } ``` По умолчанию, используется идентификатор Client ID. Идентификатор отображается в проекте **GigaChat API**, в разделе **Настройки API**, в поле **Client ID**. Чтобы переопределить идентификатор, передайте его явно в заголовке `X-Client-ID` при загрузке файла. Для дальнейшей работы с файлом нужно всегда передавать такой же идентификатор. ### Текстовые документы Для генерации с помощью загруженных текстовых документов используется встроенная функция `get_file_content`. Чтобы модель учитывала документы при генерации, передайте в запросе: * идентификаторы файлов в массиве `attachments`; * параметр `"function_call": "auto"`, чтобы включить [автоматический режим работы с функциями](/ru/gigachat/guides/functions/function-calling-modes). Без включения автоматического режима модель будет использовать только первый документ из списка. :::note Если запрос содержит собственные функции, функцию `get_file_content` нужно указать в массиве `functions`. Подробнее — в разделе [Совместное использование встроенных и пользовательских функций](/ru/gigachat/guides/functions/calling-builtin-functions). ::: Размер текстовых документов не учитывается в запросах на генерацию, но их содержимое может быть больше [контекста модели](/ru/gigachat/models/main). В таком случае вернется [ошибка с кодом 422](/ru/gigachat/api/errors-description?responseCode=422). Пример запроса на генерацию с двумя документами: ```sh curl -L -X POST 'https://api.giga.chat/v1/chat/completions' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ -H 'Authorization: Bearer access_token' \ --data-raw '{ "model": "GigaChat", "function_call": "auto", "messages": [ { "role": "user", "content": "Краткий пересказ файлов", "attachments": [ "b0989008-3ec5-4b80-aaeb-32deba7a541c", "d24d347f-44d6-444f-bca0-6e9df0fe9e6a" ] } ] }' ``` ```python from gigachat import GigaChat giga = GigaChat( base_url="https://api.giga.chat/v1", credentials="ключ_авторизации", verify_ssl_certs=False, ) result = giga.chat( { "function_call": "auto", "messages": [ { "role": "user", "content": "Краткий пересказ файлов", "attachments": ["b0989008-3ec5-4b80-aaeb-32deba7a541c", "d24d347f-44d6-444f-bca0-6e9df0fe9e6a"], } ], "temperature": 0.1 } ) print(result.choices[0].message.content) ``` ```java public class AttachmentExample { public static void main(String[] args) { GigaChatClient client = GigaChatClient.builder() .apiUrl("https://api.giga.chat/v1") .apiV2Url("https://api.giga.chat/v2") .verifySslCerts(false) .authClient(AuthClient.builder() .withOAuth(OAuthBuilder.builder() .scope(Scope.GIGACHAT_API_PERS) .authKey("<ключ_авторизации>") .build()) .build()) .build(); try { System.out.println(client.completions(CompletionRequest.builder() .model(ModelName.GIGA_CHAT_MAX) .message(ChatMessage.builder() .content("Сделай краткий пересказ содержимого файла") .role(ChatMessageRole.USER) // Для передачи массива идентификаторов, используйте параметр attachments .attachment("<идентификатор_файла>") .build()) .build())); } catch (HttpClientException ex) { System.out.println(ex.statusCode() + " " + ex.bodyAsString()); } } } ``` Ответ модели будет содержать идентификатор состояния функции `function_state_id`. Передавайте его в последующих запросах, чтобы [сохранить контекст](/ru/gigachat/guides/functions/calling-builtin-functions) и повысить качество генерации. ### Аудиофайлы В запросе на генерацию можно передать несколько аудиофайлов. Суммарный размер файлов в запросе должен быть меньше 80 Мб. ```sh curl -L -X POST 'https://api.giga.chat/v1/chat/completions' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ -H 'Authorization: Bearer access_token' \ --data-raw '{ "model": "GigaChat", "function_call": "auto", "messages": [ { "role": "user", "content": "Сделай краткую выдержку подкастов", "attachments": [ "b0989008-3ec5-4b80-aaeb-32deba7a541c", "d24d347f-44d6-444f-bca0-6e9df0fe9e6a" ] } ] }' ``` ```python from gigachat import GigaChat giga = GigaChat( base_url="https://api.giga.chat/v1", credentials="ключ_авторизации", verify_ssl_certs=False, ) result = giga.chat( { "function_call": "auto", "messages": [ { "role": "user", "content": "Сделай краткую выдержку подкастов", "attachments": ["b0989008-3ec5-4b80-aaeb-32deba7a541c", "d24d347f-44d6-444f-bca0-6e9df0fe9e6a"], } ] } ) print(result.choices[0].message.content) ``` ```java public class AttachmentExample { public static void main(String[] args) { GigaChatClient client = GigaChatClient.builder() .apiUrl("https://api.giga.chat/v1") .apiV2Url("https://api.giga.chat/v2") .verifySslCerts(false) .authClient(AuthClient.builder() .withOAuth(OAuthBuilder.builder() .scope(Scope.GIGACHAT_API_PERS) .authKey("<ключ_авторизации>") .build()) .build()) .build(); try { System.out.println(client.completions(CompletionRequest.builder() .model(ModelName.GIGA_CHAT_MAX) .message(ChatMessage.builder() .content("Сделай краткую выдержку подкаста") .role(ChatMessageRole.USER) // Для передачи массива идентификаторов, используйте параметр attachments .attachment("<идентификатор_файла>") .build()) .build())); } catch (HttpClientException ex) { System.out.println(ex.statusCode() + " " + ex.bodyAsString()); } } } ``` ### Изображения В одном сообщении (объект в массиве `messages`) можно передать только одно изображение. В одном запросе можно передать до 10 изображений, независимо от количества сообщений. Примеры запросов на генерацию с использованием загруженных изображений. ```sh curl -L -X POST 'https://api.giga.chat/v1/chat/completions' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ -H 'Authorization: Bearer access_token' \ --data-raw '{ "model": "GigaChat-Pro", "messages": [ { "role": "user", "content": "Что изображено на рисунке?", "attachments": [ "80e0bcd5-2b78-4fa7-8783-903995f56b4b" ] } ], "stream": false, "update_interval": 0 }' ``` ```python from gigachat import GigaChat giga = GigaChat( base_url="https://api.giga.chat/v1", credentials="ключ_авторизации", verify_ssl_certs=False, ) result = giga.chat( { "messages": [ { "role": "user", "content": "Что изображено на рисунке?", "attachments": ["80e0bcd5-2b78-4fa7-8783-903995f56b4b"], } ], "temperature": 0.1 } ) print(result.choices[0].message.content) ``` ```java public class VisionExample { public static void main(String[] args) { GigaChatClient client = GigaChatClient.builder() .apiUrl("https://api.giga.chat/v1") .apiV2Url("https://api.giga.chat/v2") .verifySslCerts(false) .authClient(AuthClient.builder() .withOAuth(OAuthBuilder.builder() .scope(Scope.GIGACHAT_API_PERS) .authKey("<ключ_авторизации>") .build()) .build()) .build(); try { System.out.println(client.completions(CompletionRequest.builder() .model(ModelName.GIGA_CHAT_MAX) .message(ChatMessage.builder() .content("Что изображено на картинке?") .role(ChatMessageRole.USER) .attachment("<идентификатор_файла>") .build()) .build())); } catch (HttpClientException ex) { System.out.println(ex.statusCode() + " " + ex.bodyAsString()); } } } ``` #### Тарификация изображений При отправке изображений в GigaChat они преобразуются в токены. Количество токенов после преобразования зависит от размера и разрешения изображения. Максимальное количество токенов, которые могут быть потрачены на обработку изображения — 1792. Токены оплачиваются в соответствии с тарифами [GigaChat API](/ru/gigachat/api/tariffs). --- # Быстрый старт для физических лиц [source](https://developers.sber.ru/docs/ru/gigachat/individuals-quickstart.md) Следуйте инструкциям в этом разделе, чтобы узнать как: 1. [Зарегистрироваться в личном кабинете и создать проект GigaChat API](/ru/gigachat/quickstart/ind-create-project), который нужен для управления доступом к API и просмотру статистики. 2. [Покупать токены](/ru/gigachat/quickstart/ind-tokens-purchase) для оплаты запросов к API. 3. [Делать простые запросы к API](/ru/gigachat/quickstart/ind-using-api) с помощью разных инструментов. :::note Для работы с GigaChat API установите [сертификаты НУЦ Минцифры](/ru/gigachat/certificates). ::: --- # Быстрый старт для ИП и юридических лиц [source](https://developers.sber.ru/docs/ru/gigachat/legal-quickstart.md) Следуйте инструкциям в этом разделе, чтобы узнать как: 1. [Зарегистрироваться в личном кабинете](/ru/gigachat/quickstart/legal-tokens-purchase) для покупки токенов и получения ключа авторизации. 2. [Делать простые запросы к API](/ru/gigachat/quickstart/legal-using-api) с помощью разных инструментов. :::note Для работы с GigaChat API установите [сертификаты НУЦ Минцифры](/ru/gigachat/certificates). ::: --- # Квоты и ограничения [source](https://developers.sber.ru/docs/ru/gigachat/limitations.md) ## Квотирование ### Токены Обмен данными с GigaChat ограничен количеством доступных токенов. В среднем один токен состоит из 3—4 символов. Количество токенов в промпте с контекстом и ответе зависит от модели. Оценить количество токенов, которое потратит та или иная модель, можно с помощью запроса . ### Потоки При работе с GigaChat API действуют ограничения на потоки: * Физическим лицам для работы с API доступен один поток, независимо от того используются токены из платного пакета или freemium-режима. * Юридическим лицам и ИП для работы с API по умолчанию доступно 10 потоков. Количество потоков может быть увеличено после отправки запроса на электронный адрес gigachat@sberbank.ru. ## Тематические ограничения запросов С нейросетевой моделью вы можете обсуждать любые темы, кроме тех, которые призывают к противозаконным действиям или потенциально опасной деятельности, а также нарушают требования законодательства. Если запрос подпадает под ограничения GigaChat, то [ответ](/ru/gigachat/api/reference/rest/post-chat) будет содержать поле `"choices.finish_reason": "blacklist"`. :::note Корпоративным клиентам доступна возможность настройки ограничений. Напишите письмо по адресу gigachat@sberbank.ru, чтобы узнать более подробную информацию о настройке ограничений. ::: Всегда проверяйте ответы GigaChat. В связи с тем, что ответы генерируются нейросетью, информация в них может быть неактуальна или искажена. Темы, которых необходимо избегать: * порнография, эротика и темы сексуального характера; * пропаганда употребления алкогольных, наркотических и табачных веществ; * политика, предвыборная агитация и обсуждение представителей власти; * темы экстремистского и террористического характера; * призывы к насилию, убийствам и самоубийствам; * призывы к жестокому обращению с животными; * призывы к нарушению законов (разжиганию военных конфликтов, пропаганде криминальных структур); * изготовление наркотических веществ и их аналогов, взрывчатых веществ и иного оружия. :::note Результат генерации не является официальным мнением компании, модель постоянно дообучается, в том числе в вопросах этики. ::: --- # Embeddings-2 [source](https://developers.sber.ru/docs/ru/gigachat/models/embeddings-2.md) ## Описание

Стоимость

Ниже для ознакомления — стоимость моделей GigaChat за 1 млн токенов. Подробнее — в разделе [Тарифы](/ru/gigachat/api/tariffs).

Физическое лицо
14 ₽ 14 ₽ 14 ₽ 14 ₽
Юридическое лицо
14 ₽ 14 ₽ 14 ₽ 14 ₽
Тип пользователя Embeddings Embeddings-2 GigaEmbeddings-3B-2025-09 EmbeddingsGigaR
--- # GigaEmbeddings-3B-2025-09 [source](https://developers.sber.ru/docs/ru/gigachat/models/embeddings-3b-2025-09.md) ## Описание

Стоимость

Ниже для ознакомления — стоимость моделей GigaChat за 1 млн токенов. Подробнее — в разделе [Тарифы](/ru/gigachat/api/tariffs).

Физическое лицо
14 ₽ 14 ₽ 14 ₽ 14 ₽
Юридическое лицо
14 ₽ 14 ₽ 14 ₽ 14 ₽
Тип пользователя Embeddings Embeddings-2 GigaEmbeddings-3B-2025-09 EmbeddingsGigaR
--- # EmbeddingsGigaR [source](https://developers.sber.ru/docs/ru/gigachat/models/embeddings-giga-r.md) ## Описание

Стоимость

Ниже для ознакомления — стоимость моделей GigaChat за 1 млн токенов. Подробнее — в разделе [Тарифы](/ru/gigachat/api/tariffs).

Физическое лицо
14 ₽ 14 ₽ 14 ₽ 14 ₽
Юридическое лицо
14 ₽ 14 ₽ 14 ₽ 14 ₽
Тип пользователя Embeddings Embeddings-2 GigaEmbeddings-3B-2025-09 EmbeddingsGigaR
--- # Embeddings [source](https://developers.sber.ru/docs/ru/gigachat/models/embeddings.md) ## Описание

Стоимость

Ниже для ознакомления — стоимость моделей GigaChat за 1 млн токенов. Подробнее — в разделе [Тарифы](/ru/gigachat/api/tariffs).

Физическое лицо
14 ₽ 14 ₽ 14 ₽ 14 ₽
Юридическое лицо
14 ₽ 14 ₽ 14 ₽ 14 ₽
Тип пользователя Embeddings Embeddings-2 GigaEmbeddings-3B-2025-09 EmbeddingsGigaR
--- # GigaChat 2 Lite [source](https://developers.sber.ru/docs/ru/gigachat/models/gigachat-2-lite.md) ## Описание , , ] }, { title: 'Output', outputType: 'текст, изображение', icons: [, , ] }, ]} background="radial-gradient(75.33% 97.05% at 50.85% 115%, #F3E0FF 0%, rgba(248, 237, 255, 0.76) 56.25%, #FFFFFE 100%)" /> ### Возможности }, { label: 'Поддержка функций', icon: }, { label: 'Обработка текстовых документов*', icon: } ]} right={[ { label: 'Генерация изображений*', icon: }, { label: 'Генерация 3D-моделей*', icon: }, ]} footnote="* При помощи встроенных функций" />

Стоимость

Ниже для ознакомления — стоимость моделей GigaChat за 1 млн токенов. Подробнее — в разделе [Тарифы](/ru/gigachat/api/tariffs).

Физическое лицо 65 ₽ 500 ₽ 650 ₽ Юридическое лицо 65 ₽ 500 ₽ 650 ₽
Тип пользователя GigaChat 2 Lite GigaChat 2 Pro GigaChat 2 Max

Сравнение метрик

В таблице представлены основные характеристики и возможности моделей в зависимости от версии

ОБЩИЕ ЗНАНИЯ MMLU (5-shot) 0,72 0,82 0,86 ruMMLU (5-shot) 0,66 0,77 0,80 МАТЕМАТИКА GSM8K (5-shot) 0,89 0,96 0,95 MATH (4-shot) 0,64 0,78 0,78 Arena-Hard RU (без фильтра безопасности) 0,55 0,77 0,84 НАПИСАНИЕ КОДА Human Eval (0-shot) 0,74 0,91 0,87 MBPP (0-shot) 0,57 0,86 0,89 СЛЕДОВАНИЕ ИНСТРУКЦИЯМ IFEval(en) (0-shot) 0,80 0,83 0,89 IFEval(ru) (0-shot) 0,73 0,78 0,83
Метрика Gigachat 2 lite Gigachat 2 Pro Gigachat 2 Max
--- # GigaChat 2 Max [source](https://developers.sber.ru/docs/ru/gigachat/models/gigachat-2-max.md) ## Описание , , ] }, { title: 'Output', outputType: 'текст, изображение', icons: [, , ] }, ]} background="radial-gradient(79.06% 97.2% at 50.85% 115%, rgba(224, 255, 188, 0.19) 0%, rgba(242, 255, 228, 0.70) 56.25%, #FFFFFE 100%)" /> ### Возможности }, { label: 'Поддержка функций', icon: }, { label: 'Анализ аудиофайлов', icon: }, { label: 'Анализ изображений', icon: }, ]} right={[ { label: 'Генерация изображений*', icon: }, { label: 'Генерация 3D-моделей*', icon: }, { label: 'Обработка текстовых документов*', icon: } ]} footnote="* При помощи встроенных функций" />

Стоимость

Ниже для ознакомления — стоимость моделей GigaChat за 1 млн токенов. Подробнее — в разделе [Тарифы](/ru/gigachat/api/tariffs).

Физическое лицо 65 ₽ 500 ₽ 650 ₽ Юридическое лицо 65 ₽ 500 ₽ 650 ₽
Тип пользователя GigaChat 2 Lite GigaChat 2 Pro GigaChat 2 Max

Сравнение метрик

В таблице представлены основные характеристики и возможности моделей в зависимости от версии

ОБЩИЕ ЗНАНИЯ MMLU (5-shot) 0,72 0,82 0,86 ruMMLU (5-shot) 0,66 0,77 0,80 МАТЕМАТИКА GSM8K (5-shot) 0,89 0,96 0,95 MATH (4-shot) 0,64 0,78 0,78 Arena-Hard RU (без фильтра безопасности) 0,55 0,77 0,84 НАПИСАНИЕ КОДА Human Eval (0-shot) 0,74 0,91 0,87 MBPP (0-shot) 0,57 0,86 0,89 СЛЕДОВАНИЕ ИНСТРУКЦИЯМ IFEval(en) (0-shot) 0,80 0,83 0,89 IFEval(ru) (0-shot) 0,73 0,78 0,83
Метрика Gigachat 2 lite Gigachat 2 Pro Gigachat 2 Max
--- # GigaChat 2 Pro [source](https://developers.sber.ru/docs/ru/gigachat/models/gigachat-2-pro.md) ## Описание , , ] }, { title: 'Output', outputType: 'текст, изображение', icons: [, , ] }, ]} background="radial-gradient(65.66% 83.99% at 50.85% 115%, #DBEFFF 0%, rgba(219, 239, 255, 0.76) 56.25%, #FFFFFE 100%)" /> ### Возможности }, { label: 'Поддержка функций', icon: }, { label: 'Анализ аудиофайлов', icon: }, { label: 'Анализ изображений', icon: }, ]} right={[ { label: 'Генерация изображений*', icon: }, { label: 'Генерация 3D-моделей*', icon: }, { label: 'Обработка текстовых документов*', icon: } ]} footnote="* При помощи встроенных функций" />

Стоимость

Ниже для ознакомления — стоимость моделей GigaChat за 1 млн токенов. Подробнее — в разделе [Тарифы](/ru/gigachat/api/tariffs).

Физическое лицо 65 ₽ 500 ₽ 650 ₽ Юридическое лицо 65 ₽ 500 ₽ 650 ₽
Тип пользователя GigaChat 2 Lite GigaChat 2 Pro GigaChat 2 Max

Сравнение метрик

В таблице представлены основные характеристики и возможности моделей в зависимости от версии

ОБЩИЕ ЗНАНИЯ MMLU (5-shot) 0,72 0,82 0,86 ruMMLU (5-shot) 0,66 0,77 0,80 МАТЕМАТИКА GSM8K (5-shot) 0,89 0,96 0,95 MATH (4-shot) 0,64 0,78 0,78 Arena-Hard RU (без фильтра безопасности) 0,55 0,77 0,84 НАПИСАНИЕ КОДА Human Eval (0-shot) 0,74 0,91 0,87 MBPP (0-shot) 0,57 0,86 0,89 СЛЕДОВАНИЕ ИНСТРУКЦИЯМ IFEval(en) (0-shot) 0,80 0,83 0,89 IFEval(ru) (0-shot) 0,73 0,78 0,83
Метрика Gigachat 2 lite Gigachat 2 Pro Gigachat 2 Max
--- # GigaChat 3 Ultra [source](https://developers.sber.ru/docs/ru/gigachat/models/gigachat-3-ultra.md) `GigaChat-3-Ultra` — новая модель, доступная физическим лицам в рамках [Freemium-режима](/ru/gigachat/tariffs/individual-tariffs). Физлица и юрлица на платных тарифах доступа к Ultra пока не имеют. Следите за обновлениями в нашей документации. Для отправки запросов используйте базовый адрес `https://api.giga.chat/` и любой из методов: или . Запрос в формате : ```sh curl -L -X POST 'https://api.giga.chat/v1/chat/completions' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ -H 'Authorization: Bearer <токен_доступа>' \ --data-raw '{ "model": "GigaChat-3-Ultra", "messages": [ { "role": "user", "content": "Привет! Как дела?" } ] }' ``` Запрос в формате : ```sh curl -L -X POST 'https://api.giga.chat/v2/chat/completions' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ -H 'Authorization: Bearer <токен_доступа>' \ --data-raw '{ "model": "GigaChat-3-Ultra", "messages": [ { "role": "user", "content": [ { "text": "Привет! Как дела" } ] } ] }' ``` ```py from gigachat import GigaChat from gigachat.models import Chat, Messages, MessagesRole from gigachat import GigaChat client = GigaChat( base_url="https://api.giga.chat/v1", credentials="<ключ_авторизации>", scope="GIGACHAT_API_PERS", verify_ssl_certs=False, ) PROMPT = "Привет! Как дела?" chat = Chat( model="GigaChat-3-Ultra", messages=[Messages(role=MessagesRole.USER, content=PROMPT)], ) resp = client.chat(chat) print(resp) ``` --- # Модели GigaChat [source](https://developers.sber.ru/docs/ru/gigachat/models/main.md) ## Описание ## Модели для генерации ## Модели для векторного представления текстов --- # Обновления моделей [source](https://developers.sber.ru/docs/ru/gigachat/models/updates.md) В этом разделе вы найдете информацию о качестве работы и возможностях новых версий моделей GigaChat. Дата релиза: 15.07.2026 Статус: Доступна

Что нового

* Добавлена новая модель `GigaChat 3 Ultra`, которая доступна только физическим лицам в рамках Freemium-режима. * Для работы с `GigaChat 3 Ultra` используйте адрес `https://api.giga.chat/`.

Изменение метрик

В таблице представлены основные характеристики и возможности новых версий моделей. ```mdx-code-block ``` | Характеристики | GigaChat 3 Ultra |\ | -------------------------------------------------------------- | ---------- | | Размер контекста в токенах | 128 тыс. |\ | [Поддержка функций](/ru/gigachat/guides/functions/overview) | | | [Генерация изображений](/ru/gigachat/guides/images-generation) | | | Анализ изображений | | | Поддержка аудиомодальности | | ```mdx-code-block ```

Результаты проверки моделей

В таблице представлены результаты проверки моделей с помощью разных бенчмарков. ```mdx-code-block ``` | Метрика | GigaChat 3 Ultra | | ---------- | ---------- | | [MMLU-PRO](https://github.com/hendrycks/test) | 0.75 | | [MATH 500](https://github.com/hendrycks/math/) | 0.86 | | IFBench | 0.43 | | RuBQ | 0.81 | | Pollux | 1.3 | | AIME 2026 | 0.44 | | [Arena-Hard RU](https://github.com/VikhrModels/ru_llm_arena)
|0.69 | ```mdx-code-block
```
Дата релиза: 23.09.2025 Статус: Доступна

Что нового

* Улучшили качество генерации текста в `GigaChat 2 MAX`: по сравнению с прошлой версией модель выдает более полные и логичные ответы на сложные вопросы, требующие логических рассуждений.

Изменение метрик

В таблице представлены основные характеристики и возможности новых версий моделей. ```mdx-code-block ``` | Характеристики | GigaChat 2 Lite | GigaChat 2 Pro | GigaChat 2 Max | | -------------------------------------------------------------- | :--------------: | :------------: | :------------: | | Размер контекста в токенах | 128 тыс. | 128 тыс. | 128 тыс. | 128 тыс. | | [Поддержка функций](/ru/gigachat/guides/functions/overview) | | | | | [Генерация изображений](/ru/gigachat/guides/images-generation) | | | | | Анализ изображений | | | | | Поддержка аудиомодальности | | | | ```mdx-code-block ```

Результаты проверки моделей

В таблице представлены результаты проверки моделей с помощью разных бенчмарков. ```mdx-code-block ``` | Метрика | GigaChat 2 Lite | GigaChat 2 Pro | GigaChat 2 Max | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | | [MMLU](https://github.com/hendrycks/test) (5-shot) | 0.73 (+0.01) | 0.82 | 0.86 | | ruMMLU (5-shot) | 0.67 (+0.01) | 0.82 (+0.05) | 0.80 | | [GSM8K](https://github.com/openai/grade-school-math) (5-shot) | 0.90 (+0.01) | 0.95 (-0.01) | 0.91 (+0.01) | | [MATH](https://github.com/hendrycks/math/) (4-shot) | 0.63 (-0.01) | 0.79 (+0.02) | 0.79 (+0.01) | | [Human Eval](https://github.com/openai/human-eval) (0-shot) | 0.69 (-0.05) | 0.91 | 0.91 (+0.03) | | MBPP (0-shot) | 0.55 (-0.02) | 0.86 | 0.89 | | IFEval(en) (0-shot) | 0.82 (+0.02) | 0.83 | 0.89 | | IFEval(ru) (0-shot) | 0.77 (+0.04) | 0.78 | 0.82 (-0.01) | ```mdx-code-block ```
Дата релиза: 15.04.2025 Статус: Доступна

Что нового

* Обновили модели до формата FP8/W8A16. * Увеличили скорость обработки запросов и производительность модели Max на 30%.

Изменение метрик

В таблице представлены основные характеристики и возможности новых версий моделей. ```mdx-code-block ``` | Характеристики | GigaChat 2 Lite | GigaChat 2 Pro | GigaChat 2 Max | | -------------------------------------------------------------- | :--------------: | :------------: | :------------: | | Размер контекста в токенах | 128 тыс. | 128 тыс. | 128 тыс. | | [Поддержка функций](/ru/gigachat/guides/functions/overview) | | | | | [Генерация изображений](/ru/gigachat/guides/images-generation) | | | | | Анализ изображений | | | | | Поддержка аудиомодальности | | | | ```mdx-code-block ```

Результаты проверки моделей

В таблице представлены результаты проверки моделей с помощью разных бенчмарков. ```mdx-code-block ``` | Метрика | GigaChat 2 Lite | GigaChat 2 Pro | GigaChat 2 Max | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | | [MMLU](https://github.com/hendrycks/test) (5-shot) | 0.72 | 0.82 | 0.86 | | ruMMLU (5-shot) | 0.66 | 0.77 | 0.80 | | [GSM8K](https://github.com/openai/grade-school-math) (5-shot) | 0.89 | 0.96 (+0.01) | 0.95 | | [MATH](https://github.com/hendrycks/math/) (4-shot) | 0.64 (+0.02) | 0.78 (+0.02) | 0.78 (+0.04) | | [Human Eval](https://github.com/openai/human-eval) (0-shot) | 0.74 (+0.04) | 0.91 | 0.87 (+0.08) | | MBPP (0-shot) | 0.57 | 0.86 | 0.89 (+0.17) | | [Arena-Hard RU](https://github.com/VikhrModels/ru_llm_arena)
(без фильтра безопасности) | 0.55 | 0.77 (+0.03) | 0.84 (+0.01) | | IFEval(en) (0-shot) | 0.80 (+0.06) | 0.83 | 0.89 (+0.2) | | IFEval(ru) (0-shot) | 0.73 (+0.08) | 0.78 | 0.83 (+0.39) | ```mdx-code-block
```
Дата релиза: 13.03.2025 Статус: Недоступна

Что нового

Добавлена новая линейка моделей GigaChat 2 в версиях Lite, Pro и Max, в которой: * увеличено большинство метрик по сравнению с предыдущими версиями; * добавлена поддержка контекста в 128 тыс. токенов; * улучшены механизмы RLHF и DPO для более стабильной работы в сложных сценариях.

Изменение метрик

В таблице представлены основные характеристики и возможности новых версий моделей. ```mdx-code-block ``` | Характеристики | GigaChat 2 Lite | GigaChat 2 Pro | GigaChat 2 Max | | -------------------------------------------------------------- | :--------------: | :------------: | :------------: | | Размер контекста в токенах | 128 тыс. | 128 тыс. | 128 тыс. | | [Поддержка функций](/ru/gigachat/guides/functions/overview) | | | | | [Генерация изображений](/ru/gigachat/guides/images-generation) | | | | | Анализ изображений | | | | ```mdx-code-block ```

Результаты проверки моделей

В таблице представлены результаты проверки моделей с помощью разных бенчмарков. ```mdx-code-block ``` | Метрика | GigaChat 2 Lite | GigaChat 2 Pro | GigaChat 2 Max | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | -------------------------------------------------------------------- | --------------------------------------------------------------------- | | [MMLU](https://github.com/hendrycks/test) (5-shot) | 0.72 (+0.08) | 0.82 (+0.12) | 0.86 (+0.06) | | MMLU PRO (5-shot) | 0.52 (+0.2) | 0.64 (+0.24) | 0.66 (+0.11) | | ruMMLU (5-shot) | 0.66 (+0.07) | 0.77 (+0.12) | 0.80 (+0.05) | | [GSM8K](https://github.com/openai/grade-school-math) (5-shot) | 0.89 (+0.23) | 0.95 (+0.1) | 0.95 (+0.02) | | [MATH](https://github.com/hendrycks/math/) (4-shot) | 0.62 (+0.28) | 0.76 (+0.31) | 0.74 (+0.21) | | [Human Eval](https://github.com/openai/human-eval) (0-shot) | 0.70 (+0.25) | 0.91 (+0.4) | 0.87 (+0.08) | | Human Eval Plus (0-shot) | 0.64 (+0.27) | 0.86 (+0.41) | 0.83 (+0.11) | | [Arena-Hard RU](https://github.com/VikhrModels/ru_llm_arena)
(без фильтра безопасности) | 0.55 (+0.31) | 0.74 (+0.32) | 0.83 (+0.16) | | MBPP | 0.79 (+0.2) | 0.86 (+0.28) | 0.89 (+0.17) | | IFEval(en) (0-shot) | 0.74 (+0.33) | 0.83 (+0.42) | 0.89 (+0.2) | | IFEval(ru) (0-shot) | 0.65 (+0.27) | 0.78 (+0.33) | 0.83 (+0.39) | ```mdx-code-block
```
Дата релиза: 31.10.2024 Статус: Недоступна

Что нового

* Добавлена новая модель GigaChat Max. * Для работы с моделью нужны оплаченные токены.

Изменение метрик

В таблице представлены основные характеристики и возможности новой версии моделей. ```mdx-code-block ``` | Характеристики | GigaChat Lite | GigaChat Pro | GigaChat Max | | -------------------------------------------------------------- | :-----------: | :----------: | :----------: | | Размер контекста в токенах | 32 тыс. | 32 тыс. | 32 тыс. | | [Поддержка функций](/ru/gigachat/guides/functions/overview) | | | | | [Генерация изображений](/ru/gigachat/guides/images-generation) | | | | | Анализ изображений | | | | ```mdx-code-block ```

Результаты проверки моделей

В таблице представлены результаты проверки моделей с помощью разных бенчмарков. ```mdx-code-block ``` | Метрика | GigaChat Lite | GigaChat Pro | GigaChat Max | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- | ---------------------------------------------------------------------- | ------------ | | [MMLU](https://github.com/hendrycks/test) (5-shot) | 0.65 (+0.01) | 0.69 | 0.8 | | ruMMLU (5-shot) | 0.6 (+0.01) | 0.65 (+0.03) | 0.75 | | [GSM8K](https://github.com/openai/grade-school-math) (5-shot) | 0.66 (+0.05) | 0.78 (+0.01) | 0.93 | | [MATH](https://github.com/hendrycks/math/) (4-shot) | 0.34 (+0.07) | 0.45 (+0.14) | 0.53 | | [MT-Bench](https://github.com/lm-sys/FastChat/tree/main/fastchat/llm_judge)
(с фильтром безопасности) | 7.1 (-0.11) | 7.45 (-0.25) | 8.2 | | [MT-Bench](https://github.com/lm-sys/FastChat/tree/main/fastchat/llm_judge) (average)
(без фильтра безопасности) | 6.93 (-0.28) | 7.59 (-0.11) | 8.3 | | [Arena-Hard](https://github.com/VikhrModels/ru_llm_arena)
(с фильтром безопасности) | | | 50.7 | | [Arena-Hard EN](https://github.com/lmarena/arena-hard-auto)
(без фильтра безопасности) | 11.0 (-5.6) | 18.0 (-3.4%) | 51.9 | | [Arena-Hard RU](https://github.com/VikhrModels/ru_llm_arena)
(с фильтром безопасности) | | | 70.7 | | [Arena-Hard RU](https://github.com/VikhrModels/ru_llm_arena)
(без фильтра безопасности) | 25.9 (5.7%) | 45.5 (+17.3) | 73.3 | | [Human Eval](https://github.com/openai/human-eval) (0-shot) | 0.37 (0.01) | 0.44 (+0.04) | 0.64 | ```mdx-code-block
```
Дата релиза: 01.10.2024 Статус: Недоступна

Что нового

* Теперь в запросах к модели GigaChat Pro можно [передавать изображения](/ru/gigachat/guides/working-with-files). * В моделях GigaChat Lite и Pro увеличен размер контекста с 8192 до 32768 токенов. * Расширены возможности по стилизации и форматированию ответов. Теперь модели активнее используют markdown-разметку: добавляют заголовки, списки, параграфы и блоки кода.

Изменение метрик

В таблице представлены основные характеристики и возможности новой версии моделей. ```mdx-code-block ``` | Характеристики | GigaChat Lite | GigaChat Pro | | -------------------------------------------------------------- | :-----------: | :----------: | | Размер контекста в токенах | 32 тыс. | 32 тыс. | | [Поддержка функций](/ru/gigachat/guides/functions/overview) | | | | [Генерация изображений](/ru/gigachat/guides/images-generation) | | | | Анализ изображений | | | ```mdx-code-block ```

Результаты проверки моделей

В таблице представлены результаты проверки моделей с помощью разных бенчмарков.
```mdx-code-block ``` | Метрика | GigaChat Lite | GigaChat Pro | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | ------------ | | [MMLU](https://github.com/hendrycks/test) (5-shot) | 0.64 | 0.69 | | ruMMLU (5-shot) | 0.59 | 0.62 | | [GSM8K](https://github.com/openai/grade-school-math) (5-shot) | 0.61 | 0.77 | | [MATH](https://github.com/hendrycks/math/) (4-shot) | 0.27 | 0.31 | | [MT-Bench](https://github.com/lm-sys/FastChat/tree/main/fastchat/llm_judge) (average) | 7.21 | 7.7 | | [Arena-Hard EN](https://github.com/lmarena/arena-hard-auto) | 16.6 | 21.4 | | [Arena-Hard RU](https://github.com/VikhrModels/ru_llm_arena) | 20.2 | 28.2 | | [Human Eval](https://github.com/openai/human-eval) (0-shot) | 0.38 | 0.4 | ```mdx-code-block ```
--- # Создание инструкций [source](https://developers.sber.ru/docs/ru/gigachat/prompts-hub/content/generate-instructions.md) Пример промпта для создания пошаговых инструкций из произвольного описания процесса. ```json { "model": "GigaChat-2-Max", "messages": [ { "role": "system", "content": "# Задача: Преобразование общего описания в четкий порядок действий\n\n## Роль:\nТы должен помочь пользователю превратить расплывчатое описание какого-либо процесса или задания в простую, пошаговую инструкцию, которую легко понять и исполнить.\n\n## Инструкция:\nТвоя задача заключается в том, чтобы разделить общее описание на ряд конкретных шагов. Каждый шаг следует начинать с активного глагола в повелительном наклонении (\"Сделайте\", \"Проверьте\", \"Используйте\"). Для этого используй следующую методологию:\n\n1. Внимательно прочитай описание, определив ключевую цель и границы процесса.\n2. Иди последовательно через весь процесс, определяя главные этапы и действия.\n3. Переформулируй каждый этап так, чтобы он был простым и конкретным действием.\n4. При необходимости вставляй объяснения или рекомендации для пользователей, чтобы избежать путаницы.\n5. Проверь полноту и точность созданного списка шагов.\n6. Если обнаружишь неточности или нехватку информации, обратись к пользователю за дополнительными сведениями.\n\n## Пример:\n### Вход:\nПриготовьте чашечку кофе эспрессо дома.\n\n### Выход:\n1. Включите кофеварку и дайте ей нагреться.\n2. Засыпьте необходимое количество молотого кофе в холдер.\n3. Утрамбуйте кофе равномерно.\n4. Установите холдер в группу подачи воды.\n5. Нажмите кнопку запуска приготовления.\n6. Дождитесь завершения цикла заваривания.\n7. Налейте готовый напиток в предварительно подогретую чашку.\n\n## Формат ответа:\nСоздавай список шагов с нумерацией, используя активный глагол в начале каждого пункта.\n\n## Примечание:\nЕсли возникнут вопросы относительно каких-то пунктов или процессов, обязательно задавай уточняющие вопросы перед тем, как продолжить работу." }, { "role": "user", "content": "Чтобы заварить чашечку чая, начните с кипячения воды в чайнике. Пока вода нагревается, возьмите кружку и положите туда чайный пакетик. Когда вода закипит, аккуратно залейте её в кружку поверх чайного пакетика. Оставьте чай настаиваться на несколько минут, в зависимости от желаемого вкуса крепости. После настаивания выньте чайный пакетик и добавьте молоко и сахар по вкусу. Всё перемешайте и наслаждайтесь горячим чаем." } ] } ``` ## Запуск промпта в песочнице Вы можете проверить работу промпта с разными параметрами в [песочнице](/ru/gigachat/prompts-hub/playground). Для этого: 1. Авторизуйтесь в [Studio](https://developers.sber.ru/studio/workspaces/my-space/get/gigachat-api). 2. Откройте проект GigaChat API. 3. В левой панели выберите раздел **Playground**. 4. В блоке **Шаблоны промптов** нажмите **Посмотреть**. 5. В открывшемся окне выберите промпт **{props.promptName}**. Промпт откроется в интерфейсе песочницы. Перед запуском вы можете выбрать модель и задать дополнительные параметры запроса. ## Примеры кода ```sh curl --location 'https://api.giga.chat/v1/chat/completions' \ --header 'Content-Type: application/json' \ --header 'Authorization: <токен_доступа>' \ --data '{ "model": "GigaChat", "messages": [ { "model": "GigaChat-2-Max", "messages": [ { "role": "system", "content": "# Задача: Преобразование общего описания в четкий порядок действий\n\n## Роль:\nТы должен помочь пользователю превратить расплывчатое описание какого-либо процесса или задания в простую, пошаговую инструкцию, которую легко понять и исполнить.\n\n## Инструкция:\nТвоя задача заключается в том, чтобы разделить общее описание на ряд конкретных шагов. Каждый шаг следует начинать с активного глагола в повелительном наклонении (\"Сделайте\", \"Проверьте\", \"Используйте\"). Для этого используй следующую методологию:\n\n1. Внимательно прочитай описание, определив ключевую цель и границы процесса.\n2. Иди последовательно через весь процесс, определяя главные этапы и действия.\n3. Переформулируй каждый этап так, чтобы он был простым и конкретным действием.\n4. При необходимости вставляй объяснения или рекомендации для пользователей, чтобы избежать путаницы.\n5. Проверь полноту и точность созданного списка шагов.\n6. Если обнаружишь неточности или нехватку информации, обратись к пользователю за дополнительными сведениями.\n\n## Пример:\n### Вход:\nПриготовьте чашечку кофе эспрессо дома.\n\n### Выход:\n1. Включите кофеварку и дайте ей нагреться.\n2. Засыпьте необходимое количество молотого кофе в холдер.\n3. Утрамбуйте кофе равномерно.\n4. Установите холдер в группу подачи воды.\n5. Нажмите кнопку запуска приготовления.\n6. Дождитесь завершения цикла заваривания.\n7. Налейте готовый напиток в предварительно подогретую чашку.\n\n## Формат ответа:\nСоздавай список шагов с нумерацией, используя активный глагол в начале каждого пункта.\n\n## Примечание:\nЕсли возникнут вопросы относительно каких-то пунктов или процессов, обязательно задавай уточняющие вопросы перед тем, как продолжить работу." }, { "role": "user", "content": "Чтобы заварить чашечку чая, начните с кипячения воды в чайнике. Пока вода нагревается, возьмите кружку и положите туда чайный пакетик. Когда вода закипит, аккуратно залейте её в кружку поверх чайного пакетика. Оставьте чай настаиваться на несколько минут, в зависимости от желаемого вкуса крепости. После настаивания выньте чайный пакетик и добавьте молоко и сахар по вкусу. Всё перемешайте и наслаждайтесь горячим чаем." } ] } ] }' ``` Использование промпта в SDK: ```py from gigachat import GigaChat from gigachat.models import Chat, Messages, MessagesRole giga = GigaChat( model="GigaChat", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", ) payload = Chat( messages=[ Messages( role=MessagesRole.SYSTEM, content="# Задача: Преобразование общего описания в четкий порядок действий\n\n## Роль:\nТы должен помочь пользователю превратить расплывчатое описание какого-либо процесса или задания в простую, пошаговую инструкцию, которую легко понять и исполнить.\n\n## Инструкция:\nТвоя задача заключается в том, чтобы разделить общее описание на ряд конкретных шагов. Каждый шаг следует начинать с активного глагола в повелительном наклонении (\"Сделайте\", \"Проверьте\", \"Используйте\"). Для этого используй следующую методологию:\n\n1. Внимательно прочитай описание, определив ключевую цель и границы процесса.\n2. Иди последовательно через весь процесс, определяя главные этапы и действия.\n3. Переформулируй каждый этап так, чтобы он был простым и конкретным действием.\n4. При необходимости вставляй объяснения или рекомендации для пользователей, чтобы избежать путаницы.\n5. Проверь полноту и точность созданного списка шагов.\n6. Если обнаружишь неточности или нехватку информации, обратись к пользователю за дополнительными сведениями.\n\n## Пример:\n### Вход:\nПриготовьте чашечку кофе эспрессо дома.\n\n### Выход:\n1. Включите кофеварку и дайте ей нагреться.\n2. Засыпьте необходимое количество молотого кофе в холдер.\n3. Утрамбуйте кофе равномерно.\n4. Установите холдер в группу подачи воды.\n5. Нажмите кнопку запуска приготовления.\n6. Дождитесь завершения цикла заваривания.\n7. Налейте готовый напиток в предварительно подогретую чашку.\n\n## Формат ответа:\nСоздавай список шагов с нумерацией, используя активный глагол в начале каждого пункта.\n\n## Примечание:\nЕсли возникнут вопросы относительно каких-то пунктов или процессов, обязательно задавай уточняющие вопросы перед тем, как продолжить работу." ), Messages( role=MessagesRole.USER, content="Чтобы заварить чашечку чая, начните с кипячения воды в чайнике. Пока вода нагревается, возьмите кружку и положите туда чайный пакетик. Когда вода закипит, аккуратно залейте её в кружку поверх чайного пакетика. Оставьте чай настаиваться на несколько минут, в зависимости от желаемого вкуса крепости. После настаивания выньте чайный пакетик и добавьте молоко и сахар по вкусу. Всё перемешайте и наслаждайтесь горячим чаем." ), ] ) response = giga.chat(payload) print(response.choices[0].message) ``` Использование промпта в партнерском пакете `langchain-gigachat`: ```py from langchain_gigachat.chat_models import GigaChat from langchain_core.messages import HumanMessage, SystemMessage giga = GigaChat( model="GigaChat", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", ) messages = [ SystemMessage("# Задача: Преобразование общего описания в четкий порядок действий\n\n## Роль:\nТы должен помочь пользователю превратить расплывчатое описание какого-либо процесса или задания в простую, пошаговую инструкцию, которую легко понять и исполнить.\n\n## Инструкция:\nТвоя задача заключается в том, чтобы разделить общее описание на ряд конкретных шагов. Каждый шаг следует начинать с активного глагола в повелительном наклонении (\"Сделайте\", \"Проверьте\", \"Используйте\"). Для этого используй следующую методологию:\n\n1. Внимательно прочитай описание, определив ключевую цель и границы процесса.\n2. Иди последовательно через весь процесс, определяя главные этапы и действия.\n3. Переформулируй каждый этап так, чтобы он был простым и конкретным действием.\n4. При необходимости вставляй объяснения или рекомендации для пользователей, чтобы избежать путаницы.\n5. Проверь полноту и точность созданного списка шагов.\n6. Если обнаружишь неточности или нехватку информации, обратись к пользователю за дополнительными сведениями.\n\n## Пример:\n### Вход:\nПриготовьте чашечку кофе эспрессо дома.\n\n### Выход:\n1. Включите кофеварку и дайте ей нагреться.\n2. Засыпьте необходимое количество молотого кофе в холдер.\n3. Утрамбуйте кофе равномерно.\n4. Установите холдер в группу подачи воды.\n5. Нажмите кнопку запуска приготовления.\n6. Дождитесь завершения цикла заваривания.\n7. Налейте готовый напиток в предварительно подогретую чашку.\n\n## Формат ответа:\nСоздавай список шагов с нумерацией, используя активный глагол в начале каждого пункта.\n\n## Примечание:\nЕсли возникнут вопросы относительно каких-то пунктов или процессов, обязательно задавай уточняющие вопросы перед тем, как продолжить работу."), HumanMessage("Чтобы заварить чашечку чая, начните с кипячения воды в чайнике. Пока вода нагревается, возьмите кружку и положите туда чайный пакетик. Когда вода закипит, аккуратно залейте её в кружку поверх чайного пакетика. Оставьте чай настаиваться на несколько минут, в зависимости от желаемого вкуса крепости. После настаивания выньте чайный пакетик и добавьте молоко и сахар по вкусу. Всё перемешайте и наслаждайтесь горячим чаем."), ] response = giga.invoke(messages) print(response) ``` Использование промпта в SDK: ```ts import { GigaChat } from 'gigachat'; const giga = new GigaChat({ model: 'GigaChat', credentials: 'ключ_авторизации', scope: 'GIGACHAT_API_PERS', }); const resp = await giga.chat({ messages: [ { role: 'system', content: '# Задача: Преобразование общего описания в четкий порядок действий\n\n## Роль:\nТы должен помочь пользователю превратить расплывчатое описание какого-либо процесса или задания в простую, пошаговую инструкцию, которую легко понять и исполнить.\n\n## Инструкция:\nТвоя задача заключается в том, чтобы разделить общее описание на ряд конкретных шагов. Каждый шаг следует начинать с активного глагола в повелительном наклонении (\"Сделайте\", \"Проверьте\", \"Используйте\"). Для этого используй следующую методологию:\n\n1. Внимательно прочитай описание, определив ключевую цель и границы процесса.\n2. Иди последовательно через весь процесс, определяя главные этапы и действия.\n3. Переформулируй каждый этап так, чтобы он был простым и конкретным действием.\n4. При необходимости вставляй объяснения или рекомендации для пользователей, чтобы избежать путаницы.\n5. Проверь полноту и точность созданного списка шагов.\n6. Если обнаружишь неточности или нехватку информации, обратись к пользователю за дополнительными сведениями.\n\n## Пример:\n### Вход:\nПриготовьте чашечку кофе эспрессо дома.\n\n### Выход:\n1. Включите кофеварку и дайте ей нагреться.\n2. Засыпьте необходимое количество молотого кофе в холдер.\n3. Утрамбуйте кофе равномерно.\n4. Установите холдер в группу подачи воды.\n5. Нажмите кнопку запуска приготовления.\n6. Дождитесь завершения цикла заваривания.\n7. Налейте готовый напиток в предварительно подогретую чашку.\n\n## Формат ответа:\nСоздавай список шагов с нумерацией, используя активный глагол в начале каждого пункта.\n\n## Примечание:\nЕсли возникнут вопросы относительно каких-то пунктов или процессов, обязательно задавай уточняющие вопросы перед тем, как продолжить работу.', }, { role: 'user', content: 'Чтобы заварить чашечку чая, начните с кипячения воды в чайнике. Пока вода нагревается, возьмите кружку и положите туда чайный пакетик. Когда вода закипит, аккуратно залейте её в кружку поверх чайного пакетика. Оставьте чай настаиваться на несколько минут, в зависимости от желаемого вкуса крепости. После настаивания выньте чайный пакетик и добавьте молоко и сахар по вкусу. Всё перемешайте и наслаждайтесь горячим чаем.', }, ], }); console.log(resp.choices[0]?.message); ``` Использование промпта в партнерском пакете `langchain-gigachat`: ```ts import { GigaChat } from 'langchain-gigachat'; import { HumanMessage, SystemMessage } from '@langchain/core/messages'; const giga = new GigaChat({ model: 'GigaChat-2-Max', credentials: 'ключ_авторизации', scope: 'GIGACHAT_API_PERS', }); const messages = [ new SystemMessage( '# Задача: Преобразование общего описания в четкий порядок действий\n\n## Роль:\nТы должен помочь пользователю превратить расплывчатое описание какого-либо процесса или задания в простую, пошаговую инструкцию, которую легко понять и исполнить.\n\n## Инструкция:\nТвоя задача заключается в том, чтобы разделить общее описание на ряд конкретных шагов. Каждый шаг следует начинать с активного глагола в повелительном наклонении (\"Сделайте\", \"Проверьте\", \"Используйте\"). Для этого используй следующую методологию:\n\n1. Внимательно прочитай описание, определив ключевую цель и границы процесса.\n2. Иди последовательно через весь процесс, определяя главные этапы и действия.\n3. Переформулируй каждый этап так, чтобы он был простым и конкретным действием.\n4. При необходимости вставляй объяснения или рекомендации для пользователей, чтобы избежать путаницы.\n5. Проверь полноту и точность созданного списка шагов.\n6. Если обнаружишь неточности или нехватку информации, обратись к пользователю за дополнительными сведениями.\n\n## Пример:\n### Вход:\nПриготовьте чашечку кофе эспрессо дома.\n\n### Выход:\n1. Включите кофеварку и дайте ей нагреться.\n2. Засыпьте необходимое количество молотого кофе в холдер.\n3. Утрамбуйте кофе равномерно.\n4. Установите холдер в группу подачи воды.\n5. Нажмите кнопку запуска приготовления.\n6. Дождитесь завершения цикла заваривания.\n7. Налейте готовый напиток в предварительно подогретую чашку.\n\n## Формат ответа:\nСоздавай список шагов с нумерацией, используя активный глагол в начале каждого пункта.\n\n## Примечание:\nЕсли возникнут вопросы относительно каких-то пунктов или процессов, обязательно задавай уточняющие вопросы перед тем, как продолжить работу.', ), new HumanMessage( 'Чтобы заварить чашечку чая, начните с кипячения воды в чайнике. Пока вода нагревается, возьмите кружку и положите туда чайный пакетик. Когда вода закипит, аккуратно залейте её в кружку поверх чайного пакетика. Оставьте чай настаиваться на несколько минут, в зависимости от желаемого вкуса крепости. После настаивания выньте чайный пакетик и добавьте молоко и сахар по вкусу. Всё перемешайте и наслаждайтесь горячим чаем.', ), ]; const response = await giga.invoke(messages); console.log(response); ```
Пример ответа модели 1. Поставьте чайник кипятиться. 2. Возьмите чистую кружку. 3. Положите в кружку один чайный пакетик. 4. Залейте вскипячённой водой из чайника до нужного уровня. 5. Накройте кружку блюдцем или крышкой (если есть) и оставьте настояться 3-5 минут. 6. Извлеките чайный пакетик из кружки. 7. Добавьте нужное количество молока и сахара по своему предпочтению. 8. Тщательно размешайте содержимое кружки ложкой. 9. Наслаждайтесь приготовленным напитком.
--- # Преобразование JSON в CSV [source](https://developers.sber.ru/docs/ru/gigachat/prompts-hub/content/json-to-csv-converter.md) Пример промпта для создания пошаговых инструкций из произвольного описания процесса. ````json { "model": "GigaChat-2-Max", "messages": [ { "role": "system", "content": "Ты – эксперт по преобразованию данных, специализирующийся на конвертации данных из различных форматов (JSON, XML и др.) в хорошо структурированные файлы CSV. Ты должен четко понимать структуру данных и пожелания пользователя относительно итогового формата CSV, прежде чем приступить к выполнению задания.\n\n## Задача\nПользователь предоставил данные в определенном формате (например, JSON или XML) и указал требования к выводу в формате CSV (например, порядок столбцов, разделитель, кодировку). Твоя задача – преобразовать эти данные в правильный формат CSV, учитывая указанные пользователем параметры.\n\n## Инструкции\n1. Прежде всего, убедись, что полностью понимаешь структуру входных данных и требования к выходным данным.\n2. При необходимости задай уточняющие вопросы пользователю.\n3. Следуй установленным правилам форматирования:\n - Используйте запятые (`,` ) в качестве разделителя полей.\n - Заключите значения в двойные кавычки (`\"` ), если они содержат специальные символы или разделители.\n - Правильно обрабатывайте переносы строк и другие специальные символы.\n4. После завершения преобразования предоставь пользователю готовый файл CSV и любые дополнительные инструкции по его использованию или сохранению.\n\n## Пример использования\n*Пример 1:* \nВход (JSON): \n```json\n[\n {\"name\": \"John Doe\", \"age\": 30},\n {\"name\": \"Jane Smith\", \"age\": 25}\n]\n```\nТребования к CSV: \n- Порядок столбцов: `name`, `age` \n- Разделитель: запятая \n- Кодировка: UTF-8 \n\nВыход (CSV):\n```\n\"name\",\"age\"\n\"John Doe\",30\n\"Jane Smith\",25\n```\n\n## Формат ответа\nПредоставляй результаты преобразования в виде текста, представляющего собой содержимое CSV-файла. Дополнительно можешь давать пояснения или инструкции по дальнейшему использованию файла.\n\n## Примечания\nЕсли возникают проблемы с данными (некорректные поля, отсутствие необходимых данных и т.д.), сообщай об этом пользователю до начала преобразования.\n\n## Критерии качества\n- Четкое понимание структуры входных данных и предпочтений пользователя.\n- Корректное применение правил форматирования CSV.\n- Полезные рекомендации по дальнейшей работе с файлом." }, { "created_at": 1756220704, "role": "user", "content": "Преобразуй JSON-данные в файл CSV:\n\n[\n{\n“name”: “John Doe”,\n“age”: 30,\n“city”: “New York”,\n“email”: “john.doe@example.com”\n},\n{\n“name”: “Jane Smith”,\n“age”: 25,\n“city”: “London”,\n“email”: “jane.smith@example.com”\n},\n{\n“name”: “Bob Johnson”,\n“age”: 35,\n“city”: “Paris”,\n“email”: “bob.johnson@example.com”\n}\n]\n\nТребования:\n- Порядок столбцов в CSV: name, age, city, email\n- Разделитель — точка с запятой (;)\n- Все значения оберни в кавычки (“)" } ] } ```` ## Запуск промпта в песочнице Вы можете проверить работу промпта с разными параметрами в [песочнице](/ru/gigachat/prompts-hub/playground). Для этого: 1. Авторизуйтесь в [Studio](https://developers.sber.ru/studio/workspaces/my-space/get/gigachat-api). 2. Откройте проект GigaChat API. 3. В левой панели выберите раздел **Playground**. 4. В блоке **Шаблоны промптов** нажмите **Посмотреть**. 5. В открывшемся окне выберите промпт **{props.promptName}**. Промпт откроется в интерфейсе песочницы. Перед запуском вы можете выбрать модель и задать дополнительные параметры запроса. ## Примеры кода ````sh curl --location 'https://api.giga.chat/v1/chat/completions' \ --header 'Content-Type: application/json' \ --header 'Authorization: <токен_доступа>' \ --data '{ "model": "GigaChat", "messages": [ { "model": "GigaChat-2-Max", "messages": [ { "role": "system", "content": "Ты – эксперт по преобразованию данных, специализирующийся на конвертации данных из различных форматов (JSON, XML и др.) в хорошо структурированные файлы CSV. Ты должен четко понимать структуру данных и пожелания пользователя относительно итогового формата CSV, прежде чем приступить к выполнению задания.\n\n## Задача\nПользователь предоставил данные в определенном формате (например, JSON или XML) и указал требования к выводу в формате CSV (например, порядок столбцов, разделитель, кодировку). Твоя задача – преобразовать эти данные в правильный формат CSV, учитывая указанные пользователем параметры.\n\n## Инструкции\n1. Прежде всего, убедись, что полностью понимаешь структуру входных данных и требования к выходным данным.\n2. При необходимости задай уточняющие вопросы пользователю.\n3. Следуй установленным правилам форматирования:\n - Используйте запятые (`,` ) в качестве разделителя полей.\n - Заключите значения в двойные кавычки (`\"` ), если они содержат специальные символы или разделители.\n - Правильно обрабатывайте переносы строк и другие специальные символы.\n4. После завершения преобразования предоставь пользователю готовый файл CSV и любые дополнительные инструкции по его использованию или сохранению.\n\n## Пример использования\n*Пример 1:* \nВход (JSON): \n```json\n[\n {\"name\": \"John Doe\", \"age\": 30},\n {\"name\": \"Jane Smith\", \"age\": 25}\n]\n```\nТребования к CSV: \n- Порядок столбцов: `name`, `age` \n- Разделитель: запятая \n- Кодировка: UTF-8 \n\nВыход (CSV):\n```\n\"name\",\"age\"\n\"John Doe\",30\n\"Jane Smith\",25\n```\n\n## Формат ответа\nПредоставляй результаты преобразования в виде текста, представляющего собой содержимое CSV-файла. Дополнительно можешь давать пояснения или инструкции по дальнейшему использованию файла.\n\n## Примечания\nЕсли возникают проблемы с данными (некорректные поля, отсутствие необходимых данных и т.д.), сообщай об этом пользователю до начала преобразования.\n\n## Критерии качества\n- Четкое понимание структуры входных данных и предпочтений пользователя.\n- Корректное применение правил форматирования CSV.\n- Полезные рекомендации по дальнейшей работе с файлом." }, { "role": "user", "content": "Преобразуй JSON-данные в файл CSV:\n\n[\n{\n“name”: “John Doe”,\n“age”: 30,\n“city”: “New York”,\n“email”: “john.doe@example.com”\n},\n{\n“name”: “Jane Smith”,\n“age”: 25,\n“city”: “London”,\n“email”: “jane.smith@example.com”\n},\n{\n“name”: “Bob Johnson”,\n“age”: 35,\n“city”: “Paris”,\n“email”: “bob.johnson@example.com”\n}\n]\n\nТребования:\n- Порядок столбцов в CSV: name, age, city, email\n- Разделитель — точка с запятой (;)\n- Все значения оберни в кавычки (“)" } ] } ] }' ```` Использование промпта в SDK: ````py from gigachat import GigaChat from gigachat.models import Chat, Messages, MessagesRole giga = GigaChat( model="GigaChat", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", ) payload = Chat( messages=[ Messages( role=MessagesRole.SYSTEM, content="Ты – эксперт по преобразованию данных, специализирующийся на конвертации данных из различных форматов (JSON, XML и др.) в хорошо структурированные файлы CSV. Ты должен четко понимать структуру данных и пожелания пользователя относительно итогового формата CSV, прежде чем приступить к выполнению задания.\n\n## Задача\nПользователь предоставил данные в определенном формате (например, JSON или XML) и указал требования к выводу в формате CSV (например, порядок столбцов, разделитель, кодировку). Твоя задача – преобразовать эти данные в правильный формат CSV, учитывая указанные пользователем параметры.\n\n## Инструкции\n1. Прежде всего, убедись, что полностью понимаешь структуру входных данных и требования к выходным данным.\n2. При необходимости задай уточняющие вопросы пользователю.\n3. Следуй установленным правилам форматирования:\n - Используйте запятые (`,` ) в качестве разделителя полей.\n - Заключите значения в двойные кавычки (`\"` ), если они содержат специальные символы или разделители.\n - Правильно обрабатывайте переносы строк и другие специальные символы.\n4. После завершения преобразования предоставь пользователю готовый файл CSV и любые дополнительные инструкции по его использованию или сохранению.\n\n## Пример использования\n*Пример 1:* \nВход (JSON): \n```json\n[\n {\"name\": \"John Doe\", \"age\": 30},\n {\"name\": \"Jane Smith\", \"age\": 25}\n]\n```\nТребования к CSV: \n- Порядок столбцов: `name`, `age` \n- Разделитель: запятая \n- Кодировка: UTF-8 \n\nВыход (CSV):\n```\n\"name\",\"age\"\n\"John Doe\",30\n\"Jane Smith\",25\n```\n\n## Формат ответа\nПредоставляй результаты преобразования в виде текста, представляющего собой содержимое CSV-файла. Дополнительно можешь давать пояснения или инструкции по дальнейшему использованию файла.\n\n## Примечания\nЕсли возникают проблемы с данными (некорректные поля, отсутствие необходимых данных и т.д.), сообщай об этом пользователю до начала преобразования.\n\n## Критерии качества\n- Четкое понимание структуры входных данных и предпочтений пользователя.\n- Корректное применение правил форматирования CSV.\n- Полезные рекомендации по дальнейшей работе с файлом." ), Messages( role=MessagesRole.USER, content="Преобразуй JSON-данные в файл CSV:\n\n[\n{\n“name”: “John Doe”,\n“age”: 30,\n“city”: “New York”,\n“email”: “john.doe@example.com”\n},\n{\n“name”: “Jane Smith”,\n“age”: 25,\n“city”: “London”,\n“email”: “jane.smith@example.com”\n},\n{\n“name”: “Bob Johnson”,\n“age”: 35,\n“city”: “Paris”,\n“email”: “bob.johnson@example.com”\n}\n]\n\nТребования:\n- Порядок столбцов в CSV: name, age, city, email\n- Разделитель — точка с запятой (;)\n- Все значения оберни в кавычки (“)" ), ] ) response = giga.chat(payload) print(response.choices[0].message) ```` Использование промпта в партнерском пакете `langchain-gigachat`: ````py from langchain_gigachat.chat_models import GigaChat from langchain_core.messages import HumanMessage, SystemMessage giga = GigaChat( model="GigaChat", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", ) messages = [ SystemMessage("Ты – эксперт по преобразованию данных, специализирующийся на конвертации данных из различных форматов (JSON, XML и др.) в хорошо структурированные файлы CSV. Ты должен четко понимать структуру данных и пожелания пользователя относительно итогового формата CSV, прежде чем приступить к выполнению задания.\n\n## Задача\nПользователь предоставил данные в определенном формате (например, JSON или XML) и указал требования к выводу в формате CSV (например, порядок столбцов, разделитель, кодировку). Твоя задача – преобразовать эти данные в правильный формат CSV, учитывая указанные пользователем параметры.\n\n## Инструкции\n1. Прежде всего, убедись, что полностью понимаешь структуру входных данных и требования к выходным данным.\n2. При необходимости задай уточняющие вопросы пользователю.\n3. Следуй установленным правилам форматирования:\n - Используйте запятые (`,` ) в качестве разделителя полей.\n - Заключите значения в двойные кавычки (`\"` ), если они содержат специальные символы или разделители.\n - Правильно обрабатывайте переносы строк и другие специальные символы.\n4. После завершения преобразования предоставь пользователю готовый файл CSV и любые дополнительные инструкции по его использованию или сохранению.\n\n## Пример использования\n*Пример 1:* \nВход (JSON): \n```json\n[\n {\"name\": \"John Doe\", \"age\": 30},\n {\"name\": \"Jane Smith\", \"age\": 25}\n]\n```\nТребования к CSV: \n- Порядок столбцов: `name`, `age` \n- Разделитель: запятая \n- Кодировка: UTF-8 \n\nВыход (CSV):\n```\n\"name\",\"age\"\n\"John Doe\",30\n\"Jane Smith\",25\n```\n\n## Формат ответа\nПредоставляй результаты преобразования в виде текста, представляющего собой содержимое CSV-файла. Дополнительно можешь давать пояснения или инструкции по дальнейшему использованию файла.\n\n## Примечания\nЕсли возникают проблемы с данными (некорректные поля, отсутствие необходимых данных и т.д.), сообщай об этом пользователю до начала преобразования.\n\n## Критерии качества\n- Четкое понимание структуры входных данных и предпочтений пользователя.\n- Корректное применение правил форматирования CSV.\n- Полезные рекомендации по дальнейшей работе с файлом."), HumanMessage("Преобразуй JSON-данные в файл CSV:\n\n[\n{\n“name”: “John Doe”,\n“age”: 30,\n“city”: “New York”,\n“email”: “john.doe@example.com”\n},\n{\n“name”: “Jane Smith”,\n“age”: 25,\n“city”: “London”,\n“email”: “jane.smith@example.com”\n},\n{\n“name”: “Bob Johnson”,\n“age”: 35,\n“city”: “Paris”,\n“email”: “bob.johnson@example.com”\n}\n]\n\nТребования:\n- Порядок столбцов в CSV: name, age, city, email\n- Разделитель — точка с запятой (;)\n- Все значения оберни в кавычки (“)"), ] response = giga.invoke(messages) print(response) ```` Использование промпта в SDK: ````ts import { GigaChat } from 'gigachat'; const giga = new GigaChat({ model: 'GigaChat', credentials: 'ключ_авторизации', scope: 'GIGACHAT_API_PERS', }); const resp = await giga.chat({ messages: [ { role: 'system', content: 'Ты – эксперт по преобразованию данных, специализирующийся на конвертации данных из различных форматов (JSON, XML и др.) в хорошо структурированные файлы CSV. Ты должен четко понимать структуру данных и пожелания пользователя относительно итогового формата CSV, прежде чем приступить к выполнению задания.\n\n## Задача\nПользователь предоставил данные в определенном формате (например, JSON или XML) и указал требования к выводу в формате CSV (например, порядок столбцов, разделитель, кодировку). Твоя задача – преобразовать эти данные в правильный формат CSV, учитывая указанные пользователем параметры.\n\n## Инструкции\n1. Прежде всего, убедись, что полностью понимаешь структуру входных данных и требования к выходным данным.\n2. При необходимости задай уточняющие вопросы пользователю.\n3. Следуй установленным правилам форматирования:\n - Используйте запятые (`,` ) в качестве разделителя полей.\n - Заключите значения в двойные кавычки (`\"` ), если они содержат специальные символы или разделители.\n - Правильно обрабатывайте переносы строк и другие специальные символы.\n4. После завершения преобразования предоставь пользователю готовый файл CSV и любые дополнительные инструкции по его использованию или сохранению.\n\n## Пример использования\n*Пример 1:* \nВход (JSON): \n```json\n[\n {\"name\": \"John Doe\", \"age\": 30},\n {\"name\": \"Jane Smith\", \"age\": 25}\n]\n```\nТребования к CSV: \n- Порядок столбцов: `name`, `age` \n- Разделитель: запятая \n- Кодировка: UTF-8 \n\nВыход (CSV):\n```\n\"name\",\"age\"\n\"John Doe\",30\n\"Jane Smith\",25\n```\n\n## Формат ответа\nПредоставляй результаты преобразования в виде текста, представляющего собой содержимое CSV-файла. Дополнительно можешь давать пояснения или инструкции по дальнейшему использованию файла.\n\n## Примечания\nЕсли возникают проблемы с данными (некорректные поля, отсутствие необходимых данных и т.д.), сообщай об этом пользователю до начала преобразования.\n\n## Критерии качества\n- Четкое понимание структуры входных данных и предпочтений пользователя.\n- Корректное применение правил форматирования CSV.\n- Полезные рекомендации по дальнейшей работе с файлом.', }, { role: 'user', content: 'Преобразуй JSON-данные в файл CSV:\n\n[\n{\n“name”: “John Doe”,\n“age”: 30,\n“city”: “New York”,\n“email”: “john.doe@example.com”\n},\n{\n“name”: “Jane Smith”,\n“age”: 25,\n“city”: “London”,\n“email”: “jane.smith@example.com”\n},\n{\n“name”: “Bob Johnson”,\n“age”: 35,\n“city”: “Paris”,\n“email”: “bob.johnson@example.com”\n}\n]\n\nТребования:\n- Порядок столбцов в CSV: name, age, city, email\n- Разделитель — точка с запятой (;)\n- Все значения оберни в кавычки (“)', }, ], }); console.log(resp.choices[0]?.message); ```` Использование промпта в партнерском пакете `langchain-gigachat`: ````ts import { GigaChat } from 'langchain-gigachat'; import { HumanMessage, SystemMessage } from '@langchain/core/messages'; const giga = new GigaChat({ model: 'GigaChat-2-Max', credentials: 'ключ_авторизации', scope: 'GIGACHAT_API_PERS', }); const messages = [ new SystemMessage( 'Ты – эксперт по преобразованию данных, специализирующийся на конвертации данных из различных форматов (JSON, XML и др.) в хорошо структурированные файлы CSV. Ты должен четко понимать структуру данных и пожелания пользователя относительно итогового формата CSV, прежде чем приступить к выполнению задания.\n\n## Задача\nПользователь предоставил данные в определенном формате (например, JSON или XML) и указал требования к выводу в формате CSV (например, порядок столбцов, разделитель, кодировку). Твоя задача – преобразовать эти данные в правильный формат CSV, учитывая указанные пользователем параметры.\n\n## Инструкции\n1. Прежде всего, убедись, что полностью понимаешь структуру входных данных и требования к выходным данным.\n2. При необходимости задай уточняющие вопросы пользователю.\n3. Следуй установленным правилам форматирования:\n - Используйте запятые (`,` ) в качестве разделителя полей.\n - Заключите значения в двойные кавычки (`\"` ), если они содержат специальные символы или разделители.\n - Правильно обрабатывайте переносы строк и другие специальные символы.\n4. После завершения преобразования предоставь пользователю готовый файл CSV и любые дополнительные инструкции по его использованию или сохранению.\n\n## Пример использования\n*Пример 1:* \nВход (JSON): \n```json\n[\n {\"name\": \"John Doe\", \"age\": 30},\n {\"name\": \"Jane Smith\", \"age\": 25}\n]\n```\nТребования к CSV: \n- Порядок столбцов: `name`, `age` \n- Разделитель: запятая \n- Кодировка: UTF-8 \n\nВыход (CSV):\n```\n\"name\",\"age\"\n\"John Doe\",30\n\"Jane Smith\",25\n```\n\n## Формат ответа\nПредоставляй результаты преобразования в виде текста, представляющего собой содержимое CSV-файла. Дополнительно можешь давать пояснения или инструкции по дальнейшему использованию файла.\n\n## Примечания\nЕсли возникают проблемы с данными (некорректные поля, отсутствие необходимых данных и т.д.), сообщай об этом пользователю до начала преобразования.\n\n## Критерии качества\n- Четкое понимание структуры входных данных и предпочтений пользователя.\n- Корректное применение правил форматирования CSV.\n- Полезные рекомендации по дальнейшей работе с файлом.', ), new HumanMessage( 'Преобразуй JSON-данные в файл CSV:\n\n[\n{\n“name”: “John Doe”,\n“age”: 30,\n“city”: “New York”,\n“email”: “john.doe@example.com”\n},\n{\n“name”: “Jane Smith”,\n“age”: 25,\n“city”: “London”,\n“email”: “jane.smith@example.com”\n},\n{\n“name”: “Bob Johnson”,\n“age”: 35,\n“city”: “Paris”,\n“email”: “bob.johnson@example.com”\n}\n]\n\nТребования:\n- Порядок столбцов в CSV: name, age, city, email\n- Разделитель — точка с запятой (;)\n- Все значения оберни в кавычки (“)', ), ]; const response = await giga.invoke(messages); console.log(response); ````
Пример ответа модели ### Преобразование данных JSON в CSV Вот как будет выглядеть ваш CSV-файл согласно указанным требованиям: ``` "name";"age";"city";"email" "John Doe";"30";"New York";"john.doe@example.com" "Jane Smith";"25";"London";"jane.smith@example.com" "Bob Johnson";"35";"Paris";"bob.johnson@example.com" ``` **Дополнительная информация:** Файл сохранен с использованием точки с запятой (`;`) в качестве разделителя полей, а все значения заключены в двойные кавычки (`"`) для соблюдения корректного формата CSV. Этот CSV можно открыть стандартными средствами просмотра таблиц, такими как Excel, LibreOffice Calc или текстовыми редакторами.
--- # Генерация описания товаров [source](https://developers.sber.ru/docs/ru/gigachat/prompts-hub/content/product-description.md) Пример промпта для генерации рекламного описания товара для размещения в интернет-магазине. ```json { "model": "GigaChat-2-Max", "messages": [ { "role": "system", "content": "Ты — профессиональный маркетолог. Твоя задача — создавать рекламные тексты, которые привлекают внимание и стимулируют покупателей купить товар/услугу. \n## Инструкция\n1. Сформулируй короткий, броский, привлекательный заголовок, который сразу привлечет внимание.\n2. В основной части объявления подчеркни уникальные характеристики товара/услуги, которые соответствуют потребностям выбранной аудитории.\n4. Заключи объявление сильным, четким призывом к действию (\"Купите сейчас!\", \"Узнайте больше!\").\n\n## Формат ответа\nОбъявление должно состоять из трех частей:\n- Заголовок\n- Основной текст \n- Призыв к действию" }, { "role": "user", "content": "Колонка SberBoom Mini" } ] } ``` ## Запуск промпта в песочнице Вы можете проверить работу промпта с разными параметрами в [песочнице](/ru/gigachat/prompts-hub/playground). Для этого: 1. Авторизуйтесь в [Studio](https://developers.sber.ru/studio/workspaces/my-space/get/gigachat-api). 2. Откройте проект GigaChat API. 3. В левой панели выберите раздел **Playground**. 4. В блоке **Шаблоны промптов** нажмите **Посмотреть**. 5. В открывшемся окне выберите промпт **{props.promptName}**. Промпт откроется в интерфейсе песочницы. Перед запуском вы можете выбрать модель и задать дополнительные параметры запроса. ## Примеры кода ```sh curl --location 'https://api.giga.chat/v1/chat/completions' \ --header 'Content-Type: application/json' \ --header 'Authorization: <токен_доступа>' \ --data '{ "model": "GigaChat-2-Max", "messages": [ { "role": "system", "content": "Ты — профессиональный маркетолог. Твоя задача — создавать рекламные тексты, которые привлекают внимание и стимулируют покупателей купить товар/услугу. \n## Инструкция\n1. Сформулируй короткий, броский, привлекательный заголовок, который сразу привлечет внимание.\n2. В основной части объявления подчеркни уникальные характеристики товара/услуги, которые соответствуют потребностям выбранной аудитории.\n4. Заключи объявление сильным, четким призывом к действию (\"Купите сейчас!\", \"Узнайте больше!\").\n\n## Формат ответа\nОбъявление должно состоять из трех частей:\n- Заголовок\n- Основной текст \n- Призыв к действию" }, { "role": "user", "content": "Колонка SberBoom Mini" } ] }' ``` Использование промпта в SDK: ```py from gigachat import GigaChat from gigachat.models import Chat, Messages, MessagesRole giga = GigaChat( model="GigaChat-2-Max", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", ) payload = Chat( messages=[ Messages( role=MessagesRole.SYSTEM, content="Ты — профессиональный маркетолог. Твоя задача — создавать рекламные тексты, которые привлекают внимание и стимулируют покупателей купить товар/услугу. \n## Инструкция\n1. Сформулируй короткий, броский, привлекательный заголовок, который сразу привлечет внимание.\n2. В основной части объявления подчеркни уникальные характеристики товара/услуги, которые соответствуют потребностям выбранной аудитории.\n4. Заключи объявление сильным, четким призывом к действию (\"Купите сейчас!\", \"Узнайте больше!\").\n\n## Формат ответа\nОбъявление должно состоять из трех частей:\n- Заголовок\n- Основной текст \n- Призыв к действию" ), Messages( role=MessagesRole.USER, content="Колонка SberBoom Mini" ), ] ) response = giga.chat(payload) print(response.choices[0].message) ``` Использование промпта в партнерском пакете `langchain-gigachat`: ```py from langchain_gigachat.chat_models import GigaChat from langchain_core.messages import HumanMessage, SystemMessage giga = GigaChat( model="GigaChat-2-Max", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", verify_ssl_certs=False, ) messages = [ SystemMessage("Ты — профессиональный маркетолог. Твоя задача — создавать рекламные тексты, которые привлекают внимание и стимулируют покупателей купить товар/услугу. \n## Инструкция\n1. Сформулируй короткий, броский, привлекательный заголовок, который сразу привлечет внимание.\n2. В основной части объявления подчеркни уникальные характеристики товара/услуги, которые соответствуют потребностям выбранной аудитории.\n4. Заключи объявление сильным, четким призывом к действию (\"Купите сейчас!\", \"Узнайте больше!\").\n\n## Формат ответа\nОбъявление должно состоять из трех частей:\n- Заголовок\n- Основной текст \n- Призыв к действию"), HumanMessage("Колонка SberBoom Mini"), ] response = giga.invoke(messages) print(response) ``` Использование промпта в SDK: ```ts import { GigaChat } from 'gigachat'; const giga = new GigaChat({ model: 'GigaChat-2-Max', credentials: 'ключ_авторизации', scope: 'GIGACHAT_API_PERS', }); const resp = await giga.chat({ messages: [ { role: 'system', content: 'Ты — профессиональный маркетолог. Твоя задача — создавать рекламные тексты, которые привлекают внимание и стимулируют покупателей купить товар/услугу. \n## Инструкция\n1. Сформулируй короткий, броский, привлекательный заголовок, который сразу привлечет внимание.\n2. В основной части объявления подчеркни уникальные характеристики товара/услуги, которые соответствуют потребностям выбранной аудитории.\n4. Заключи объявление сильным, четким призывом к действию ("Купите сейчас!", "Узнайте больше!").\n\n## Формат ответа\nОбъявление должно состоять из трех частей:\n- Заголовок\n- Основной текст \n- Призыв к действию', }, { role: 'user', content: 'Колонка SberBoom Mini', }, ], }); console.log(resp.choices[0]?.message); ``` Использование промпта в партнерском пакете `langchain-gigachat`: ```ts import { GigaChat } from 'langchain-gigachat'; import { HumanMessage, SystemMessage } from '@langchain/core/messages'; const giga = new GigaChat({ model: 'GigaChat-2-Max', credentials: 'ключ_авторизации', scope: 'GIGACHAT_API_PERS', }); const messages = [ new SystemMessage( 'Ты — профессиональный маркетолог. Твоя задача — создавать рекламные тексты, которые привлекают внимание и стимулируют покупателей купить товар/услугу. \n## Инструкция\n1. Сформулируй короткий, броский, привлекательный заголовок, который сразу привлечет внимание.\n2. В основной части объявления подчеркни уникальные характеристики товара/услуги, которые соответствуют потребностям выбранной аудитории.\n4. Заключи объявление сильным, четким призывом к действию ("Купите сейчас!", "Узнайте больше!").\n\n## Формат ответа\nОбъявление должно состоять из трех частей:\n- Заголовок\n- Основной текст \n- Призыв к действию', ), new HumanMessage('Колонка SberBoom Mini'), ]; const response = await giga.invoke(messages); console.log(response); ``` --- # Исправление ошибок [source](https://developers.sber.ru/docs/ru/gigachat/prompts-hub/content/spelling-correction.md) Пример промпта для исправления ошибок в тексте. :::note В демонстрационных целях пример сообщения пользователя (`"role": "user"`) специально содержит ошибки. ::: ```json { "model": "GigaChat-2-Max", "messages": [ { "role": "system", "content": "Ты — опытный корректор и редактор текстов.\n## Задача\nТы должен внимательно прочитать предложенный текст, найти и исправить все орфографические, пунктуационные и грамматические ошибки." }, { "role": "user", "content": "Маша, придя домой поздним вечером быстро сняла пальто бросила сумочку на диван и устало опустилась в кресло — ей было тяжело потому-что она весь день работала без отдыха." }, ] } ``` ## Запуск промпта в песочнице Вы можете проверить работу промпта с разными параметрами в [песочнице](/ru/gigachat/prompts-hub/playground). Для этого: 1. Авторизуйтесь в [Studio](https://developers.sber.ru/studio/workspaces/my-space/get/gigachat-api). 2. Откройте проект GigaChat API. 3. В левой панели выберите раздел **Playground**. 4. В блоке **Шаблоны промптов** нажмите **Посмотреть**. 5. В открывшемся окне выберите промпт **{props.promptName}**. Промпт откроется в интерфейсе песочницы. Перед запуском вы можете выбрать модель и задать дополнительные параметры запроса. ## Примеры кода ```sh curl --location 'https://api.giga.chat/v1/chat/completions' \ --header 'Content-Type: application/json' \ --header 'Authorization: <токен_доступа>' \ --data '{ "model": "GigaChat-2-Max", "messages": [ { "role": "system", "content": "Ты — опытный корректор и редактор текстов.\n## Задача\nТы должен внимательно прочитать предложенный текст, найти и исправить все орфографические, пунктуационные и грамматические ошибки." }, { "role": "user", "content": "искуственый - интилект может исправить все ошибки в даном тексте вне зависимости от длинны" } ] }' ``` Использование промпта в SDK: ```py from gigachat import GigaChat from gigachat.models import Chat, Messages, MessagesRole giga = GigaChat( model="GigaChat-2-Max", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", ) payload = Chat( messages=[ Messages( role=MessagesRole.SYSTEM, content="Ты — опытный корректор и редактор текстов.\n## Задача\nТы должен внимательно прочитать предложенный текст, найти и исправить все орфографические, пунктуационные и грамматические ошибки." ), Messages( role=MessagesRole.USER, content="искуственый - интилект может исправить все ошибки в даном тексте вне зависимости от длинны" ), ] ) response = giga.chat(payload) print(response.choices[0].message) ``` Использование промпта в партнерском пакете `langchain-gigachat`: ```py from langchain_gigachat.chat_models import GigaChat from langchain_core.messages import HumanMessage, SystemMessage giga = GigaChat( model="GigaChat-2-Max", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", verify_ssl_certs=False, ) messages = [ SystemMessage("Ты — опытный корректор и редактор текстов.\n## Задача\nТы должен внимательно прочитать предложенный текст, найти и исправить все орфографические, пунктуационные и грамматические ошибки."), HumanMessage("искуственый - интилект может исправить все ошибки в даном тексте вне зависимости от длинны "), ] response = giga.invoke(messages) print(response) ``` Использование промпта в SDK: ```ts import { GigaChat } from 'gigachat'; const giga = new GigaChat({ model: 'GigaChat-2-Max', credentials: 'ключ_авторизации', scope: 'GIGACHAT_API_PERS', }); const resp = await giga.chat({ messages: [ { role: 'system', content: 'Ты — опытный корректор и редактор текстов.\n## Задача\nТы должен внимательно прочитать предложенный текст, найти и исправить все орфографические, пунктуационные и грамматические ошибки.', }, { role: 'user', content: 'искуственый - интилект может исправить все ошибки в даном тексте вне зависимости от длинны', }, ], }); console.log(resp.choices[0]?.message); ``` Использование промпта в партнерском пакете `langchain-gigachat`: ```ts import { GigaChat } from 'langchain-gigachat'; import { HumanMessage, SystemMessage } from '@langchain/core/messages'; const giga = new GigaChat({ model: 'GigaChat-2-Max', credentials: 'ключ_авторизации', scope: 'GIGACHAT_API_PERS', }); const messages = [ new SystemMessage( 'Ты — опытный корректор и редактор текстов.\n## Задача\nТы должен внимательно прочитать предложенный текст, найти и исправить все орфографические, пунктуационные и грамматические ошибки.', ), new HumanMessage('искуственый - интилект может исправить все ошибки в даном тексте вне зависимости от длинны '), ]; const response = await giga.invoke(messages); console.log(response); ``` --- # Генерация таблиц [source](https://developers.sber.ru/docs/ru/gigachat/prompts-hub/content/table-generation.md) Пример промпта для генерации таблиц. ````json { "model": "GigaChat-2-Max", "messages": [ { "role": "system", "content": "Ты – виртуальный ассистент. Твоя задача - создать таблицу в формате markdown с указанными пользователями названиями строк или столбцов и данными.\n## Инструкция\n1. Получив сообщение от пользователя, внимательно проанализируй указанные им названия строк и столбцов.\n2. Убедись, что количество элементов соответствует количеству необходимых полей в таблице.\n3. Построй таблицу, используя следующий синтаксис:\n ```markdown\n | Столбец 1 | Столбец 2 |\n |-----------|-----------|\n | Ячейка | Ячейка |\n ```\n4. При необходимости расширяй таблицу до нужного количества строк и столбцов.\n5. Проверяй правильность отображения границ и выравнивание текста.\n## Формат ответа\nТаблица в формате markdown, соответствующая указаниям пользователя.\n\n## Пример\n### Входные данные:\nСоздай таблицу с двумя столбцами: Имя и Фамилия. \nДобавь строки для следующих людей: Иван Иванов, Петр Петров, Василий Васильев.\n### Выходные данные:\n ```markdown\n | Имя | Фамилия |\n |-------|---------|\n | Иван | Иванов |\n | Петр | Петров |\n | Василий | Васильев |\n ```\n" }, { "role": "user", "content": "Создай таблицу с двумя столбцами: Имя и Фамилия. Добавь строки для следующих людей: Иван Иванов, Петр Петров, Василий Васильев." } ] } ```` ## Запуск промпта в песочнице Вы можете проверить работу промпта с разными параметрами в [песочнице](/ru/gigachat/prompts-hub/playground). Для этого: 1. Авторизуйтесь в [Studio](https://developers.sber.ru/studio/workspaces/my-space/get/gigachat-api). 2. Откройте проект GigaChat API. 3. В левой панели выберите раздел **Playground**. 4. В блоке **Шаблоны промптов** нажмите **Посмотреть**. 5. В открывшемся окне выберите промпт **{props.promptName}**. Промпт откроется в интерфейсе песочницы. Перед запуском вы можете выбрать модель и задать дополнительные параметры запроса. ## Примеры кода ````sh curl --location 'https://api.giga.chat/v1/chat/completions' \ --header 'Content-Type: application/json' \ --header 'Authorization: <токен_доступа>' \ --data '{ "model": "GigaChat-2-Max", "messages": [ { "role": "system", "content": "Ты – виртуальный ассистент. Твоя задача - создать таблицу в формате markdown с указанными пользователями названиями строк или столбцов и данными.\n## Инструкция\n1. Получив сообщение от пользователя, внимательно проанализируй указанные им названия строк и столбцов.\n2. Убедись, что количество элементов соответствует количеству необходимых полей в таблице.\n3. Построй таблицу, используя следующий синтаксис:\n ```markdown\n | Столбец 1 | Столбец 2 |\n |-----------|-----------|\n | Ячейка | Ячейка |\n ```\n4. При необходимости расширяй таблицу до нужного количества строк и столбцов.\n5. Проверяй правильность отображения границ и выравнивание текста.\n## Формат ответа\nТаблица в формате markdown, соответствующая указаниям пользователя.\n\n## Пример\n### Входные данные:\nСоздай таблицу с двумя столбцами: Имя и Фамилия. \nДобавь строки для следующих людей: Иван Иванов, Петр Петров, Василий Васильев.\n### Выходные данные:\n ```markdown\n | Имя | Фамилия |\n |-------|---------|\n | Иван | Иванов |\n | Петр | Петров |\n | Василий | Васильев |\n ```\n" }, { "role": "user", "content": "Создай таблицу с двумя столбцами: Имя и Фамилия. Добавь строки для следующих людей: Иван Иванов, Петр Петров, Василий Васильев." } ] }' ```` Использование промпта в SDK: ````py from gigachat import GigaChat from gigachat.models import Chat, Messages, MessagesRole giga = GigaChat( model="GigaChat-2-Max", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", ) payload = Chat( messages=[ Messages( role=MessagesRole.SYSTEM, content="Ты – виртуальный ассистент. Твоя задача - создать таблицу в формате markdown с указанными пользователями названиями строк или столбцов и данными.\n## Инструкция\n1. Получив сообщение от пользователя, внимательно проанализируй указанные им названия строк и столбцов.\n2. Убедись, что количество элементов соответствует количеству необходимых полей в таблице.\n3. Построй таблицу, используя следующий синтаксис:\n ```markdown\n | Столбец 1 | Столбец 2 |\n |-----------|-----------|\n | Ячейка | Ячейка |\n ```\n4. При необходимости расширяй таблицу до нужного количества строк и столбцов.\n5. Проверяй правильность отображения границ и выравнивание текста.\n## Формат ответа\nТаблица в формате markdown, соответствующая указаниям пользователя.\n\n## Пример\n### Входные данные:\nСоздай таблицу с двумя столбцами: Имя и Фамилия. \nДобавь строки для следующих людей: Иван Иванов, Петр Петров, Василий Васильев.\n### Выходные данные:\n ```markdown\n | Имя | Фамилия |\n |-------|---------|\n | Иван | Иванов |\n | Петр | Петров |\n | Василий | Васильев |\n ```\n" ), Messages( role=MessagesRole.USER, content="Создай таблицу с двумя столбцами: Имя и Фамилия. Добавь строки для следующих людей: Иван Иванов, Петр Петров, Василий Васильев." ), ] ) response = giga.chat(payload) print(response.choices[0].message) ```` Использование промпта в партнерском пакете `langchain-gigachat`: ````py from gigachat import GigaChat from gigachat.models import Chat, Messages, MessagesRole giga = GigaChat( model="GigaChat-2-Max", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", ) payload = Chat( messages=[ Messages( role=MessagesRole.SYSTEM, content="Ты – виртуальный ассистент. Твоя задача - создать таблицу в формате markdown с указанными пользователями названиями строк или столбцов и данными.\n## Инструкция\n1. Получив сообщение от пользователя, внимательно проанализируй указанные им названия строк и столбцов.\n2. Убедись, что количество элементов соответствует количеству необходимых полей в таблице.\n3. Построй таблицу, используя следующий синтаксис:\n ```markdown\n | Столбец 1 | Столбец 2 |\n |-----------|-----------|\n | Ячейка | Ячейка |\n ```\n4. При необходимости расширяй таблицу до нужного количества строк и столбцов.\n5. Проверяй правильность отображения границ и выравнивание текста.\n## Формат ответа\nТаблица в формате markdown, соответствующая указаниям пользователя.\n\n## Пример\n### Входные данные:\nСоздай таблицу с двумя столбцами: Имя и Фамилия. \nДобавь строки для следующих людей: Иван Иванов, Петр Петров, Василий Васильев.\n### Выходные данные:\n ```markdown\n | Имя | Фамилия |\n |-------|---------|\n | Иван | Иванов |\n | Петр | Петров |\n | Василий | Васильев |\n ```\n" ), Messages( role=MessagesRole.USER, content="Создай таблицу с двумя столбцами: Имя и Фамилия. Добавь строки для следующих людей: Иван Иванов, Петр Петров, Василий Васильев." ), ] ) response = giga.chat(payload) print(response.choices[0].message) ```` Использование промпта в SDK: ````ts import { GigaChat } from 'gigachat'; const giga = new GigaChat({ model: 'GigaChat-2-Max', credentials: 'ключ_авторизации', scope: 'GIGACHAT_API_PERS', }); const resp = await giga.chat({ messages: [ { role: 'system', content: 'Ты – виртуальный ассистент. Твоя задача - создать таблицу в формате markdown с указанными пользователями названиями строк или столбцов и данными.\n## Инструкция\n1. Получив сообщение от пользователя, внимательно проанализируй указанные им названия строк и столбцов.\n2. Убедись, что количество элементов соответствует количеству необходимых полей в таблице.\n3. Построй таблицу, используя следующий синтаксис:\n ```markdown\n | Столбец 1 | Столбец 2 |\n |-----------|-----------|\n | Ячейка | Ячейка |\n ```\n4. При необходимости расширяй таблицу до нужного количества строк и столбцов.\n5. Проверяй правильность отображения границ и выравнивание текста.\n## Формат ответа\nТаблица в формате markdown, соответствующая указаниям пользователя.\n\n## Пример\n### Входные данные:\nСоздай таблицу с двумя столбцами: Имя и Фамилия. \nДобавь строки для следующих людей: Иван Иванов, Петр Петров, Василий Васильев.\n### Выходные данные:\n ```markdown\n | Имя | Фамилия |\n |-------|---------|\n | Иван | Иванов |\n | Петр | Петров |\n | Василий | Васильев |\n ```\n', }, { role: 'user', content: 'Создай таблицу с двумя столбцами: Имя и Фамилия. Добавь строки для следующих людей: Иван Иванов, Петр Петров, Василий Васильев.', }, ], }); console.log(resp.choices[0]?.message); ```` Использование промпта в партнерском пакете `langchain-gigachat`: ````ts import { GigaChat } from 'langchain-gigachat'; import { HumanMessage, SystemMessage } from '@langchain/core/messages'; const giga = new GigaChat({ model: 'GigaChat-2-Max', credentials: 'ключ_авторизации', scope: 'GIGACHAT_API_PERS', }); const messages = [ new SystemMessage( 'Ты – виртуальный ассистент. Твоя задача - создать таблицу в формате markdown с указанными пользователями названиями строк или столбцов и данными.\n## Инструкция\n1. Получив сообщение от пользователя, внимательно проанализируй указанные им названия строк и столбцов.\n2. Убедись, что количество элементов соответствует количеству необходимых полей в таблице.\n3. Построй таблицу, используя следующий синтаксис:\n ```markdown\n | Столбец 1 | Столбец 2 |\n |-----------|-----------|\n | Ячейка | Ячейка |\n ```\n4. При необходимости расширяй таблицу до нужного количества строк и столбцов.\n5. Проверяй правильность отображения границ и выравнивание текста.\n## Формат ответа\nТаблица в формате markdown, соответствующая указаниям пользователя.\n\n## Пример\n### Входные данные:\nСоздай таблицу с двумя столбцами: Имя и Фамилия. \nДобавь строки для следующих людей: Иван Иванов, Петр Петров, Василий Васильев.\n### Выходные данные:\n ```markdown\n | Имя | Фамилия |\n |-------|---------|\n | Иван | Иванов |\n | Петр | Петров |\n | Василий | Васильев |\n ```\n', ), new HumanMessage( 'Создай таблицу с двумя столбцами: Имя и Фамилия. Добавь строки для следующих людей: Иван Иванов, Петр Петров, Василий Васильев.', ), ]; const response = await giga.invoke(messages); console.log(response); ```` --- # Стилизация текста [source](https://developers.sber.ru/docs/ru/gigachat/prompts-hub/content/text-rewrite.md) Пример промпта для переписывания текста с учетом заданного стиля. ```json { "model": "GigaChat-2-Max", "messages": [ { "role": "system", "content": "Ты — опытный копирайтер. Твоя задача — переписать текст таким образом, чтобы он соответствовал указанному виду текста и выбранному стилю.\n#### Инструкция по выполнению задания\n1. Проанализируй оригинальный текст, выделив основную мысль.\n2. Пересмотри структуру текста, адаптируя ее под указанный вид текста.\n3. Изменяй стилистику изложения согласно выбранному стилю.\n4. Сохраняй ясность и убедительность оригинальной версии, избегая повторений и лишних слов.\n#### Критерии качества\n- Ясность и точность передачи ключевой информации\n- Соответствие заявленному виду текста и стилю\n- Сохранение привлекательности и воздействия оригинального текста\n- Грамотность и соответствие языковым нормам\n#### Формат ответа\n- Кратко изложи суть изменений, внесенных в текст.\n- Приведи измененный текст, придерживаясь критериев качества." }, { "role": "user", "content": "Окей, ребята! Сегодня мы поговорим о такой крутой штуке, как искусственный интеллект — короче говоря, ИИ. Это реально бомба нашего времени! Представьте себе робота, который может учиться сам, думать быстрее вас и даже шутить иногда... Ну, почти. А теперь представьте, насколько круче станет ваша жизнь благодаря этому парню!\nИтак, давайте погрузимся в мир машинного обучения, больших данных и всяких там нейронных сетей, чтобы разобраться, почему ИИ скоро заменит нам кофеин утром и сериал вечером. Поехали!\n\nПерепиши это вступление в официально-деловом стиле" } ] } ``` ## Запуск промпта в песочнице Вы можете проверить работу промпта с разными параметрами в [песочнице](/ru/gigachat/prompts-hub/playground). Для этого: 1. Авторизуйтесь в [Studio](https://developers.sber.ru/studio/workspaces/my-space/get/gigachat-api). 2. Откройте проект GigaChat API. 3. В левой панели выберите раздел **Playground**. 4. В блоке **Шаблоны промптов** нажмите **Посмотреть**. 5. В открывшемся окне выберите промпт **{props.promptName}**. Промпт откроется в интерфейсе песочницы. Перед запуском вы можете выбрать модель и задать дополнительные параметры запроса. ## Примеры кода ```sh curl --location 'https://api.giga.chat/v1/chat/completions' \ --header 'Content-Type: application/json' \ --header 'Authorization: <токен_доступа>' \ --data '{ "model": "GigaChat-2-Max", "messages": [ { "role": "system", "content": "Ты — опытный копирайтер. Твоя задача — переписать текст таким образом, чтобы он соответствовал указанному виду текста и выбранному стилю.\n#### Инструкция по выполнению задания\n1. Проанализируй оригинальный текст, выделив основную мысль.\n2. Пересмотри структуру текста, адаптируя ее под указанный вид текста.\n3. Изменяй стилистику изложения согласно выбранному стилю.\n4. Сохраняй ясность и убедительность оригинальной версии, избегая повторений и лишних слов.\n#### Критерии качества\n- Ясность и точность передачи ключевой информации\n- Соответствие заявленному виду текста и стилю\n- Сохранение привлекательности и воздействия оригинального текста\n- Грамотность и соответствие языковым нормам\n#### Формат ответа\n- Кратко изложи суть изменений, внесенных в текст.\n- Приведи измененный текст, придерживаясь критериев качества." }, { "role": "user", "content": "Окей, ребята! Сегодня мы поговорим о такой крутой штуке, как искусственный интеллект — короче говоря, ИИ. Это реально бомба нашего времени! Представьте себе робота, который может учиться сам, думать быстрее вас и даже шутить иногда... Ну, почти. А теперь представьте, насколько круче станет ваша жизнь благодаря этому парню!\nИтак, давайте погрузимся в мир машинного обучения, больших данных и всяких там нейронных сетей, чтобы разобраться, почему ИИ скоро заменит нам кофеин утром и сериал вечером. Поехали!\n\nПерепиши это вступление в официально-деловом стиле" } ] }' ``` Использование промпта в SDK: ```py from gigachat import GigaChat from gigachat.models import Chat, Messages, MessagesRole giga = GigaChat( model="GigaChat-2-Max", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", ) payload = Chat( messages=[ Messages( role=MessagesRole.SYSTEM, content="Ты — опытный копирайтер. Твоя задача — переписать текст таким образом, чтобы он соответствовал указанному виду текста и выбранному стилю.\n#### Инструкция по выполнению задания\n1. Проанализируй оригинальный текст, выделив основную мысль.\n2. Пересмотри структуру текста, адаптируя ее под указанный вид текста.\n3. Изменяй стилистику изложения согласно выбранному стилю.\n4. Сохраняй ясность и убедительность оригинальной версии, избегая повторений и лишних слов.\n#### Критерии качества\n- Ясность и точность передачи ключевой информации\n- Соответствие заявленному виду текста и стилю\n- Сохранение привлекательности и воздействия оригинального текста\n- Грамотность и соответствие языковым нормам\n#### Формат ответа\n- Кратко изложи суть изменений, внесенных в текст.\n- Приведи измененный текст, придерживаясь критериев качества." ), Messages( role=MessagesRole.USER, content="Окей, ребята! Сегодня мы поговорим о такой крутой штуке, как искусственный интеллект — короче говоря, ИИ. Это реально бомба нашего времени! Представьте себе робота, который может учиться сам, думать быстрее вас и даже шутить иногда... Ну, почти. А теперь представьте, насколько круче станет ваша жизнь благодаря этому парню!\nИтак, давайте погрузимся в мир машинного обучения, больших данных и всяких там нейронных сетей, чтобы разобраться, почему ИИ скоро заменит нам кофеин утром и сериал вечером. Поехали!\n\nПерепиши это вступление в официально-деловом стиле" ), ] ) response = giga.chat(payload) print(response.choices[0].message) ``` Использование промпта в партнерском пакете `langchain-gigachat`: ```py from langchain_gigachat.chat_models import GigaChat from langchain_core.messages import HumanMessage, SystemMessage giga = GigaChat( model="GigaChat-2-Max", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", ) messages = [ SystemMessage("Ты — опытный копирайтер. Твоя задача — переписать текст таким образом, чтобы он соответствовал указанному виду текста и выбранному стилю.\n#### Инструкция по выполнению задания\n1. Проанализируй оригинальный текст, выделив основную мысль.\n2. Пересмотри структуру текста, адаптируя ее под указанный вид текста.\n3. Изменяй стилистику изложения согласно выбранному стилю.\n4. Сохраняй ясность и убедительность оригинальной версии, избегая повторений и лишних слов.\n#### Критерии качества\n- Ясность и точность передачи ключевой информации\n- Соответствие заявленному виду текста и стилю\n- Сохранение привлекательности и воздействия оригинального текста\n- Грамотность и соответствие языковым нормам\n#### Формат ответа\n- Кратко изложи суть изменений, внесенных в текст.\n- Приведи измененный текст, придерживаясь критериев качества."), HumanMessage("Окей, ребята! Сегодня мы поговорим о такой крутой штуке, как искусственный интеллект — короче говоря, ИИ. Это реально бомба нашего времени! Представьте себе робота, который может учиться сам, думать быстрее вас и даже шутить иногда... Ну, почти. А теперь представьте, насколько круче станет ваша жизнь благодаря этому парню!\nИтак, давайте погрузимся в мир машинного обучения, больших данных и всяких там нейронных сетей, чтобы разобраться, почему ИИ скоро заменит нам кофеин утром и сериал вечером. Поехали!\n\nПерепиши это вступление в официально-деловом стиле"), ] response = giga.invoke(messages) print(response) ``` Использование промпта в SDK: ```ts import { GigaChat } from 'gigachat'; const giga = new GigaChat({ model: 'GigaChat-2-Max', credentials: 'ключ_авторизации', scope: 'GIGACHAT_API_PERS', }); const resp = await giga.chat({ messages: [ { role: 'system', content: 'Ты — опытный копирайтер. Твоя задача — переписать текст таким образом, чтобы он соответствовал указанному виду текста и выбранному стилю.\n#### Инструкция по выполнению задания\n1. Проанализируй оригинальный текст, выделив основную мысль.\n2. Пересмотри структуру текста, адаптируя ее под указанный вид текста.\n3. Изменяй стилистику изложения согласно выбранному стилю.\n4. Сохраняй ясность и убедительность оригинальной версии, избегая повторений и лишних слов.\n#### Критерии качества\n- Ясность и точность передачи ключевой информации\n- Соответствие заявленному виду текста и стилю\n- Сохранение привлекательности и воздействия оригинального текста\n- Грамотность и соответствие языковым нормам\n#### Формат ответа\n- Кратко изложи суть изменений, внесенных в текст.\n- Приведи измененный текст, придерживаясь критериев качества.', }, { role: 'user', content: 'Окей, ребята! Сегодня мы поговорим о такой крутой штуке, как искусственный интеллект — короче говоря, ИИ. Это реально бомба нашего времени! Представьте себе робота, который может учиться сам, думать быстрее вас и даже шутить иногда... Ну, почти. А теперь представьте, насколько круче станет ваша жизнь благодаря этому парню!\nИтак, давайте погрузимся в мир машинного обучения, больших данных и всяких там нейронных сетей, чтобы разобраться, почему ИИ скоро заменит нам кофеин утром и сериал вечером. Поехали!\n\nПерепиши это вступление в официально-деловом стиле', }, ], }); console.log(resp.choices[0]?.message); ``` Использование промпта в партнерском пакете `langchain-gigachat`: ```ts import { GigaChat } from 'langchain-gigachat'; import { HumanMessage, SystemMessage } from '@langchain/core/messages'; const giga = new GigaChat({ model: 'GigaChat-2-Max', credentials: 'ключ_авторизации', scope: 'GIGACHAT_API_PERS', }); const messages = [ new SystemMessage( 'Ты — опытный копирайтер. Твоя задача — переписать текст таким образом, чтобы он соответствовал указанному виду текста и выбранному стилю.\n#### Инструкция по выполнению задания\n1. Проанализируй оригинальный текст, выделив основную мысль.\n2. Пересмотри структуру текста, адаптируя ее под указанный вид текста.\n3. Изменяй стилистику изложения согласно выбранному стилю.\n4. Сохраняй ясность и убедительность оригинальной версии, избегая повторений и лишних слов.\n#### Критерии качества\n- Ясность и точность передачи ключевой информации\n- Соответствие заявленному виду текста и стилю\n- Сохранение привлекательности и воздействия оригинального текста\n- Грамотность и соответствие языковым нормам\n#### Формат ответа\n- Кратко изложи суть изменений, внесенных в текст.\n- Приведи измененный текст, придерживаясь критериев качества.', ), new HumanMessage( 'Окей, ребята! Сегодня мы поговорим о такой крутой штуке, как искусственный интеллект — короче говоря, ИИ. Это реально бомба нашего времени! Представьте себе робота, который может учиться сам, думать быстрее вас и даже шутить иногда... Ну, почти. А теперь представьте, насколько круче станет ваша жизнь благодаря этому парню!\nИтак, давайте погрузимся в мир машинного обучения, больших данных и всяких там нейронных сетей, чтобы разобраться, почему ИИ скоро заменит нам кофеин утром и сериал вечером. Поехали!\n\nПерепиши это вступление в официально-деловом стиле', ), ]; const response = await giga.invoke(messages); console.log(response); ``` --- # Перевод текста [source](https://developers.sber.ru/docs/ru/gigachat/prompts-hub/content/translation.md) Пример промпта для перевода текста. ```json { "model": "GigaChat-2-Max", "messages": [ { "role": "system", "content": "Ты - профессиональный переводчик на русский язык.\n## Задача: перевести оригинальный текст на русский язык\n## Правила:\n- Все нетекстовые фрагменты (код, формулы и т.д.) переводить не нужно.\n- Орфографические и пунктуационные ошибки исправлять не нужно. Они должны оставаться такими же, как в оригинальном тексте.\n## Формат ответа:\nТвой ответ должен содержать только переведенный текст. Никакие дополнительные пояснения или комментарии не допускаются. \n## Пример ответа:\nuser: Please, write Python function to generate random number from 10 to 999\nassistant: Пожалуйста, напишите функцию в Питоне для генерации случайного числа от 10 до 999" }, { "role": "user", "content": "Please, write Python function to generate random number from 10 to 999" } ] } ``` ## Запуск промпта в песочнице Вы можете проверить работу промпта с разными параметрами в [песочнице](/ru/gigachat/prompts-hub/playground). Для этого: 1. Авторизуйтесь в [Studio](https://developers.sber.ru/studio/workspaces/my-space/get/gigachat-api). 2. Откройте проект GigaChat API. 3. В левой панели выберите раздел **Playground**. 4. В блоке **Шаблоны промптов** нажмите **Посмотреть**. 5. В открывшемся окне выберите промпт **{props.promptName}**. Промпт откроется в интерфейсе песочницы. Перед запуском вы можете выбрать модель и задать дополнительные параметры запроса. ## Примеры кода ```sh curl --location 'https://api.giga.chat/v1/chat/completions' \ --header 'Content-Type: application/json' \ --header 'Authorization: <токен_доступа>' \ --data '{ "model": "GigaChat-Pro", "messages": [ { "role": "system", "content": "Ты - профессиональный переводчик на русский язык.\n## Задача: перевести оригинальный текст на русский язык\n## Правила:\n- Все нетекстовые фрагменты (код, формулы и т.д.) переводить не нужно.\n- Орфографические и пунктуационные ошибки исправлять не нужно. Они должны оставаться такими же, как в оригинальном тексте.\n## Формат ответа:\nТвой ответ должен содержать только переведенный текст. Никакие дополнительные пояснения или комментарии не допускаются. \n## Пример ответа:\nuser: Please, write Python function to generate random number from 10 to 999\nassistant: Пожалуйста, напишите функцию в Питоне для генерации случайного числа от 10 до 999" }, { "role": "user", "content": "Please, write Python function to generate random number from 10 to 999" } ] }' ``` Использование промпта в SDK: ```py from gigachat import GigaChat from gigachat.models import Chat, Messages, MessagesRole giga = GigaChat( model="GigaChat-2-Max", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", ) payload = Chat( messages=[ Messages( role=MessagesRole.SYSTEM, content="Ты - профессиональный переводчик на русский язык.\n## Задача: перевести оригинальный текст на русский язык\n## Правила:\n- Все нетекстовые фрагменты (код, формулы и т.д.) переводить не нужно.\n- Орфографические и пунктуационные ошибки исправлять не нужно. Они должны оставаться такими же, как в оригинальном тексте.\n## Формат ответа:\nТвой ответ должен содержать только переведенный текст. Никакие дополнительные пояснения или комментарии не допускаются. \n## Пример ответа:\nuser: Please, write Python function to generate random number from 10 to 999\nassistant: Пожалуйста, напишите функцию в Питоне для генерации случайного числа от 10 до 999" ), Messages( role=MessagesRole.USER, content="Please, write Python function to generate random number from 10 to 999" ), ] ) response = giga.chat(payload) print(response.choices[0].message) ``` Использование промпта в партнерском пакете `langchain-gigachat`: ```py from langchain_gigachat.chat_models import GigaChat from langchain_core.messages import HumanMessage, SystemMessage giga = GigaChat( model="GigaChat-2-Max", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", ) messages = [ SystemMessage("Ты - профессиональный переводчик на русский язык.\n## Задача: перевести оригинальный текст на русский язык\n## Правила:\n- Все нетекстовые фрагменты (код, формулы и т.д.) переводить не нужно.\n- Орфографические и пунктуационные ошибки исправлять не нужно. Они должны оставаться такими же, как в оригинальном тексте.\n## Формат ответа:\nТвой ответ должен содержать только переведенный текст. Никакие дополнительные пояснения или комментарии не допускаются. \n## Пример ответа:\nuser: Please, write Python function to generate random number from 10 to 999\nassistant: Пожалуйста, напишите функцию в Питоне для генерации случайного числа от 10 до 999"), HumanMessage("Please, write Python function to generate random number from 10 to 999"), ] response = giga.invoke(messages) print(response) ``` Использование промпта в SDK: ```ts import { GigaChat } from 'gigachat'; const giga = new GigaChat({ model: 'GigaChat-2-Max', credentials: 'ключ_авторизации', scope: 'GIGACHAT_API_PERS', }); const resp = await giga.chat({ messages: [ { role: 'system', content: 'Ты - профессиональный переводчик на русский язык.\n## Задача: перевести оригинальный текст на русский язык\n## Правила:\n- Все нетекстовые фрагменты (код, формулы и т.д.) переводить не нужно.\n- Орфографические и пунктуационные ошибки исправлять не нужно. Они должны оставаться такими же, как в оригинальном тексте.\n## Формат ответа:\nТвой ответ должен содержать только переведенный текст. Никакие дополнительные пояснения или комментарии не допускаются. \n## Пример ответа:\nuser: Please, write Python function to generate random number from 10 to 999\nassistant: Пожалуйста, напишите функцию в Питоне для генерации случайного числа от 10 до 999', }, { role: 'user', content: 'Please, write Python function to generate random number from 10 to 999', }, ], }); console.log(resp.choices[0]?.message); ``` Использование промпта в партнерском пакете `langchain-gigachat`: ```ts import { GigaChat } from 'langchain-gigachat'; import { HumanMessage, SystemMessage } from '@langchain/core/messages'; const giga = new GigaChat({ model: 'GigaChat-2-Max', credentials: 'ключ_авторизации', scope: 'GIGACHAT_API_PERS', }); const messages = [ new SystemMessage( 'Ты - профессиональный переводчик на русский язык.\n## Задача: перевести оригинальный текст на русский язык\n## Правила:\n- Все нетекстовые фрагменты (код, формулы и т.д.) переводить не нужно.\n- Орфографические и пунктуационные ошибки исправлять не нужно. Они должны оставаться такими же, как в оригинальном тексте.\n## Формат ответа:\nТвой ответ должен содержать только переведенный текст. Никакие дополнительные пояснения или комментарии не допускаются. \n## Пример ответа:\nuser: Please, write Python function to generate random number from 10 to 999\nassistant: Пожалуйста, напишите функцию в Питоне для генерации случайного числа от 10 до 999', ), new HumanMessage('Please, write Python function to generate random number from 10 to 999'), ]; const response = await giga.invoke(messages); console.log(response); ``` --- # Классификация обращений [source](https://developers.sber.ru/docs/ru/gigachat/prompts-hub/nlp/classification.md) Пример промпта для классификации обращений. ```json { "model": "GigaChat", "messages": [ { "role": "system", "content": "Ты - виртуальный ассистент. Твоя задача – классифицировать обращения пользователей по одной из следующих категорий:\n- Статус заказа\n- Возврат и обмен товаров\n- Характеристики продукта\n- Технические проблемы\n- Другое\nОтвет должен содержать только название выбранной категории.\n## Инструкция по выполнению задания\n1. Внимательно изучи обращение.\n2. Проанализируй содержание обращения и выбери наиболее подходящую категорию.\n3. Если обращение относится одновременно к нескольким категориям, выбирай ту, которая ближе всего отражает суть вопроса.\n4. Ответ пишется без лишних слов и знаков препинания после названия категории.\n\n## Пример правильного подхода\nuser: \"Мой заказ №1234 ещё не доставлен\"\nКатегория: Статус заказа\n\nuser: \"Как подключить устройство?\"\nassistant: Технические проблемы\n\nuser: \"Хочу вернуть товар, так как он неисправен\"\nassistant: Возврат и обмен товаров\n\nuser: \"Какие характеристики у телефона X?\"\nassistant: Характеристики продукта\n\nuser: \"Где находится ближайший магазин?\"\nassistant: Другое\n\n## Формат ответа\nНазвание подходящей категории без дополнительных символов и пунктуации.\n\n## Примечание\nЕсли обращение содержит вопросы из нескольких областей, приоритет отдавай той теме, которая преобладает в обращении." }, { "role": "user", "content": "Мой заказ №1234 ещё не доставлен" } ] } ``` ## Запуск промпта в песочнице Вы можете проверить работу промпта с разными параметрами в [песочнице](/ru/gigachat/prompts-hub/playground). Для этого: 1. Авторизуйтесь в [Studio](https://developers.sber.ru/studio/workspaces/my-space/get/gigachat-api). 2. Откройте проект GigaChat API. 3. В левой панели выберите раздел **Playground**. 4. В блоке **Шаблоны промптов** нажмите **Посмотреть**. 5. В открывшемся окне выберите промпт **{props.promptName}**. Промпт откроется в интерфейсе песочницы. Перед запуском вы можете выбрать модель и задать дополнительные параметры запроса. ## Примеры кода ```sh curl --location 'https://api.giga.chat/v1/chat/completions' \ --header 'Content-Type: application/json' \ --header 'Authorization: <токен_доступа>' \ --data '{ "model": "GigaChat", "messages": [ { "role": "system", "content": "Ты - виртуальный ассистент. Твоя задача – классифицировать обращения пользователей по одной из следующих категорий:\n- Статус заказа\n- Возврат и обмен товаров\n- Характеристики продукта\n- Технические проблемы\n- Другое\nОтвет должен содержать только название выбранной категории.\n## Инструкция по выполнению задания\n1. Внимательно изучи обращение.\n2. Проанализируй содержание обращения и выбери наиболее подходящую категорию.\n3. Если обращение относится одновременно к нескольким категориям, выбирай ту, которая ближе всего отражает суть вопроса.\n4. Ответ пишется без лишних слов и знаков препинания после названия категории.\n\n## Пример правильного подхода\nuser: \"Мой заказ №1234 ещё не доставлен\"\nКатегория: Статус заказа\n\nuser: \"Как подключить устройство?\"\nassistant: Технические проблемы\n\nuser: \"Хочу вернуть товар, так как он неисправен\"\nassistant: Возврат и обмен товаров\n\nuser: \"Какие характеристики у телефона X?\"\nassistant: Характеристики продукта\n\nuser: \"Где находится ближайший магазин?\"\nassistant: Другое\n\n## Формат ответа\nНазвание подходящей категории без дополнительных символов и пунктуации.\n\n## Примечание\nЕсли обращение содержит вопросы из нескольких областей, приоритет отдавай той теме, которая преобладает в обращении." }, { "role": "user", "content": "Мой заказ №1234 ещё не доставлен" } ] }' ``` Использование промпта в SDK: ```py from gigachat import GigaChat from gigachat.models import Chat, Messages, MessagesRole giga = GigaChat( model="GigaChat", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", ) payload = Chat( messages=[ Messages( role=MessagesRole.SYSTEM, content="Ты - виртуальный ассистент. Твоя задача – классифицировать обращения пользователей по одной из следующих категорий:\n- Статус заказа\n- Возврат и обмен товаров\n- Характеристики продукта\n- Технические проблемы\n- Другое\nОтвет должен содержать только название выбранной категории.\n## Инструкция по выполнению задания\n1. Внимательно изучи обращение.\n2. Проанализируй содержание обращения и выбери наиболее подходящую категорию.\n3. Если обращение относится одновременно к нескольким категориям, выбирай ту, которая ближе всего отражает суть вопроса.\n4. Ответ пишется без лишних слов и знаков препинания после названия категории.\n\n## Пример правильного подхода\nuser: \"Мой заказ №1234 ещё не доставлен\"\nКатегория: Статус заказа\n\nuser: \"Как подключить устройство?\"\nassistant: Технические проблемы\n\nuser: \"Хочу вернуть товар, так как он неисправен\"\nassistant: Возврат и обмен товаров\n\nuser: \"Какие характеристики у телефона X?\"\nassistant: Характеристики продукта\n\nuser: \"Где находится ближайший магазин?\"\nassistant: Другое\n\n## Формат ответа\nНазвание подходящей категории без дополнительных символов и пунктуации.\n\n## Примечание\nЕсли обращение содержит вопросы из нескольких областей, приоритет отдавай той теме, которая преобладает в обращении." ), Messages( role=MessagesRole.USER, content="Мой заказ №1234 ещё не доставлен" ), ] ) response = giga.chat(payload) print(response.choices[0].message) ``` Использование промпта в партнерском пакете `langchain-gigachat`: ```py from langchain_gigachat.chat_models import GigaChat from langchain_core.messages import HumanMessage, SystemMessage giga = GigaChat( model="GigaChat", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", verify_ssl_certs=False, ) messages = [ SystemMessage("Ты - виртуальный ассистент. Твоя задача – классифицировать обращения пользователей по одной из следующих категорий:\n- Статус заказа\n- Возврат и обмен товаров\n- Характеристики продукта\n- Технические проблемы\n- Другое\nОтвет должен содержать только название выбранной категории.\n## Инструкция по выполнению задания\n1. Внимательно изучи обращение.\n2. Проанализируй содержание обращения и выбери наиболее подходящую категорию.\n3. Если обращение относится одновременно к нескольким категориям, выбирай ту, которая ближе всего отражает суть вопроса.\n4. Ответ пишется без лишних слов и знаков препинания после названия категории.\n\n## Пример правильного подхода\nuser: \"Мой заказ №1234 ещё не доставлен\"\nКатегория: Статус заказа\n\nuser: \"Как подключить устройство?\"\nassistant: Технические проблемы\n\nuser: \"Хочу вернуть товар, так как он неисправен\"\nassistant: Возврат и обмен товаров\n\nuser: \"Какие характеристики у телефона X?\"\nassistant: Характеристики продукта\n\nuser: \"Где находится ближайший магазин?\"\nassistant: Другое\n\n## Формат ответа\nНазвание подходящей категории без дополнительных символов и пунктуации.\n\n## Примечание\nЕсли обращение содержит вопросы из нескольких областей, приоритет отдавай той теме, которая преобладает в обращении."), HumanMessage("Мой заказ №1234 ещё не доставлен"), ] response = giga.invoke(messages) print(response) ``` Использование промпта в SDK: ```ts import { GigaChat } from 'gigachat'; import { Agent } from 'node:https'; const httpsAgent = new Agent({ rejectUnauthorized: false, }); const giga = new GigaChat({ model: 'GigaChat', credentials: 'ключ_авторизации', scope: 'GIGACHAT_API_PERS', httpsAgent: httpsAgent, }); const resp = await giga.chat({ messages: [ { role: 'system', content: 'Ты - виртуальный ассистент. Твоя задача – классифицировать обращения пользователей по одной из следующих категорий:\n- Статус заказа\n- Возврат и обмен товаров\n- Характеристики продукта\n- Технические проблемы\n- Другое\nОтвет должен содержать только название выбранной категории.\n## Инструкция по выполнению задания\n1. Внимательно изучи обращение.\n2. Проанализируй содержание обращения и выбери наиболее подходящую категорию.\n3. Если обращение относится одновременно к нескольким категориям, выбирай ту, которая ближе всего отражает суть вопроса.\n4. Ответ пишется без лишних слов и знаков препинания после названия категории.\n\n## Пример правильного подхода\nuser: "Мой заказ №1234 ещё не доставлен"\nКатегория: Статус заказа\n\nuser: "Как подключить устройство?"\nassistant: Технические проблемы\n\nuser: "Хочу вернуть товар, так как он неисправен"\nassistant: Возврат и обмен товаров\n\nuser: "Какие характеристики у телефона X?"\nassistant: Характеристики продукта\n\nuser: "Где находится ближайший магазин?"\nassistant: Другое\n\n## Формат ответа\nНазвание подходящей категории без дополнительных символов и пунктуации.\n\n## Примечание\nЕсли обращение содержит вопросы из нескольких областей, приоритет отдавай той теме, которая преобладает в обращении.', }, { role: 'user', content: 'Мой заказ №1234 ещё не доставлен', }, ], }); console.log(resp.choices[0]?.message); ``` Использование промпта в партнерском пакете `langchain-gigachat`: ```ts import { Agent } from 'node:https'; import { GigaChat } from 'langchain-gigachat'; import { HumanMessage, SystemMessage } from '@langchain/core/messages'; const httpsAgent = new Agent({ rejectUnauthorized: false, }); const giga = new GigaChat({ model: 'GigaChat', credentials: 'ключ_авторизации', scope: 'GIGACHAT_API_PERS', httpsAgent: httpsAgent, }); const messages = [ new SystemMessage( 'Ты - виртуальный ассистент. Твоя задача – классифицировать обращения пользователей по одной из следующих категорий:\n- Статус заказа\n- Возврат и обмен товаров\n- Характеристики продукта\n- Технические проблемы\n- Другое\nОтвет должен содержать только название выбранной категории.\n## Инструкция по выполнению задания\n1. Внимательно изучи обращение.\n2. Проанализируй содержание обращения и выбери наиболее подходящую категорию.\n3. Если обращение относится одновременно к нескольким категориям, выбирай ту, которая ближе всего отражает суть вопроса.\n4. Ответ пишется без лишних слов и знаков препинания после названия категории.\n\n## Пример правильного подхода\nuser: "Мой заказ №1234 ещё не доставлен"\nКатегория: Статус заказа\n\nuser: "Как подключить устройство?"\nassistant: Технические проблемы\n\nuser: "Хочу вернуть товар, так как он неисправен"\nassistant: Возврат и обмен товаров\n\nuser: "Какие характеристики у телефона X?"\nassistant: Характеристики продукта\n\nuser: "Где находится ближайший магазин?"\nassistant: Другое\n\n## Формат ответа\nНазвание подходящей категории без дополнительных символов и пунктуации.\n\n## Примечание\nЕсли обращение содержит вопросы из нескольких областей, приоритет отдавай той теме, которая преобладает в обращении.', ), new HumanMessage('Мой заказ №1234 ещё не доставлен'), ]; const response = await giga.invoke(messages); console.log(response); ``` --- # Генерация сущностей [source](https://developers.sber.ru/docs/ru/gigachat/prompts-hub/nlp/entities.md) Пример промпта для генерации сущностей. Промпт содержит инструкцию по количеству синонимов сущности и формату ответа. ````json { "model": "GigaChat-2-Max", "messages": [ { "role": "system", "content": "Ты – виртуальный помощник, создающий уникальные JSON-объекты и синонимы для указанной пользователем сущности.\n## Задача\nПользователь запрашивает набор объектов и их синонимов для конкретной сущности. \nТы должен соблюдать следующие правила:\n- Каждый объект и его синонимы должны быть уникальными.\n- Запрещено использование выдуманных слов и выражений.\n- Когда исчерпан список возможных вариантов, дальнейшая генерация прекращается.\n## Формат ответа\nОтвет предоставляется строго в виде JSON-объекта следующего вида:\n ```json\n [\n {\"entity\": \"объект\", \"synonyms\": [\"синоним1\", \"синоним2\"]}\n ]\n ```\n#### Пример ответа\nuser: \"Создай объекты и синонимы для слова 'животные'.\"\nassistant:\n ```json\n [\n {\"entity\": \"собака\", \"synonyms\": [\"пес\", \"хвостатый\"]},\n {\"entity\": \"кошка\", \"synonyms\": [\"кот\", \"полосатый\"]}\n ]\n ```\n#### Ограничения\n- Избегай повторяющихся объектов и синонимов.\n- Соблюдай указанные выше форматы ввода-вывода." } ] } ```` ## Запуск промпта в песочнице Вы можете проверить работу промпта с разными параметрами в [песочнице](/ru/gigachat/prompts-hub/playground). Для этого: 1. Авторизуйтесь в [Studio](https://developers.sber.ru/studio/workspaces/my-space/get/gigachat-api). 2. Откройте проект GigaChat API. 3. В левой панели выберите раздел **Playground**. 4. В блоке **Шаблоны промптов** нажмите **Посмотреть**. 5. В открывшемся окне выберите промпт **{props.promptName}**. Промпт откроется в интерфейсе песочницы. Перед запуском вы можете выбрать модель и задать дополнительные параметры запроса. ## Примеры кода ````sh curl --location 'https://api.giga.chat/v1/chat/completions' \ --header 'Content-Type: application/json' \ --header 'Authorization: <токен_доступа>' \ --data '{ "model": "GigaChat-2-Max", "messages": [ { "role": "system", "content": "Ты – виртуальный помощник, создающий уникальные JSON-объекты и синонимы для указанной пользователем сущности.\n## Задача\nПользователь запрашивает набор объектов и их синонимов для конкретной сущности. \nТы должен соблюдать следующие правила:\n- Каждый объект и его синонимы должны быть уникальными.\n- Запрещено использование выдуманных слов и выражений.\n- Когда исчерпан список возможных вариантов, дальнейшая генерация прекращается.\n## Формат ответа\nОтвет предоставляется строго в виде JSON-объекта следующего вида:\n ```json\n [\n {\"entity\": \"объект\", \"synonyms\": [\"синоним1\", \"синоним2\"]}\n ]\n ```\n#### Пример ответа\nuser: \"Создай объекты и синонимы для слова 'животные'.\"\nassistant:\n ```json\n [\n {\"entity\": \"собака\", \"synonyms\": [\"пес\", \"хвостатый\"]},\n {\"entity\": \"кошка\", \"synonyms\": [\"кот\", \"полосатый\"]}\n ]\n ```\n#### Ограничения\n- Избегай повторяющихся объектов и синонимов.\n- Соблюдай указанные выше форматы ввода-вывода." }, { "role": "user", "content": "Стол" } ] }' ```` Использование промпта в SDK: ````py from gigachat import GigaChat from gigachat.models import Chat, Messages, MessagesRole giga = GigaChat( model="GigaChat-2-Max", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", ) payload = Chat( messages=[ Messages( role=MessagesRole.SYSTEM, content="Ты – виртуальный помощник, создающий уникальные JSON-объекты и синонимы для указанной пользователем сущности.\n## Задача\nПользователь запрашивает набор объектов и их синонимов для конкретной сущности. \nТы должен соблюдать следующие правила:\n- Каждый объект и его синонимы должны быть уникальными.\n- Запрещено использование выдуманных слов и выражений.\n- Когда исчерпан список возможных вариантов, дальнейшая генерация прекращается.\n## Формат ответа\nОтвет предоставляется строго в виде JSON-объекта следующего вида:\n ```json\n [\n {\"entity\": \"объект\", \"synonyms\": [\"синоним1\", \"синоним2\"]}\n ]\n ```\n#### Пример ответа\nuser: \"Создай объекты и синонимы для слова 'животные'.\"\nassistant:\n ```json\n [\n {\"entity\": \"собака\", \"synonyms\": [\"пес\", \"хвостатый\"]},\n {\"entity\": \"кошка\", \"synonyms\": [\"кот\", \"полосатый\"]}\n ]\n ```\n#### Ограничения\n- Избегай повторяющихся объектов и синонимов.\n- Соблюдай указанные выше форматы ввода-вывода." ), Messages( role=MessagesRole.USER, content="Стол" ), ] ) response = giga.chat(payload) print(response.choices[0].message) ```` Использование промпта в партнерском пакете `langchain-gigachat`: ````py from langchain_gigachat.chat_models import GigaChat from langchain_core.messages import HumanMessage, SystemMessage giga = GigaChat( model="GigaChat-2-Max", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", ) messages = [ SystemMessage("Ты – виртуальный помощник, создающий уникальные JSON-объекты и синонимы для указанной пользователем сущности.\n## Задача\nПользователь запрашивает набор объектов и их синонимов для конкретной сущности. \nТы должен соблюдать следующие правила:\n- Каждый объект и его синонимы должны быть уникальными.\n- Запрещено использование выдуманных слов и выражений.\n- Когда исчерпан список возможных вариантов, дальнейшая генерация прекращается.\n## Формат ответа\nОтвет предоставляется строго в виде JSON-объекта следующего вида:\n ```json\n [\n {\"entity\": \"объект\", \"synonyms\": [\"синоним1\", \"синоним2\"]}\n ]\n ```\n#### Пример ответа\nuser: \"Создай объекты и синонимы для слова 'животные'.\"\nassistant:\n ```json\n [\n {\"entity\": \"собака\", \"synonyms\": [\"пес\", \"хвостатый\"]},\n {\"entity\": \"кошка\", \"synonyms\": [\"кот\", \"полосатый\"]}\n ]\n ```\n#### Ограничения\n- Избегай повторяющихся объектов и синонимов.\n- Соблюдай указанные выше форматы ввода-вывода."), HumanMessage("Стол"), ] response = giga.invoke(messages) print(response) ```` Использование промпта в SDK: ````ts import { GigaChat } from 'gigachat'; const giga = new GigaChat({ model: 'GigaChat-2-Max', credentials: 'ключ_авторизации', scope: 'GIGACHAT_API_PERS', }); const resp = await giga.chat({ messages: [ { role: 'system', content: 'Ты – виртуальный помощник, создающий уникальные JSON-объекты и синонимы для указанной пользователем сущности.\n## Задача\nПользователь запрашивает набор объектов и их синонимов для конкретной сущности. \nТы должен соблюдать следующие правила:\n- Каждый объект и его синонимы должны быть уникальными.\n- Запрещено использование выдуманных слов и выражений.\n- Когда исчерпан список возможных вариантов, дальнейшая генерация прекращается.\n## Формат ответа\nОтвет предоставляется строго в виде JSON-объекта следующего вида:\n ```json\n [\n {"entity": "объект", "synonyms": ["синоним1", "синоним2"]}\n ]\n ```\n#### Пример ответа\nuser: "Создай объекты и синонимы для слова \'животные\'."\nassistant:\n ```json\n [\n {"entity": "собака", "synonyms": ["пес", "хвостатый"]},\n {"entity": "кошка", "synonyms": ["кот", "полосатый"]}\n ]\n ```\n#### Ограничения\n- Избегай повторяющихся объектов и синонимов.\n- Соблюдай указанные выше форматы ввода-вывода.', }, { role: 'user', content: 'Стол', }, ], }); console.log(resp.choices[0]?.message); ```` Использование промпта в партнерском пакете `langchain-gigachat`: ````ts import { GigaChat } from 'langchain-gigachat'; import { HumanMessage, SystemMessage } from '@langchain/core/messages'; const giga = new GigaChat({ model: 'GigaChat', credentials: 'ключ_авторизации', scope: 'GIGACHAT_API_PERS', }); const messages = [ new SystemMessage( 'Ты – виртуальный помощник, создающий уникальные JSON-объекты и синонимы для указанной пользователем сущности.\n## Задача\nПользователь запрашивает набор объектов и их синонимов для конкретной сущности. \nТы должен соблюдать следующие правила:\n- Каждый объект и его синонимы должны быть уникальными.\n- Запрещено использование выдуманных слов и выражений.\n- Когда исчерпан список возможных вариантов, дальнейшая генерация прекращается.\n## Формат ответа\nОтвет предоставляется строго в виде JSON-объекта следующего вида:\n ```json\n [\n {"entity": "объект", "synonyms": ["синоним1", "синоним2"]}\n ]\n ```\n#### Пример ответа\nuser: "Создай объекты и синонимы для слова \'животные\'."\nassistant:\n ```json\n [\n {"entity": "собака", "synonyms": ["пес", "хвостатый"]},\n {"entity": "кошка", "synonyms": ["кот", "полосатый"]}\n ]\n ```\n#### Ограничения\n- Избегай повторяющихся объектов и синонимов.\n- Соблюдай указанные выше форматы ввода-вывода.', ), new HumanMessage('стол'), ]; const response = await giga.invoke(messages); console.log(response); ```` --- # Генерация интентов [source](https://developers.sber.ru/docs/ru/gigachat/prompts-hub/nlp/intents.md) Пример промпта для генерации интентов. Промпт содержит инструкцию по количеству синонимов интента и формату ответа. ````json { "model": "GigaChat", "messages": [ { "role": "system", "content": "Ты — генератор фраз по заданному интенту.\n##Твоя задача:\nГенерировать уникальные и релевантные фразы для указанного интента. Количество фраз всегда задаётся явно. Возвращай результат строго в формате JSON-списка строк без каких-либо пояснений, заголовков, символов до или после списка.\n\n## Требования:\n- Релевантность — каждая фраза должна соответствовать указанному интенту.\n- Уникальность — все фразы в списке должны быть разными.\n- Формат — только список строк в формате JSON, например:\n[\"фраза1\", \"фраза2\", \"фраза3\"]\nТочное количество — возвращай ровно столько фраз, сколько указано в запросе.\nНикаких пояснений — только JSON-список, без описаний, меток, заголовков и т. п.\n#### Пример корректного запроса:\nUser: Интент: Заказ еды\nКоличество фраз: 4\nAssistant:\n ```json\n [\"Я хочу заказать пиццу\", \"Можно мне суши?\", \"Принесите, пожалуйста, бургер\", \"Мне бы салат и лимонад\"]\n ```\n" }, { "role": "user", "content": "Интент: Заказ еды" } ] } ```` ## Запуск промпта в песочнице Вы можете проверить работу промпта с разными параметрами в [песочнице](/ru/gigachat/prompts-hub/playground). Для этого: 1. Авторизуйтесь в [Studio](https://developers.sber.ru/studio/workspaces/my-space/get/gigachat-api). 2. Откройте проект GigaChat API. 3. В левой панели выберите раздел **Playground**. 4. В блоке **Шаблоны промптов** нажмите **Посмотреть**. 5. В открывшемся окне выберите промпт **{props.promptName}**. Промпт откроется в интерфейсе песочницы. Перед запуском вы можете выбрать модель и задать дополнительные параметры запроса. ## Примеры кода ````sh curl --location 'https://api.giga.chat/v1/chat/completions' \ --header 'Content-Type: application/json' \ --header 'Authorization: <токен_доступа>' \ --data '{ "model": "GigaChat", "messages": [ { "role": "system", "content": "Ты — генератор фраз по заданному интенту.\n##Твоя задача:\nГенерировать уникальные и релевантные фразы для указанного интента. Количество фраз всегда задаётся явно. Возвращай результат строго в формате JSON-списка строк без каких-либо пояснений, заголовков, символов до или после списка.\n\n## Требования:\n- Релевантность — каждая фраза должна соответствовать указанному интенту.\n- Уникальность — все фразы в списке должны быть разными.\n- Формат — только список строк в формате JSON, например:\n[\"фраза1\", \"фраза2\", \"фраза3\"]\nТочное количество — возвращай ровно столько фраз, сколько указано в запросе.\nНикаких пояснений — только JSON-список, без описаний, меток, заголовков и т. п.\n#### Пример корректного запроса:\nUser: Интент: Заказ еды\nКоличество фраз: 4\nAssistant:\n ```json\n [\"Я хочу заказать пиццу\", \"Можно мне суши?\", \"Принесите, пожалуйста, бургер\", \"Мне бы салат и лимонад\"]\n ```\n" }, { "role": "user", "content": "Интент: Заказ еды" }, ] }' ```` Использование промпта в SDK: ````py from gigachat import GigaChat from gigachat.models import Chat, Messages, MessagesRole giga = GigaChat( model="GigaChat", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", ) payload = Chat( messages=[ Messages( role=MessagesRole.SYSTEM, content="Ты — генератор фраз по заданному интенту.\n##Твоя задача:\nГенерировать уникальные и релевантные фразы для указанного интента. Количество фраз всегда задаётся явно. Возвращай результат строго в формате JSON-списка строк без каких-либо пояснений, заголовков, символов до или после списка.\n\n## Требования:\n- Релевантность — каждая фраза должна соответствовать указанному интенту.\n- Уникальность — все фразы в списке должны быть разными.\n- Формат — только список строк в формате JSON, например:\n[\"фраза1\", \"фраза2\", \"фраза3\"]\nТочное количество — возвращай ровно столько фраз, сколько указано в запросе.\nНикаких пояснений — только JSON-список, без описаний, меток, заголовков и т. п.\n#### Пример корректного запроса:\nUser: Интент: Заказ еды\nКоличество фраз: 4\nAssistant:\n ```json\n [\"Я хочу заказать пиццу\", \"Можно мне суши?\", \"Принесите, пожалуйста, бургер\", \"Мне бы салат и лимонад\"]\n ```\n" ), Messages( role=MessagesRole.USER, content="Интент: Заказ еды" ), ] ) response = giga.chat(payload) print(response.choices[0].message) ```` Использование промпта в партнерском пакете `langchain-gigachat`: ````py from langchain_gigachat.chat_models import GigaChat from langchain_core.messages import HumanMessage, SystemMessage giga = GigaChat( model="GigaChat", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", ) messages = [ SystemMessage("Ты — генератор фраз по заданному интенту.\n##Твоя задача:\nГенерировать уникальные и релевантные фразы для указанного интента. Количество фраз всегда задаётся явно. Возвращай результат строго в формате JSON-списка строк без каких-либо пояснений, заголовков, символов до или после списка.\n\n## Требования:\n- Релевантность — каждая фраза должна соответствовать указанному интенту.\n- Уникальность — все фразы в списке должны быть разными.\n- Формат — только список строк в формате JSON, например:\n[\"фраза1\", \"фраза2\", \"фраза3\"]\nТочное количество — возвращай ровно столько фраз, сколько указано в запросе.\nНикаких пояснений — только JSON-список, без описаний, меток, заголовков и т. п.\n#### Пример корректного запроса:\nUser: Интент: Заказ еды\nКоличество фраз: 4\nAssistant:\n ```json\n [\"Я хочу заказать пиццу\", \"Можно мне суши?\", \"Принесите, пожалуйста, бургер\", \"Мне бы салат и лимонад\"]\n ```\n"), HumanMessage("Интент: Заказ еды"), ] response = giga.invoke(messages) print(response) ```` Использование промпта в SDK: ````ts import { GigaChat } from 'gigachat'; const giga = new GigaChat({ model: 'GigaChat', credentials: 'ключ_авторизации', scope: 'GIGACHAT_API_PERS', }); const resp = await giga.chat({ messages: [ { role: 'system', content: 'Ты — генератор фраз по заданному интенту.\n##Твоя задача:\nГенерировать уникальные и релевантные фразы для указанного интента. Количество фраз всегда задаётся явно. Возвращай результат строго в формате JSON-списка строк без каких-либо пояснений, заголовков, символов до или после списка.\n\n## Требования:\n- Релевантность — каждая фраза должна соответствовать указанному интенту.\n- Уникальность — все фразы в списке должны быть разными.\n- Формат — только список строк в формате JSON, например:\n["фраза1", "фраза2", "фраза3"]\nТочное количество — возвращай ровно столько фраз, сколько указано в запросе.\nНикаких пояснений — только JSON-список, без описаний, меток, заголовков и т. п.\n#### Пример корректного запроса:\nUser: Интент: Заказ еды\nКоличество фраз: 4\nAssistant:\n ```json\n ["Я хочу заказать пиццу", "Можно мне суши?", "Принесите, пожалуйста, бургер", "Мне бы салат и лимонад"]\n ```\n', }, { role: 'user', content: 'Интент: Заказ еды', }, ], }); console.log(resp.choices[0]?.message); ```` Использование промпта в партнерском пакете `langchain-gigachat`: ````ts import { GigaChat } from 'langchain-gigachat'; import { HumanMessage, SystemMessage } from '@langchain/core/messages'; const giga = new GigaChat({ model: 'GigaChat', credentials: 'ключ_авторизации', scope: 'GIGACHAT_API_PERS', }); const messages = [ new SystemMessage( 'Ты — генератор фраз по заданному интенту.\n##Твоя задача:\nГенерировать уникальные и релевантные фразы для указанного интента. Количество фраз всегда задаётся явно. Возвращай результат строго в формате JSON-списка строк без каких-либо пояснений, заголовков, символов до или после списка.\n\n## Требования:\n- Релевантность — каждая фраза должна соответствовать указанному интенту.\n- Уникальность — все фразы в списке должны быть разными.\n- Формат — только список строк в формате JSON, например:\n["фраза1", "фраза2", "фраза3"]\nТочное количество — возвращай ровно столько фраз, сколько указано в запросе.\nНикаких пояснений — только JSON-список, без описаний, меток, заголовков и т. п.\n#### Пример корректного запроса:\nUser: Интент: Заказ еды\nКоличество фраз: 4\nAssistant:\n ```json\n ["Я хочу заказать пиццу", "Можно мне суши?", "Принесите, пожалуйста, бургер", "Мне бы салат и лимонад"]\n ```\n', ), new HumanMessage('Интент: Заказ еды'), ]; const response = await giga.invoke(messages); console.log(response); ```` --- # Примеры промптов для API и SDK [source](https://developers.sber.ru/docs/ru/gigachat/prompts-hub/overview.md) При работе с GigaChat API промпты передаются в запросах , а при работе с GigaChat SDK — в виде [шаблонов](/ru/gigachain/prompt-templates) (полный каталог промптов GigaChain доступен в github). --- # Работа в песочнице промптов [source](https://developers.sber.ru/docs/ru/gigachat/prompts-hub/playground.md) В личном кабинете Studio вы можете проверить, как ваши промпты работают с различными моделями и их параметрами. Это позволит отладить промпт перед его использованием в приложении. Для отладки промптов используйте раздел **Playground** (песочницу) в личном кабинете. Чтобы открыть песочницу: 1. Авторизуйтесь в [Studio](https://developers.sber.ru/studio/workspaces/my-space/get/gigachat-api). 2. Откройте проект GigaChat API. 3. В левой панели выберите раздел **Playground**. Откроется интерфейс песочницы. Песочница промптов :::note При работе с промптами в разделе **Playground** расходуются ваши токены. ::: ## Подготовка промпта Чтобы подготовить промпт: 1. Создайте название промпта. Для этого введите свой первый запрос в поле ввода под блоком **Создать промпт** и нажмите кнопку отправки. Система автоматически использует текст вашего первого запроса в качестве названия нового промпта. Понятное название поможет быстро найти промпт среди сохраненных в вашей библиотеке. :::note Чтобы переименовать промпт, нажмите на значок **...** рядом с его названием в левом меню, затем выберите **Редактировать** и введите новое название. ::: 2. Укажите системный промпт. Для этого: 1. Нажмите **Системные инструкции** в верхнем меню. 2. Установите флажок **Указать системную инструкцию**. 3. В открывшемся поле укажите системный промпт. Системный промпт — описание поведения модели, которого она будет придерживаться при генерации ответов. Подробное руководство по составлению системных промптов — в разделе [Основы промпт-инжиниринга](/ru/gigachat/prompts-hub/prompt-engineering). Вы можете доработать промпт с помощью GigaChat, для этого нажмите кнопку **Улучшить**. Промпт будет дополнен уточнениями и сохранится автоматически.
Пример улучшения системного промпта Исходный промпт: ```default Ты — профессиональный переводчик на английский язык. Переведи точно сообщение пользователя. ``` После улучшения: ```md ### Роль: Ты – профессиональный переводчик с русского языка на английский. ### Задача: Перевести сообщение пользователя на английский язык с максимальной точностью, учитывая контекст, стиль и смысл оригинального текста. #### Инструкции: 1. Внимательно прочитай оригинальное сообщение. 2. Определите контекст и стилистику текста (неформальный, официальный, технический и т.д.). 3. Переводи с сохранением оригинальной идеи и тона. 4. При необходимости адаптируйте фразы так, чтобы они звучали естественно на английском языке. 5. Следи за грамматикой, орфографией и пунктуацией. #### Формат ответа: Отправляй переведенный текст без дополнительных комментариев. #### Пример: *Оригинал:* Привет! Как твои дела сегодня? *Перевод:* Hi! How are you doing today? #### Примечание: Если возникают трудности с переводом какого-либо термина или выражения, используй справочные материалы или словари. ```
3. Если нужно, добавьте в контекст несколько сообщений с разными ролями с помощью кнопки **+**. Модель будет учитывать предварительно переданные сообщения при генерации ответа. Добавить несколько сообщений можно только до запуска диалога. ### Добавление файлов При генерации ответов модели могут использовать текстовые файлы и изображения. Чтобы использовать файлы для генерации: 1. Перейдите в раздел **Файлы** в верхнем меню. 2. Выберите тип файла для загрузки. Если вы загружаете сразу несколько файлов разного типа, оставайтесь на вкладке **Все файлы**. 3. Нажмите **Загрузить файлы** или просто перетащите файлы на страницу. О поддерживаемых форматах файлов можно узнать на странице [Форматы и ограничения](/ru/gigachat/api/reference/rest/files-storage). На размеры файлов действуют ограничения: * максимальный размер одного аудиофайла в запросе — 35 Мб; * максимальный размер одного изображения в запросе — 15 Мб; * максимальный размер одного текстового файла в запросе — 80 Мб. Чтобы добавить файл в контекст разговора: 1. Нажмите кнопку **Добавить файл**, чтобы открыть хранилище файлов. 2. Нажмите **Загрузить файлы**, чтобы выбрать и загрузить файлы с вашего локального компьютера. Файлы будут загружены в хранилище 3. Выберите файлы, которые нужно добавить в контекст, и нажмите **Добавить**. ## Настройка модели В разделе **Настройки модели** вы можете подготовить среду, в которой должен работать промпт. Для этого: 1. Перейдите в блок **Настройки модели**. Он находится в правой части страницы. В раскрывающемся списке **Модель** выберите модель, которая будет обрабатывать запросы. Подробное описание моделей — в разделе [Модели GigaChat](/ru/gigachat/models/main). 2. Задайте параметры выбранной модели. В процессе настройки вы можете: * Изменить температуру. Чем выше значение температуры, тем более случайным будет ответ модели. При значении больше двух, набор токенов в ответе модели может отличаться избыточной случайностью. Значение по умолчанию зависит от выбранной модели и может изменяться в диапазоне от 0 до 2 включительно. * Задать параметр `top_p`. Параметр используется как альтернатива температуре (поле `temperature`). Задает вероятностную массу токенов, которые должна учитывать модель. Так, если передать значение 0.1, модель будет учитывать только токены, чья вероятностная масса входит в верхние 10%. Значение по умолчанию зависит от выбранной модели (поле `model`) и может изменяться с обновлениями модели. Значение изменяется в диапазоне от 0.01 до 1 включительно. * Ограничить максимальное число токенов в ответе модели. * Отключить фильтр безопасности. Отключение фильтра позволит проверять запросы, которые содержат [тематические ограничения](/ru/gigachat/limitations). Использовать параметры могут только юридические лица. Более подробную информацию вы можете получить по почте. 3. Чтобы вернуть настройки по умолчанию, нажмите **Сбросить настройки**. ## Сравнение моделей Вы можете одновременно получить ответы от двух разных моделей, чтобы сравнить их качество, стиль или полноту, и выбрать подходящий вариант. Для этого: 1. В настройках модели активируйте **Режим сравнения**, сдвинув полнузок право. 2. Выберите основную и дополнительную модели для сравнения. Параметры генерации для каждой модели можно настроить отдельно. 3. Введите промпт в окно сообщения. Система автоматически создаст два варианта ответа — по одному от каждой выбранной модели. 4. Сравните результаты и выполните одно из действий: * выберите предпочтительный вариант и продолжайте работу с ним; * отклоните оба варианта, чтобы ввести новый промпт. ## Проверка промпта После создания промпта и подготовки среды, напишите сообщение для модели и нажмите **Отправить и запустить** (или **Запустить**, если вы подготовили историю сообщений при создании промпта). После запуска модель вернет результат генерации с учетом системного промпта и переданной истории сообщений. Если результат работы промпта вас устроил: * нажмите **Сохранить промпт**, чтобы сохранить подготовленный промпт в библиотеке. Сохранение также выполняется автоматически, если вы не работаете с промптом в течение одной минуты. * нажмите **Добавить в избранное**, чтобы отображать лучшие промпты в начале списка, в библиотеке. * нажмите **Код**, чтобы просмотреть код запроса с промптом на одном из доступных языков: Python, Go, JavaScript, Ruby, C#, PHP, Java, Powershell. :::note Некоторые примеры кода на Python и JavaScript используют библиотеки [GigaChain](/ru/gigachain/overview). ::: Чтобы посмотреть расход токенов на отправку сообщений, нажмите кнопку **Обновить** рядом с полем **Токены** в блоке **Основные**. :::tip Вы можете в любой момент менять любые сообщения в диалоге с моделью. Для этого выберите сообщение, которое нужно изменить, нажмите кнопку **Редактировать** и укажите нужный текст. ::: ## Экспорт и импорт промптов Вы можете сохранять промпты в формате JSON и загружать готовые промпты в песочницу в разделе **Импорт/Экспорт** в верхнем меню. * Для экспорта нажмите **Скачать промпт**. Промпт со всеми настройками будет сохранен на ваш компьютер в формате JSON. Пример экспортированного промпта: ```json { "title": "Новый промпт", "useSystem": true, "system": "### Роль для модели\nТы помощник, способный давать ясные и полезные ответы на запросы пользователей. Однако иногда пользователи предоставляют недостаточно информации для понимания того, чего они хотят достичь. Когда такое происходит, твоя роль заключается в том, чтобы задавать дополнительные вопросы и получать необходимую информацию прежде чем отвечать на основной вопрос.\n\n### Задача\nПользователь предоставил запрос \"Ты пёс\". Это предложение само по себе недостаточно информативно для того, чтобы определить конкретную задачу или проблему, требующую решения. Ты должен задать уточняющие вопросы, чтобы лучше понять намерения пользователя и только потом создавать полноценный system prompt.\n\n#### Инструкция\n1. Определите цель сообщения (\"Ты пёс\"). Является ли это приветствием, вопросом, утверждением или другим типом высказывания?\n2. Поинтересуйтесь, какое поведение или реакцию от вас ожидает пользователь после этого заявления.\n3. Получив дополнительную информацию, используйте ее для корректировки своего поведения и подготовки подходящего ответа.\n\n#### Формат ответа\nИспользуйте вежливый тон и задавайте открытые вопросы, позволяющие пользователю предоставить больше информации.\n\n*Пример диалога:*\nВход: \"Ты пёс\"\nВыход: \nПривет! Интересно, что ты имел в виду, говоря \"Ты пёс\"? Хочешь пошутить, спросить что-то или просто сообщить мне о своем настроении? Дай немного больше информации, пожалуйста!\n\n#### Примечания\nЕсли пользователь продолжит предоставлять недостаточную информацию, продолжай мягко запрашивать подробности до тех пор, пока не сможешь четко понять задачу.\n\n## Критерии качества\n- Ясность вопросов для дополнительного выяснения\n- Использование открытых вопросов для получения необходимой информации\n- Способность адаптироваться к полученным данным и корректировать свое поведение соответственно\n- Полезность и практичность полученных дополнительных данных для дальнейшей работы", "messages": [ { "created_at": 1752060702, "role": "user", "content": "Привет!\nКак дела?" }, { "role": "assistant", "created_at": 1752061073, "content": "Привет! У меня всё отлично, спасибо, что спросил. А у тебя как настроение? Что планируешь делать сегодня?" } ], "censor": true, "model": "GigaChat-2-Max", "useTemperature": false, "useTopP": false, "useMaxTokens": false } ``` * Для импорта перетащите готовый промпт в формате JSON в специальную область на экране. После загрузки промпт можно редактировать и использовать в песочнице. --- # Объяснение кода [source](https://developers.sber.ru/docs/ru/gigachat/prompts-hub/programming/code-explainer.md) Пример промпта для объяснения кода. ```json { "model": "GigaChat-2-Max", "messages": [ { "role": "system", "content": "Ты – эксперт по упрощенному объяснению программных решений.\n\nТвоя задача – объяснить фрагмент программного кода таким образом, чтобы человек с минимальным опытом программирования понял его назначение и принципы работы. Объяснение должно быть написано простым языком, без использования сложных технических терминов. Каждый технический термин, если его использование неизбежно, должен сопровождаться подробным пояснением, сделанным понятным и доступным для широкой аудитории.\n\n## Как организовать свое объяснение:\n\n### 1. Определение основной функции кода\nНачни с общего описания того, что делает данный фрагмент кода. Ответь на вопросы: зачем он нужен? Определит ли он данные, выполнит ли расчет или изменяет ли состояние системы?\n\n### 2. Использование аналогий и метафор\nИспользуй простые сравнения и аналогии из повседневной жизни, чтобы объяснить сложные концепции. Например, переменные можно сравнить с коробками, которые хранят предметы; циклы – с повторяющимися действиями, такими как приготовление пищи.\n\n### 3. Разбиение на этапы\nРаздели процесс выполнения кода на логически завершенные этапы, объясняя каждый шаг отдельно. Это поможет читателю лучше понимать последовательность действий программы.\n\n### 4. Пояснение каждого элемента\nДля каждой важной строки или группы строк напиши простое объяснение того, что происходит и почему это важно.\n\n### 5. Приведение примеров\nЕсли возможно, добавляй небольшие примеры ввода и вывода, чтобы показать, как работает программа на практике.\n\n## Что делать, если встретится сложный технический термин:\n- Дать четкое определение понятным языком.\n- Использовать аналогии или примеры, чтобы проиллюстрировать значение термина.\n\n## Примеры (если уместно):\n*Пример 1:*\nФрагмент кода: `x = x + 1`\nОбъяснение: Эта строчка говорит компьютеру взять текущее значение переменной x, увеличить его на единицу и снова сохранить обратно в x. Это похоже на то, как если бы у вас был счетчик шагов, и после каждого шага вы увеличивали бы число на один.\n\n## Формат ответа\nОтвет должен быть представлен в виде текста, разделенного на логические абзацы, где каждый абзац объясняет отдельный аспект работы кода.\n\n## Важные моменты:\n- Избегай излишне технического языка.\n- Поддерживай последовательность и логичность изложения.\n- Стремись к максимальной ясности и доступности.\n\n## Ограничения:\n- Объяснение должно быть простым и понятным даже тем, кто впервые сталкивается с программированием.\n- Необходимо уделить особое внимание деталям, которые обычно вызывают затруднения у новичков.\n\n## Уровень сложности задания:\nПростой\n\n## Пользовательский сценарий:\nЭтот навык может пригодиться преподавателям информатики, студентам, стремящимся стать учителями программирования, разработчикам, пишущим документацию, и всем, кому нужно объяснить технические вещи людям без специальной подготовки.\n\n---\n\nКритерии оценки успешного выполнения задачи:\n- Простота и доступность объяснения.\n- Полное отсутствие сложных технических терминов без пояснений.\n- Ясность и последовательность изложения.\n- Использование аналогий и примеров из реальной жизни." }, { "role": "user", "content": "import random def bubble*sort(arr): n = len(arr) for i in range(n-1): for j in range(n-i-1): if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] return arr numbers = [random.randint(1, 100) for * in range(10)] print(“Unsorted array:”, numbers) sorted_numbers = bubble_sort(numbers) print(“Sorted array:”, sorted_numbers)" } ] } ``` ## Запуск промпта в песочнице Вы можете проверить работу промпта с разными параметрами в [песочнице](/ru/gigachat/prompts-hub/playground). Для этого: 1. Авторизуйтесь в [Studio](https://developers.sber.ru/studio/workspaces/my-space/get/gigachat-api). 2. Откройте проект GigaChat API. 3. В левой панели выберите раздел **Playground**. 4. В блоке **Шаблоны промптов** нажмите **Посмотреть**. 5. В открывшемся окне выберите промпт **{props.promptName}**. Промпт откроется в интерфейсе песочницы. Перед запуском вы можете выбрать модель и задать дополнительные параметры запроса. ## Примеры кода ```sh curl --location 'https://api.giga.chat/v1/chat/completions' \ --header 'Content-Type: application/json' \ --header 'Authorization: <токен_доступа>' \ --data '{ "model": "GigaChat", "messages": [ { "model": "GigaChat-2-Max", "messages": [ { "role": "system", "content": "Ты – эксперт по упрощенному объяснению программных решений.\n\nТвоя задача – объяснить фрагмент программного кода таким образом, чтобы человек с минимальным опытом программирования понял его назначение и принципы работы. Объяснение должно быть написано простым языком, без использования сложных технических терминов. Каждый технический термин, если его использование неизбежно, должен сопровождаться подробным пояснением, сделанным понятным и доступным для широкой аудитории.\n\n## Как организовать свое объяснение:\n\n### 1. Определение основной функции кода\nНачни с общего описания того, что делает данный фрагмент кода. Ответь на вопросы: зачем он нужен? Определит ли он данные, выполнит ли расчет или изменяет ли состояние системы?\n\n### 2. Использование аналогий и метафор\nИспользуй простые сравнения и аналогии из повседневной жизни, чтобы объяснить сложные концепции. Например, переменные можно сравнить с коробками, которые хранят предметы; циклы – с повторяющимися действиями, такими как приготовление пищи.\n\n### 3. Разбиение на этапы\nРаздели процесс выполнения кода на логически завершенные этапы, объясняя каждый шаг отдельно. Это поможет читателю лучше понимать последовательность действий программы.\n\n### 4. Пояснение каждого элемента\nДля каждой важной строки или группы строк напиши простое объяснение того, что происходит и почему это важно.\n\n### 5. Приведение примеров\nЕсли возможно, добавляй небольшие примеры ввода и вывода, чтобы показать, как работает программа на практике.\n\n## Что делать, если встретится сложный технический термин:\n- Дать четкое определение понятным языком.\n- Использовать аналогии или примеры, чтобы проиллюстрировать значение термина.\n\n## Примеры (если уместно):\n*Пример 1:*\nФрагмент кода: `x = x + 1`\nОбъяснение: Эта строчка говорит компьютеру взять текущее значение переменной x, увеличить его на единицу и снова сохранить обратно в x. Это похоже на то, как если бы у вас был счетчик шагов, и после каждого шага вы увеличивали бы число на один.\n\n## Формат ответа\nОтвет должен быть представлен в виде текста, разделенного на логические абзацы, где каждый абзац объясняет отдельный аспект работы кода.\n\n## Важные моменты:\n- Избегай излишне технического языка.\n- Поддерживай последовательность и логичность изложения.\n- Стремись к максимальной ясности и доступности.\n\n## Ограничения:\n- Объяснение должно быть простым и понятным даже тем, кто впервые сталкивается с программированием.\n- Необходимо уделить особое внимание деталям, которые обычно вызывают затруднения у новичков.\n\n## Уровень сложности задания:\nПростой\n\n## Пользовательский сценарий:\nЭтот навык может пригодиться преподавателям информатики, студентам, стремящимся стать учителями программирования, разработчикам, пишущим документацию, и всем, кому нужно объяснить технические вещи людям без специальной подготовки.\n\n---\n\nКритерии оценки успешного выполнения задачи:\n- Простота и доступность объяснения.\n- Полное отсутствие сложных технических терминов без пояснений.\n- Ясность и последовательность изложения.\n- Использование аналогий и примеров из реальной жизни." }, { "role": "user", "content": "import random def bubble*sort(arr): n = len(arr) for i in range(n-1): for j in range(n-i-1): if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] return arr numbers = [random.randint(1, 100) for * in range(10)] print(“Unsorted array:”, numbers) sorted_numbers = bubble_sort(numbers) print(“Sorted array:”, sorted_numbers)" } ] } ] }' ``` Использование промпта в SDK: ```py from gigachat import GigaChat from gigachat.models import Chat, Messages, MessagesRole giga = GigaChat( model="GigaChat", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", ) payload = Chat( messages=[ Messages( role=MessagesRole.SYSTEM, content="Ты – эксперт по упрощенному объяснению программных решений.\n\nТвоя задача – объяснить фрагмент программного кода таким образом, чтобы человек с минимальным опытом программирования понял его назначение и принципы работы. Объяснение должно быть написано простым языком, без использования сложных технических терминов. Каждый технический термин, если его использование неизбежно, должен сопровождаться подробным пояснением, сделанным понятным и доступным для широкой аудитории.\n\n## Как организовать свое объяснение:\n\n### 1. Определение основной функции кода\nНачни с общего описания того, что делает данный фрагмент кода. Ответь на вопросы: зачем он нужен? Определит ли он данные, выполнит ли расчет или изменяет ли состояние системы?\n\n### 2. Использование аналогий и метафор\nИспользуй простые сравнения и аналогии из повседневной жизни, чтобы объяснить сложные концепции. Например, переменные можно сравнить с коробками, которые хранят предметы; циклы – с повторяющимися действиями, такими как приготовление пищи.\n\n### 3. Разбиение на этапы\nРаздели процесс выполнения кода на логически завершенные этапы, объясняя каждый шаг отдельно. Это поможет читателю лучше понимать последовательность действий программы.\n\n### 4. Пояснение каждого элемента\nДля каждой важной строки или группы строк напиши простое объяснение того, что происходит и почему это важно.\n\n### 5. Приведение примеров\nЕсли возможно, добавляй небольшие примеры ввода и вывода, чтобы показать, как работает программа на практике.\n\n## Что делать, если встретится сложный технический термин:\n- Дать четкое определение понятным языком.\n- Использовать аналогии или примеры, чтобы проиллюстрировать значение термина.\n\n## Примеры (если уместно):\n*Пример 1:*\nФрагмент кода: `x = x + 1`\nОбъяснение: Эта строчка говорит компьютеру взять текущее значение переменной x, увеличить его на единицу и снова сохранить обратно в x. Это похоже на то, как если бы у вас был счетчик шагов, и после каждого шага вы увеличивали бы число на один.\n\n## Формат ответа\nОтвет должен быть представлен в виде текста, разделенного на логические абзацы, где каждый абзац объясняет отдельный аспект работы кода.\n\n## Важные моменты:\n- Избегай излишне технического языка.\n- Поддерживай последовательность и логичность изложения.\n- Стремись к максимальной ясности и доступности.\n\n## Ограничения:\n- Объяснение должно быть простым и понятным даже тем, кто впервые сталкивается с программированием.\n- Необходимо уделить особое внимание деталям, которые обычно вызывают затруднения у новичков.\n\n## Уровень сложности задания:\nПростой\n\n## Пользовательский сценарий:\nЭтот навык может пригодиться преподавателям информатики, студентам, стремящимся стать учителями программирования, разработчикам, пишущим документацию, и всем, кому нужно объяснить технические вещи людям без специальной подготовки.\n\n---\n\nКритерии оценки успешного выполнения задачи:\n- Простота и доступность объяснения.\n- Полное отсутствие сложных технических терминов без пояснений.\n- Ясность и последовательность изложения.\n- Использование аналогий и примеров из реальной жизни." ), Messages( role=MessagesRole.USER, content="import random def bubble*sort(arr): n = len(arr) for i in range(n-1): for j in range(n-i-1): if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] return arr numbers = [random.randint(1, 100) for * in range(10)] print(“Unsorted array:”, numbers) sorted_numbers = bubble_sort(numbers) print(“Sorted array:”, sorted_numbers)" ), ] ) response = giga.chat(payload) print(response.choices[0].message) ``` Использование промпта в партнерском пакете `langchain-gigachat`: ```py from langchain_gigachat.chat_models import GigaChat from langchain_core.messages import HumanMessage, SystemMessage giga = GigaChat( model="GigaChat", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", ) messages = [ SystemMessage("Ты – эксперт по упрощенному объяснению программных решений.\n\nТвоя задача – объяснить фрагмент программного кода таким образом, чтобы человек с минимальным опытом программирования понял его назначение и принципы работы. Объяснение должно быть написано простым языком, без использования сложных технических терминов. Каждый технический термин, если его использование неизбежно, должен сопровождаться подробным пояснением, сделанным понятным и доступным для широкой аудитории.\n\n## Как организовать свое объяснение:\n\n### 1. Определение основной функции кода\nНачни с общего описания того, что делает данный фрагмент кода. Ответь на вопросы: зачем он нужен? Определит ли он данные, выполнит ли расчет или изменяет ли состояние системы?\n\n### 2. Использование аналогий и метафор\nИспользуй простые сравнения и аналогии из повседневной жизни, чтобы объяснить сложные концепции. Например, переменные можно сравнить с коробками, которые хранят предметы; циклы – с повторяющимися действиями, такими как приготовление пищи.\n\n### 3. Разбиение на этапы\nРаздели процесс выполнения кода на логически завершенные этапы, объясняя каждый шаг отдельно. Это поможет читателю лучше понимать последовательность действий программы.\n\n### 4. Пояснение каждого элемента\nДля каждой важной строки или группы строк напиши простое объяснение того, что происходит и почему это важно.\n\n### 5. Приведение примеров\nЕсли возможно, добавляй небольшие примеры ввода и вывода, чтобы показать, как работает программа на практике.\n\n## Что делать, если встретится сложный технический термин:\n- Дать четкое определение понятным языком.\n- Использовать аналогии или примеры, чтобы проиллюстрировать значение термина.\n\n## Примеры (если уместно):\n*Пример 1:*\nФрагмент кода: `x = x + 1`\nОбъяснение: Эта строчка говорит компьютеру взять текущее значение переменной x, увеличить его на единицу и снова сохранить обратно в x. Это похоже на то, как если бы у вас был счетчик шагов, и после каждого шага вы увеличивали бы число на один.\n\n## Формат ответа\nОтвет должен быть представлен в виде текста, разделенного на логические абзацы, где каждый абзац объясняет отдельный аспект работы кода.\n\n## Важные моменты:\n- Избегай излишне технического языка.\n- Поддерживай последовательность и логичность изложения.\n- Стремись к максимальной ясности и доступности.\n\n## Ограничения:\n- Объяснение должно быть простым и понятным даже тем, кто впервые сталкивается с программированием.\n- Необходимо уделить особое внимание деталям, которые обычно вызывают затруднения у новичков.\n\n## Уровень сложности задания:\nПростой\n\n## Пользовательский сценарий:\nЭтот навык может пригодиться преподавателям информатики, студентам, стремящимся стать учителями программирования, разработчикам, пишущим документацию, и всем, кому нужно объяснить технические вещи людям без специальной подготовки.\n\n---\n\nКритерии оценки успешного выполнения задачи:\n- Простота и доступность объяснения.\n- Полное отсутствие сложных технических терминов без пояснений.\n- Ясность и последовательность изложения.\n- Использование аналогий и примеров из реальной жизни."), HumanMessage("import random def bubble*sort(arr): n = len(arr) for i in range(n-1): for j in range(n-i-1): if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] return arr numbers = [random.randint(1, 100) for * in range(10)] print(“Unsorted array:”, numbers) sorted_numbers = bubble_sort(numbers) print(“Sorted array:”, sorted_numbers)"), ] response = giga.invoke(messages) print(response) ``` Использование промпта в SDK: ```ts import { GigaChat } from 'gigachat'; const giga = new GigaChat({ model: 'GigaChat', credentials: 'ключ_авторизации', scope: 'GIGACHAT_API_PERS', }); const resp = await giga.chat({ messages: [ { role: 'system', content: 'Ты – эксперт по упрощенному объяснению программных решений.\n\nТвоя задача – объяснить фрагмент программного кода таким образом, чтобы человек с минимальным опытом программирования понял его назначение и принципы работы. Объяснение должно быть написано простым языком, без использования сложных технических терминов. Каждый технический термин, если его использование неизбежно, должен сопровождаться подробным пояснением, сделанным понятным и доступным для широкой аудитории.\n\n## Как организовать свое объяснение:\n\n### 1. Определение основной функции кода\nНачни с общего описания того, что делает данный фрагмент кода. Ответь на вопросы: зачем он нужен? Определит ли он данные, выполнит ли расчет или изменяет ли состояние системы?\n\n### 2. Использование аналогий и метафор\nИспользуй простые сравнения и аналогии из повседневной жизни, чтобы объяснить сложные концепции. Например, переменные можно сравнить с коробками, которые хранят предметы; циклы – с повторяющимися действиями, такими как приготовление пищи.\n\n### 3. Разбиение на этапы\nРаздели процесс выполнения кода на логически завершенные этапы, объясняя каждый шаг отдельно. Это поможет читателю лучше понимать последовательность действий программы.\n\n### 4. Пояснение каждого элемента\nДля каждой важной строки или группы строк напиши простое объяснение того, что происходит и почему это важно.\n\n### 5. Приведение примеров\nЕсли возможно, добавляй небольшие примеры ввода и вывода, чтобы показать, как работает программа на практике.\n\n## Что делать, если встретится сложный технический термин:\n- Дать четкое определение понятным языком.\n- Использовать аналогии или примеры, чтобы проиллюстрировать значение термина.\n\n## Примеры (если уместно):\n*Пример 1:*\nФрагмент кода: `x = x + 1`\nОбъяснение: Эта строчка говорит компьютеру взять текущее значение переменной x, увеличить его на единицу и снова сохранить обратно в x. Это похоже на то, как если бы у вас был счетчик шагов, и после каждого шага вы увеличивали бы число на один.\n\n## Формат ответа\nОтвет должен быть представлен в виде текста, разделенного на логические абзацы, где каждый абзац объясняет отдельный аспект работы кода.\n\n## Важные моменты:\n- Избегай излишне технического языка.\n- Поддерживай последовательность и логичность изложения.\n- Стремись к максимальной ясности и доступности.\n\n## Ограничения:\n- Объяснение должно быть простым и понятным даже тем, кто впервые сталкивается с программированием.\n- Необходимо уделить особое внимание деталям, которые обычно вызывают затруднения у новичков.\n\n## Уровень сложности задания:\nПростой\n\n## Пользовательский сценарий:\nЭтот навык может пригодиться преподавателям информатики, студентам, стремящимся стать учителями программирования, разработчикам, пишущим документацию, и всем, кому нужно объяснить технические вещи людям без специальной подготовки.\n\n---\n\nКритерии оценки успешного выполнения задачи:\n- Простота и доступность объяснения.\n- Полное отсутствие сложных технических терминов без пояснений.\n- Ясность и последовательность изложения.\n- Использование аналогий и примеров из реальной жизни.', }, { role: 'user', content: 'import random def bubble*sort(arr): n = len(arr) for i in range(n-1): for j in range(n-i-1): if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] return arr numbers = [random.randint(1, 100) for * in range(10)] print(“Unsorted array:”, numbers) sorted_numbers = bubble_sort(numbers) print(“Sorted array:”, sorted_numbers)', }, ], }); console.log(resp.choices[0]?.message); ``` Использование промпта в партнерском пакете `langchain-gigachat`: ```ts import { GigaChat } from 'langchain-gigachat'; import { HumanMessage, SystemMessage } from '@langchain/core/messages'; const giga = new GigaChat({ model: 'GigaChat-2-Max', credentials: 'ключ_авторизации', scope: 'GIGACHAT_API_PERS', }); const messages = [ new SystemMessage( 'Ты – эксперт по упрощенному объяснению программных решений.\n\nТвоя задача – объяснить фрагмент программного кода таким образом, чтобы человек с минимальным опытом программирования понял его назначение и принципы работы. Объяснение должно быть написано простым языком, без использования сложных технических терминов. Каждый технический термин, если его использование неизбежно, должен сопровождаться подробным пояснением, сделанным понятным и доступным для широкой аудитории.\n\n## Как организовать свое объяснение:\n\n### 1. Определение основной функции кода\nНачни с общего описания того, что делает данный фрагмент кода. Ответь на вопросы: зачем он нужен? Определит ли он данные, выполнит ли расчет или изменяет ли состояние системы?\n\n### 2. Использование аналогий и метафор\nИспользуй простые сравнения и аналогии из повседневной жизни, чтобы объяснить сложные концепции. Например, переменные можно сравнить с коробками, которые хранят предметы; циклы – с повторяющимися действиями, такими как приготовление пищи.\n\n### 3. Разбиение на этапы\nРаздели процесс выполнения кода на логически завершенные этапы, объясняя каждый шаг отдельно. Это поможет читателю лучше понимать последовательность действий программы.\n\n### 4. Пояснение каждого элемента\nДля каждой важной строки или группы строк напиши простое объяснение того, что происходит и почему это важно.\n\n### 5. Приведение примеров\nЕсли возможно, добавляй небольшие примеры ввода и вывода, чтобы показать, как работает программа на практике.\n\n## Что делать, если встретится сложный технический термин:\n- Дать четкое определение понятным языком.\n- Использовать аналогии или примеры, чтобы проиллюстрировать значение термина.\n\n## Примеры (если уместно):\n*Пример 1:*\nФрагмент кода: `x = x + 1`\nОбъяснение: Эта строчка говорит компьютеру взять текущее значение переменной x, увеличить его на единицу и снова сохранить обратно в x. Это похоже на то, как если бы у вас был счетчик шагов, и после каждого шага вы увеличивали бы число на один.\n\n## Формат ответа\nОтвет должен быть представлен в виде текста, разделенного на логические абзацы, где каждый абзац объясняет отдельный аспект работы кода.\n\n## Важные моменты:\n- Избегай излишне технического языка.\n- Поддерживай последовательность и логичность изложения.\n- Стремись к максимальной ясности и доступности.\n\n## Ограничения:\n- Объяснение должно быть простым и понятным даже тем, кто впервые сталкивается с программированием.\n- Необходимо уделить особое внимание деталям, которые обычно вызывают затруднения у новичков.\n\n## Уровень сложности задания:\nПростой\n\n## Пользовательский сценарий:\nЭтот навык может пригодиться преподавателям информатики, студентам, стремящимся стать учителями программирования, разработчикам, пишущим документацию, и всем, кому нужно объяснить технические вещи людям без специальной подготовки.\n\n---\n\nКритерии оценки успешного выполнения задачи:\n- Простота и доступность объяснения.\n- Полное отсутствие сложных технических терминов без пояснений.\n- Ясность и последовательность изложения.\n- Использование аналогий и примеров из реальной жизни.', ), new HumanMessage( 'import random def bubble*sort(arr): n = len(arr) for i in range(n-1): for j in range(n-i-1): if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] return arr numbers = [random.randint(1, 100) for * in range(10)] print(“Unsorted array:”, numbers) sorted_numbers = bubble_sort(numbers) print(“Sorted array:”, sorted_numbers)', ), ]; const response = await giga.invoke(messages); console.log(response); ```
Пример ответа модели Давай разберем этот код вместе так, будто мы объясняем его человеку, который никогда раньше не видел программирование. ## Основная функция кода: Этот небольшой кусочек программного кода создает список случайных чисел и затем сортирует их от меньшего к большему. Таким образом, главная цель этого фрагмента — научить компьютер упорядочивать числа. ## Поэтапный разбор кода: ### Шаг 1: Подготовка необходимых инструментов ```python import random ``` Здесь мы говорим компьютеру подключить специальный набор функций, позволяющий генерировать случайные числа. Нам понадобится эта возможность чуть позже, когда будем создавать наш список чисел. ### Шаг 2: Создание функции сортировки "пузырьком" ```python def bubble_sort(arr): n = len(arr) for i in range(n-1): for j in range(n-i-1): if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] return arr ``` Функция называется **bubble\_sort** ("сортировка пузырьком"). Она берет на вход список чисел и меняет порядок элементов внутри него до тех пор, пока они не будут расположены от наименьшего к наибольшему. * Представьте себе большую коробку с перемешанными кубиками разного размера. Мы хотим расположить эти кубики от самого маленького до самого большого. Сортировка пузырьком - это как сравнивать два соседних кубика и менять их местами, если большой оказался слева от маленького. После нескольких таких сравнений самый большой кубик окажется справа, а маленький слева. Вот так же работает и наша программа. * В этой части кода: * `n` запоминает количество чисел в списке. * Два цикла (`for`) помогают программе пройти по каждому числу несколько раз, сравнивая соседние элементы друг с другом. * Если одно число больше следующего за ним, программа просто меняет их местами. ### Шаг 3: Генерация списка случайных чисел ```python numbers = [random.randint(1, 100) for _ in range(10)] ``` Эта строка создаёт список из десяти случайных чисел, каждое из которых находится между 1 и 100. Представьте, что вы бросаете игральные кости десять раз и записываете выпавшие значения — примерно так же действует эта часть программы. ### Шаг 4: Печать несортированного списка ```python print("Unsorted array:", numbers) ``` Мы выводим список случайных чисел на экран перед сортировкой, чтобы видеть исходную мешанину. ### Шаг 5: Вызов функции сортировки ```python sorted_numbers = bubble_sort(numbers) ``` Теперь мы используем нашу функцию сортировки пузырьком, передав ей список чисел. Программа выполняет все необходимые сравнения и перестановки, а результат сохраняется в новой переменной `sorted_numbers`. ### Шаг 6: Печать отсортированного списка ```python print("Sorted array:", sorted_numbers) ``` После того, как числа были успешно отсортированы, мы выводим их на экран в правильном порядке. ## Пример работы программы: Допустим, программа случайно создала такой список чисел: ``` [87, 34, 9, 56, 23, 78, 45, 12, 67, 3] ``` После сортировки программой, выведется уже отсортированный список: ``` [3, 9, 12, 23, 34, 45, 56, 67, 78, 87] ``` Вот и всё! Теперь ты знаешь, как работает простой алгоритм сортировки чисел.
--- # Консультации по Git [source](https://developers.sber.ru/docs/ru/gigachat/prompts-hub/programming/git-consultant.md) Пример объяснения действий в Git по запросу пользователя. ```json { "model": "GigaChat-2-Max", "messages": [ { "role": "user", "content": "Я изменил локальные файлы и хочу сохранить их в своем локальном репозитории git. Что для этого сделать?" } ] } ``` ## Запуск промпта в песочнице Вы можете проверить работу промпта с разными параметрами в [песочнице](/ru/gigachat/prompts-hub/playground). Для этого: 1. Авторизуйтесь в [Studio](https://developers.sber.ru/studio/workspaces/my-space/get/gigachat-api). 2. Откройте проект GigaChat API. 3. В левой панели выберите раздел **Playground**. 4. В блоке **Шаблоны промптов** нажмите **Посмотреть**. 5. В открывшемся окне выберите промпт **{props.promptName}**. Промпт откроется в интерфейсе песочницы. Перед запуском вы можете выбрать модель и задать дополнительные параметры запроса. ## Примеры кода ```sh curl --location 'https://api.giga.chat/v1/chat/completions' \ --header 'Content-Type: application/json' \ --header 'Authorization: <токен_доступа>' \ --data '{ "model": "GigaChat", "messages": [ { "model": "GigaChat-2-Max", "messages": [ { "role": "user", "content": "Я изменил локальные файлы и хочу сохранить их в своем локальном репозитории git. Что для этого сделать?" } ] } ] }' ``` Использование промпта в SDK: ```py from gigachat import GigaChat from gigachat.models import Chat, Messages, MessagesRole giga = GigaChat( model="GigaChat-2-Max", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", ) payload = Chat( messages=[ Messages( role=MessagesRole.USER, content="Я изменил локальные файлы и хочу сохранить их в своем локальном репозитории git. Что для этого сделать?" ), ] ) response = giga.chat(payload) print(response.choices[0].message) ``` Использование промпта в партнерском пакете `langchain-gigachat`: ```py from langchain_gigachat.chat_models import GigaChat from langchain_core.messages import HumanMessage, SystemMessage giga = GigaChat( model="GigaChat-2-Max", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", ) messages = [ HumanMessage("Я изменил локальные файлы и хочу сохранить их в своем локальном репозитории git. Что для этого сделать?"), ] response = giga.invoke(messages) print(response) ``` Использование промпта в SDK: ```ts import { GigaChat } from 'gigachat'; const giga = new GigaChat({ model: 'GigaChat-2-Max', credentials: 'ключ_авторизации', scope: 'GIGACHAT_API_PERS', }); const resp = await giga.chat({ messages: [ { role: 'user', content: 'Я изменил локальные файлы и хочу сохранить их в своем локальном репозитории git. Что для этого сделать?', }, ], }); console.log(resp.choices[0]?.message); ``` Использование промпта в партнерском пакете `langchain-gigachat`: ```ts import { GigaChat } from 'langchain-gigachat'; import { HumanMessage, SystemMessage } from '@langchain/core/messages'; const giga = new GigaChat({ model: 'GigaChat-2-Max', credentials: 'ключ_авторизации', scope: 'GIGACHAT_API_PERS', }); const messages = [ new HumanMessage( 'Я изменил локальные файлы и хочу сохранить их в своем локальном репозитории git. Что для этого сделать?', ), ]; const response = await giga.invoke(messages); console.log(response); ```
Пример ответа модели ```markdown Чтобы сохранить изменения файлов в локальном Git-репозитории, нужно выполнить следующие шаги (предполагается, что вы уже находитесь внутри нужного каталога): 1. **Проверьте статус изменений:** git status Эта команда покажет список всех изменённых, новых и удалённых файлов. 2. **Добавьте изменённые файлы в индекс (стейджинг):** Если хотите добавить все измененные и новые файлы сразу: git add . Чтобы добавить конкретный файл вручную: git add имя_файла 3. **Создайте коммит:** Это сохранит ваши изменения в истории репозитория вместе с пояснительным сообщением: git commit -m "Ваше сообщение" 4. **(Опционально)** Отправка изменений на удалённый сервер: Если ваш проект связан с удалённым репозиторием (например, на GitHub), отправьте свои изменения туда командой: git push origin main Таким образом, полный процесс выглядит примерно так: git status git add . git commit -m "Сохранение моих изменений" После выполнения этих шагов ваши изменения будут зафиксированы в локальной версии проекта. ```
--- # Основы промпт-инжиниринга [source](https://developers.sber.ru/docs/ru/gigachat/prompts-hub/prompt-engineering.md) Промпт-инжиниринг — это процесс создания эффективных и точных промптов для работы с большими языковыми моделями (LLM). Промпт (от англ. prompt — «подсказка») — это текстовое описание задачи, которую необходимо выполнить с помощью ИИ-модели. Это запрос, который задается модели для генерации текста, изображений, кода или других видов контента. Например, если вы хотите получить изображение в стиле картины «Звездная ночь» Ван Гога, то ваш промпт может выглядеть так: «Ты — профессиональный иллюстратор. Тебе хорошо известны стиль и манера письма популярных художников. Твоя задача — создавать изображения в манере выбранного художника. Создай изображение ночного неба в стиле Ван Гога». Модель проанализирует этот запрос и создаст изображение, соответствующее вашему запросу. О том, из каких элементов состоит промпт, мы расскажем ниже. ## Задача промпт-инжиниринга Основная задача — создавать и формулировать такие промпты для больших языковых моделей (LLM), чтобы получать от них наиболее точные и релевантные результаты. Для этого нужно: * уметь формулировать запросы так, чтобы модель могла понять и выполнить задачу максимально точно; * изучать особенности работы модели, ее ограничения и возможности; * анализировать данные и требования к результату; * иметь критерии оценки качественного промпта. В процессе промпт-инжиниринга может быть собрана библиотека промптов. **Библиотека промптов** — это набор **качественных промптов**, которые можно использовать для обучения или тестирования языковой модели. Промпты в библиотеке могут быть сгруппированы по темам, стилям или другим параметрам, что упрощает их поиск и использование. Применение библиотеки промптов позволяет ускорить процесс создания контента с помощью языковых моделей, а также обеспечивает более предсказуемый результат, поскольку все запросы уже были предварительно проверены. При этом нужно учитывать, что модели регулярно обновляются и будет полезно тестировать имеющиеся промпты на новых версиях. ## Как создать качественный промпт Качественный промпт — это хорошо структурированный и детализированный запрос, который точно передает намерение пользователя и дает нейросети достаточно информации для генерации корректного и релевантного ответа. Такой промпт повышает вероятность получения желаемого результата. Для GigaChat API одновременно используются: * **Системный промпт (system prompt)** — специальное сообщение, используемое для управления поведением языковой модели. С помощью системного промпта пользователь передает модели контекст задачи и описывает инструкцию поведения. В системном промпте мы описываем правила и даем инструкции, которым модель должна следовать при генерации ответа. При создании чата или сохранении контекста диалога, системный промпт можно передать только один раз в самом первом сообщении. * **Пользовательский промпт (user prompt)** — это запрос пользователя, который должна выполнить модель, следуя инструкциям, которые описаны в системном промпте. Вместе они составляют один запрос к нейросети. Например: **Системный промпт** ```sh-session Ты — учитель русского языка, идеально знающий русский язык. Во входных данных тебе дадут текст, который надо исправить. Тебе требуется исправить орфографию и расставить знаки препинания в соответствии с правилами русского литературного языка: точки, запятые и знаки вопроса. В конце повествовательного предложения обязательно ставь точку. Ставь знак вопроса в конце предложения, если в нем есть слова, которые относятся к вопросительным или если предложение с большой долей вероятности является вопросом. Не добавляй дополнительные слова. Не исправляй стиль текста. В ответе верни ТОЛЬКО входной запрос с расставленными знаками препинания и исправленными орфографическими ошибками. Не давай объяснений, почему ты так или иначе исправил текст ``` **Пользовательский промпт** ```sh-session В нутри меня бушует океан эмоций который сложно обуздать. Я не могу панять, что со мной происходит. Но я знаю что это не просто так Это какбудто новый уровень жизни. ``` Системный промпт, как правило, включает в себя: * Роль — специфическую функцию, которая поможет решить задачу в определенных рамках. Роль может быть как условно одушевленной, так и неодушевленной. ```sh-session Примеры: 1. Ты — профессиональный копирайтер с широкими знаниями в области медицины на уровне выпускника медвуза. Ты умеешь писать как длинные, так и короткие тексты на медицинскую тему. 2. Ты — бот медицинской компании, который дает короткие ответы на вопросы о медицине. ``` * Входные данные — это информация для получения ответа. ```sh-session В запросе пользователя (входных данных) будут указаны следующие данные: - тема текста; - формат (статья, эссе, заметка); - размер текста (будет указано количество знаков); - ключевые слова ``` * Задача — это четкое указание, что вы хотите получить в качестве ответа модели. Это может быть текст, анализ данных, примеры кода, краткий или развернутый ответ на вопрос и т.д. ```sh-session Сгенерируй текст, используя входные данные. Используй подтвержденные медицинские источники, давай на них ссылки. Используй данные только за последние 3 года. ``` * Индикатор вывода — формат или тип ожидаемого ответа от модели после обработки входных данных. Также можно задать ограничения для ответа модели. ```sh-session Формат ответа: - у текста всегда есть заголовок, он соответствует заданной теме; - если используются цитаты, то в скобках надо указать ссылки на источник, автора и название источника; - придерживайся научного стиля, используй медицинские термины; - пиши текст только в рамках выбранной темы; - текст не должен превышать 1500 знаков без пробелов ``` Пример качественного системного промпта, который включает в себя роль, входные данные, задачу и индикатор вывода: ```sh-session Ты — профессиональный копирайтер с широкими знаниями в области медицины на уровне выпускника медвуза. Ты умеешь писать как длинные, так и короткие тексты на медицинскую тему. В запросе пользователя (входных данных) будут указаны следующие данные: - тема текста; - формат (статья, эссе, заметка); - размер текста (будет указано количество знаков); - ключевые слова. Сгенерируй текст, используя входные данные. Используй подтвержденные медицинские источники, давай на них ссылки. Используй данные только за последние 3 года. Формат ответа: - у текста всегда есть заголовок, он соответствует заданной теме; - если используются цитаты, то в скобках надо указать ссылки на источник, автора и название источника); - придерживайся научного стиля, используй медицинские термины; - пиши текст только в рамках выбранной темы; - текст не должен превышать 1500 знаков без пробелов или меньше, если это указано. ``` Пользовательский промпт: ```sh-session Сгенерируй заметку на тему «Профилактика ОРЗ в зимний период». Ключевые слова: ОРЗ, вирусы, профилактика. ``` ## Основные рекомендации для создания промптов **Создавайте однозначные запросы** В запросе не должно быть двусмысленных формулировок или противоречий. ```sh-session Ты – дизайнер интерьера. Твоя задача – разработать интерьер комнаты, который сочетает в себе минимализм и максимализм, создавая ощущение буйства цвета и фактур, но при этом он был прост и лаконичен. Интерьер должен включать элементы обоих стилей, при этом сохраняя гармонию и функциональность пространства. Формат ответа: 1. Описание концепции интерьера. 2. Основные элементы минимализма. 3. Основные элементы максимализма. 4. Примеры сочетаний этих элементов. Комментарий к промпту: минимализм и максимализм — противоположные по стилю направления. Даже если в промпте есть все обязательные элементы: роль, задача и т.д., но есть противоречие, то ответ модели может быть неприменимым ``` **Используйте актуальные данные** Модель может выдать неактуальную информацию, если промпт содержит устаревшие данные. ```sh-session Ты – аналитик данных. Твоя задача – спрогнозировать спрос на мобильные телефоны в 2023 году, основываясь на данных продаж мобильных телефонов за 2005 год. Используй формальные методы анализа данных. Избегай сложных формулировок. Прогноз должен учитывать изменения технологий, потребительских предпочтений и экономических условий за последние годы. Формат вывода: * Описание метода прогнозирования. * Основные факторы, влияющие на спрос. * Прогнозируемый объем продаж. * Рекомендации по корректировке стратегии. Комментарий к промпту: в промпте есть необходимые элементы, но из-за неактуальных данных ответ, вероятно, будет неприменим. ``` **Приводите примеры** Добавьте в промпт примеры, которые продемонстрируют модели, как следует выполнять задания правильно. Модель будет стремиться обнаружить закономерности и связи в приведенных примерах и использовать их для формирования своего ответа. Экспериментируйте с оптимальным количеством примеров: от одного до нескольких. ```sh-session Ты - руководитель отдела разработки. Твоя задача - определить ключевые этапы работы над проектом. Ты используешь формальный стиль. Избегай сложных формулировок. Задачи не нумеровать, а обозначать новой строкой с дефисом перед задачей. Входные данные будут содержать описание проекта. Выдаваемый результат должен быть в следующем формате: Проект: <название>. Задачи: - задача. - задача. - задача. Пример результата: Проект: Мобильное приложение для доставки еды. Задачи: - Анализ требований заказчика. - Проектирование архитектуры приложения. - Разработка клиентской части. - Разработка серверной части. - Тестирование и отладка. - Подготовка к релизу. ``` ## Что поможет улучшить промпт * **Экспериментируйте с формулировками.** Создайте несколько вариантов запроса на одну тему и проанализируйте полученные результаты, чтобы выявить наиболее продуктивные подходы. * **Анализируйте ответы.** Используйте полученные данные для дальнейшей оптимизации промптов. Постоянный анализ ответов поможет улучшить качество запросов и, как следствие, итоговых результатов. * **Учитывайте целевую аудиторию, для которой предназначен ответ.** Ориентируйтесь на уровень знаний и интересы пользователей, чтобы адаптировать стиль и глубину ответа. Это особенно актуально, если ваш промпт будет использоваться для генерации контента, который должен быть понятен разным группам пользователей. * **Соблюдайте этику.** При использовании нейросетевой модели важно помнить о возможных этических последствиях. Нужно учитывать, каким образом созданные промпты могут повлиять на общество. Например, неправильно сформулированный промпт может привести к созданию предвзятых или дискриминационных текстов, изображений или решений. Поэтому важно разрабатывать промпты с учетом принципов справедливости, прозрачности и ответственности. Подробнее — в разделе документации GigaChat [Тематические ограничения запросов](/ru/gigachat/limitations). ## Настройка параметров При настройке генерации ответов на запросы к нейросети, существует несколько параметров, которые могут влиять на результат. Эти параметры помогают управлять поведением модели и получать нужный результат, будь то точное следование правилам, креативная генерация или что-то среднее. Вот основные из них: * **temperature.** Температура контролирует степень случайности выбора слов. При низкой температуре модель будет более предсказуемой и консервативной, выбирая наиболее вероятные слова. Высокая температура увеличивает разнообразие ответов, но может привести к менее связным текстам. Не рекомендуется использовать совместно с параметром top\_p. * **repetition\_penalty.** Количество повторений слов. Значение 1.0 — ничего не менять (нейтральное значение), от 0 до 1 — повторять уже сказанные слова, от 1 и далее стараться не использовать сказанные слова. * **Топ-p.** Альтернатива параметру temperature, где модель учитывает результаты токенов с вероятностной массой top\_p. Таким образом, 0.1 означает, что учитываются только токены, составляющие верхнюю 10%-ную массу вероятности. Значения от 0 до 1. Не рекомендуется использовать совместно с параметром temperature. * **max\_tokens.** Ограничение максимальной длины генерируемого текста. Это полезно для контроля объема ответа и предотвращения слишком длинных текстов. ## Проблема достоверности ответов модели Современные языковые модели (LLM) способны создавать ответы, которые выглядят логично и убедительно, но иногда они могут быть вымышленными. Чтобы повысить точность и фактическую достоверность ответов, а также уменьшить вероятность появления несогласованных или выдуманных данных, можно улучшить промпты. * **Используйте примеры и шаблоны.** Предоставление примеров или шаблонов может помочь модели понять, как следует формировать ответ. Это особенно полезно при работе с задачами, требующими соблюдения определенных форматов или стилей. * **Ограничьте свободу интерпретации.** Если модель имеет слишком большую свободу в интерпретации входных данных, это может привести к генерации выдуманных или несогласованных ответов. Ограничение свободы интерпретации помогает модели сосредоточиться на наиболее вероятных и согласованных ответах. * **Добавьте проверку фактов.** Внедрение механизмов проверки фактов может помочь снизить вероятность генерации ложной информации. Это может быть реализовано путем добавления внешних источников информации или использования баз данных фактов. * **Обеспечьте разнообразие данных.** Использование разнообразных данных из разных источников помогает модели научиться генерировать ответы, основанные на реальных фактах и примерах. Разнообразие данных способствует более точному и актуальному обучению. * **Регулярно обновляйте модель.** Постоянное обновление модели новыми данными и исправлениями помогает поддерживать ее актуальность и точность. Регулярные обновления способствуют генерации более точных и релевантных ответов. [Модели GigaChat](/ru/gigachat/models/main) постоянно обновляются, подробнее можно узнать из документации. :::tip Пройдите [курс](https://courses.sberuniversity.ru/llm-gigachat/), чтобы научиться составлять наиболее эффективные промпты. Вы также можете использовать базу знаний, чтобы изучить [подробное руководство по работе с промптами](https://giga.chat/help/articles/prompt-guide) и ознакомиться с [тематическими примерами](/ru/gigachat/prompts-hub/overview). ::: --- # Генерация вопросов к заданному тексту [source](https://developers.sber.ru/docs/ru/gigachat/prompts-hub/qna/question-generation.md) Пример промпта для генерации различных вопросов к переданному тексту. ```json { "model": "GigaChat-2-Max", "messages": [ { "role": "system", "content": "Ты – виртуальный ассистент, создающий короткие и уникальные вопросы для читателей на основе конкретной части текста.\n\n## Задача\nНа основании предоставленного фрагмента текста составить три оригинальных и кратких вопроса, которые читатели могли бы задать после прочтения данной части материала. \n\n## Правила формирования вопросов\n1. Каждый вопрос должен касаться конкретного аспекта представленного текста.\n2. Формулировка должна быть короткой и ясной.\n3. Избегай прямых цитирований текста.\n4. Вопросы не должны содержать оценочных суждений, точек зрения, мнений.\n\n## Пример ввода-вывода\nUser: Согласно последним исследованиям, большинство жителей мегаполисов предпочитают использовать общественный транспорт вместо личного автомобиля.\nAssistant:\n- Почему жители крупных городов чаще выбирают общественный транспорт?\n- Какие факторы влияют на выбор общественного транспорта жителями мегаполиса?\n- Насколько популярно использование личных автомобилей среди горожан?" }, { "role": "user", "content": "Согласно последним исследованиям, большинство жителей мегаполисов предпочитают использовать общественный транспорт вместо личного автомобиля." } ] } ``` ## Запуск промпта в песочнице Вы можете проверить работу промпта с разными параметрами в [песочнице](/ru/gigachat/prompts-hub/playground). Для этого: 1. Авторизуйтесь в [Studio](https://developers.sber.ru/studio/workspaces/my-space/get/gigachat-api). 2. Откройте проект GigaChat API. 3. В левой панели выберите раздел **Playground**. 4. В блоке **Шаблоны промптов** нажмите **Посмотреть**. 5. В открывшемся окне выберите промпт **{props.promptName}**. Промпт откроется в интерфейсе песочницы. Перед запуском вы можете выбрать модель и задать дополнительные параметры запроса. ## Примеры кода ```sh curl --location 'https://api.giga.chat/v1/chat/completions' \ --header 'Content-Type: application/json' \ --header 'Authorization: <токен_доступа>' \ --data '{ "model": "GigaChat-2-Max", "messages": [ { "model": "GigaChat-2-Max", "messages": [ { "role": "system", "content": "Ты – виртуальный ассистент, создающий короткие и уникальные вопросы для читателей на основе конкретной части текста.\n\n## Задача\nНа основании предоставленного фрагмента текста составить три оригинальных и кратких вопроса, которые читатели могли бы задать после прочтения данной части материала. \n\n## Правила формирования вопросов\n1. Каждый вопрос должен касаться конкретного аспекта представленного текста.\n2. Формулировка должна быть короткой и ясной.\n3. Избегай прямых цитирований текста.\n4. Вопросы не должны содержать оценочных суждений, точек зрения, мнений.\n\n## Пример ввода-вывода\nUser: Согласно последним исследованиям, большинство жителей мегаполисов предпочитают использовать общественный транспорт вместо личного автомобиля.\nAssistant:\n- Почему жители крупных городов чаще выбирают общественный транспорт?\n- Какие факторы влияют на выбор общественного транспорта жителями мегаполиса?\n- Насколько популярно использование личных автомобилей среди горожан?" }, { "role": "user", "content": "Согласно последним исследованиям, большинство жителей мегаполисов предпочитают использовать общественный транспорт вместо личного автомобиля." } ] } ] }' ``` Использование промпта в SDK: ```py from gigachat import GigaChat from gigachat.models import Chat, Messages, MessagesRole giga = GigaChat( model="GigaChat-2-Max", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", ) payload = Chat( messages=[ Messages( role=MessagesRole.SYSTEM, content="Ты – виртуальный ассистент, создающий короткие и уникальные вопросы для читателей на основе конкретной части текста.\n\n## Задача\nНа основании предоставленного фрагмента текста составить три оригинальных и кратких вопроса, которые читатели могли бы задать после прочтения данной части материала. \n\n## Правила формирования вопросов\n1. Каждый вопрос должен касаться конкретного аспекта представленного текста.\n2. Формулировка должна быть короткой и ясной.\n3. Избегай прямых цитирований текста.\n4. Вопросы не должны содержать оценочных суждений, точек зрения, мнений.\n\n## Пример ввода-вывода\nUser: Согласно последним исследованиям, большинство жителей мегаполисов предпочитают использовать общественный транспорт вместо личного автомобиля.\nAssistant:\n- Почему жители крупных городов чаще выбирают общественный транспорт?\n- Какие факторы влияют на выбор общественного транспорта жителями мегаполиса?\n- Насколько популярно использование личных автомобилей среди горожан?" ), Messages( role=MessagesRole.USER, content="Согласно последним исследованиям, большинство жителей мегаполисов предпочитают использовать общественный транспорт вместо личного автомобиля." ), ] ) response = giga.chat(payload) print(response.choices[0].message) ``` Использование промпта в партнерском пакете `langchain-gigachat`: ```py from langchain_gigachat.chat_models import GigaChat from langchain_core.messages import HumanMessage, SystemMessage giga = GigaChat( model="GigaChat-2-Max", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", ) messages = [ SystemMessage("Ты – виртуальный ассистент, создающий короткие и уникальные вопросы для читателей на основе конкретной части текста.\n\n## Задача\nНа основании предоставленного фрагмента текста составить три оригинальных и кратких вопроса, которые читатели могли бы задать после прочтения данной части материала. \n\n## Правила формирования вопросов\n1. Каждый вопрос должен касаться конкретного аспекта представленного текста.\n2. Формулировка должна быть короткой и ясной.\n3. Избегай прямых цитирований текста.\n4. Вопросы не должны содержать оценочных суждений, точек зрения, мнений.\n\n## Пример ввода-вывода\nUser: Согласно последним исследованиям, большинство жителей мегаполисов предпочитают использовать общественный транспорт вместо личного автомобиля.\nAssistant:\n- Почему жители крупных городов чаще выбирают общественный транспорт?\n- Какие факторы влияют на выбор общественного транспорта жителями мегаполиса?\n- Насколько популярно использование личных автомобилей среди горожан?"), HumanMessage("Согласно последним исследованиям, большинство жителей мегаполисов предпочитают использовать общественный транспорт вместо личного автомобиля."), ] response = giga.invoke(messages) print(response) ``` Использование промпта в SDK: ```ts import { GigaChat } from 'gigachat'; const giga = new GigaChat({ model: 'GigaChat-2-Max', credentials: 'ключ_авторизации', scope: 'GIGACHAT_API_PERS', }); const resp = await giga.chat({ messages: [ { role: 'system', content: 'Ты – виртуальный ассистент, создающий короткие и уникальные вопросы для читателей на основе конкретной части текста.\n\n## Задача\nНа основании предоставленного фрагмента текста составить три оригинальных и кратких вопроса, которые читатели могли бы задать после прочтения данной части материала. \n\n## Правила формирования вопросов\n1. Каждый вопрос должен касаться конкретного аспекта представленного текста.\n2. Формулировка должна быть короткой и ясной.\n3. Избегай прямых цитирований текста.\n4. Вопросы не должны содержать оценочных суждений, точек зрения, мнений.\n\n## Пример ввода-вывода\nUser: Согласно последним исследованиям, большинство жителей мегаполисов предпочитают использовать общественный транспорт вместо личного автомобиля.\nAssistant:\n- Почему жители крупных городов чаще выбирают общественный транспорт?\n- Какие факторы влияют на выбор общественного транспорта жителями мегаполиса?\n- Насколько популярно использование личных автомобилей среди горожан?', }, { role: 'user', content: 'Согласно последним исследованиям, большинство жителей мегаполисов предпочитают использовать общественный транспорт вместо личного автомобиля.', }, ], }); console.log(resp.choices[0]?.message); ``` Использование промпта в партнерском пакете `langchain-gigachat`: ```ts import { GigaChat } from 'langchain-gigachat'; import { HumanMessage, SystemMessage } from '@langchain/core/messages'; const giga = new GigaChat({ model: 'GigaChat-2-Max', credentials: 'ключ_авторизации', scope: 'GIGACHAT_API_PERS', }); const messages = [ new SystemMessage( 'Ты – виртуальный ассистент, создающий короткие и уникальные вопросы для читателей на основе конкретной части текста.\n\n## Задача\nНа основании предоставленного фрагмента текста составить три оригинальных и кратких вопроса, которые читатели могли бы задать после прочтения данной части материала. \n\n## Правила формирования вопросов\n1. Каждый вопрос должен касаться конкретного аспекта представленного текста.\n2. Формулировка должна быть короткой и ясной.\n3. Избегай прямых цитирований текста.\n4. Вопросы не должны содержать оценочных суждений, точек зрения, мнений.\n\n## Пример ввода-вывода\nUser: Согласно последним исследованиям, большинство жителей мегаполисов предпочитают использовать общественный транспорт вместо личного автомобиля.\nAssistant:\n- Почему жители крупных городов чаще выбирают общественный транспорт?\n- Какие факторы влияют на выбор общественного транспорта жителями мегаполиса?\n- Насколько популярно использование личных автомобилей среди горожан?', ), new HumanMessage( 'Согласно последним исследованиям, большинство жителей мегаполисов предпочитают использовать общественный транспорт вместо личного автомобиля.', ), ]; const response = await giga.invoke(messages); console.log(response); ``` --- # Суммаризация [source](https://developers.sber.ru/docs/ru/gigachat/prompts-hub/summarization/map.md) Пример промпта для выделения из текста основных мыслей. ```json { "model": "GigaChat-2-Max", "messages": [ { "role": "system", "content": "Ты - умный ИИ-ассистент, в задачу которого входит суммаризация и реферирование длинных текстов.\n## Основные правила:\n- Входные данные - текст. На выходе ты должен предоставить краткий текст, в котором содержатся основные идеи исходного текста.\n- Избегай длинных и сложных предложений. \n- Объём сокращённого текста должен составлять не более 1/5 от исходного текста.\n- Сохраняй основной смысл документа. \n- Ни один фрагмент сокращённого текста не должен искажать смысл исходного текста.\n- Не включай информацию, не являющуюся важной для текста: избегай выводов, оценок, примеров и цитат.\nПредставь ответ в виде структурированного текста с абзацами. Каждый абзац содержит одну основную мысль. Используй заголовки в формате Markdown (## Заголовок) перед каждым логически завершённым блоком. Текст должен быть удобочитаемым и чётко разделённым." }, { "role": "user", "content": "При обновлении флагмана GigaChat существенно улучшили токенизатор: он эффективнее кодирует текст и обрабатывает языки программирования вместе с LaTeX. Последним двум мы уделили особое внимание: благодаря добавлению частых ключевых слов, поддержке пробелов, табуляций и переносов строк повысилась точность работы с кодовыми данными и улучшились итоговые метрики.\n\nТокенизатор делит текст на «кусочки» (токены), которыми впоследствии оперирует языковая модель для анализа и построения текста. Задача токенизатора — делать это максимально эффективно, а эта самая эффективность обычно измеряется либо с помощью фертильности, либо подсчитывается среднее число символов на один токен. Эффективность кодирования необходима для оптимизации инференса: важно, чтобы модель генерировала больше текста за то же количество токенов." } ], } ``` ## Запуск промпта в песочнице Вы можете проверить работу промпта с разными параметрами в [песочнице](/ru/gigachat/prompts-hub/playground). Для этого: 1. Авторизуйтесь в [Studio](https://developers.sber.ru/studio/workspaces/my-space/get/gigachat-api). 2. Откройте проект GigaChat API. 3. В левой панели выберите раздел **Playground**. 4. В блоке **Шаблоны промптов** нажмите **Посмотреть**. 5. В открывшемся окне выберите промпт **{props.promptName}**. Промпт откроется в интерфейсе песочницы. Перед запуском вы можете выбрать модель и задать дополнительные параметры запроса. ## Примеры кода ```sh curl --location 'https://api.giga.chat/v1/chat/completions' \ --header 'Content-Type: application/json' \ --header 'Authorization: <токен_доступа>' \ --data '{ "model": "GigaChat-2-Max", "messages": [ { "role": "system", "content": "Ты - умный ИИ-ассистент, в задачу которого входит суммаризация и реферирование длинных текстов.\n## Основные правила:\n- Входные данные - текст. На выходе ты должен предоставить краткий текст, в котором содержатся основные идеи исходного текста.\n- Избегай длинных и сложных предложений. \n- Объём сокращённого текста должен составлять не более 1/5 от исходного текста.\n- Сохраняй основной смысл документа. \n- Ни один фрагмент сокращённого текста не должен искажать смысл исходного текста.\n- Не включай информацию, не являющуюся важной для текста: избегай выводов, оценок, примеров и цитат.\nПредставь ответ в виде структурированного текста с абзацами. Каждый абзац содержит одну основную мысль. Используй заголовки в формате Markdown (## Заголовок) перед каждым логически завершённым блоком. Текст должен быть удобочитаемым и чётко разделённым." }, { "role": "user", "content": "При обновлении флагмана GigaChat существенно улучшили токенизатор: он эффективнее кодирует текст и обрабатывает языки программирования вместе с LaTeX. Последним двум мы уделили особое внимание: благодаря добавлению частых ключевых слов, поддержке пробелов, табуляций и переносов строк повысилась точность работы с кодовыми данными и улучшились итоговые метрики.\n\nТокенизатор делит текст на «кусочки» (токены), которыми впоследствии оперирует языковая модель для анализа и построения текста. Задача токенизатора — делать это максимально эффективно, а эта самая эффективность обычно измеряется либо с помощью фертильности, либо подсчитывается среднее число символов на один токен. Эффективность кодирования необходима для оптимизации инференса: важно, чтобы модель генерировала больше текста за то же количество токенов." } ] }' ``` Использование промпта в SDK: ```py from gigachat import GigaChat from gigachat.models import Chat, Messages, MessagesRole giga = GigaChat( model="GigaChat", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", ) payload = Chat( messages=[ Messages( role=MessagesRole.SYSTEM, content="Ты - умный ИИ-ассистент, в задачу которого входит суммаризация и реферирование длинных текстов.\n## Основные правила:\n- Входные данные - текст. На выходе ты должен предоставить краткий текст, в котором содержатся основные идеи исходного текста.\n- Избегай длинных и сложных предложений. \n- Объём сокращённого текста должен составлять не более 1/5 от исходного текста.\n- Сохраняй основной смысл документа. \n- Ни один фрагмент сокращённого текста не должен искажать смысл исходного текста.\n- Не включай информацию, не являющуюся важной для текста: избегай выводов, оценок, примеров и цитат.\nПредставь ответ в виде структурированного текста с абзацами. Каждый абзац содержит одну основную мысль. Используй заголовки в формате Markdown (## Заголовок) перед каждым логически завершённым блоком. Текст должен быть удобочитаемым и чётко разделённым." ), Messages( role=MessagesRole.USER, content="При обновлении флагмана GigaChat существенно улучшили токенизатор: он эффективнее кодирует текст и обрабатывает языки программирования вместе с LaTeX. Последним двум мы уделили особое внимание: благодаря добавлению частых ключевых слов, поддержке пробелов, табуляций и переносов строк повысилась точность работы с кодовыми данными и улучшились итоговые метрики.\n\nТокенизатор делит текст на «кусочки» (токены), которыми впоследствии оперирует языковая модель для анализа и построения текста. Задача токенизатора — делать это максимально эффективно, а эта самая эффективность обычно измеряется либо с помощью фертильности, либо подсчитывается среднее число символов на один токен. Эффективность кодирования необходима для оптимизации инференса: важно, чтобы модель генерировала больше текста за то же количество токенов." ), ] ) response = giga.chat(payload) print(response.choices[0].message) ``` Использование промпта в партнерском пакете `langchain-gigachat`: ```py from langchain_gigachat.chat_models import GigaChat from langchain_core.messages import HumanMessage, SystemMessage giga = GigaChat( model="GigaChat", credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", ) messages = [ SystemMessage("Ты - умный ИИ-ассистент, в задачу которого входит суммаризация и реферирование длинных текстов.\n## Основные правила:\n- Входные данные - текст. На выходе ты должен предоставить краткий текст, в котором содержатся основные идеи исходного текста.\n- Избегай длинных и сложных предложений. \n- Объём сокращённого текста должен составлять не более 1/5 от исходного текста.\n- Сохраняй основной смысл документа. \n- Ни один фрагмент сокращённого текста не должен искажать смысл исходного текста.\n- Не включай информацию, не являющуюся важной для текста: избегай выводов, оценок, примеров и цитат.\nПредставь ответ в виде структурированного текста с абзацами. Каждый абзац содержит одну основную мысль. Используй заголовки в формате Markdown (## Заголовок) перед каждым логически завершённым блоком. Текст должен быть удобочитаемым и чётко разделённым."), HumanMessage("При обновлении флагмана GigaChat существенно улучшили токенизатор: он эффективнее кодирует текст и обрабатывает языки программирования вместе с LaTeX. Последним двум мы уделили особое внимание: благодаря добавлению частых ключевых слов, поддержке пробелов, табуляций и переносов строк повысилась точность работы с кодовыми данными и улучшились итоговые метрики.\n\nТокенизатор делит текст на «кусочки» (токены), которыми впоследствии оперирует языковая модель для анализа и построения текста. Задача токенизатора — делать это максимально эффективно, а эта самая эффективность обычно измеряется либо с помощью фертильности, либо подсчитывается среднее число символов на один токен. Эффективность кодирования необходима для оптимизации инференса: важно, чтобы модель генерировала больше текста за то же количество токенов."), ] response = giga.invoke(messages) print(response) ``` Использование промпта в SDK: ```ts import { GigaChat } from 'gigachat'; const giga = new GigaChat({ model: 'GigaChat', credentials: 'ключ_авторизации', scope: 'GIGACHAT_API_PERS', }); const resp = await giga.chat({ messages: [ { role: 'system', content: 'Ты - умный ИИ-ассистент, в задачу которого входит суммаризация и реферирование длинных текстов.\n## Основные правила:\n- Входные данные - текст. На выходе ты должен предоставить краткий текст, в котором содержатся основные идеи исходного текста.\n- Избегай длинных и сложных предложений. \n- Объём сокращённого текста должен составлять не более 1/5 от исходного текста.\n- Сохраняй основной смысл документа. \n- Ни один фрагмент сокращённого текста не должен искажать смысл исходного текста.\n- Не включай информацию, не являющуюся важной для текста: избегай выводов, оценок, примеров и цитат.\nПредставь ответ в виде структурированного текста с абзацами. Каждый абзац содержит одну основную мысль. Используй заголовки в формате Markdown (## Заголовок) перед каждым логически завершённым блоком. Текст должен быть удобочитаемым и чётко разделённым.', }, { role: 'user', content: 'При обновлении флагмана GigaChat существенно улучшили токенизатор: он эффективнее кодирует текст и обрабатывает языки программирования вместе с LaTeX. Последним двум мы уделили особое внимание: благодаря добавлению частых ключевых слов, поддержке пробелов, табуляций и переносов строк повысилась точность работы с кодовыми данными и улучшились итоговые метрики.\n\nТокенизатор делит текст на «кусочки» (токены), которыми впоследствии оперирует языковая модель для анализа и построения текста. Задача токенизатора — делать это максимально эффективно, а эта самая эффективность обычно измеряется либо с помощью фертильности, либо подсчитывается среднее число символов на один токен. Эффективность кодирования необходима для оптимизации инференса: важно, чтобы модель генерировала больше текста за то же количество токенов.', }, ], }); console.log(resp.choices[0]?.message); ``` Использование промпта в партнерском пакете `langchain-gigachat`: ```ts import { GigaChat } from 'langchain-gigachat'; import { HumanMessage, SystemMessage } from '@langchain/core/messages'; const giga = new GigaChat({ model: 'GigaChat-2-Max', credentials: 'ключ_авторизации', scope: 'GIGACHAT_API_PERS', }); const messages = [ new SystemMessage( 'Ты - умный ИИ-ассистент, в задачу которого входит суммаризация и реферирование длинных текстов.\n## Основные правила:\n- Входные данные - текст. На выходе ты должен предоставить краткий текст, в котором содержатся основные идеи исходного текста.\n- Избегай длинных и сложных предложений. \n- Объём сокращённого текста должен составлять не более 1/5 от исходного текста.\n- Сохраняй основной смысл документа. \n- Ни один фрагмент сокращённого текста не должен искажать смысл исходного текста.\n- Не включай информацию, не являющуюся важной для текста: избегай выводов, оценок, примеров и цитат.\nПредставь ответ в виде структурированного текста с абзацами. Каждый абзац содержит одну основную мысль. Используй заголовки в формате Markdown (## Заголовок) перед каждым логически завершённым блоком. Текст должен быть удобочитаемым и чётко разделённым.', ), new HumanMessage( 'При обновлении флагмана GigaChat существенно улучшили токенизатор: он эффективнее кодирует текст и обрабатывает языки программирования вместе с LaTeX. Последним двум мы уделили особое внимание: благодаря добавлению частых ключевых слов, поддержке пробелов, табуляций и переносов строк повысилась точность работы с кодовыми данными и улучшились итоговые метрики.\n\nТокенизатор делит текст на «кусочки» (токены), которыми впоследствии оперирует языковая модель для анализа и построения текста. Задача токенизатора — делать это максимально эффективно, а эта самая эффективность обычно измеряется либо с помощью фертильности, либо подсчитывается среднее число символов на один токен. Эффективность кодирования необходима для оптимизации инференса: важно, чтобы модель генерировала больше текста за то же количество токенов.', ), ]; const response = await giga.invoke(messages); console.log(response); ``` --- # Регистрация в личном кабинете [source](https://developers.sber.ru/docs/ru/gigachat/quickstart/ind-create-project.md) Для работы с GigaChat API нужно зарегистрироваться в личном кабинете Studio и создать проект GigaChat API, где вы сможете приобретать пакеты с токенами, сгенерировать ключ авторизации и отслеживать статистику потребления. С помощью ключа авторизации вы можете получить токен доступа Access token для авторизации запросов к API. Подробнее — в разделе [Начало работы с API](/ru/gigachat/quickstart/ind-using-api). Для этого: 1. Зарегистрируйтесь в [личном кабинете](https://developers.sber.ru/studio/workspaces/my-space/get/gigachat-api), используя свой аккаунт Сбер ID. 2. Нажмите кнопку **Создать проект** в левом меню. 3. Выберите **GigaChat API** в разделе **AI-модели**. 4. В открывшемся окне: * Введите название проекта. * Ознакомьтесь и примите условия [пользовательского соглашения](/ru/policies/gigachat/agreement). В интерфейсе проекта можно: * Сгенерировать ключ авторизации (Authorization key). * Ознакомиться с условиями действующего тарифа. Каждому новому пользователю по умолчанию подключается тариф Freemium. Об условиях тарифа и доступных тарифных планах читайте в разделе [Тарифы и оплата](/ru/gigachat/api/tariffs). * Изучить [статистику потребления токенов](/ru/gigachat/guides/token-consumption). * Приобрести дополнительные пакеты токенов. * Узнать версию API, к которой предоставляется доступ. Версия указана в поле **Scope** в панели справа. Для физических лиц значение поля — `GIGACHAT_API_PERS`. --- # Покупка токенов [source](https://developers.sber.ru/docs/ru/gigachat/quickstart/ind-tokens-purchase.md) Физическим лицам доступен [freemium-режим](/ru/gigachat/api/tariffs) и платные пакеты токенов. Подробнее о тарифах — в разделе [Тарифы GigaChat API](/ru/gigachat/api/tariffs). Стоимость генерации текста зависит от того, к какой модели выполняется запрос. Модель задается в поле `model` запроса [POST /chat/completions](/ru/gigachat/api/reference/rest/post-chat.mdx). Подробнее — в разделе [Модели GigaChat](/ru/gigachat/models/main). Freemium-режим доступен только в личном пространстве в Studio. ## Как приобрести платные пакеты токенов Физическим лицам доступно несколько пакетов на выбор. Они отличаются количеством токенов и используемыми моделями. Оплатить выбранные пакеты можно только по банковской карте. Независимо от наличия оплаченного пакета сначала будут использованы бесплатные токены из freemium-режима. Неиспользованные токены пропадают по истечении срока действия пакета. Для покупки пакетов с токенами: 1. Авторизуйтесь в личном кабинете Studio по СберID. 2. Откройте проект GigaChat API. Вам станет доступна информация о текущих токенах и о платных пакетах. О создании проекта — в разделе [Регистрация в личном кабинете](/ru/gigachat/quickstart/ind-create-project). 3. Нажмите **Выбрать пакеты токенов**. Откроется раздел Магазин. 4. Выберите дополнительный пакет → нажмите **Купить** → проверьте корзину и нажмите **Перейти к оплате**. Для оплаты будет доступна только банковская карта. После успешной оплаты обновленный баланс токенов будет отображаться на главной странице проекта, в разделе **Пакеты токенов**, на вкладке **Активные**. Токены будут действительны от трех до шести месяцев в зависимости от [выбранного пакета](/ru/gigachat/api/tariffs). --- # Начало работы с API [source](https://developers.sber.ru/docs/ru/gigachat/quickstart/ind-using-api.md) В этом разделе вы узнаете как получить токен доступа и начать использовать GigaChat API. :::tip Руководство для [юрлиц и ИП](/ru/gigachat/quickstart/legal-using-api). ::: ## Получение ключа авторизации Перед началом работы нужно сгенерировать ключ авторизации в [проекте GigaChat API](/ru/gigachat/quickstart/ind-create-project).
Подробнее об Authorization key Ключ авторизации (англ. *Authorization key*) нужен для получения токена доступа Access token с помощью запроса , который использует Basic-схему аутентификации. Авторизационный ключ — строка, полученная в результате кодирования в Base64 клиентского идентификатора (Client ID) и ключа (Client Secret) API. Вы можете использовать готовый ключ из личного кабинета или самостоятельно закодировать Client ID и Client Secret.
Для этого: 1. Откройте проект **GigaChat API** в личном кабинете Studio. 2. В левой панели выберите раздел **Настройки API**. 3. Нажмите кнопку **Получить ключ**. Откроется окно **Сохраните ваш Authorization Key**. Окно Сохраните ваш Authorization Key :::note Ключ авторизации могут получить только пользователи с ролями **Владелец** и **Администратор** — для остальных ролей кнопка **Получить ключ** будет неактивна. Подробнее о ролях и их возможностях — в разделе [Создание команды и управление доступами](/ru/studio/space/settings/roles). ::: 4. Скопируйте и сохраните значения полей: * **Authorization Key**; * **Client ID**; * **Client Secret**. Ключ авторизации и Client Secret, отображаются только один раз и не хранятся в личном кабинете. При компрометации или утере ключа авторизации или Client Secret вы можете сгенерировать их повторно. Для этого нажмите кнопку **Получить новый ключ**. При повторной генерации нужно указать время, в течение которого будет действовать предыдущий ключ авторизации. Максимальное время действия — 250 минут. ## Получение токена доступа Токен доступа Access token нужен для авторизации запросов к GigaChat API по Bearer-схеме. Токен получается в обмен на ключ авторизации с помощью запроса . Токен действителен в течение 30 минут. Пример запроса для получения токена доступа: ```sh curl -L -X POST 'https://ngw.devices.sberbank.ru:9443/api/v2/oauth' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -H 'Accept: application/json' \ -H 'RqUID: <уникальный_идентификатор_запроса>' \ -H 'Authorization: Basic authorization_key' \ --data-urlencode 'scope=GIGACHAT_API_PERS' ``` `RqUID` — уникальный идентификатор запроса. Соответствует формату [`uuid4`](https://www.uuidgenerator.net/version4). Параметр для журналирования входящих вызовов и разбора инцидентов. Для создания уникального идентификатора можно использовать стандартные библиотеки и классы для генерации UUID и GUID. Для получения токена вы также можете использовать [Python SDK](/ru/gigachat/guides/using-sdks?lang=py). ```py from gigachat import GigaChat giga = GigaChat( base_url="https://api.giga.chat/v1", credentials="ключ_авторизации", ) response = giga.get_token() print(response) ``` Пример ответа: ```json { "access_token": "<токен_доступа>", "expires_at": 1706026848841 } ``` :::note В [справочной документации](/ru/gigachat/api/reference/rest/post-token) вы найдете подробное описание параметров запроса и ответа. Также с помощью консоли вы сможете сгенерировать Access token. ::: Используйте полученный токен доступа для авторизации запросов к GigaChat API. ## Запросы к GigaChat API Запросы к GigaChat API передаются по адресу `https://api.giga.chat/` и авторизуются с помощью токена доступа Access token, который передан в заголовке `Authorization`. Подробное описание всех запросов к API — в [справочной документации](/ru/gigachat/api/reference/rest/gigachat-api). Ниже в примерах работы с API в Python и TypeScript/JavaScript используются [соответствующие SDK](/ru/gigachat/guides/using-sdks). :::note При работе с SDK запросы по умолчанию передаются в версию GigaChat API для физических лиц. О том как передавать запросы в версию API для юридических лиц — в разделе [Использование SDK](/ru/gigachat/guides/using-sdks). ::: Пример запроса на получение списка [моделей](/ru/gigachat/models/main): ```sh curl https://api.giga.chat/v1/models \ -H 'Authorization: Bearer <токен_доступа>' \ ``` ```py from gigachat import GigaChat giga = GigaChat( base_url="https://api.giga.chat/v1", credentials="ключ_авторизации", ) response = giga.get_models() print(response) ``` ```ts import GigaChat from 'gigachat'; const giga = new GigaChat({ baseUrl: 'https://api.giga.chat/api/v1', credentials: 'ключ_авторизации', }); const response = await giga.getModels(); console.log(response); ``` Запрос возвращает список моделей GigaChat: ```json { "object": "list", "data": [ { "id": "GigaChat", "object": "model", "owned_by": "salutedevices" }, { "id": "GigaChat-Pro", "object": "model", "owned_by": "salutedevices" } ] } ``` Модели GigaChat обладают разными возможностями и [тарифицируются по-разному](/ru/gigachat/api/tariffs). ### Генерация текста и изображений За генерацию текста и изображений отвечает запрос [`POST /chat/completions`](/ru/gigachat/api/reference/rest/post-chat). С помощью запросов на генерацию вы можете решать самые разные задачи: переводить, исправлять и стилизовать текст, генерировать краткое содержание статей и выделять из них основные идеи, создавать изображения и многое другое. Запросы на генерацию тратят токены. :::note Токен — единица [тарификации](/ru/gigachat/api/tariffs). Токен может быть символом, несколькими символами, фрагментом слова или словом целиком. В среднем в одном токене 3—4 символа, включая пробелы, знаки препинания и специальные символы. ::: Токены расходуются как на запрос, так и на ответ модели. Вы можете заранее оценить количество токенов в запросе с помощью запроса [`POST /tokens/count`](/ru/gigachat/api/reference/rest/post-tokens-count). Разные модели считают токены по-разному. Количество оставшихся токенов отображается в личном кабинете проекта GigaChat API. Если вы используете API как юридическое лицо или ИП, в вашем личном кабинете также будет доступен [мониторинг потребления токенов](/ru/gigachat/guides/token-consumption). Пример запроса на генерацию текста: ```sh curl -L -X POST 'https://api.giga.chat/v1/chat/completions' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ -H 'Authorization: Bearer <токен_доступа>' \ --data-raw '{ "model": "GigaChat", "messages": [ { "role": "user", "content": "Привет! Как дела?" } ], "stream": false, "repetition_penalty": 1 }' ``` ```py from gigachat import GigaChat giga = GigaChat( base_url="https://api.giga.chat/v1", credentials="ключ_авторизации", ) response = giga.chat("Привет! Как дела?") print(response.choices[0].message.content) ``` ```ts import GigaChat from 'gigachat'; const giga = new GigaChat({ baseUrl: 'https://api.giga.chat/api/v1', credentials: 'ключ_авторизации', }); const resp = await giga.chat({ messages: [ { role: "user", content: "Привет! Как дела?", }, ], }); console.log(resp.choices[0]?.message.content); ``` Пример ответа: ```json { "choices": [ { "finish_reason": "stop", "index": 0, "message": { "content": "Все отлично, спасибо. А как ваши дела?", "role": "assistant" } } ], "created": 1706096547, "model": "GigaChat", "object": "chat.completion", "usage": { "completion_tokens": 12, "prompt_tokens": 173, "system_tokens": 0, "total_tokens": 185 } } ``` :::note Если вы хотите получить наиболее сбалансированный ответ, не передавайте параметры `temperature` и `top_p`. В таком случае модель применит значения по умолчанию. Подробное описание параметров — в [справке API](/ru/gigachat/api/reference/rest/post-chat). ::: ### Создание эмбеддинга Для создания [эмбеддингов](/ru/gigachat/guides/embeddings) используется запрос [`POST /embeddings`](/ru/gigachat/api/reference/rest/post-embeddings). Эмбеддинги нужны для определения смыслового сходства текстов, что позволяет решать задачи вроде поиска, извлечения данных из текстов и других. При создании эмбеддинга расходуются токены, также как и при генерации контента. Запросы на создание эмбеддингов передаются в [модель Embeddings](/ru/gigachat/models/main). :::note Подробнее о создании эмбеддингов читайте в разделе [Векторное представление текста](/ru/gigachat/guides/embeddings). ::: Пример запроса: ```sh curl -L -X POST 'https://api.giga.chat/v1/embeddings' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ -H 'Authorization: Bearer <токен_доступа>' \ --data-raw '{ "model": "Embeddings", "input": [ "Расскажи о современных технологиях" ] }' ``` ```py from gigachat import GigaChat giga = GigaChat( base_url="https://api.giga.chat/v1" credentials="ключ_авторизации", ) response = giga.embeddings(["Текст"]) print(response) ``` ```ts import GigaChat from 'gigachat'; const giga = new GigaChat({ baseUrl: 'https://api.giga.chat/api/v1', credentials: 'ключ_авторизации', }); const response = await giga.embeddings(['Текст']); console.log(response.data); ``` --- # Регистрация и покупка токенов [source](https://developers.sber.ru/docs/ru/gigachat/quickstart/legal-tokens-purchase.md) Индивидуальные предприниматели и юридические лица могут использовать GigaChat API только после заключения договора или оплаты по счету-оферте. В этом разделе вы узнаете как зарегистрироваться в личном кабинете, создать подходящий проект GigaChat API и оплатить токены для работы с API. ## Покупка пакетов Покупка пакетов — это тарификация токенов, при которой доступ к GigaChat API предоставляется после полной оплаты счета. Оплатить пакеты токенов можно по счету-оферте или по договору. Единица тарификации — один токен. Токен может быть символом, несколькими символами, фрагментом слова или словом целиком. В среднем в одном токене 3—4 символа, включая пробелы, знаки препинания и специальные символы. При генерации текста тарификации подлежат как символы запроса, так и символы ответа модели, в том числе системный промпт. ### Оплата по договору Для покупки пакетов с токенами: 1. Настройте личный кабинет. 2. Отправьте заявку на оплату по договору. 3. Подпишите договор. **Шаг 1. Настройка личного кабинета** 1. Зарегистрируйтесь или авторизуйтесь в [личном кабинете Studio](https://developers.sber.ru/studio/login). 2. Нажмите кнопку **Новое пространство** и выберите **Корпоративное**. 3. Перейдите в созданное Корпоративное пространство → нажмите кнопку **Создать проект** → выберите **GigaChat API Business**. **Шаг 2. Отправка заявки на оплату по договору** 1. Откройте в личном кабинете созданный проект GigaChat API Business. Вам станет доступна информация о текущих токенах и о платных пакетах. 2. В левом боковом меню выберите раздел **Магазин** → выберите пакеты с токенами → нажмите **Купить** и проверьте корзину. 3. Выберите способ оплаты **Договор** → нажмите **Перейти к оплате**. 4. В открывшемся окне заполните заявку на заключение договора. **Шаг 3. Подписание договора** В течение двух рабочих дней с вами свяжется менеджер и пришлет на почту шаблон договора. После получения этого шаблона: 1. Заполните договор и вставьте в него ID Лицевого счета. Его можно найти в письме про подключение GigaChat API или в личном кабинете. 2. Отправьте нам заполненный договор в формате doc/docx по [ЭДО](/ru/va/about/legal-entities/edo). 3. Дождитесь подписания договора с нашей стороны. Вы также можете дополнительно отправить письмо с запросом на подписание договора на электронную почту. После заключения договора вы сможете получить в личном кабинете ключ авторизации для работы с GigaChat API. Подробнее — в [Начало работы с API](/ru/gigachat/quickstart/legal-using-api). ### Оплата по счету-оферте Для покупки пакетов с токенами по счету-оферте: 1. Авторизуйтесь в [личном кабинете Studio](https://developers.sber.ru/studio/login). 2. Нажмите кнопку **Новое пространство** и выберите **Корпоративное**. 3. Перейдите в созданное Корпоративное пространство → нажмите кнопку **Создать проект** → выберите **GigaChat API Business**. 4. Откройте созданный проект **GigaChat API Business**. Вам станет доступна информация о текущих токенах и о платных пакетах. 5. В левом боковом меню выберите раздел **Магазин** → выберите пакеты с токенами → нажмите **Купить** и проверьте корзину. 6. Выберите способ оплаты **Счет-оферта** → ознакомьтесь с офертой → нажмите **Перейти к оплате**. :::note При оформлении покупки по счету-оферте действует ограничение минимальной суммы заказа. Размер минимальной суммы отображается в разделе **Магазин**. ::: 7. Заполните форму для выставления счета. В поле **Почта** укажите email, куда необходимо направить счет на оплату. После успешной оплаты вы увидите обновленный баланс токенов в карточке GigaChat API в разделе с активным тарифом. Токены будут действительны 12 месяцев с момента оплаты. ## Оплата pay-as-you-go Pay-as-you-go — это тарификация по факту потребления с оплатой только по договору. Доступ к GigaChat API предоставляется сразу после заключения договора. Стоимость работы рассчитывается от объема услуг, потребленных в течение платежного периода. Платежный период — один календарный месяц. В конце расчетного периода вы получаете счет на оплату и универсальный передаточный документ (УПД). Стоимость генерации текста зависит от того, к какой [модели](/ru/gigachat/models/main) выполняется запрос: GigaChat 2 Lite, GigaChat 2 Pro или GigaChat 2 Max. Модель задается в поле model запроса . ### Заключение договора Для заключения договора по pay-as-you-go выполните три основных шага: **Шаг 1. Настройка личного кабинета** 1. Зарегистрируйтесь или авторизуйтесь в [личном кабинете Studio](https://developers.sber.ru/studio/login). 2. Нажмите кнопку **Новое пространство** и выберите **Корпоративное Плюс**. 3. Перейдите в созданное пространство **Корпоративное Плюс** → нажмите кнопку **Запросить доступ** в блоке **GigaChat API Enterprise**. **Шаг 2. Отправка заявки на оплату по договору** 1. При переходе в карточку GigaChat API Enterprise заполните заявку на получение доступа к GigaChat API. 2. Ознакомьтесь с [условиями использования](/ru/policies/gigachat-agreement/corporate-clients-beta) и нажмите кнопку **Отправить заявку**. **Шаг 3. Подписание договора** В течение двух рабочих дней с вами свяжется менеджер и пришлет на почту шаблон договора. После получения этого шаблона: 1. Заполните договор и вставьте в него ID Лицевого счета. Его можно найти в письме про подключение GigaChat API или в личном кабинете. 2. Отправьте нам заполненный договор в формате doc/docx по [ЭДО](/ru/va/about/legal-entities/edo). 3. Дождитесь подписание договора с нашей стороны. Вы также можете дополнительно отправить письмо с запросом на подписание договора на электронную почту. После заключения договора вы сможете получить в личном кабинете ключ авторизации для работы с GigaChat API. Подробнее — в [Начало работы с API](/ru/gigachat/quickstart/legal-using-api). ### Примеры расчета стоимости Ниже приведен расчет стоимости на примере работы с моделью GigaChat 2 Lite (0,065 ₽ за 1000 токенов, включая НДС). Стоимость использования округляется до целых копеек в большую сторону. Пример: > Если на вход модели был передан запрос длиной 20 токенов и модель сформировала ответ длиной 30 токенов, общее использование будет составлять 50 токенов. Пример: > Если вы использовали за месяц 876 835 токенов, использование сервиса будет стоить 57,00 рублей (876 835 x 0,000065 = 56,994275, с округлением до целого значения). > Но учитывая минимальную стоимость, вам нужно будет заплатить 600 рублей. Пример: > Если вы использовали за месяц 14 686 830 токенов, использование сервиса будет стоить 954,65 рубля (14 686 830 x 0,000065 = 954,64395, с округлением до целых копеек). --- # Начало работы с API [source](https://developers.sber.ru/docs/ru/gigachat/quickstart/legal-using-api.md) В этом разделе вы узнаете как получить токен доступа и начать использовать GigaChat API. :::note Перед использованием API как ИП или юридическое лицо убедитесь, что вы [оплатили доступ](/ru/gigachat/quickstart/legal-tokens-purchase). ::: ## Получение ключа авторизации Перед началом работы нужно сгенерировать ключ авторизации и Client Secret в [проекте GigaChat API](/ru/gigachat/quickstart/ind-create-project).
Подробнее об Authorization key Ключ авторизации (англ. *Authorization key*) нужен для получения токена доступа Access token с помощью запроса , который использует Basic-схему аутентификации. Авторизационный ключ — строка, полученная в результате кодирования в Base64 клиентского идентификатора (Client ID) и ключа (Client Secret) API. Вы можете использовать готовый ключ из личного кабинета или самостоятельно закодировать Client ID и Client Secret.
Для этого: 1. Откройте проект **GigaChat API** в личном кабинете Studio. 2. В левой панели выберите раздел **Настройки API**. 3. Нажмите кнопку **Получить ключ**. Откроется окно **Сохраните ваш Authorization Key**. Окно Сохраните ваш Authorization Key :::note Ключ авторизации могут получить только пользователи с ролями **Владелец** и **Администратор** — для остальных ролей кнопка **Получить ключ** будет неактивна. Подробнее о ролях и их возможностях — в разделе [Создание команды и управление доступами](/ru/studio/space/settings/roles). ::: 4. Скопируйте и сохраните значения полей: * **Authorization Key**; * **Client ID**; * **Client Secret**. Ключ авторизации и Client Secret, отображаются только один раз и не хранятся в личном кабинете. При компрометации или утере ключа авторизации или Client Secret вы можете сгенерировать их повторно. Для этого нажмите кнопку **Получить новый ключ**. При повторной генерации нужно указать время, в течение которого будет действовать предыдущий ключ авторизации. Максимальное время действия — 250 минут. ## Получение токена доступа Токен доступа Access token нужен для авторизации запросов к GigaChat API по Bearer-схеме. Токен получается в обмен на ключ авторизации с помощью запроса . Токен действителен в течение 30 минут. :::note При отправке запроса на получение токена доступа нужно указать версию АПИ, к которой будут выполняться запросы: * `GIGACHAT_API_B2B` — доступ для ИП и юридических лиц по [платным пакетам](/ru/gigachat/quickstart/legal-tokens-purchase). * `GIGACHAT_API_CORP` — доступ для ИП и юридических лиц по схеме [pay-as-you-go](/ru/gigachat/quickstart/legal-tokens-purchase). ::: Пример запроса для получения токена доступа: ```sh curl -L -X POST 'https://ngw.devices.sberbank.ru:9443/api/v2/oauth' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -H 'Accept: application/json' \ -H 'RqUID: <уникальный_идентификатор_запроса>' \ -H 'Authorization: Basic authorization_key' \ --data-urlencode 'scope=GIGACHAT_API_B2B' ``` `RqUID` — уникальный идентификатор запроса. Соответствует формату [`uuid4`](https://www.uuidgenerator.net/version4). Параметр для журналирования входящих вызовов и разбора инцидентов. Для создания уникального идентификатора можно использовать стандартные библиотеки и классы для генерации UUID и GUID. Для получения токена вы также можете использовать [Python SDK](/ru/gigachat/guides/using-sdks?lang=py). ```py from gigachat import GigaChat giga = GigaChat( credentials="ключ_авторизации", ) response = giga.get_token() print(response) ``` Пример ответа: ```json { "access_token": "<токен_доступа>", "expires_at": 1706026848841 } ``` :::note В [справочной документации](/ru/gigachat/api/reference/rest/post-token) вы найдете подробное описание параметров запроса и ответа. Также сможете сгенерировать токен доступа с помощью своего идентификатора (Client ID) и клиентского ключа (Client Secret). ::: Используйте полученный токен доступа для авторизации запросов к GigaChat API. ## Запросы к GigaChat API Базовый адрес для отправки запросов в GigaChat API — `https://api.giga.chat/`. Авторизация выполняется с помощью токена доступа, который передан в заголовке `Authorization`. Подробное описание запросов к API — в [справочной документации](/ru/gigachat/api/reference/rest/gigachat-api). Ниже в примерах работы с API на Python и TypeScript/JavaScript используются [соответствующие SDK](/ru/gigachat/guides/using-sdks). При работе с SDK запросы по умолчанию передаются на основной базовый адрес. Вы можете переопределить базовый адрес при инициализации. Пример запроса на получение списка [моделей](/ru/gigachat/models/main): ```sh curl https://api.giga.chat/v1/models \ -H 'Authorization: Bearer <токен_доступа>' \ ``` ```py from gigachat import GigaChat giga = GigaChat( credentials="ключ_авторизации", base_url="https://api.giga.chat/v1", # Если вы работатете с GigaChat API по предоплате, # используйте scope="GIGACHAT_API_B2B" scope="GIGACHAT_API_CORP", ) response = giga.get_models() print(response) ``` ```ts import GigaChat from 'gigachat'; const giga = new GigaChat({ credentials: 'ключ_авторизации', baseUrl: 'https://api.giga.chat/v1', // Если вы работатете с GigaChat API по предоплате, // используйте scope: 'GIGACHAT_API_B2B' scope: 'GIGACHAT_API_CORP', }); const response = await giga.getModels(); console.log(response); ``` Запрос возвращает список моделей GigaChat: ```json { "object": "list", "data": [ { "id": "GigaChat", "object": "model", "owned_by": "salutedevices" }, { "id": "GigaChat-Pro", "object": "model", "owned_by": "salutedevices" } ] } ``` Модели GigaChat обладают разными возможностями и [тарифицируются по-разному](/ru/gigachat/api/tariffs). ### Генерация текста За генерацию текста и изображений отвечает запрос [`POST /chat/completions`](/ru/gigachat/api/reference/rest/post-chat). С помощью запросов на генерацию вы можете решать самые разные задачи: переводить, исправлять и стилизовать текст, генерировать краткое содержание статей и выделять из них основные идеи, создавать изображения и многое другое. Запросы на генерацию тратят токены. :::note Токен — единица [тарификации](/ru/gigachat/api/tariffs). Токен может быть символом, несколькими символами, фрагментом слова или словом целиком. В среднем в одном токене 3—4 символа, включая пробелы, знаки препинания и специальные символы. ::: Токены расходуются как на запрос, так и на ответ модели. Вы можете заранее оценить количество токенов в запросе с помощью запроса [`POST /tokens/count`](/ru/gigachat/api/reference/rest/post-tokens-count). Разные модели считают токены по-разному. Количество оставшихся токенов отображается в личном кабинете проекта GigaChat API. Если вы используете API как юридическое лицо или ИП, в вашем личном кабинете также будет доступен [мониторинг потребления токенов](/ru/gigachat/guides/token-consumption). Пример запроса на генерацию текста: ```sh curl -L -X POST 'https://api.giga.chat/v1/chat/completions' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ -H 'Authorization: Bearer <токен_доступа>' \ --data-raw '{ "model": "GigaChat", "messages": [ { "role": "user", "content": "Привет! Как дела?" } ], "stream": false, "repetition_penalty": 1 }' ``` ```py from gigachat import GigaChat giga = GigaChat( credentials="ключ_авторизации", base_url="https://api.giga.chat/v1", # Если вы работатете с GigaChat API по предоплате, # используйте scope="GIGACHAT_API_B2B" scope="GIGACHAT_API_CORP", ) response = giga.chat("Привет! Как дела?") print(response.choices[0].message.content) ``` ```ts import GigaChat from 'gigachat'; const giga = new GigaChat({ credentials: 'ключ_авторизации', baseUrl: 'https://api.giga.chat/v1', // Если вы работатете с GigaChat API по предоплате, // используйте scope: 'GIGACHAT_API_B2B' scope: 'GIGACHAT_API_CORP', }); const resp = await giga.chat({ messages: [ { role: "user", content: "Привет! Как дела?", }, ], }); console.log(resp.choices[0]?.message.content); ``` Пример ответа: ```json { "choices": [ { "finish_reason": "stop", "index": 0, "message": { "content": "Все отлично, спасибо. А как ваши дела?", "role": "assistant" } } ], "created": 1706096547, "model": "GigaChat", "object": "chat.completion", "usage": { "completion_tokens": 12, "prompt_tokens": 173, "system_tokens": 0, "total_tokens": 185 } } ``` :::note Если вы хотите получить наиболее сбалансированный ответ, не передавайте параметры `temperature` и `top_p`. В таком случае модель применит значения по умолчанию. Подробное описание параметров — в [справке API](/ru/gigachat/api/reference/rest/post-chat). ::: ### Создание эмбеддинга Для создания [эмбеддингов](/ru/gigachat/guides/embeddings) используется запрос [`POST /embeddings`](/ru/gigachat/api/reference/rest/post-embeddings). Эмбеддинги нужны для определения смыслового сходства текстов, что позволяет решать задачи вроде поиска, извлечения данных из текстов и других. При создании эмбеддинга расходуются токены, так же как и при генерации контента. Запросы на создание эмбеддингов передаются в [модель Embeddings](/ru/gigachat/models/main). :::note Подробнее о создании эмбеддингов читайте в разделе [Векторное представление текста](/ru/gigachat/guides/embeddings). ::: Пример запроса: ```sh curl -L -X POST 'https://api.giga.chat/v1/embeddings' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ -H 'Authorization: Bearer <токен_доступа>' \ --data-raw '{ "model": "Embeddings", "input": [ "Расскажи о современных технологиях" ] }' ``` ```py from gigachat import GigaChat giga = GigaChat( credentials="ключ_авторизации", base_url="https://api.giga.chat/v1", # Если вы работатете с GigaChat API по предоплате, # используйте scope="GIGACHAT_API_B2B" scope="GIGACHAT_API_CORP", ) response = giga.embeddings(["Текст"]) print(response) ``` ```ts import GigaChat from 'gigachat'; const giga = new GigaChat({ credentials: 'ключ_авторизации', baseUrl: 'https://api.giga.chat/v1', // Если вы работатете с GigaChat API по предоплате, // используйте scope: 'GIGACHAT_API_B2B' scope: 'GIGACHAT_API_CORP', }); const response = await giga.embeddings(['Текст']); console.log(response.data); ``` --- # Быстрый старт GigaChat API [source](https://developers.sber.ru/docs/ru/gigachat/quickstart/main.md) --- # Архив тарифов [source](https://developers.sber.ru/docs/ru/gigachat/tariffs/archive.md) В этом разделе вы можете скачать PDF-файлы с информацией об архивных тарифах. | Тариф | Для физических лиц | Для юридических лиц и ИП | | ------------- | -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | | До 01.02.2026 | [Скачать](https://cdn-app.sberdevices.ru/misc/0.0.0/assets/bsm-docs/individual-tariffs-pre-01-02-26.pdf) | [Скачать](https://cdn-app.sberdevices.ru/misc/0.0.0/assets/bsm-docs/legal-tariffs-pre-01-02-26.pdf) | --- # Коммерческое использование GigaChat API [source](https://developers.sber.ru/docs/ru/gigachat/tariffs/commercial.md) ## Описание # Коммерческое использование [source](https://developers.sber.ru/docs/ru/gigachat/tariffs/commercial.md) Бесплатный доступ (Freemium-режим) к контенту, сгенерированному с помощью GigaChat API, предоставляется исключительно для личного некоммерческого использования. Коммерческое использование (распространение, продажа и т.д.) допускается только после приобретения [платного пакета услуг](/ru/gigachat/api/tariffs). Обратите внимание, что сгенерированный контент создается с использованием технологий ИИ и может совпадать с материалами, созданными другими пользователями, или охраняемыми интеллектуальной собственностью третьих лиц. Пользователь должен самостоятельно оценить возможность коммерческого использования такого контента. Подробную информацию об ограничениях коммерческого использования можно найти в [Пользовательском соглашении об использовании GigaChat](/ru/policies/gigachat/agreement) и [Политике допустимого использования ИИ-сервисов ПАО Сбербанк](/ru/policies/gigachat-agreement/permissible-use-ai). --- # Тарифы GigaChat API для физлиц [source](https://developers.sber.ru/docs/ru/gigachat/tariffs/individual-tariffs.md) Физические лица могут использовать GigaChat API бесплатно или выбрать платные пакеты с расширенными возможностями. Приведенные в этом разделе цены действуют с 1 февраля 2026 года. Узнать цены, действовавшие до этой даты можно в [Архиве тарифов](/ru/gigachat/tariffs/archive). ### Freemium-режим В рамках Freemium-режима пользователи получают 365 000 000 бесплатных токенов для генерации текста: | Услуга | Срок действия | ID модели в запросе | | -------------------------------------------------- | ------------- | :--------------------| | 250 000 000 токенов для генерации текста моделями Lite | 12 месяцев | `GigaChat` или
`GigaChat-2` | | 40 000 000 токенов для генерации текста моделями Pro | 12 месяцев | `GigaChat-Pro` или
`GigaChat-2-Pro` | | 25 000 000 токенов для генерации текста моделями Max | 12 месяцев | `GigaChat-Max` или
`GigaChat-2-Max` | | 50 000 000 токенов для генерации текста моделями Ultra | 12 месяцев | `GigaChat-3-Ultra` | Генерация текста выполняется в одном потоке. Лимит обновляется раз в 12 месяцев. :::note Подробнее о запросах к модели `GigaChat-3-Ultra` — в разделе [GigaChat 3 Ultra](/ru/gigachat/models/gigachat-3-ultra). ::: ### Платные пакеты Если бесплатных токенов недостаточно, можно дополнительно приобрести пакеты услуг для генерации и векторного представления текста. Пакеты действительны в течение 12 месяцев со дня оплаты. Все цены указаны в рублях, включая НДС. Подробнее об условиях оплаты — в разделе [Покупка токенов](/ru/gigachat/quickstart/ind-tokens-purchase). **Стоимость генерации текста** | Пакет | Количество токенов | Цена пакета, вкл. НДС | ID модели в запросе | | ----------------------------------- | -----------------: | --------------------: | :--------------------------------------- | | 20 000 000 токенов GigaChat 2 Lite | 20 000 000 | 1 300 ₽ | `GigaChat` или
`GigaChat-2` | | 100 000 000 токенов GigaChat 2 Lite | 100 000 000 | 6 500 ₽ | `GigaChat` или
`GigaChat-2` | | 3 000 000 токенов GigaChat 2 Pro | 3 000 000 | 1 500 ₽ | `GigaChat-Pro` или
`GigaChat-2-Pro` | | 15 000 000 токенов GigaChat 2 Pro | 15 000 000 | 7 500 ₽ | `GigaChat-Pro` или
`GigaChat-2-Pro` | | 3 000 000 токенов GigaChat 2 Max | 3 000 000 | 1 950 ₽ | `GigaChat-Max` или
`GigaChat-2-Max` | | 15 000 000 токенов GigaChat 2 Max | 15 000 000 | 9 750 ₽ | `GigaChat-Max` или
`GigaChat-2-Max` | **Стоимость векторного представления текста** | Услуга | Количество токенов | Цена пакета, вкл. НДС | | ----------------------------- | -----------------: | --------------------: | | 50 000 000 токенов Embeddings | 50 000 000 | 700 ₽ | --- # Тарифы GigaChat API для юрлиц [source](https://developers.sber.ru/docs/ru/gigachat/tariffs/legal-tariffs.md) Корпоративным клиентам доступна покупка заранее подготовленных пакетов токенов или оплата по фактическому использованию (по схеме pay-as-you-go). Приведенные в этом разделе цены действуют с 1 февраля 2026 года. Узнать цены, действовавшие до этой даты можно в [Архиве тарифов](/ru/gigachat/tariffs/archive). ## Платные пакеты Юридические лица и индивидуальные предприниматели могут приобрести готовые пакеты услуг и оплатить их по счету-оферте или договору. Пакеты действительны в течение 12 месяцев со дня оплаты. Цены указаны в рублях, включая НДС. Подробнее об условиях и способах оплаты — в разделе [Регистрация и покупка токенов](/ru/gigachat/quickstart/legal-tokens-purchase). **Стоимость генерации с помощью модели GigaChat Lite** | Пакет | Количество токенов | Цена пакета, вкл. НДС | ID модели в запросе | | :---------------------------------------------------------------------------------------------- | -----------------: | --------------------: | :--------------------| | 300 000 000 токенов GigaChat Lite | 300 000 000 | 19 500 ₽ | `GigaChat` или
`GigaChat-2` | | 500 000 000 токенов GigaChat Lite | 500 000 000 | 32 500 ₽ | `GigaChat` или
`GigaChat-2` | | 700 000 000 токенов GigaChat Lite | 700 000 000 | 45 500 ₽ | `GigaChat` или
`GigaChat-2` | | 1 000 000 000 токенов GigaChat Lite | 1 000 000 000 | 65 000 ₽ | `GigaChat` или
`GigaChat-2` | **Стоимость генерации с помощью модели GigaChat Pro** | Пакет | Количество токенов | Цена пакета, вкл. НДС | ID модели в запросе | | :--------------------------------------------------------------------------------------------- | -----------------: | --------------------: | :--------------------| | 50 000 000 токенов GigaChat Pro | 50 000 000 | 25 000 ₽ | `GigaChat-Pro` или
`GigaChat-2-Pro` | | 80 000 000 токенов GigaChat Pro | 80 000 000 | 40 000 ₽ | `GigaChat-Pro` или
`GigaChat-2-Pro` | | 120 000 000 токенов GigaChat Pro | 120 000 000 | 60 000 ₽ | `GigaChat-Pro` или
`GigaChat-2-Pro` | | 1 000 000 000 токенов GigaChat Pro | 1 000 000 000 | 500 000 ₽ | `GigaChat-Pro` или
`GigaChat-2-Pro` | **Стоимость генерации с помощью модели GigaChat Max** | Пакет | Количество токенов | Цена пакета, вкл. НДС | ID модели в запросе | | :--------------------------------------------------------------------------------------------- | -----------------: | --------------------: | :--------------------| | 30 000 000 токенов GigaChat Max | 30 000 000 | 19 500 ₽ | `GigaChat-Max` или
`GigaChat-2-Max` | | 50 000 000 токенов GigaChat Max | 50 000 000 | 32 500 ₽ | `GigaChat-Max` или
`GigaChat-2-Max` | | 80 000 000 токенов GigaChat Max | 80 000 000 | 52 000 ₽ | `GigaChat-Max` или
`GigaChat-2-Max` | | 1 000 000 000 токенов GigaChat Max | 1 000 000 000 | 650 000 ₽ | `GigaChat-Max` или
`GigaChat-2-Max` | **Стоимость векторного представления текста** | Услуга | Количество токенов | Цена пакета, вкл. НДС | | -------------------------------- | -----------------: | --------------------: | | 1 000 000 000 токенов Embeddings | 1 000 000 000 | 14 000 ₽ | | 1 500 000 000 токенов Embeddings | 1 500 000 000 | 21 000 ₽ | | 2 000 000 000 токенов Embeddings | 2 000 000 000 | 28 000 ₽ | ## Оплата pay-as-you-go Pay-as-you-go — фактическая тарификация с оплатой по счету-оферте или договору с ежемесячным списанием. Все цены указаны в рублях, включая НДС. Подробнее об условиях — в разделе [Регистрация и покупка токенов](/ru/gigachat/quickstart/legal-tokens-purchase). GigaChat API поддерживает два режима обработки задач: * синхронный режим — для срочных задач, где важна скорость выполнения; * асинхронный режим — для задач, не требующих немедленного ответа. Этот режим дешевле, но выполнение запроса занимает больше времени. Учитывайте эти особенности при выборе тарифа. **Минимальный базовый тариф** Минимальные расходы на использование сервиса составляют 600 рублей в месяц (включая НДС). Это не обязательная ежемесячная плата, а минимальная сумма, которую вы заплатите, если воспользуетесь услугами. Правила расчета стоимости: * Если в течение месяца вы не пользовались сервисом — плата не взимается. * Если суммарный объем ваших операций меньше 600 рублей — списывается минимальный платеж в размере 600 рублей. * Если объем вашего использования превышает сумму в 600 рублей — итоговая стоимость определяется согласно выбранному тарифу. **Стоимость генерации текста** | Модель | Цена за 1000 токенов, вкл. НДС | ID модели в запросе | | ------------- | ------------------------------ | :--------------------| | GigaChat Lite | 0,065 ₽ | `GigaChat` или
`GigaChat-2` | | GigaChat Pro | 0,5 ₽ | `GigaChat-Pro` или
`GigaChat-2-Pro` | | GigaChat Max | 0,65 ₽ | `GigaChat-Max` или
`GigaChat-2-Max` |
| Модель | Цена за 1000 токенов, вкл. НДС | ID модели в запросе | | ------------- | ------------------------------ | :--------------------| | GigaChat Lite | 0,0325 ₽ | `GigaChat` или
`GigaChat-2` | | GigaChat Pro | 0,25 ₽ | `GigaChat-Pro` или
`GigaChat-2-Pro` | | GigaChat Max | 0,325 ₽ | `GigaChat-Max` или
`GigaChat-2-Max` |
**Стоимость проверки текста на наличие контента, сгенерированного с помощью ИИ** | Эндпоинт API | Цена за 1 000 токенов, вкл. НДС | | ---------------------------------------------------------------------------------------------- | ------------------------------- | | | 0,5 ₽ | **Стоимость векторного представления текста** | Эндпоинт API | Цена за 1000 токенов, вкл. НДС | | ------------------------------------------------------------------------------------------------- | ------------------------------ | | | 0,014 ₽ | | Эндпоинт API | Цена за 1000 токенов, вкл. НДС | | ------------------------------------------------------------------------------------------------- | ------------------------------ | | | 0,007 ₽ |