Назад в блог

~ 12 минут

Как использовать вызовы функций (OpenAI Function Calling) с помощью GPT API

182

10/30/2023

В постоянно растущем наборе функций OpenAI только что появилась новая возможность: "вызов функций". В этой статье мы расскажем о том, как можно использовать эту функцию для расширения возможностей существующих продуктов, предоставляя им интерфейс для взаимодействия на естественном языке, а также покажем простое приложение на Node.js, использующее ее.

Вадим Пашаев

Вадим Пашаев

CEO PXSTUDIO_

Как использовать вызовы функций (OpenAI Function Calling) с помощью GPT API
Регистрация товарных знаков
Домены, хостинг от reg.ru
FL.ru – фриланс сайт удаленной работы. Поиск удаленной работы, фрилансеры.

Что же такое OpenAI Function Calling?

OpenAI Function Calling - это новая возможность, позволяющая моделям OpenAI, таким как GPT-3.5 turbo и GPT-4, предлагать вызвать функции, написанные в вашем коде, в ответ на естественный язык ввода данных от пользователей. Для этого необходимо сообщить модели, какие функции доступны в вашей системе, описать их назначение и параметры. Затем OpenAI может определить, когда пользовательский ввод будет соответствует этим описаниям, и вызвать соответствующую функцию. Таким образом обеспечивается новый уровень взаимодействия и удобства для пользователей, позволяя нетехническим пользователям взаимодействовать с техническими функциями, используя простой язык.

Почитать подробнее про OpenAI Function Calling.

Последствия и возможности

OpenAI Function Calling открывает новый канал взаимодействия с продуктом. Теперь вы можете интегрировать в свои приложения чат-ассистента и выполнять задачи на основе естественного языка. Это может стать отличным способом взаимодействия с пользователями, которые предпочитают разговорные интерфейсы или нуждаются в более доступном способе взаимодействия с функциями вашего приложения.

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

Примеры использования функции OpenAI Function Calling

Теперь, когда мы знаем концепцию и потенциал функции OpenAI Function Calling, давайте рассмотрим некоторые практические сценарии. Важно понимать, что эти приложения жизнеспособны, поскольку вы сохраняете полный контроль над каналом взаимодействия. Другими словами, вы можете применять такие средства защиты, как аутентификация пользователей, гарантируя, что каждый пользователь может вызывать только те действия, на которые он уполномочен. Это дает возможность персонализировать и обезопасить взаимодействие без ущерба для удобства использования естественно-языкового интерфейса.

В следующем разделе мы рассмотрим ряд примеров использования, от платформ электронной коммерции до устройств "умного дома", чтобы проиллюстрировать, как можно интегрировать вызов функций OpenAI и какую пользу это может принести. Помните, что это всего лишь примеры - возможности ограничены только функциями, которые может выполнять ваше программное обеспечение, и описаниями на естественном языке, которые вы можете для них предоставить.

Платформа электронной коммерции Marketplace

С помощью вызова функций пользователи могут взаимодействовать с онлайн-маркетом более интуитивно понятным и доступным образом. Предоставляя описания к коду функций, выполняющих такие задачи, как поиск и покупка, пользователи могут вызывать эти функции с помощью инструкций на естественном языке. Например, пользователь может спросить: "Найдите мне синие женские кроссовки 7-го размера", и приложение на базе ИИ выполнит функцию, выполняющую этот поиск. Аналогично, пользователь может сказать: "Купите эту пару обуви и отправьте ее на мой домашний адрес", и приложение вызовет функцию для оформления заказа.

Онлайн-банкинг

Клиенты банковских онлайн-платформ могут управлять своими счетами с помощью запросов на естественном языке. Они могут сказать: "Переведите 500 долл. с моего сберегательного счета на мой расчетный счет" или "Покажите мне пять последних операций", и приложение, работающее на базе искусственного интеллекта, выполнит эти запросы. Важно отметить, что приложение может выполнять и функции аутентификации, обеспечивая безопасность конфиденциальных операций.

