Узнайте, как подключать большие языковые модели к внешним инструментам.

В вызове API вы можете описать функции и заставить модель интеллектуально выбирать вывод объекта JSON, содержащего аргументы для вызова одной или нескольких функций. Chat Completions API не вызывает функцию; вместо этого, модель генерирует JSON, который вы можете использовать для вызова функции в своем коде.

Последние модели (gpt-3.5-turbo-1106 и gpt-4-1106-preview) были обучены как определять, когда функция должна быть вызвана (в зависимости от ввода), так и отвечать с JSON, который более точно соответствует подписи функции по сравнению с предыдущими моделями. С этой возможностью также приходят потенциальные риски. Мы настоятельно рекомендуем построить потоки подтверждения пользователя перед тем как предпринимать действия, которые влияют на мир от лица пользователей (отправка электронного письма, публикация чего-либо онлайн, совершение покупки и т. д.).

Вызов функции позволяет вам надежнее получать структурированные данные от модели. Например, вы можете:

  • Создать ассистентов, которые отвечают на вопросы, вызывая внешние API (например, как плагины ChatGPT)
    • например, определить функции вроде send_email(to: string, body: string), или get_current_weather(location: string, unit: 'celsius' | 'fahrenheit')
  • Преобразовать естественный язык в вызовы API
    • например, преобразовать "Кто мои лучшие клиенты?" в get_customers(min_revenue: int, created_before: string, limit: int) и вызвать ваш внутренний API
  • Извлекать структурированные данные из текста
    • например, определить функцию extract_data(name: string, birthday: string), или sql_query(query: string)

...и многое другое!

Базовая последовательность шагов для вызова функции следующая:

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

  2. Модель может выбрать вызов одной или нескольких функций; если это так, содержимое будет строкой JSON, соответствующей вашей пользовательской схеме (примечание: модель может генерировать параметры).

  3. Разбор строки в JSON в вашем коде и вызов вашей функции с предоставленными аргументами, если они существуют.

  4. Снова вызовите модель, добавив в ответ функции новое сообщение, и позвольте модели подвести итоги обратно пользователю.

Не все версии моделей обучены с данными вызова функций. Вызов функций поддерживается в следующих моделях:

  • gpt-4
  • gpt-4-1106-preview
  • gpt-4-0613
  • gpt-3.5-turbo
  • gpt-3.5-turbo-1106
  • gpt-3.5-turbo-0613

Кроме того, параллельный вызов функций поддерживается в следующих моделях:

  • gpt-4-1106-preview
  • gpt-3.5-turbo-1106

Параллельный вызов функций — это способность модели выполнять несколько вызовов функций одновременно, позволяя решать эффекты и результаты этих вызовов функций параллельно. Это особенно полезно, если функции занимают много времени, и сокращает количество обращений к API. Например, модель может вызвать функции для получения погоды в трех разных местах одновременно, что приведёт к сообщению с тремя вызовами функций в массиве tool_calls, каждый с id. Чтобы ответить на эти вызовы функций, добавьте в беседу 3 новых сообщения, каждое содержащее результат одного вызова функции, с tool_call_id, ссылающимся на id из tool_calls.

В этом примере мы определяем единственную функцию get_current_weather. Модель вызывает функцию несколько раз, и после того как мы отправляем ответ функции обратно модели, мы позволяем ей решить следующий шаг. Она ответила пользовательским сообщением, которое сообщало пользователю температуру в Сан-Франциско, Токио и Париже. В зависимости от запроса она может выбрать вызов функции снова.

Если вы хотите заставить модель вызвать определенную функцию, вы можете сделать это, установив tool_choice с указанием конкретного имени функции. Вы также можете заставить модель генерировать сообщение для пользователя, установив tool_choice: "none". Обратите внимание, что поведение по умолчанию (tool_choice: "auto") предполагает, что модель сама решает, вызывать ли функцию и, если да, то какую именно функцию вызвать.


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