Реклама. ИП Ахунов Александр Раисович, ИНН 665911236854
Programmatic Tool Calling vs Function Calling: чем отличается и как использовать GPT-5.6 Sol

Programmatic Tool Calling vs Function Calling: чем отличается и как использовать GPT-5.6 Sol

Programmatic Tool Calling (PTC) — ключевая инновация GPT-5.6 Sol, которая позволяет модели не вызывать инструменты, а писать код для их оркестрации. Вместо одного вызова функции за другим, модель генерирует полноценный скрипт, который выполняет цепочку операций с условной логикой, циклами и обработкой ошибок. Разбираем, чем PTC отличается от классического Function Calling, и как это радикально меняет разработку AI-агентов.

Как работает Function Calling (GPT-4o и более ранние версии)

Function Calling — это механизм, при котором модель определяет, какую функцию нужно вызвать, и возвращает JSON с параметрами вызова. Разработчик сам реализует логику вызова, обработки ответа и маршрутизации.

# Function Calling: модель выбирает, какую функцию вызвать
response = openai.chat.completions.create(
    model="gpt-4o",
    tools=[{
        "type": "function",
        "function": {
            "name": "get_weather",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {"type": "string"},
                    "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
                }
            }
        }
    }],
    messages=[{"role": "user", "content": "Какая погода в Москве?"}]
)

# Разработчик получает JSON и сам вызывает функцию
tool_call = response.choices[0].message.tool_calls[0]
result = get_weather(**json.loads(tool_call.function.arguments))

Проблема: если нужно выполнить цепочку из 5–10 вызовов с условной логикой, разработчику приходится писать собственный раннер-оркестратор. Каждый вызов — отдельный round-trip к API, а логика ветвления остаётся на стороне приложения.

Как работает Programmatic Tool Calling (GPT-5.6 Sol)

PTC в GPT-5.6 Sol генерирует исполняемый код (Python или псевдокод), который сразу содержит всю логику оркестрации:

# GPT-5.6 Sol генерирует код для выполнения цепочки операций
response = openai.chat.completions.create(
    model="gpt-5.6-sol",
    tools=[...],  # те же функции
    messages=[{
        "role": "user",
        "content": "Найди отели в Париже на 3 дня, сравни цены, выбери лучший вариант и отправь бронь на почту"
    }],
    # Включаем режим PTC
    tool_choice="programmatic"
)

# Модель возвращает не JSON, а исполняемый код
# response содержит programmatic_tool_call.code

Модель возвращает не список JSON-объектов, а полноценный код:

# Код, сгенерированный GPT-5.6 Sol
def execute_booking_pipeline():
    # Шаг 1: Поиск отелей
    hotels = search_hotels(city="Paris", check_in="2026-08-01", check_out="2026-08-04")
    
    # Шаг 2: Сортировка по цене
    hotels.sort(key=lambda h: h["price_per_night"])
    best = hotels[0]
    
    # Шаг 3: Проверка отзывов — только если рейтинг ниже 4.0
    if best["rating"] < 4.0:
        best = hotels[1]  # Берём следующий
    
    # Шаг 4: Бронирование
    booking = create_booking(hotel_id=best["id"], 
                             dates=["2026-08-01", "2026-08-04"])
    
    # Шаг 5: Отправка подтверждения
    send_email(to="user@example.com", 
               subject=f"Бронь {booking['id']} подтверждена",
               body=f"Отель: {best['name']}, сумма: {booking['total']}")
    
    return booking

Сравнение: PTC vs Function Calling

ПараметрFunction CallingProgrammatic Tool Calling (PTC)
Формат ответаJSON с параметрами функцииИсполняемый код
ОркестрацияВнешняя (код разработчика)Внутренняя (код модели)
Цепочки вызововТребуют round-trip на каждый шагОдин вызов на всю цепочку
Условная логикаНа стороне приложенияВ коде модели
Потребление токеновВысокое (повторные вызовы)На 63,5% ниже
Обработка ошибокРучнаяАвтоматическая (try/catch)
Поддержка цикловНет (только последовательные вызовы)Да (for, while)

Как переписать агента с Function Calling на PTC

Шаг 1: Обновить модель

# Было
model="gpt-4o"
# Стало
model="gpt-5.6-sol"

Шаг 2: Включить режим PTC

response = openai.chat.completions.create(
    model="gpt-5.6-sol",
    messages=[...],
    tools=tools,
    # Включаем PTC
    tool_choice="programmatic"
)

