Работа с функциями
Функции — внешние инструменты (фрагменты кода), к которым могут обращаться модели GigaChat для решения задач пользователей. Модель не исполняет функции, но самостоятельно принимает решение о том как, когда и с какими параметрами их следует вызвать. При принятии решения о вызове функции модель исходит из доступных знаний, данных текущего разговора и описания функции. После обращения к функции модель может обработать результат ее работы.
Несколько примеров функций:
- запрос на поиск информации в базе данных;
- поиск в интернете по запросу и параметрам;
- изменение статуса устройств умного дома;
- вычисление математической формулы;
- создание изображения по текстовому запросу с помощью сторонней нейронной сети.
Функции значительно повышают возможности языковых моделей, давая им возможности:
- получать и обрабатывать информацию из внешних источников;
- взаимодей ствовать с окружающей средой;
- обрабатывать результаты этого взаимодействия.
Функции — ключевой элемент для построения сложных решений с применением LLM, таких, как AI-агенты и ассистенты.
Все модели для генерации поддерживают два вида функций:
- пользовательские — функции, которые вы реализуете и исполняете самостоятельно. Модель автоматически определяет необходимость вызова функции на основе ее описания. Для таких функций модель может сгенерировать объект с данными в подходящем вам формате, после чего вы сможете использовать их для дальнейших преобразований;
- встроенные — функции, которые модель использует для выполнения различных задач, например, генерации изображений. Функции исполняются внутри сервиса GigaChat.
Для работы с функциями используется запрос POST /chat/completions
.
В зависимости от текста запроса, который предполагает использование функ ции, модель самостоятельно решает нужно ли использовать встроенную функцию (например, создание изображений) или сгенерировать аргументы для одной из пользовательских функций, описанных в массиве functions
.
Если массива нет или он пустой, модель сможет использовать только встроенные функции.
Примеры ответа модели в режиме работы по умолчанию.
- Без вызова
- Вызов функции
В этом примере, основываясь на сообщении пользователя, модель решила, что генерировать аргументы не нужно.
{
"model": "GigaChat-2-Max",
"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",
"format"
]
}
}
]
}
{
"choices": [
{
"message": {
"content": "Манжерок — живописная деревня на Алтае, известная своей природой и горнолыжным курортом.",
"role": "assistant",
"functions_state_id": "b4a6949c-b45d-4819-b1af-29bfd5473c06"
},
"index": 0,
"finish_reason": "stop"
}
],
"created": 1744802033,
"model": "GigaChat-2-Max:2.0.28.2",
"object": "chat.completion",
"usage": {
"prompt_tokens": 128,
"completion_tokens": 26,
"total_tokens": 154,
"precached_prompt_tokens": 0
}
}
Поля functions_state_id
и finish_reason
относятся к работе функций и могут возвращаться в ответе независимо от того, были сгенерированы аргументы или нет.
Например, при использовании автоматического режима использования функций "function_call": "auto"
.
В этом примере, основываясь на сообщении пользователя, модель решила, что нужно сгенерировать аргументы для функции weather_forecast
, описанной в массиве functions
.
{
"model": "GigaChat-2-Max",
"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",
"format"
]
}
}
]
}
{
"choices": [
{
"message": {
"content": "",
"role": "assistant",
"function_call": {
"name": "weather_forecast",
"arguments": {
"format": "celsius",
"location": "Манжерок"
}
},
"functions_state_id": "cd85b62a-c50d-4774-8065-64d9d6260713"
},
"index": 0,
"finish_reason": "function_call"
}
],
"created": 1744802404,
"model": "GigaChat-2-Max:2.0.28.2",
"object": "chat.completion",
"usage": {
"prompt_tokens": 125,
"completion_tokens": 36,
"total_tokens": 161,
"precached_prompt_tokens": 0
}
}
Вы также можете явно управлять режимом работы с функциями с помощью поля function_call
.
Поле может содержать значения:
-
"auto"
— в авторежиме модель, основываясь на тексте сообщений, решает нужно ли использовать одну из встроенных функций или сгенерировать аргументы для пользовательских функций, описанных в массивеfunctions
. При этом, если массив содержит описание хотя бы одной пользовательской функции, модель сможет вызвать встроенную функцию, только если ее название передано в массивеfunctions
;{
"function_call": "auto",
"functions": [
{
"name": "text2image"
},
{
"name": "weather_forecast",
"description": "Возвращает температуру на заданный период",
"parameters": {}
}
]
}