AI-разработка

OpenAI Agents API 2026: как AI-агент вызывает инструменты? JSON Schema, Tool Calling и данные workflow

Около 16 мин

10 сентября 2026 OpenAI выпустила harness Codex как публичную бету Agents API. Точнее инженерно так: модель только заполняет JSON инструмента; управляемый harness крутит цикл, сжимает контекст и шлёт субагентов. Этот текст раскрывает цепь: как Schema становится дверью, как Tool Calling предлагает вызов, куда падают объекты workflow.

Сразу

Понятие Одна строка Падает на
Agents API Codex harness под управлением OpenAI sessions.create / agent
Tool Calling Модель предлагает имя и аргументы function_call / arguments
JSON Schema Форма аргумента, которой можно в цикл parameters / additionalProperties
Workflow Сессия, ход, элементы, передача session / turn / items

Сначала разделение: вы объявляете Agent, Tools, Environment; OpenAI крутит цикл. Побочные эффекты остаются у хоста или в песочнице, не в весах.

Инструменты вызвать можно. Вызывает не модель

После беты один POST /v1/agents/sessions поднимает долгоживущего агента: найти заказ, прочитать репозиторий, послать субагента. Побочные эффекты настоящие.

«Напрямую вызвать» ставит подлежащее не туда. Модель не держит MCP-сокет, не порождает песочницу и не бьёт ваш деловой API. Она выдаёт проверяемый объект. Исполняет управляемый harness и выбранный Environment.

  • Объявить: functions, MCP и web_search в agent.tools.
  • Предложить: модель шлёт function_call — имя плюс объект аргументов.
  • Исполнить: harness бьёт сервисный инструмент, ваш handler или команду в песочнице.

Если Agent, Tool Calling и Function Calling всё ещё одно слово, сначала Полный гид по AI Agent. Здесь один факт: как Agents API хостит эту JSON-цепь.

Что бета 10 сентября реально отдала

OpenAI сказала прямо: тот же harness, что за Codex и ChatGPT for Work, как API. На стороне модели часто Гид GPT-6 Astra. Платите токены и использование инструментов; сам API платы не добавляет.

  • Управляемый цикл: session, оркестрация, восстановление — без своего клея LangChain.
  • Сжатие контекста: авто-compact у края окна, работа через несколько окон.
  • Tool search + programmatic tool calling: подгружать определения по нужде, звать параллельно, возвращать в контекст только нужное.
  • MCP / function / web_search: одна таблица инструментов может их смешать.
  • Субагенты: multi_agent.enabled, с потолком параллелизма (в доке часто 6).

Прогнозы OpenAI DevDay 2026 угадывала Structured Outputs и Function Calling. Приземлился ресурс сессии: Agent, Environment, Session, Events / Items — не ещё одна обёртка chat completion.

Скелет по-прежнему JSON Tool Calling

Имя API сменилось. Четыре прыжка — нет:

  1. Объявить: agent.tools[] даёт Schema функции, MCP-сервер, встроенные инструменты.
  2. Предложить: модель заполняет имя и аргументы. Она не исполняет.
  3. Дверь: harness или ваш handler проверяет, держит allowlist, может ждать человека.
  4. Записать назад: результат инструмента становится следующим видимым item.

Создание сессии выглядит примерно так. Заказ вымышленный — не кладите настоящие секреты и внутренние URL на публичный сайт:

{
  "agent": {
    "model": "gpt-6-astra",
    "instructions": "Look up orders. Confirm before any refund.",
    "tools": [
      { "type": "programmatic_tool_calling" },
      {
        "type": "function",
        "name": "lookup_order",
        "parameters": {
          "type": "object",
          "properties": {
            "order_id": { "type": "string", "pattern": "^[A-Z]-\\d{4}$" }
          },
          "required": ["order_id"],
          "additionalProperties": false
        }
      },
      {
        "type": "mcp",
        "server_label": "orders",
        "transport": {
          "type": "http",
          "server_url": "https://orders.example.com/mcp"
        }
      }
    ],
    "multi_agent": {
      "enabled": true,
      "max_concurrent_subagents": 3
    }
  },
  "environment": {
    "type": "hosted",
    "workspace_directory": "/workspace"
  },
  "input": [
    {
      "role": "user",
      "content": [
        { "type": "input_text", "text": "Look up order A-1042." }
      ]
    }
  ]
}

Когда цикл крутится, модель всё равно шлёт объект, не абзац «пожалуйста, найдите заказ»:

{
  "type": "function_call",
  "id": "call_3c91",
  "name": "lookup_order",
  "arguments": "{\"order_id\":\"A-1042\"}"
}

Строка MCP — другое написание той же таблицы; граница в MCP Tool Schema vs Function Calling. Кодинг-агент в песочнице всё ещё JSON — см. Кодинг-агенты и JSON-цепь вызова.

Дверь — JSON Schema, не «верните JSON»

Хостинг цикла не делает широкий object безопасным. Договор в Зачем ИИ нужен JSON Schema: промпт влияет, что она заполнит; Schema решает, что можно исполнить.

{
  "name": "lookup_order",
  "description": "Look up an order by ID",
  "parameters": {
    "type": "object",
    "properties": {
      "order_id": {
        "type": "string",
        "pattern": "^[A-Z]-\\d{4}$"
      }
    },
    "required": ["order_id"],
    "additionalProperties": false
  }
}

Schema функции, которая реально стопорит плохой прыжок, нужна в четырёх местах:

  • Сжать типы: у order_id — pattern, не голый string.
  • Enum сумм и действий: возвраты и смена статуса требуют enum.
  • Закрыть лишние ключи: additionalProperties: false. Широкий объект — ещё одна дверь.
  • Подтверждение пишет хост: модель может предложить create_refund; ей нельзя писать allowed: true в состояние.

