Вызов функций в генеративных моделях
Большинство приложений для работы с искусственным интеллектом взаимодействуют с человеком напрямую, но не могут обращаться к внешним базам данных, 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. После этого модель сгенерирует итоговый ответ, используя результаты вызова функции.
Если же модель, основываясь на контексте запроса, решит не использовать предложенные инструменты, итоговый ответ будет сгенерирован сразу.