OpenAI Agents SDK · гайд

Как собрать ИИ-агента
на OpenAI Agents SDK
tools · handoffs · MCP

Function tools, handoffs между ролями и MCP — от Hello World до сценария research → draft под контент

Если вы ищете, как создать ИИ-агента, начните с простого вопроса: задача решается одним «умным помощником» или ей нужна команда с разными ролями?

Коротко. Один агент — это модель плюс инструкции плюс набор инструментов. Он сам решает, когда вызвать инструмент, и возвращает результат. Команда агентов нужна, когда роли сильно различаются: исследование, черновик, проверка, публикация.

tools handoffs MCP research→draft
agents-runtime · pipeline
# поток гайда
Agent + Runner → Hello World
@function_tool → руки агента
handoffs / as_tool → роли
MCP → внешние инструменты
HITL → publish READY

Что соберёте по гайду

От Hello World на Python до команды с tools, handoffs и MCP — и мини-пайплайна research → draft с HITL перед публикацией.

0.19.x
линия openai-agents на PyPI
2–5
tools на одного агента
research → draft → HITL
финальный сценарий под контент и лиды
без бесконечных handoffs

Кому хватит одного агента, а кому нужна команда с handoffs

Маркер: простыми словами. Handoff (передача) — это когда один агент отдаёт диалог другому. Специалист дальше сам ведёт разговор и отвечает пользователю. Это не «подсказка в чат», а смена ответственного.

Чем агент отличается от чата с промптом

В обычном чате вы каждый раз пишете промпт и копируете ответ. Агент работает в цикле: получил задачу → подумал → вызвал инструмент → прочитал результат → продолжил → отдал финал.

У агента есть:

  • инструкции — кто он и что нельзя делать;
  • tools — «руки»: поиск, запись файла, вызов API;
  • лимит ходов — сколько раз можно крутить цикл, чтобы не уйти в бесконечность.

Чат отвечает текстом. Агент может ещё и сделать действие: сохранить черновик, дернуть CRM, отправить сообщение в Telegram (после вашего разрешения).

Когда triage → specialist окупается, а когда мешает

Схема triage → specialist звучит красиво: диспетчер смотрит запрос и передаёт его исследователю, копирайтеру или исполнителю. Она окупается, если:

  • у ролей разные инструкции и разные tools;
  • одна ошибка «универсала» дорого стоит (публикация, платёж, удаление);
  • поток задач однотипный: бриф → research → draft → review.

Она мешает, если:

  • задач мало и все простые («перепиши абзац»);
  • вы раздули 7 агентов вместо 2–3;
  • нет лимита передач — агенты гоняют задачу по кругу.

Правило на старте: один агент с 2–4 tools. Команду добавляйте, когда один агент начинает путаться в ролях или открывать лишние инструменты.

OpenAI Agents SDK vs режим агента в ChatGPT

Путаница здесь частая. «ChatGPT агент», «Agent Builder» и «OpenAI Agents SDK» — это разные пути.

SDK, Agent Builder и UI-агент — три разных пути

ПутьЧто этоКому подходит
Режим агента в ChatGPTИнтерфейс в продукте OpenAI: агент внутри чатаБыстрый тест без кода
Agent BuilderВизуальная сборка агентов в экосистеме OpenAIПрототип без Python
OpenAI Agents SDKPython-пакет: код, tools, handoffs, MCP, sessions, HITLКогда нужен свой сценарий, сервер и контроль

Agents SDK — это code-first стек: вы пишете логику в Python и запускаете её у себя или на сервере. Документация позиционирует SDK как production-ready развитие эксперимента Swarm: мало абстракций, есть Agents, handoffs / agents-as-tools, guardrails и tracing.

Из России доступ к API OpenAI часто упирается в оплату и регистрацию. Честно: без зарубежной карты или посредника ключ может быть недоступен. Рабочие обходы на старте:

  1. прогнать логику на бесплатных локальных моделях и перенести схему на OpenAI позже;
  2. держать финальную публикацию в Make/n8n/Telegram отдельно от LLM;
  3. если API недоступен — собрать похожий пайплайн ролей в no-code (n8n) и вернуться к SDK, когда ключ появится.