Шаг 3: Выполнить сгенерированный код

GPT-5.6 Sol возвращает код в поле programmatic_tool_call. Выполнить его можно через exec() или специализированную песочницу:

# Получаем код от модели
ptc_code = response.choices[0].message.programmatic_tool_call.code

# Определяем контекст с доступными функциями
context = {
    "search_hotels": search_hotels,
    "create_booking": create_booking,
    "send_email": send_email,
    "json": json,
    "datetime": datetime
}

# Выполняем
exec(ptc_code, context)
result = context.get("booking")

Когда использовать PTC, а когда оставаться на Function Calling

СценарийРекомендация
Одиночный вызов функции (проверить погоду, перевести текст)Function Calling — проще
Цепочка из 2–3 последовательных вызововFunction Calling — достаточно
Сложная бизнес-логика с условиями и цикламиPTC — обязателен
Оркестрация AI-агентов (Multi-Agent)PTC — единственный вариант
Обработка данных с ETL-конвейерамиPTC — значительно эффективнее
Критичная безопасность (песочница недоступна)Function Calling — безопаснее

Практический пример: агент обработки заказов

Сравним, как выглядит реализация агента для обработки возвратов на Function Calling и PTC.

Function Calling (6 round-trip к API, ~850 токенов):

Вызов 1: get_order("ORD-12345") → вернул данные заказа
Вызов 2: check_return_policy(order) → политика допускает возврат
Вызов 3: get_customer(customer_id) → данные клиента
Вызов 4: calculate_refund(order) → сумма возврата
Вызов 5: process_refund(order, amount) → успешно
Вызов 6: send_notification(customer, refund) → уведомление

PTC (1 вызов, ~310 токенов):

def handle_return(order_id="ORD-12345"):
    order = get_order(order_id)
    if not check_return_policy(order):
        return {"error": "Возврат невозможен"}
    
    customer = get_customer(order["customer_id"])
    refund = calculate_refund(order)
    result = process_refund(order, refund["amount"])
    send_notification(customer["email"], f"Возврат {refund['amount']}₽ оформлен")
    return result

Экономия: 63,5% токенов, 83% времени выполнения, 1 запрос вместо 6.

❓ Часто задаваемые вопросы

PTC работает только с Python? В текущей версии GPT-5.6 Sol генерирует Python-код. OpenAI анонсировала поддержку TypeScript и псевдокода в следующих версиях.

Безопасно ли выполнять код, сгенерированный моделью? OpenAI встроил в PTC ограничения: модель не может генерировать код с сетевыми запросами вне объявленных инструментов, системными вызовами или импортом произвольных библиотек. Рекомендуется выполнять код в песочнице (Sandbox/Docker) на продакшене.

Как дебажить PTC-код? GPT-5.6 Sol возвращает не только код, но и пояснения к каждому шагу в поле programmatic_tool_call.reasoning. Используйте их для отладки и логирования.

Поддерживает ли PTC асинхронные вызовы? Да. В сгенерированном коде модель может использовать async/await для параллельного выполнения нескольких независимых вызовов инструментов.

Когда PTC появится в GPT-5.6 Terra и Luna? GPT-5.6 Terra (лёгкая версия) и GPT-5.6 Luna (специализированная) выходят 9 июля 2026. PTC будет доступен во всех трёх модификациях, но с разными лимитами на длину генерируемого кода.

📖 Читайте также


🚀 Хотите внедрить AI-автоматизацию в свой бизнес? Раисыч поможет настроить AI-агентов, чат-ботов и системы лидогенерации под ключ.

Заказать консультацию — raisovich.ru

На сколько PTC снижает потребление токенов по сравнению с Function Calling?

По данным OpenAI, PTC снижает потребление токенов на 63,5% и сокращает время выполнения на 83% за счёт одного вызова вместо цепочки round-trip.

Какие типы задач требуют обязательного перехода на PTC?

Сложная бизнес-логика с условиями и циклами, оркестрация мультиагентных систем и ETL-конвейеры — в этих сценариях PTC обязателен.

Р
Команда экспертов по AI-автоматизации бизнеса, созданию сайтов и продвижению нейросетями. Помогаем бизнесу расти с помощью современных технологий.

Часто задаваемые вопросы

На сколько PTC снижает потребление токенов по сравнению с Function Calling?

По данным OpenAI, PTC снижает потребление токенов на 63,5% и сокращает время выполнения на 83% за счёт одного вызова вместо цепочки round-trip.