Вызов функций в генеративных моделях
Большинство приложений для работы с искусственным интеллектом взаимодействуют с человеком напрямую, но не могут обращаться к внешним базам данных, API и другим инструментам. Возможности моделей можно расширить с помощью вызова функций (Function Calling) — специального параметра, позволяющего описать доступные внешние инструменты и интерпретировать результаты их работы.
При вызове функции модель не генерирует текст самостоятельно, а только подставляет параметры для внешнего инструмента.
Например, у вас есть функция получения прогноза погоды, которую вы предлагаете модели использовать. Тогда при генерации ответа на запрос "Какая погода в Санкт-Петербурге?" модель сможет инициировать вызов этой функции, получить текущий прогноз погоды и сгенерировать ответ, используя полученное значение. Подробный пример см. в пошаговой инструкции.
Все дополнительные инструменты, которые могут быть доступны для модели, зависят от разработчика приложения. Сама по себе модель не выполняет функции и не взаимодействует с инструментами напрямую. Она лишь генерирует запрос для внешнего инструмента в виде структурированных данных, который необходим для выполнения задачи. Выполнение этой функции и передача ее результата обратно в модель осуществляется на стороне пользователя или сервиса, который управляет процессом. После получения результата модель использует его для генерации итогового ответа.
Вызовы функций могут быть полезны во многих случаях, например:
- Выполнение строгой логики — калькулятор, интерпретация кода на ВМ.
- Поиск актуальной информации — погода, курсы валют, отслеживание маршрутов.
- Обращение к внешним системам — получение и запись данных в ERP, CRM, базы данных.
- Визуализация — составление таблиц, графиков, отчетов.
- Удаленное управление устройством — создание и удаление файлов, запуск скриптов и программ.
- Автоматизация — проверка дедлайнов, назначение задач сотрудникам.
Как вызывать функции в API генерации текста
При работе с моделями через API генерации текста вы можете описать все доступные модели функции в поле tools
. Определение каждой функции в поле tools
должно содержать название функции, описание ее назначения или поведения и список параметров, которые модель должна вернуть для корректного применения функции. Описание параметров передаются в виде JSON Schema
request_body = {
"messages": [
{ "role":"system", "text":"<текст_инструкции>" },
{ "role":"user", "text":"<текст_запроса>" },
],
"tools": [ {
"function": {
"name": "weatherTool",
"description": "Получает прогноз погоды в городе через API", # Старайтесь делать описание функции подробным
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string", # Тип параметра
"description": "Название города, для которого нужно получить погоду." # Описание параметра
},
"units": {
"type": "string",
"enum": ["metric", "imperial"], # Список допустимых значений
"default": "metric", # Значение по умолчанию
"description": "Единицы измерения температуры. 'metric' для Цельсия, 'imperial' для Фаренгейта."
},
"days": {
"type": "integer",
"default": 1,
"minimum": 1, # Ограничения для параметров
"maximum": 5,
"description": "Количество дней, для которых нужно получить погоду, начиная с текущего дня."
},
"regions": {
"type": "array", # Массивы
"default": ["center"],
"maxItems": 3,
"description": "Части города, для которых нужно получить погоду. Например: 'center', 'west', 'west-east' и т.д."
},
},
"required": ["city"] # Список обязательных параметров, без которых функция не сможет работать
}
}
} ]
}
Вы также можете указать базовые типы данных, валидацию строк, чисел и массивов и другие параметры. Более подробное описание JSON Schema см. на официальном сайте
Наличие поля tools
в вызове функции не гарантирует, что модель обязательно вызовет какой-то из инструментов. Если исходя из контекста модель решит воспользоваться дополнительным инструментов, в ответ на запрос пользователя придет сообщение с полем ToolCallList
, содержащим обращение к вызываемой функции и необходимые параметры в виде JSON Schema. Результат работы функции отправьте в сообщении в поле ToolResultList
. После этого модель сгенерирует итоговый ответ, используя результаты вызова функции.
Если же модель, основываясь на контексте запроса, решит не использовать предложенные инструменты, итоговый ответ будет сгенерирован отправлен сразу.
Использовать вызов функций можно при работе с моделями YandexGPT Pro и Llama 70B1, а также при работе с этими моделями через API AI-ассистентов.