Этот гайд всё равно полезен: роли, tools, handoffs и MCP — одни и те же идеи, даже если движок позже сменится.

Почему Assistants API больше не стартовая точка

Agents SDK по умолчанию опирается на Responses API — современный транспорт запросов к моделям OpenAI. Assistants API (Assistants / Threads / Runs) официально устаревает: отключение запланировано на 26 августа 2026. Новые интеграции на Assistants начинать не стоит.

Маркер: простыми словами. Responses API — «труба», по которой ходят сообщения и вызовы инструментов. Agents SDK — «диспетчер» поверх этой трубы: сам крутит ходы, tools, передачи и память.

Когда брать что:

  • короткий сценарий на 1–2 вызова tool — можно Responses API напрямую;
  • несколько ролей, approvals, MCP, сессии — берите Agents SDK.
Визуализация · не hero

Эстафета triage → specialist

Пакет задачи заходит на диспетчера, вспыхивают function tools, затем контроль уходит research → writer → critic. Сбоку — разъём MCP: внешние серверы без смены роли агента.

  • Triage решает, кому отдать полный контроль (handoff), а не размазывать всё в одном промпте.
  • Tools — локальные «руки» агента: поиск, файл, Telegram.
  • MCP — чужой инструмент по протоколу; HITL мигает на опасном шаге critic.

Дальше — Hello World на Python, затем tools, handoffs и подключение MCP уже кодом.

Редакционная схема потока Agents SDK, не UI OpenAI. Цикл ~28 с: вход → tools → handoff → MCP → HITL → выход.

Установка и первый Hello World на Python

Это обязательный how-to блок. Повторите его до любых handoffs и MCP.

pip, ключ API и минимальный Agent + Runner

Что нужно:

  • Python 3.10 или новее;
  • пакет openai-agents (актуальная линия 0.19.x, на конец июля 2026 — 0.19.1);
  • ключ в переменной окружения OPENAI_API_KEY.

Шаг 1. Создайте папку проекта и виртуальное окружение:

python3 -m venv .venv
source .venv/bin/activate   # Windows: .venv\Scripts\activate
pip install openai-agents

Шаг 2. Положите ключ в окружение (не в git и не в скриншот чата):

export OPENAI_API_KEY=sk-...

Шаг 3. Создайте файл hello_agent.py:

from agents import Agent, Runner

agent = Agent(
    name="Assistant",
    instructions="Ты короткий помощник. Отвечай по-русски, без воды.",
)

result = Runner.run_sync(agent, "Напиши одно предложение: что такое ИИ-агент.")
print(result.final_output)

Шаг 4. Запустите:

python hello_agent.py

Маркер: простыми словами. `Agent` — описание роли (имя, инструкции, tools). `Runner` — движок, который крутит цикл «подумал → вызвал tool → продолжил», пока не получит финальный ответ.

Признак успеха. В терминале появляется короткий русский ответ без traceback. Значит SDK установлен, ключ читается, цикл Runner отработал.

Типичные ошибки на первом запуске

  1. ModuleNotFoundError: agents — пакет стоит не в том окружении. Активируйте .venv и снова pip install openai-agents.
  2. Ошибка авторизации / 401 — нет OPENAI_API_KEY в этой же сессии терминала или ключ битый. Проверьте echo $OPENAI_API_KEY (должно быть непусто).
  3. Python 3.9 и ниже — пакет требует ≥3.10. Обновите интерпретатор.
  4. Чужой туториал со старой версией (0.2.x, 0.14.x) — сверяйтесь с PyPI и официальной документацией SDK, а не с копиями в блогах.

Function tools: даём агенту руки, а не только текст

Без tools агент — умный чат. С tools он может считать, читать файл, дергать ваш сервис.

Маркер: простыми словами. Function tool — обычная Python-функция, которую модель может вызвать как действие. SDK сам строит схему аргументов из сигнатуры и описания функции.

@function_tool и схема аргументов

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

from agents import Agent, Runner, function_tool

@function_tool
def save_draft(title: str, body: str) -> str:
    """Сохраняет черновик статьи в локальный файл drafts.txt."""
    with open("drafts.txt", "a", encoding="utf-8") as f:
        f.write(f"# {title}\n{body}\n\n")
    return f"Черновик «{title}» сохранён"

