Режимы работы с функциями
Режим обращения к функциям задается с помощью поля function_call. Поле может принимать значения none, auto или объект с названием функции: встроенной или пользовательской, описанной в массиве functions.
Обращение к встроенным функциям возможно только в авторежиме.

Режимы обращения к функциям
Режим обращения к функциям задается с помощью поля function_call, который может принимать значения:
none— отключение обращения к функциям;auto— в авторежиме модель, ориентируясь на содержание сообщений, принимает решение: воспользоваться одной из встроенных функций или сгенерировать аргументы для пользовательских функций из массиваfunctions. При этом, если массив содержит описание хотя бы одной пользовательской функции, модель сможет ее вызвать только если ее название передано в массивеfunctions;{"name": "название_функции"}— принудительная генерация аргументов для указанной функции. При принудительной генерации аргумент ов для пользовательской функции ее описание нужно обязательно передавать в массивеfunctions. В противном случае вернется ошибка.

Отключение работы с функциями
Если вы хотите, чтобы модель не могла генерировать аргументы или обращаться к встроенным функциям, передайте в запросе "function_call": "none".
В этом случае модель просто сгенерирует текст на основе полученного запроса.
Независимо от его содержимого или функций, переданных в массиве functions.
Запрос
{
"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": "Возвращается при возникновении ошибки. Содержит описание ошибки"
}
}
}
}
]
}
Ответ
{
"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, то в нем обязательно нужно передать описание пользовательских функций или имена встроенных функций,
Пример ниже показывает, как модель на основе сообщения решила обратиться к встроенной функции, а не сгенерировать аргументы для пользовательской.
Запрос
{
"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": "Возвращается при возникновении ошибки. Содержит описание ошибки"
}
}
}
}
]
}
Ответ
{
"choices": [
{
"message": {
"content": "<img src=\"6e7d793c-38cf-4481-8554-dac2b01a27fb\" fuse=\"true\"/> нарисовал Манжерок в Алтае.",
"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 отсутствует функция с подходящим названием, модель вернет ошибку:
{
"status": 422,
"message": "Invalid params: explicit_call function name must exist in functions"
}
В примере ниже модель генерирует аргументы для пользовательской функции, хотя запрос не содержит явного намерения узнать температуру.
Запрос
{
"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": "Возвращается при возникновении ошибки. Содержит описание ошибки"
}
}
}
}
]
}
Ответ
{
"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
}
}