Глава 22

OpenAI Agents SDK: когда готовый harness выгоднее

Agents SDK добавляет небольшой набор primitives для agents, tools, sessions, handoffs, guardrails, tracing и human in the loop. Он экономит код цикла, но не отменяет главного: бизнес-правила по-прежнему живут в ваших handlers, а не в SDK.

Bash
npm install @openai/agents zod

Агент собирается из tools и инструкции, а run крутит цикл за вас.

TypeScript
import { Agent, run, tool } from "@openai/agents";
import { z } from "zod";

export function makeSupportAgent(context: TrustedToolContext) {
  const orderTool = tool({
    name: "order_read",
    description: "Read a verified public view of the current user's order.",
    parameters: z.object({ order_id: z.string() }),
    async execute(input) {
      return JSON.stringify(await orderRead(input, context));
    }
  });

  return new Agent({
    name: "Commerce Support",
    instructions: buildPrompt(context.locale),
    tools: [orderTool]
  });
}

const result = await run(makeSupportAgent(context), userMessage, {
  maxTurns: 6,
  context
});

console.log(result.finalOutput);

Когда готовый harness действительно выгоден, видно по потребностям.

Нужно · Возможность SDK

  • Долгий multi-turn - Sessions и provider-backed conversation sessions
  • Передача специалисту - Handoffs или agent as tool
  • Подтверждение действия - Human in the loop с pause и resume state
  • Диагностика - Tracing включен по умолчанию в server runtimes
  • Проверка входа и результата - Guardrails и output schemas

Долгий multi-turn закрывают sessions, передачу специалисту - handoffs, подтверждение действия - human in the loop с pause и resume, диагностику - tracing по умолчанию. И развилка про multi-agent, которую стоит решать по владению результатом, а не по моде.

Manager или handoff. Agent as tool оставляет управление у менеджера и хорошо подходит для общей финальной формулировки. Handoff передаёт активный разговор специалисту. Выбирайте по ownership результата, а не по моде на multi-agent.

OpenAI разобран. Anthropic устроен иначе - его Messages API stateless, и это меняет адаптер.

Ссылки