agent = Agent(
    name="Writer",
    instructions="Пиши коротко. Когда черновик готов — сохрани через save_draft.",
    tools=[save_draft],
)

result = Runner.run_sync(agent, "Тема: 3 ошибки в ТЗ на статью. Сохрани черновик.")
print(result.final_output)

Что важно новичку:

  • docstring читает модель — пишите по-русски, что делает функция и когда её звать;
  • типы аргументов (str, int) помогают не сломать вызов;
  • для опасных действий (отправка, удаление) позже включите needs_approval — человек подтверждает шаг.

Кроме своих функций есть hosted tools OpenAI (web search, file search, code interpreter и др.) — их выполняет сторона OpenAI, без вашего локального callback.

Сколько tools достаточно, чтобы агент не «плавал»

Ориентир: 2–5 tools на одного агента. Если список длинный, модель чаще выбирает не тот инструмент или «забывает» нужный.

Практика:

  • researcher — поиск + чтение базы;
  • writer — сохранение черновика;
  • executor — публикация (только с approval).

Не давайте одному агенту сразу CRM, почту, оплату, диск и Telegram. Раздутый список tools — главный способ сжечь бюджет и получить хаос.

Handoffs: как передать задачу другому агенту без хаоса

Мультиагентные системы пугают словом «оркестрация». В SDK есть два понятных паттерна.

Маркер: простыми словами. Agents-as-tools — специалист работает как инструмент у менеджера. Менеджер вызывает его, получает результат и сам пишет финальный ответ пользователю. Handoff — специалист забирает разговор целиком.

Handoffs vs agents-as-tools — когда что выбирать

ПаттернКто отвечает пользователюКогда брать
HandoffСпециалист после передачиДиспетчер → эксперт с другими правилами и tools
Agents-as-toolsМенеджерResearch / writer / critic как подзадачи одного ответа

Пример мысли на пальцах:

  • «Это вопрос в поддержку биллинга» → handoff биллинг-агенту;
  • «Собери факты, потом напиши черновик, потом проверь» → manager + as_tool, один владелец ответа.

Паттерны можно комбинировать: triage передаёт writer’у (handoff), а writer внутри вызывает critic как tool.

Для handoffs в инструкции полезен рекомендованный prefix из SDK (RECOMMENDED_PROMPT_PREFIX / prompt_with_handoff_instructions) — модель лучше понимает, когда передавать управление.

Лимит передач и защита от бесконечного цикла

Типичная проблема мультиагентных систем: агенты вечно «перекидывают» задачу.

Как защититься:

  1. задайте лимит ходов Runner / max_turns у вызовов;
  2. в triage чётко опишите критерии маршрута («если не research и не draft — уточни у человека»);
  3. не делайте взаимных handoffs без стоп-условия;
  4. на публикацию ставьте HITL, а не автоперевод «в прод».

Итог блока. Handoff — смена владельца диалога. As-tool — аренда специалиста без потери контроля. Для контент-пайплайна чаще выигрывает менеджер + as_tool; для поддержки «одна роль отвечает клиенту» — чистые handoffs.

MCP: подключаем внешние инструменты к агенту

Свои function tools покрывают то, что вы написали в Python. MCP нужен, когда инструменты уже живут снаружи: файловая система, вики, CRM-коннектор, сервер в Cursor.

Маркер: простыми словами. MCP (Model Context Protocol) — общий «разъём» между ИИ-приложением и внешними инструментами. В документации его сравнивают с USB-C для AI: один стандарт, много устройств.

Stdio, Streamable HTTP и HostedMCPTool — как выбрать транспорт

ВариантГде крутится вызовТипичный кейс
HostedMCPToolНа стороне OpenAIПубличный MCP URL / коннектор
MCPServerStreamableHttpВ вашем Python-процессеСвой или удалённый MCP по URL + headers
MCPServerStdioЛокальный subprocessPoC: filesystem MCP через npx
SSE (устаревший)ЛокальноТолько старые серверы; для новых — не default

Как выбрать:

  1. быстрый локальный эксперимент → stdio;
  2. свой сервер в сети → Streamable HTTP;
  3. хотите, чтобы OpenAI сам ходил в MCP URL → HostedMCPTool.

