Function Calling

Материал из Systems analysis wiki
Перейти к навигации Перейти к поиску

Function Calling (Вызов функций) — это механизм в больших языковых моделях (LLM), позволяющий модели взаимодействовать с внешними инструментами и API, генерируя структурированные данные (как правило, JSON) для вызова функций вместо прямого текстового ответа[1].

Иными словами, модель на основе запроса пользователя определяет, какую функцию из предложенного набора следует вызвать и с какими параметрами. Этот механизм расширяет сферу применения LLM, позволяя им служить интерфейсом между естественным языком и практическими действиями. Это открывает возможности для интеграции ИИ с внешними системами: модель может запрашивать актуальные данные, выполнять операции или пользоваться сервисами, что особенно ценно при создании интеллектуальных ассистентов и автономных агентов. Использование внешних инструментов также снижает риск галлюцинаций (вымышленных фактов) за счёт обращения к достоверным источникам[2].

История и подходы к реализации

Ранние подходы (промптинг и Toolformer)

Идея научить языковые модели вызывать инструменты сформировалась в 2022–2023 годах. Ранние подходы основывались на технологиях сложного промптинга. Так, в 2022 году была предложена схема ReAct, где модель в ходе диалога чередовала рассуждения и действия (вызовы инструментов), закодированные в одном тексте.

Ключевым шагом стало появление модели Toolformer, представленной исследователями Meta в начале 2023 года. Toolformer продемонстрировал, что LLM можно специально дообучить самостоятельно вызывать внешние инструменты (калькулятор, поисковик, календарь) по текстовым подсказкам, вставляя в генерируемый текст специальные токены вызова API[3].

Официальная поддержка и развитие

Особую веху отметила компания OpenAI, которая в июне 2023 года официально внедрила поддержку Function Calling в свои API для моделей GPT-3.5 и GPT-4[4]. Новые версии моделей были дообучены распознавать ситуации, когда пользовательский запрос подразумевает обращение к внешней функции, и генерировать точно структурированный JSON-объект с аргументами. В OpenAI назвали эту возможность «новым способом надёжно соединить GPT с внешними инструментами и API».

Открытые инициативы

Вслед за коммерческими реализациями появились открытые модели, дообученные для генерации корректных вызовов функций.

  • Gorilla: Проект UC Berkeley, дообученная версия LLaMA, способная формировать вызовы к тысячам различных API. Для оценки таких моделей был создан бенчмарк Berkeley Function-Calling Leaderboard[5].
  • ToolAlpaca, ToolLLaMA, Hermes: Серии открытых моделей, дообученных на синтетических примерах вызовов функций, часто сгенерированных более мощными моделями.

Механизм работы

Процесс использования Function Calling, как правило, включает несколько шагов:

  1. Определение функций. Разработчик заранее определяет набор доступных для модели функций (например, внешних API) и описывает их сигнатуры и назначение, как правило, в формате JSON Schema.
  2. Анализ запроса. Во время диалога модель анализирует намерение пользователя и самостоятельно решает, следует ли для ответа вызвать одну из определённых функций.
  3. Генерация вызова. Если требуется действие, LLM вместо обычного текста генерирует специальный структурированный вывод (например, JSON с именем функции и аргументами). Если же вызов не требуется, модель возвращает обычный текстовый ответ.
  4. Исполнение функции. Внешняя программа (оболочка чат-бота или агент) получает JSON, выполняет реальный вызов указанной функции с предложенными параметрами и передаёт результат обратно модели.
  5. Формирование финального ответа. Модель использует полученные данные для генерации итогового ответа пользователю[4].

Для управления этим многошаговым процессом в ходе обучения моделей применяются специальные форматы диалога, например, разметка ChatML от OpenAI, где помимо ролей «пользователь» и «ассистент» вводится роль «функция» для передачи результатов вызовов.

Применение и преимущества

Возможность вызывать функции заметно расширяет спектр задач, решаемых с помощью LLM.

  • Интеграция с внешними API. Модель может отвечать на запросы, требующие актуальной информации, вызывая внешние сервисы (например, для получения погоды, курсов валют, новостей).
  • Автоматизация действий пользователя. LLM может выполнять рутинные задачи: отправлять электронные письма, создавать события в календаре, размещать заказы в интернет-магазинах.
  • Доступ к базам данных и аналитике. Запросы на естественном языке могут транслироваться в вызовы внутренних API или SQL-запросы для извлечения и анализа данных.
  • Извлечение структурированной информации. LLM может сама выделять факты из длинного текста (например, имена, даты, адреса) и возвращать их в виде структурированного JSON-массива, удобного для последующей программной обработки.

Проблемы безопасности

Расширяя возможности моделей, Function Calling одновременно несёт новые риски.

  • Непроверенные выводы. Взаимодействие модели с внешними инструментами должно быть тщательно защищено. Если модель получает от API вредоносное или ошибочное значение, она может включить его в ответ или вызвать другую функцию на его основе, что приведёт к непредсказуемым последствиям.
  • Атаки через аргументы функций. Исследователи обнаружили уязвимости, специфичные для режима Function Calling. В 2025 году была продемонстрирована атака, названная «Тёмная сторона Function Calling». Её суть заключается в предложении модели специальной «функции», внутри аргументов которой скрывается запрещённая инструкция (jailbreak-пейлоад). Модель, следуя принципу вызова функции, генерирует аргументы, содержащие нарушающий правила контент, и тем самым обходит модерационные фильтры. Тестирование показало успех атаки более чем в 90% случаев на шести современных моделях, включая GPT-4 и Claude[2].

Для предотвращения таких инцидентов рекомендуется предоставлять модели только доверенные инструменты, внедрять подтверждение пользователя перед выполнением критически важных действий, а также использовать специальные «оборонительные» промпты и строгую проверку аргументов на опасное содержимое.

См. также

Ссылки

Литература

  • Wu, Z. et al. (2025). The Dark Side of Function Calling: Pathways to Jailbreaking Large Language Models. ACL 2025.
  • OpenAI (2023). Function Calling and Other API Updates. OpenAI Blog.
  • Schick, T. et al. (2023). Toolformer: Language Models Can Teach Themselves to Use Tools. arXiv:2302.04761.
  • Patil, S. G. et al. (2023). Gorilla: Large Language Model Connected with Massive APIs. arXiv:2305.15334.
  • Liu, W. et al. (2024). ToolACE: Winning the Points of LLM Function Calling. arXiv:2409.00920.
  • Yao, S. et al. (2022). ReAct: Synergizing Reasoning and Acting in Language Models. arXiv:2210.03629.

Примечания

  1. «What is Function Calling with LLMs?». Hopsworks. [1]
  2. 2,0 2,1 Wu, Z. et al. «The Dark Side of Function Calling: Pathways to Jailbreaking Large Language Models». Proceedings of the 2025 Conference on Empirical Methods in Natural Language Processing, 2025. [2]
  3. Schick, T. et al. «Toolformer: Language Models Can Teach Themselves to Use Tools». arXiv:2302.04761, 2023. [3]
  4. 4,0 4,1 «Function calling and other API updates». OpenAI, 2023. [4]
  5. «Gorilla: Large Language Model Connected to Massive APIs». University of California, Berkeley. [5]