База знаний

OpenAI Agents SDK — когда нужен SDK, а когда достаточно API loop

Справочник по OpenAI Agents SDK: примитивы (Agents, Handoffs, Guardrails, Tracing), agent loop, sandbox, subagents, MCP и когда выбирать SDK вместо Responses API loop.

Опубликовано Обновлено

OpenAI Agents SDK — это production-фреймворк для сборки ИИ-агентов на питоне и TypeScript. Он обёртывает Responses API в удобный рунтайм с agent loop, handoffs, guardrails, sandbox и MCP — и избавляет от необходимости писать эту инфраструктуру руками. Разбираем, когда он реально нужен, а когда хватит простого цикла вызовов API.


Что такое OpenAI Agents SDK

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

SDK provider-agnostic: поддерживает не только Responses/Chat Completions, но и 100+ сторонних LLM через совместимые эндпоинты.

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

Основные примитивы

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

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


Agent loop: что внутри

Один запуск SDK = один «ход» приложения. Рунтайм крутит внутри себя цикл, пока не придёт к финальному ответу:

Notion image
  1. Вызывается текущий агент с подготовленным входом.
  2. Смотрится ответ модели.
  3. Если есть tool calls — выполняются и результат возвращается модели.
  4. Если был handoff — управление передаётся другому агенту.
  5. Если пришёл финальный ответ без инструментов — возвращается результат.

Всё остальное — streaming, approvals, human-in-the-loop, sessions — строится поверх этого цикла.


Простой API loop вручную

Для сравнения — вот та же логика, но без SDK, на чистом Responses API:

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}],
        )

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


SDK или API loop: когда что

СитуацияЧто выбирать
Одна простая фича в продукте («суммари», «быстрый чат с поиском»)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 руками». Лучше взять готовый.

Минимальный пример на 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="Собираешь финальный текст по фактам от Researcher.",
)

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

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

Что вы получаете за эти ~15 строк:

  • Рутинг между двумя агентами с handoff.
  • Автоматическое выполнение tool calls в цикле.
  • Tracing из коробки.
  • Сессии сохраняются, если подключить session backend.
  • Подключается любая описанная функция-tool, MCP-сервер или hosted tool (file_search, web_search, code_interpreter).

Sandbox и long-horizon agents

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

Ключевые возможности sandbox-слоя:

  • Изолированное выполнение кода и shell-команд.
  • Файловые примитивы read/write/edit в стиле Codex.
  • Кратко- и долгосрочная память агента first-class сущностью.
  • Checkpointing и durability — задача переживает перезапуск.
  • Subagents: распараллеливание работы по нескольким изолированным контейнерам.
⚖️
Sandbox пока только в Python. Для TypeScript-проектов либо ждём порт, либо используем внешние sandbox-платформы (E2B, Modal и пр.) через tool-calls.

Место в пайплайне: SDK рядом с Codex и MCP

SDK — это слой оркестрации поверх моделей и инфраструктуры. Рядом стоят соседние инструменты OpenAI:

  • Codex — cloud coding-агент с собственным sandbox и PR-потоком. SDK выводит в продакшен ту же идеологию файловых инструментов.
  • Responses API — основной транспорт между моделью и клиентом. SDK использует его под капотом.
  • MCP — стандарт для подключения внешних инструментов. SDK нативно подключает MCP-серверы к агенту.
  • Realtime API — для голосовых и видео-агентов, оркестрируется связкой с SDK.
  • Agent Builder / ChatKit — hosted UI поверх той же идеологии для no-code редактора.

Notion image

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

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

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

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. Для «чистых» on-prem фреймворков это вызов.
  • Нет визуального конструктора. Если нужен UI «без кода» — смотрите в сторону Agent Builder + ChatKit, а не SDK.

Антипаттерны

  • ❌ Прятать «простой хелпер с поиском» за SDK и Runner. Чистый Responses API проще и быстрее.
  • ❌ Строить «свой SDK» поверх LangChain и других фреймворков, если вы и так живёте в экосистеме OpenAI. Двойная абстракция — двойные баги.
  • ❌ Игнорировать guardrails «потом добавим». Продакшен без них хорош ровно до первого «интересного » вызова.
  • ❌ Делать 7 агентов там, где хватит двух. Каждый handoff — это лишний вызов, latеncy и токены.
  • ❌ Запускать sandbox-агентов без checkpointing в проде. Первый же перезапуск потеряет часы работы.
  • ❌ Смешивать Agent Builder и SDK в одном пайплайне без явных границ. Решите: hosted-редактор или typed code.

Чеклист выбора


Ссылки


По теме

Agents SDK — хороший выбор для всех, кто строит «взрослые» агенты на OpenAI: инфраструктуру вы не пишете с нуля, но полный контроль над логикой остаётся в руках. Если хочется разобрать, где в вашем пайплайне хватит Responses API, а где пора брать SDK или выносить в sandbox — напишите, обсудим.

📢 Telegram-канал: t.me/pimenov_ru · ✉️ Личка: t.me/pimenov