Держать инструменты и workflow как Schema в репозитории, не как договор в чате. Как нанизывать двери: JSON Schema и workflow AI-агентов.

Workflow — четыре объекта, не цепочка промптов

OpenAI складывает Agents API в четыре понятия. Инженерно это всё JSON:

  • Agent: модель, instructions, tools, MCP. Таблица способностей.
  • Environment: hosted или self-hosted песочница. Файлы, команды и skills живут здесь.
  • Session: долгоживущий экземпляр. Состояние на стороне сервиса; историю не собираете сами.
  • Events / Items: вход, вызовы инструментов, результаты, координация субагентов.

Проверяемый workflow выглядит как объекты, не как последнее предложение «готово»:

{
  "session_id": "sess_9f2a",
  "turn": 2,
  "items": [
    { "type": "function_call", "name": "lookup_order", "id": "call_3c91" },
    { "type": "function_call_result", "call_id": "call_3c91", "status": "paid" }
  ],
  "state": {
    "order_id": "A-1042",
    "status": "paid"
  },
  "next": {
    "tool": "create_refund",
    "allowed": false,
    "reason": "missing_confirmation"
  }
}

У каждого субагента свой контекст. Главный агент координирует item’ами create / message / wait / interrupt. Ставьте потолок параллелизма. Без потолка токены и побочные эффекты веером.

Кто крутит цикл

Вопрос не в том, кто умнее. Где живёт оркестрация:

Ось Agents API Agents SDK Responses API
Кто крутит цикл Codex harness под OpenAI Runner в вашем процессе Собираете сами или опциональная хостинг-оркестрация
Где живёт состояние Session / turns / items Ваше хранилище или SDK-сессия История, цепочки ответов, Conversations
Кто исполняет инструменты Сервисные инструменты, handler’ы, песочница Инструменты в приложении Хостинг-инструменты или ваш рантайм
Когда брать Часовые задачи с хостинг-восстановлением Нужно самим держать approvals и деплой Бьёте модель напрямую или строите агента с нуля

Сначала подлежащее, потом API: хотите ли вы владеть циклом. Полное сравнение — в следующей статье. Здесь одно требование: смените вход, JSON-цепь вызова останется.

Смотреть объекты, не «агент закончил»

После сессии не разбирать последнее предложение. Разбирать след.

  • форматировать agent.tools, function_call и function_call_result. Имя и аргументы должны быть тем прыжком, который вы думали.
  • извлечь JSONPath вытаскивает name, arguments и server_url. Не сканировать прозу глазом.
  • JSON Diff против следа сессии, что прошла на прошлой неделе. Цикл поплыл — сначала таблица инструментов и форма аргументов, потом модель.
  • Сводки после compact должны нести ключевые поля. Потеряете order_id — следующий прыжок заполнит не то.
  • Не класть заказы, сессии и внутренние MCP URL в публичный форматтер. JSONSort крутится локально в браузере; это место читать такие объекты.

След собирается заново — сессию можно разобрать. Это вход в прод, не украшение.

Ловушки

  • Думать, что Agents API даёт модели исполнять инструменты. Исполнение на harness и Environment.
  • Отдать широкий object управляемому циклу. Хостинг — не дверь.
  • Включить multi_agent без потолка параллелизма. Субагенты разворачивают токены и побочные эффекты веером.
  • Считать Session ещё одним chat completion. Состояние, восстановление и compact — объекты первого класса.
  • Заменить Schema промптом. Договор должен проверяться.
  • Читать hosted-песочницу как Zero Data Retention. OpenAI прямо: self-hosted не делает Agents API ZDR-eligible.

FAQ

Agents API даёт модели вызывать инструменты напрямую?

Напрямую она даёт испускать JSON инструмента. Исполнение остаётся в управляемом harness, вашем handler или песочнице. Без tools[] она ничего не вызывает.

Agents API или Responses API — с чего начать?

Хотите, чтобы OpenAI крутила длинный цикл, сжимала контекст и слала субагентов — Agents API. Хотите владеть каждым вызовом модели — Responses API. Цикл в своём процессе — Agents SDK.

Нужна ли JSON Schema на Agents API?

Да. Управляемый цикл только оркестрирует. Параметры функций, MCP inputSchema и объекты состояния всё равно нужно сжимать. Широкая Schema плюс автоцикл открывает дверь шире.

Чем Session, Turn и Item отличаются?

Session — долгоживущий экземпляр. Turn — работа от одного пользовательского ввода. Items — входы, вызовы, результаты или координация субагентов на этом отрезке. Аудит смотрит items, не последнее предложение.

Можно ли агенту трогать прод-базу или делать прод-возврат?

Не ставьте продовые побочные эффекты на первый прыжок. Пусть черновит в изолированной среде за узкой Schema. Подтверждение пишет хост. Секреты и выпуск — человеческая стратегическая дверь.

Вывод

Agents API даёт агенту «вызывать инструменты напрямую» — фраза верна лишь наполовину. Верная половина: цикл больше не пишете вы. Ложная — подлежащее. Подлежащее — harness; сказуемое — исполнить; дополнение — JSON, который заполнила модель.

С сегодня меньше спорить, «делает ли оно само». Сначала положить Agent, Tools, session items и Schema в репозиторий. Модели сменятся. Эту JSON-цепь Tool Calling стоит стабилизировать первой.

Дальше

Журнал: Первая публикация