Вызов функций (Tool Calling)

Как использовать функции и инструменты в запросах к AI моделям

Вызов функций (Tool Calling)

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

Поддержка tool calling зависит от модели. Проверяйте возможности в каталоге моделей.

Что такое Tool Calling?

Tool Calling (вызов функций) позволяет модели:

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

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

СценарийПримеры
Получение данныхЗапрос актуальной информации из внешних источников
Выполнение действийОтправка email, создание задач, бронирование
ИнтеграцииПодключение к CRM, ERP, базам данных
ВычисленияСложные расчёты, которые модель не может выполнить

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

  1. Определите функции: опишите доступные функции с параметрами в формате JSON Schema
  2. Отправьте запрос: передайте описание функций вместе с сообщением пользователя
  3. Получите вызов: модель вернёт название функции и параметры для вызова
  4. Выполните функцию: вызовите функцию в своём коде и верните результат модели
  5. Получите финальный ответ: модель использует результат для формирования ответа пользователю

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

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

# tools передаётся в запросе вместе с messages
curl -X POST "https://api.usellm.ru/v1/chat/completions" \
  -H "Authorization: Bearer <USELLM_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-6-astra",
    "messages": [{"role": "user", "content": "Какая погода в Москве?"}],
    "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"]
          }
        }
      }
    ]
  }'

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

curl -X POST "https://api.usellm.ru/v1/chat/completions" \
  -H "Authorization: Bearer <USELLM_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-6-astra",
    "messages": [
      {"role": "user", "content": "Какая погода в Москве?"}
    ],
    "tools": [
      {
        "type": "function",
        "function": {
          "name": "get_weather",
          "description": "Получить текущую погоду в указанном городе",
          "parameters": {
            "type": "object",
            "properties": {
              "city": {"type": "string", "description": "Название города"}
            },
            "required": ["city"]
          }
        }
      }
    ],
    "tool_choice": "auto"
  }'

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

curl -X POST "https://api.usellm.ru/v1/chat/completions" \
  -H "Authorization: Bearer <USELLM_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-6-astra",
    "messages": [
      {"role": "user", "content": "Какая погода в Москве?"},
      {"role": "assistant", "content": null, "tool_calls": [{"id": "call_abc123", "type": "function", "function": {"name": "get_weather", "arguments": "{\"city\": \"Москва\"}"}}]},
      {"role": "tool", "tool_call_id": "call_abc123", "content": "{\"temperature\": 15, \"units\": \"celsius\", \"condition\": \"облачно с прояснениями\"}"}
    ],
    "tools": []
  }'

Параметры 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.

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

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