Перейти к основному содержанию
Tool Calling позволяет AI моделям вызывать определённые вами функции для получения данных или выполнения действий.
Поддержка tool calling зависит от модели. Проверяйте возможности в каталоге моделей.

Что такое Tool Calling?

Tool Calling (вызов функций) — это механизм, позволяющий модели:
  1. Понять, когда нужно вызвать функцию
  2. Определить, какую функцию вызвать
  3. Извлечь параметры из запроса пользователя
  4. Вернуть структурированный ответ для вызова

Сценарии использования

Получение данных

Запрос актуальной информации из внешних источников

Выполнение действий

Отправка email, создание задач, бронирование

Интеграции

Подключение к CRM, ERP, базам данных

Вычисления

Сложные расчёты, которые модель не может выполнить

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

1

Определите функции

Опишите доступные функции с параметрами в формате JSON Schema
2

Отправьте запрос

Передайте описание функций вместе с сообщением пользователя
3

Получите вызов

Модель вернёт название функции и параметры для вызова
4

Выполните функцию

Вызовите функцию в своём коде и верните результат модели
5

Получите финальный ответ

Модель использует результат для формирования ответа пользователю

Пример использования

1. Определение функций

const tools = [
  {
    type: 'function',
    function: {
      name: 'get_weather',
      description: 'Получить текущую погоду в указанном городе',
      parameters: {
        type: 'object',
        properties: {
          city: {
            type: 'string',
            description: 'Название города, например "Москва"'
          },
          units: {
            type: 'string',
            enum: ['celsius', 'fahrenheit'],
            description: 'Единицы измерения температуры'
          }
        },
        required: ['city']
      }
    }
  },
  {
    type: 'function',
    function: {
      name: 'send_email',
      description: 'Отправить email',
      parameters: {
        type: 'object',
        properties: {
          to: { type: 'string', description: 'Email получателя' },
          subject: { type: 'string', description: 'Тема письма' },
          body: { type: 'string', description: 'Текст письма' }
        },
        required: ['to', 'subject', 'body']
      }
    }
  }
];

2. Отправка запроса с функциями

import OpenAI from 'openai';

const openai = new OpenAI({
  baseURL: 'https://polza.ai/api/v1',
  apiKey: '<POLZA_AI_API_KEY>'
});

const completion = await openai.chat.completions.create({
  model: 'openai/gpt-4o',
  messages: [
    { role: 'user', content: 'Какая погода в Москве?' }
  ],
  tools: tools,
  tool_choice: 'auto'  // или 'required' для обязательного вызова
});

// Проверяем, запросила ли модель вызов функции
if (completion.choices[0].message.tool_calls) {
  const toolCall = completion.choices[0].message.tool_calls[0];
  console.log('Функция:', toolCall.function.name);
  console.log('Параметры:', toolCall.function.arguments);
}

3. Обработка вызова и отправка результата

// Получаем вызов функции от модели
const toolCall = completion.choices[0].message.tool_calls[0];
const args = JSON.parse(toolCall.function.arguments);

// Выполняем функцию (ваша реализация)
const weatherData = await getWeather(args.city, args.units);

// Отправляем результат обратно модели
const finalCompletion = await openai.chat.completions.create({
  model: 'openai/gpt-4o',
  messages: [
    { role: 'user', content: 'Какая погода в Москве?' },
    completion.choices[0].message,  // Сообщение с tool_calls
    {
      role: 'tool',
      tool_call_id: toolCall.id,
      content: JSON.stringify(weatherData)
    }
  ],
  tools: tools
});

console.log(finalCompletion.choices[0].message.content);
// "В Москве сейчас +15°C, облачно с прояснениями."

Параметры tool_choice

ЗначениеОписание
autoМодель решает, вызывать ли функцию
requiredМодель обязательно вызовет одну из функций
noneМодель не будет вызывать функции
{"type": "function", "function": {"name": "..."}}Вызвать конкретную функцию

Параллельные вызовы

Модель может запросить несколько функций одновременно:
{
  "tool_calls": [
    {
      "id": "call_1",
      "function": { "name": "get_weather", "arguments": "{\"city\": \"Москва\"}" }
    },
    {
      "id": "call_2",
      "function": { "name": "get_weather", "arguments": "{\"city\": \"Санкт-Петербург\"}" }
    }
  ]
}
Обрабатывайте все вызовы и возвращайте результаты для каждого tool_call_id.

Советы и лучшие практики

Чем точнее описание функции и параметров, тем лучше модель понимает, когда её использовать.
Если параметр имеет фиксированный набор значений, используйте enum для валидации.
Если функция завершилась с ошибкой, верните понятное описание ошибки модели.
Большое количество функций усложняет выбор для модели. Группируйте связанные операции.

Следующие шаги