Подключение в общем виде: либо tools=[HostedMCPTool(...)], либо mcp_servers=[MCPServerStdio(...)] / MCPServerStreamableHttp(...). Классы и параметры — в разделе MCP официальной документации SDK (ссылка в конце статьи).

Approvals и фильтр tools, чтобы не открыть лишнее

MCP-сервер может отдать десятки tools. Агенту это вредно.

Делайте так:

  • включите фильтр tools (tool_filter / static allow-list) — только нужные имена;
  • на запись, отправку, удаление — require_approval / needs_approval;
  • не учите SSE как основной путь: протокол уходит от SSE к Streamable HTTP и stdio.

Признак успеха MCP. В tracing видно list_tools и конкретный MCP tool call, а агент не видит «лишние» действия вне allow-list.

Память, guardrails и человек в контуре

Агент без памяти каждый раз начинает с нуля. Агент без тормозов может опубликовать черновик с ошибкой.

Маркер: простыми словами. Guardrails — автоматические проверки входа и выхода (токсичность, утечка секретов, «не тот формат»). HITL (human-in-the-loop) — пауза, пока человек не нажмёт approve или reject.

Sessions — что агент помнит между шагами

Sessions — встроенная память между запусками Runner (например, SQLiteSession). Удобно для многошагового брифа: «допиши прошлый черновик», «учти правки редактора».

Важно: не смешивайте в одном run session-память SDK с параллельными механизмами вроде conversation_id / previous_response_id — документация прямо запрещает такую кашу.

HITL на опасных действиях (отправка, удаление, оплата)

Ставьте человека в контур, когда шаг необратим:

  • публикация в Telegram / WordPress;
  • письмо клиенту;
  • удаление файла;
  • списание или смена тарифа.

Как это выглядит в SDK: tool с needs_approval → run останавливается на interruptions → вы сохраняете state → approve/reject → продолжаете Runner.run с этим state. Долгое ожидание человека сериализуется через to_json / from_json.

Нюанс guardrails: input-проверки надёжнее вешать на первого агента цепочки, output — на того, кто отдаёт финал. Для side-effects лучше tool-level approval, а не только «вежливый промпт».

Рынок тоже идёт к HITL: даже крупные B2B-анонсы про офисных ИИ-агентов подчёркивают ручное подтверждение важных действий. Workflow важнее набора чатов — один инструмент решает кусок, система связывает шаги.

Сценарий research → draft → review под контент и лиды

Соберём мини-контент-завод на идеях SDK — без пересказа чужих travel-demo.

Роли triage / research / writer / critic / executor

Рекомендуемая схема для контента:

1

Triage

Классифицирует: research / draft / publish / clarify.

2

Researcher

Собирает факты (web search, MCP, ваша база).

3

Writer

Пишет черновик по брифу и фактам.

4

Critic

Проверяет факты, тон, CTA; лучше как agent-as-tool у менеджера.

5

Executor

Пишет файл или шлёт в канал только после HITL.

Оркестрация:

  • внутри контент-цикла — manager + agents-as-tools (один владелец ответа + critic);
  • на ветке «опубликовать» — handoff или отдельный executor с approval.

Псевдо-каркас ролей:

Manager
  ├─ research.as_tool(...)
  ├─ writer.as_tool(...)
  ├─ critic.as_tool(...)
  └─ publish_draft (function_tool, needs_approval=True)

Так вы не теряете контроль и не плодите бесконечные handoffs.

Вывод в файл, Telegram или Make/n8n без переписывания гайда конкурента

Финальный шаг агента — не «ещё один абзац», а артефакт:

  • дописать drafts/slug.md;
  • отправить HTTP webhook в Make/n8n;
  • положить текст в очередь Telegram-бота.

Agents SDK здесь остаётся мозгом. Make/n8n — руками публикации, которые у вас уже настроены. Не нужно переносить весь гайд n8n внутрь этой статьи: достаточно endpoint’а «принял JSON → опубликовал».

Что должно получиться за один прогон: бриф → факты → черновик → замечания critic → пауза HITL → файл или webhook. Если паузы нет — в прод не пускайте.

Где команда сливает бюджет на агентах

Ошибки ниже повторяются чаще, чем «не тот фреймворк».

Раздутый список tools и «вечные» handoffs