Поддержка клиентов

Интегрировав эту функцию в платформу поддержки клиентов, модель искусственного интеллекта может выполнять функции поддержки в ответ на запросы клиентов. Клиент может спросить: "Сбросьте мой пароль" или "Покажите мне, как использовать функцию X", и модель искусственного интеллекта может выбрать выполнение требуемого действия, что сэкономит время и усилия как клиентов, так и сотрудников службы поддержки.

Устройства "умного дома"

Вызов функций OpenAI также может быть интегрирован в устройства "умного дома", что позволит пользователям управлять ими с помощью команд на естественном языке. Пользователь может сказать: "Установите температуру в гостиной на 72 градуса" или "Включите мой утренний плейлист на кухне", и модель искусственного интеллекта предложит вызвать соответствующие функции на устройствах.

Инструменты анализа данных

В платформах для анализа данных пользователи могут запрашивать конкретные аналитические данные или отчеты, используя естественный язык. Они могут сказать: "Покажите мне данные о продажах за I квартал 2023 года" или "Сформируйте отчет о коэффициенте оттока клиентов за прошлый год", и модель искусственного интеллекта выполнит соответствующие функции для предоставления запрашиваемых данных.

Примеры

В этом примере мы рассмотрим процесс создания простого приложения с OpenAI Function Calling, написанного на Node.js. Приложение будет получать жестко зашитые данные (но ничего не мешает для того, чтобы в этой функции вызвать какую-нибудь внешнюю API) о ближайшем рейсе с помощью внешней функции getFlightInfo.

  1. Для начала необходимо импортировать последнюю версию официального пакета openai (в настоящее время 3.3.0).
npm i openai moment
  1. Начнем писать код и импортируем dotenv, openai и moment (библиотека для работы с датами и временем в JS).
require('dotenv').config()
const OpenAI = require('openai')
const moment = require('moment')

const openai = new OpenAI()

async function run() {
  // TODO: сюда будем писать остальной код
}

run()
  .then(d => console.log(d.choices))
  .catch(e => console.log(e))

В файл .env добавляем API-ключ, который получаем в личном кабинете OpenAI Platform https://platform.openai.com/account/api-keys.

OPENAI_API_KEY=sk-...
  1. Далее, чтобы запустить наш чат с OpenAI и отправить им данные о нашей кастомной фукнции необходимо вызвать
const response = await openai.chat.completions.create({
    model: "gpt-3.5-turbo", // здесь указывается модель, мы будем использовать gpt-3.5-turbo
    messages, // сюда передается список сообщений
    functions, // массив с описаниями кастомных функций
    function_call: "auto"
})

Параметр function_call управляет тем, как модель вызывает функции, "none" означает, что модель не будет вызывать функцию и вместо этого сгенерирует сообщение. "auto" означает, что модель может выбирать между генерацией сообщения или вызовом функции. Указание конкретной функции через {"name": "my_function"} заставляет модель вызывать эту функцию. "none" - это значение по умолчанию, когда никакие функции нет. "авто" используется по умолчанию, если присутствуют функции.

  1. Прописываем начальное сообщение и описание функции
const messages = [{
    role: "user",
    content: "Когда следующий рейс на самолет из Алматы в Баку?"
}]

 const functions = [{
    name: "get_flight_info",
    description: "Get flight information between two locations",
    parameters: {
      type: "object",
      properties: {
        loc_origin: {
          type: "string",
          description: "The departure airport, e.g. DUS"
        },
        loc_destination: {
          type: "string",
          description: "The destination airport, e.g. HAM"
        }
      },
      required: [ "loc_origin", "loc_destination" ]
    }
  }]

У функции get_flight_info будет два обязательных параметра - это loc_origin (откуда) и loc_destination (куда).

  1. Сама же функция get_flight_info будет выглядеть следущим образом:
