Назад в блог

~ 12 минут

OpenAI Function Calling: как это работает и как использовать в реальном проекте

1671

30.10.2023

Разобрал OpenAI Function Calling на практике: как работает, как внедрить и какие ошибки возникают. Реальный пример на Node.js.

Вадим Пашаев

Вадим Пашаев

Инженер, веб-разработчик, путешественник

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

OpenAI Function Calling — это штука, которая позволяет модели не просто отвечать текстом, а вызывать функции в вашем коде и возвращать структурированные данные.

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

В этой статье я покажу:

  • как это работает на практике
  • простой пример на Node.js
  • где это реально может использоваться
  • и какие есть подводные камни

Минимальный пример

const response = await openai.chat.completions.create({
  model: "gpt-3.5-turbo",
  messages,
  functions,
  function_call: "auto"
})

Здесь ключевой момент — function_call: "auto".

Это значит:

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

И это решение она принимает сама.

Как это вообще работает

Если упростить максимально:

  1. ты описываешь функции (название, параметры)
  2. передаешь их в OpenAI
  3. модель получает запрос пользователя
  4. если нужно — возвращает вызов функции (с аргументами)

Дальше уже ты:

  • вызываешь функцию у себя
  • и отдаешь результат обратно модели

Где это реально используется

Когда смотришь на это сначала, кажется “ну ок, прикольно”. Но на практике это открывает довольно мощные сценарии:

  • чат-боты, которые реально что-то делают, а не просто отвечают
  • интеграции с API (поиск, заказы, данные)
  • автоматизация внутри сервисов
  • AI-ассистенты, которые дергают твой backend
  • CRM / админки / внутренние инструменты

По сути, ты даешь GPT интерфейс к своему приложению.

Полный пример: запрос информации о рейсе

Сценарий: пользователь пишет → модель понимает → вызывает функцию → возвращаем ответ

1. Установка

npm i openai moment dotenv

2. Базовая настройка

require('dotenv').config()
const OpenAI = require('openai')
const moment = require('moment')

const openai = new OpenAI()

async function run() {}

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

3. Сообщение пользователя + описание функции

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: "Departure airport"
      },
      loc_destination: {
        type: "string",
        description: "Destination airport"
      }
    },
    required: ["loc_origin", "loc_destination"]
  }
}]

4. Вызов OpenAI

const response = await openai.chat.completions.create({
  model: "gpt-3.5-turbo",
  messages,
  functions,
  function_call: "auto"
})

5. Реализация функции

function getFlightInfo({ loc_origin, loc_destination }) {
  return JSON.stringify({
    loc_origin,
    loc_destination,
    datetime: moment().add(2, 'hours'),
    airline: "KLM",
    flight: "KL643"
  })
}

6. Обработка вызова функции

const responseMessage = response.choices[0].message

if (responseMessage.function_call) {
  const availableFunctions = {
    get_flight_info: getFlightInfo
  }

  const functionName = responseMessage.function_call.name
  const functionArgs = JSON.parse(responseMessage.function_call.arguments)

  const functionResponse = availableFunctions[functionName](functionArgs)

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

  const secondResponse = await openai.chat.completions.create({
    model: "gpt-3.5-turbo",
    messages
  })

  console.log(secondResponse)
}

Ошибки, на которые я наткнулся

  • модель не вызывает функцию → значит описание слишком размытое
  • JSON в arguments может приходить кривой
  • забываешь отправить результат обратно в messages
  • неправильно настроен function_call
  • иногда модель просто отвечает текстом

Обновление

OpenAI постепенно уходит от chat.completions к новому API (responses).

https://platform.openai.com/docs

FAQ

Что это вообще дает?
Позволяет GPT не просто отвечать, а реально взаимодействовать с кодом.

Чем отличается от обычного prompt?
Prompt → текст
Function Calling → структура + выполнение логики

Когда использовать?
Когда нужно, чтобы модель что-то делала, а не просто отвечала.

Можно ли без backend?
Нет.

Вывод

Function Calling — это способ связать GPT с реальной логикой приложения.

Ты даешь модели функции → она сама решает, когда их дергать → и ты получаешь управляемое поведение.

И вот с этого момента GPT перестает быть просто чатиком.

Читать далее

OpenAI: Языковые модели, API и фреймворк LangChain
OpenAI: Языковые модели, API и фреймворк LangChain

OpenAI предлагает разработчикам мощные инструменты и API, основанные на современных языковых моделях. Узнайте о фреймворке LangCha...

Что такое Next.js и для чего он нужен? | PXSTUDIO
Что такое Next.js и для чего он нужен?

Next.js - это фреймворк, основанный на React, который позволяет создавать веб-приложения с улучшенной производительностью и улучше...

Топ 7 полезных нейросетей в 2023 году
Топ 7 полезных нейросетей в 2023 году

Нейронные сети плотно вошли в нашу жизнь. Давайте посмотрим, какие же нейросети уже существуют в 2023 году

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

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

Этот сайт защищен reCAPTCHA, применяются Политика конфиденциальности и Условия использования Google.

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

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

Этот сайт защищен reCAPTCHA, применяются Политика конфиденциальности и Условия использования Google.

Расскажите, что нужно сделать

Разберем задачу и предложим следующий шаг

Contact to pxstudio

Сайт, сервис, Telegram-бот, AI-интеграция или оптимизация текущего проекта — опишите ситуацию, а мы подскажем нормальный технический путь.

Этот сайт защищен reCAPTCHA, применяются Политика конфиденциальности и Условия использования Google.

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

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