Узнайте, как подключать большие языковые модели к внешним инструментам.
В вызове 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)
- например, определить функцию
...и многое другое!
Базовая последовательность шагов для вызова функции следующая:
Вызовите модель с пользовательским запросом и набором функций, определенным в параметре functions.
Модель может выбрать вызов одной или нескольких функций; если это так, содержимое будет строкой JSON, соответствующей вашей пользовательской схеме (примечание: модель может генерировать параметры).
Разбор строки в JSON в вашем коде и вызов вашей функции с предоставленными аргументами, если они существуют.
Снова вызовите модель, добавив в ответ функции новое сообщение, и позвольте модели подвести итоги обратно пользователю.
Не все версии моделей обучены с данными вызова функций. Вызов функций поддерживается в следующих моделях:
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"
) предполагает, что модель сама решает, вызывать ли функцию и, если да, то какую именно функцию вызвать.
Под капотом функции внедряются в системное сообщение в синтаксисе, на котором обучалась модель. Это означает, что функции учитываются в пределах контекста модели и оплачиваются как входные токены. Если вы сталкиваетесь с ограничениями контекста, мы рекомендуем ограничить количество функций или длину документации, которую вы предоставляете для параметров функции.