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

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

Основные понятия#

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

  • Определение инструментов — опишите в запросе доступные функции и их параметры
  • Решение модели — модель определяет, нужно ли вызывать инструмент
  • Возврат вызова — модель возвращает имя функции и параметры
  • Выполнение функции — вы выполняете функцию и получаете результат
  • Продолжение диалога — отправьте результат обратно модели для генерации финального ответа

Протокол OpenAI#

Python

Код
from openai import OpenAI
import json
 
client = OpenAI(
    base_url="https://as.apinoma.com/v1",
    api_key="<ваш APINOMA_API_KEY>"
)

# 1. Определяем инструменты
tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "description": "Получить актуальную информацию о погоде в указанном городе",
        "parameters": {
            "type": "object",
            "properties": {
                "city": {
                    "type": "string",
                    "description": "Название города, например: Москва, Санкт-Петербург"
                },
                "unit": {
                    "type": "string",
                    "enum": ["celsius", "fahrenheit"],
                    "description": "Единица измерения температуры"
                }
            },
            "required": ["city"]
        }
    }
}]

# 2. Отправляем запрос
messages = [{"role": "user", "content": "Какая сегодня погода в Москве?"}]

response = client.chat.completions.create(
    model="openai/gpt-4o",
    messages=messages,
    tools=tools,
    tool_choice="auto"
)

message = response.choices[0].message

# 3. Обрабатываем вызов инструмента
if message.tool_calls:
    for tool_call in message.tool_calls:
        args = json.loads(tool_call.function.arguments)

        # 4. Выполняем вашу функцию
        result = get_weather(args["city"])  # ваша собственная реализация

        # 5. Отправляем результат обратно модели
        messages.append(message)
        messages.append({
            "role": "tool",
            "tool_call_id": tool_call.id,
            "content": json.dumps(result)
        })

    # Получаем финальный ответ
    final = client.chat.completions.create(
        model="openai/gpt-4o",
        messages=messages,
        tools=tools
    )
    print(final.choices[0].message.content)

TypeScript

Протокол Anthropic#

Anthropic использует параметр `tools`, формат немного отличается:

Код
import anthropic
 
client = anthropic.Anthropic(
    base_url="https://as.apinoma.com/anthropic",
    api_key="<ваш APINOMA_API_KEY>"
)

response = client.messages.create(
    model="anthropic/claude-sonnet-4.6",
    max_tokens=1024,
    tools=[{
        "name": "get_weather",
        "description": "Получить актуальную информацию о погоде в указанном городе",
        "input_schema": {
            "type": "object",
            "properties": {
                "city": {"type": "string", "description": "Название города"}
            },
            "required": ["city"]
        }
    }],
    messages=[{"role": "user", "content": "Какая сегодня погода в Москве?"}]
)

# Обрабатываем content block tool_use
for block in response.content:
    if block.type == "tool_use":
        print(f"Вызов инструмента: {block.name}, параметры: {block.input}")

Параллельный вызов функций#

Модель может вернуть несколько вызовов инструментов в одном ответе, и вам следует выполнять их параллельно:

Код
# Модель может запросить несколько вызовов инструментов одновременно
if message.tool_calls:
    # Выполняем все вызовы инструментов параллельно
    import asyncio

    async def execute_tools(tool_calls):
        tasks = []
        for tc in tool_calls:
            args = json.loads(tc.function.arguments)
            tasks.append(execute_function(tc.function.name, args))
        return await asyncio.gather(*tasks)

Параметр tool_choice#

Значение

Описание

`"auto"`

Модель сама решает, вызывать ли инструмент (по умолчанию)

`"none"`

Запретить вызов инструментов

`"required"`

Принудительно вызвать инструмент

`{"type": "function", "function": {"name": "xxx"}}`

Принудительно вызвать указанный инструмент

Поддерживаемые модели#

Следующие модели поддерживают Function Calling:

  • OpenAI: `gpt-4o`, `gpt-4o-mini`, `o1`, `o3-mini`
  • Anthropic: `claude-opus-4`, `claude-sonnet-4`, `claude-3-5-haiku`
  • Google: `gemini-pro-compatible-pro-preview`, `gemini-pro-compatible-flash-lite-preview`, `gemini-3-pro-preview`
  • Отечественные: `deepseek-chat`, `qwen-max`, `glm-4`

Последнее обновление: 23 июня 2026 г.