Каждый, кто пытался собрать агента на чистом API, знает эту боль: ручной цикл вызовов, обработка tool calls, передача состояния между ходами, отладка промежуточных шагов. Двадцать строк кода на каждый if — и в итоге получается половина фреймворка, только хуже тестированная.

OpenAI Agents SDK — это именно тот слой, который закрывает разрыв между «сырым API» и «production-агентом». Он не заменяет Responses API, а строит оркестрацию поверх него: agent loop, handoffs между специалистами, guardrails, sandbox и tracing — всё из коробки.

Ниже — разбор, когда SDK действительно нужен, а когда хватит простого цикла вызовов. Без воды, только проверенные паттерны и рабочий код.

Что такое Agents SDK

OpenAI Agents SDK — официальный production-фреймворк для сборки multi-agent систем на Python и TypeScript. Родился в 2025 году как зрелая версия экспериментального Swarm и за год вырос в полноценный оркестратор.

Доступны две реализации: Python (pip install openai-agents) и TypeScript (npm install openai-agents). SDK provider-agnostic — работает с 100+ сторонних LLM через OpenAI-совместимые эндпоинты.

Ключевое правило: SDK не заменяет Responses API — он строится поверх него. Разница в том, кто владеет циклом работы: разработчик или рунтайм SDK.

Примитивы и что они делают

ПримитивЧто делает
AgentLLM + instructions + tools + опционально structured output, handoffs, guardrails
HandoffsПередача управления одного агента другому специалисту
GuardrailsВалидация входов и выходов агента
TracingВстроенная визуализация вызовов и отладка
SessionsСохранение истории между turn’ами (SQLite, OpenAI Conversations и др.)
SandboxИзолированная среда с файлами, shell, пакетами, snapshot и памятью
SubagentsОркестрация нескольких агентов в изолированных контейнерах
MCPПодключение MCP-серверов как источника инструментов

В TypeScript-версии доступны все базовые примитивы, но sandbox и subagents пока только в Python. Поддержка TypeScript анонсирована.

Agent loop: что происходит внутри

Один запуск SDK равен одному «ходу» приложения. Рунтайм крутит внутри себя цикл, пока не придёт к финальному ответу: вызывается текущий агент, смотрится ответ модели, выполняются tool calls, при необходимости происходит handoff. Всё остальное — streaming, approvals, human-in-the-loop, sessions — строится поверх этого цикла.

Ручной API loop: как выглядит без SDK

from openai import OpenAI

client = OpenAI()

response = client.responses.create(
  model="gpt-5.5",
  input="Собери отчёт по кварталу",
  tools=[my_search_tool, my_db_tool],
)

while not response.is_final:
  for call in response.tool_calls:
    result = run_tool(call)
    response = client.responses.submit_tool_outputs(
      response_id=response.id,
      tool_outputs=[{"call_id": call.id, "output": result}],
    )

Свой цикл, свои обработчики, свои повторы при ошибках. Нет handoffs, guardrails и трейсинга из коробки — всё пишется руками.

Когда что выбирать

СитуацияЧто выбирать
Одна простая фича: суммари, быстрый чат с поискомResponses API напрямую
1–2 tool calls в цикле, состояние в приложенииResponses API, свой мини-луп
Несколько ролей агентов, handoff друг другуAgents SDK
Нужны guardrails на вход/выходAgents SDK
Длинные задачи (минуты+), прерывания, возобновленияAgents SDK + sandbox + checkpointing
Агент ходит в файлы и терминалAgents SDK Sandbox (Python)
MCP-серверы как источник инструментовAgents SDK с нативным MCP
Реалтайм голос/видеоRealtime API, иногда в связке с SDK
Визуальный builder, без кодаAgent Builder + ChatKit

Правило большого пальца: если цикл оркестрации сложнее двух-трёх if’ов, вы уже пишете половину SDK руками. Лучше взять готовый.

Минимальный пример

from agents import Agent, Runner, function_tool

@function_tool
def search_kb(query: str) -> str:
  return run_kb_search(query)