function getFlightInfo({ loc_origin, loc_destination }) {
  const flightInfo = {
    loc_origin,
    loc_destination,
    datetime: moment().add(2, 'hours'),
    airline: "KLM",
    flight: "KL643"
  }
  return JSON.stringify(flightInfo)
}
  1. В результате функция openai.chat.completions.create(), если примет решение использовать функцию get_flight_info() вернет объект function_call, и мы с легкостью можем подцепить нашу функцию
const responseMessage = response.choices[0].message

if (responseMessage.function_call) {
  const availableFunctions = {
    get_flight_info: getFlightInfo
  }
  const functionName = responseMessage.function_call.name // название функции, которую необходимо вызвать
  const functionToCall = availableFunctions[functionName] // выбираем его из списка доступных функций
  const functionArgs = JSON.parse(responseMessage.function_call.arguments) // переданные параметры функции

  const functionResponse = functionToCall(functionArgs)

  messages.push({
    role: "function",
    name: functionName,
    content: functionResponse
  })

  // Вызываем функцию заново, и обновляем список сообщений
  const secondResponse = await openai.chat.completions.create({
    model: "gpt-3.5-turbo",
    messages
  })

  return secondResponse
}
  1. Результатом работы будет следующий ответ
[
  {
    index: 0,
    message: {
      role: 'assistant',
      content: 'Следующий рейс на самолет из Алматы (ALA) в Баку (GYD) запланирован на 30 октября 2023 года. Рейс будет выпо
лняться авиакомпанией KLM под номером KL643. Время вылета будет в 05:10 UTC.'
    },
    finish_reason: 'stop'
  }
]

Выводы:

Внедрение вызова функций OpenAI начинает новую эру, когда технические функции и взаимодействие с пользователем становятся неразрывной связью. Предоставляя интерфейс на естественном языке, взаимодействующий с функциональными возможностями вашего приложения, OpenAI позволяет создавать более интересные и удобные продукты. Потенциальные возможности применения OpenAI очень широки и охватывают множество отраслей, включая электронную коммерцию, банковское дело, поддержку клиентов, устройства "умного дома" и инструменты анализа данных.

В этой статье мы продемонстрировали, как можно использовать эту возможность, создав простое приложение получающего данные о предстоящем полете и выдающем информацию на естественном языке на Node.js. Это приложение использует модель чата OpenAI для интерпретации вводимых пользователем данных и вызова соответствующих функций.

Важной особенностью, которую мы рассмотрели в данном руководстве, является параметр 'function_call'. Этот параметр позволяет разработчикам гибко управлять ответом API. При установке значения 'auto' модель может самостоятельно выбрать, выполнить ли вызов функции или просто ответить текстовым сообщением. Однако указание конкретного имени функции заставляет API выполнить вызов этой функции с сохранением ее параметрической структуры. Эта возможность особенно полезна в тех случаях, когда заранее определено, что ответ будет представлять собой вызов функции, тем самым предлагая заранее отформатированный ответ, соответствующий предпочитаемым типам данных и аргументов. Она также позволяет задать определенную структуру или формат ответа, избавляя пользователя от необходимости вручную задавать запрос и выполнять его последующий разбор.

Тем не менее важно помнить, что рассмотренные нами варианты использования - это лишь малая часть возможного. Истинный потенциал OpenAI Function Calling выходит за рамки приведенных здесь примеров и ограничивается только теми функциями, которые может выполнять ваше программное обеспечение, и тем, как вы их определяете. Экспериментируя с этой новой функцией, мы призываем вас дать волю своему воображению и искать новые применения. Возможности безграничны, как и потенциал самого ИИ. Удачного кодинга!

Подписаться на рассылку

Получите лучшие новости по веб-разработке и AI

Подписаться на рассылку

Получите лучшие новости по веб-разработке и AI

Оценка проекта

Хотите быструю оценку Вашего проекта?

Василий Иванов
Максим Насенников
Виктория Мальцева
Vadim Pashaev

Заполните форму справа и наша команда экспертов поможет найти для Вас оптимальное решение вашей идеи или задачи

Есть интересная идея?

И вы очень хотите ее реализовать, пишите нам и получите подробное коммерческое предложение и быструю реализацию