Симптомы: агент вызывает не тот tool; токены улетают на пустые круги; в логах десятки transfer_to_* без финала. Лечение: меньше tools, явные роли, max_turns, critic как as_tool, publish только с approval.

Секреты в репо и путаница стеков

Ключ только в env / секретах CI; не коммитьте .env; не вставляйте sk- в скриншоты. Assistants API ≠ Agents SDK; UI-агент ChatGPT ≠ ваш Python Runner; SSE MCP ≠ актуальный default; 7 агентов «на вырост» почти всегда хуже 2–3 рабочих.

Ещё риск: агент с широкими MCP-tools без sandbox и approvals. Даже новости про sandbox-инциденты сводятся к простой морали — режьте права и подтверждайте опасные шаги.

Чеклист запуска и куда расти дальше

Мини-чеклист перед продом

  • Python ≥ 3.10, openai-agents 0.19.x, ключ в env
  • Hello World через Agent + Runner проходит
  • У каждого агента 2–5 tools, есть docstring
  • Выбран паттерн: handoff или as_tool (не «всё сразу без правил»)
  • Есть лимит ходов
  • MCP: выбран транспорт, SSE не default, включён tool filter
  • Publish / delete / pay — только с HITL
  • Sessions не смешаны с чужими id диалога в одном run
  • Секреты не в git
  • Есть tracing/логи на первый боевой прогон

От одного SDK-агента к контент-заводу и обучению

Когда Hello World и один writer стабильны, наращивайте так:

  1. researcher + writer;
  2. critic;
  3. executor с approval;
  4. мост в Telegram / WordPress / Make.

Дальше упираетесь не в «ещё фреймворк», а в процесс: брифы, статусы, календарь, QA. Если нужна система целиком — обучение работе с агентами и контент-заводом закрывает как раз этот слой: роли, автоматизация, публикация, а не только вызов модели.

FAQ

Короткие ответы на частые вопросы по Agents SDK, MCP и старту с нуля.

Чем OpenAI Agents SDK отличается от n8n AI Agent и CrewAI

Agents SDK — code-first runtime OpenAI: tools, handoffs, MCP, sessions, HITL в Python. n8n сильнее no-code и готовыми HTTP/Telegram-узлами; для SDK обычно делают маленький Python-сервис и дергают его из сценария. CrewAI удобен ролевым DSL «команда», но другой экосистемой и другим control flow. На mayai.ru уже есть отдельные гайды по n8n/CrewAI/MAF — здесь фокус именно на официальном стеке OpenAI.

Нужен ли MCP, если хватает своих function tools

Нет. Свои @function_tool часто достаточны для файла, webhook и простой CRM-обёртки. MCP подключайте, когда инструмент уже существует как MCP-сервер или его используют несколько клиентов (Cursor, другой агент, хостинг OpenAI).

Можно ли собрать агента бесплатно / с нуля

«С нуля» — да: код SDK открытый, Hello World пишется за вечер. «Бесплатно навсегда» — почти нет: нужны Python-среда и обычно платные вызовы модели. Без доступа к OpenAI API из РФ можно отработать схему ролей на доступной модели/локально, а публикацию оставить в Make/n8n.

С чего начать маркетологу без бэкенд-опыта

1) Повторить Hello World из этого гайда.
2) Добавить один save_draft.
3) Добавить critic как as_tool.
4) Включить approval на «отправить».
5) Отдать JSON в уже знакомый Make/n8n.
Не начинайте с семи агентов и трёх MCP-серверов.

Что проверяли по источникам

  1. Официальная документация OpenAI Agents SDK (install, Runner, tools, multi-agent).
  2. Раздел MCP SDK: Hosted / Streamable HTTP / stdio; SSE как legacy.
  3. Deprecations OpenAI: Assistants API — shutdown 26.08.2026.
  4. PyPI: пакет openai-agents линия 0.19.x (0.19.1 на 29.07.2026).
  5. Фоновые публикации о спросе на бизнес-агентов и важности workflow (не тема страницы).

Ключевые ссылки для самостоятельной проверки: документация Agents SDK, MCP в SDK, handoffs, deprecations OpenAI, PyPI openai-agents.

Beget — надёжный хостинг и VPS