researcher = Agent(
  name="Researcher",
  instructions="Ищешь факты в базе знаний и приводишь их кратко.",
  tools=[search_kb],
)

writer = Agent(
  name="Writer",
  instructions="Собираешь финальный текст по фактам.",
)

router = Agent(
  name="Router",
  instructions="Сначала делегируй Researcher, потом Writer.",
  handoffs=[researcher, writer],
)

result = Runner.run_sync(router, input="Собери сводку по MCP-серверам")
print(result.final_output)

За эти ~15 строк получаем: рутинг между двумя агентами, автоматическое выполнение tool calls, tracing из коробки, сохранение сессий при подключённом backend, подключение любых function tools и MCP-серверов.

Sandbox и долгоживущие агенты

С весны 2026 в Python-версии появилось нативное sandbox-окружение: контейнер с файлами, пакетами, портами, snapshot’ами и памятью. Это превращает SDK в полноценный runtime для long-running агентов — без необходимости самостоятельно клеить Docker и бэбиситтер-процессы.

  • Изолированное выполнение кода и shell-команд
  • Файловые примитивы read/write/edit в стиле Codex
  • Кратко- и долгосрочная память агента как first-class сущность
  • Checkpointing и durability — задача переживает перезапуск
  • Subagents: распараллеливание по нескольким изолированным контейнерам

Sandbox пока только в Python. Для TypeScript-проектов либо ждём порт, либо используем внешние платформы (E2B, Modal) через tool-calls.

Место в пайплайне

SDK — слой оркестрации поверх моделей и инфраструктуры. Рядом стоят: Codex (cloud coding-агент с собственным sandbox), Responses API (транспорт под капотом SDK), MCP (подключается нативно), Realtime API (голос/видео), Agent Builder (no-code UI поверх той же идеологии).

Практические сценарии

Контент-пайплайн с ролями

Два-три агента: Researcher, Writer, Reviewer. Handoffs между ними, guardrails на стиль и факты. Результат складывается в Notion через MCP-сервер.

Coding агент под проект

Sandbox-агент с файловыми примитивами. Получает репозиторий, бриф и тесты — пишет код, запускает тесты, оставляет PR. Отличается от Codex тем, что это собственный runtime, а не хостимый продукт.

Клиентский суппорт с триажем

Router-агент по типу вопроса перенаправляет на специализированных: биллинг, техподдержка, продажи. Каждый с отдельным набором инструментов и guardrails.

Ресёрч-агент с веб-поиском

web_search hosted-tool + function tools для внутренних баз. SDK оркестрирует цикл «поиск → синтез → проверка → ответ» без ручных перепрыжек.

Ограничения

ОграничениеПояснение
TypeScript догоняет Python.Sandbox, subagents и часть новых примитивов приходят в Python раньше.
Latency:каждый проход цикла — вызов API. Для быстрых сценариев лучше Responses API без лишнего слоя.
Стоимость:multi-agent хороводы расходуют токены в несколько раз быстрее одного большого агента.
Self-hosted LLM работают только через OpenAI-совместимые endpoints.
Нет визуального конструктора.Для no-code — Agent Builder + ChatKit.
Не заворачивать простой хелпер с поиском за SDKResponses API проще и быстрее
Не строить «свой SDK» поверх LangChain, если уже живёте в экосистеме OpenAI
Не игнорировать guardrailsпродакшен без них хорош до первого интересного вызова
Не размножать агентов без причиныкаждый handoff = лишний вызов, latency и токены
Не запускать sandbox-агентов без checkpointing в проде

Чеклист

ПроверкаЧто сделать
Разовый промпт с 1–2 tool calls?Responses API
Несколько ролей или явный routing?Agents SDK
Guardrails, tracing и sessions из коробки?Agents SDK
Работа с файлами или shell?Agents SDK Sandbox (Python)
Задача идёт десятки минут или часы?SDK + checkpointing + sandbox
MCP-серверы как источник инструментов?Agents SDK с нативным MCP
Нужен визуальный конструктор без кода?Agent Builder, а не SDK