Перейти к содержимому
NEWЧат с 15 ИИ-моделями — попробуйте бесплатно / имейте совесть, когда будете делиться или копировать
>AISTUDY_

Модуль 4.3 · Урок 1

SDK вендоров: Anthropic, OpenAI, Vercel

40 мин
ОбзорПрактика
4.3 / Урок 1 из 3

Введение

Открытые фреймворки вроде LangChain и CrewAI решают задачу оркестрации агентов, но у них есть слабое место: они работают поверх API провайдеров, а не вместе с ними. Каждый новый релиз модели требует адаптации на стороне фреймворка, и обновления приходят с задержкой.

Вендорские SDK устраняют эту прослойку. Anthropic, OpenAI и Vercel выпустили собственные инструменты для построения агентов, которые используют возможности моделей напрямую, без абстракций-посредников.

Когда использовать вендорский SDK вместо открытого фреймворка:

  • Вы работаете с одним провайдером и хотите максимум от его модели
  • Вам нужна нативная поддержка новых функций в день релиза
  • Вы строите production-систему и хотите минимум зависимостей
  • Вам важна официальная документация и поддержка

Когда лучше открытый фреймворк:

  • Вы переключаетесь между провайдерами регулярно
  • Вам нужны специфичные абстракции (цепочки, графы, memory)
  • Проект уже построен на LangChain/CrewAI и переписывать дорого

Anthropic Agent SDK

Репозиторий: github.com/anthropics/claude-agent-sdk-python (~5 300 stars)

Архитектура

Ключевая идея Anthropic Agent SDK: каждый пользовательский инструмент оформляется как in-process MCP-сервер. Это означает, что агент общается со своими инструментами по тому же протоколу, что и с внешними MCP-серверами. Единый интерфейс для всего.

graph LR
    A[Agent] -->|MCP| B[Ваш инструмент]
    A -->|MCP| C[Внешний MCP-сервер]
    A -->|MCP| D[Файловая система]
    A -->|API| E[Claude API]

    style A fill:#f8fafc,stroke:#4f46e5,stroke-width:2px
    style B fill:#f8fafc,stroke:#059669,stroke-width:2px
    style C fill:#f8fafc,stroke:#059669,stroke-width:2px
    style D fill:#f8fafc,stroke:#059669,stroke-width:2px
    style E fill:#f8fafc,stroke:#2563eb,stroke-width:2px

Два режима работы

query() — одноразовый запрос. Агент получает задачу, выполняет её и завершается. Подходит для скриптов и автоматизации.

ClaudeSDKClient — сессия. Агент живёт в рамках сессии, сохраняет контекст между вызовами. Подходит для интерактивных приложений.

Пример: агент с пользовательским инструментом

from claude_agent_sdk import Agent, tool

@tool
def get_weather(city: str) -> str:
    """Получить погоду в городе"""
    return f"В городе {city} солнечно, +22C"

agent = Agent(tools=[get_weather])
result = agent.query("Какая погода в Москве?")
print(result.text)

Декоратор @tool автоматически превращает функцию в MCP-совместимый инструмент. Docstring становится описанием инструмента для модели, типы аргументов извлекаются из аннотаций.

Подключение внешних MCP-серверов

from claude_agent_sdk import Agent, MCPServer

agent = Agent(
    mcp_servers=[
        MCPServer("npx", ["-y", "@anthropic/mcp-filesystem"]),
        MCPServer("npx", ["-y", "@anthropic/mcp-git"]),
    ]
)
result = agent.query("Покажи структуру текущего проекта")

MCP-интеграция работает из коробки. Не нужно писать обёртки или адаптеры.

TypeScript-версия

SDK доступен и для TypeScript. API аналогичен Python-версии:

Anthropic Agent SDK -- TypeScript

typescript
Нажмите на строку — увидите объяснение

OpenAI Agents SDK

Репозиторий: github.com/openai/openai-agents-python (~19 500 stars)

Три примитива

OpenAI Agents SDK построен на трёх концепциях:

Agents — агенты с инструкциями, инструментами и набором правил поведения.

Handoffs — механизм передачи управления между агентами. Текущий агент решает, что задача не его, и делегирует другому. Это уникальная особенность SDK.

Guardrails — валидация входных и выходных данных. Работают параллельно с основным вызовом модели, не замедляя обработку.

graph TD
    U[Пользователь] --> A[Агент биллинга]
    A -->|Handoff| B[Агент поддержки]
    A -->|Handoff| C[Агент возвратов]
    B -->|Handoff| A
    C -->|Handoff| A

    G1[Guardrail: ввод] -.->|Параллельно| A
    G2[Guardrail: вывод] -.->|Параллельно| A

    style U fill:#f8fafc,stroke:#64748b,stroke-width:2px
    style A fill:#f8fafc,stroke:#4f46e5,stroke-width:2px
    style B fill:#f8fafc,stroke:#2563eb,stroke-width:2px
    style C fill:#f8fafc,stroke:#2563eb,stroke-width:2px
    style G1 fill:#f8fafc,stroke:#059669,stroke-width:2px
    style G2 fill:#f8fafc,stroke:#059669,stroke-width:2px

Пример: система с handoffs

OpenAI Agents SDK -- handoffs между агентами

python
Нажмите на строку — увидите объяснение

Когда биллинг-агент получает вопрос, не связанный с оплатой, он автоматически передаёт управление агенту поддержки. Модель сама решает, когда выполнить handoff, на основе описания.

Guardrails

from agents import Agent, Runner, InputGuardrail, GuardrailFunctionOutput

async def check_language(ctx, agent, input_text):
    """Проверить, что запрос на русском языке"""
    is_russian = any(c in input_text for c in "абвгдежз")
    return GuardrailFunctionOutput(
        output_info={"language": "ru" if is_russian else "other"},
        tripwire_triggered=not is_russian,
    )

agent = Agent(
    name="Ассистент",
    instructions="Отвечай на вопросы.",
    input_guardrails=[
        InputGuardrail(guardrail_function=check_language)
    ],
)

Guardrails выполняются параллельно с основным запросом к модели. Если guardrail срабатывает, ответ модели отбрасывается.

Встроенный трейсинг

Каждый вызов автоматически записывается в трейс. Трейсы визуализируются в OpenAI Dashboard: видно, какой агент обрабатывал запрос, какие инструменты вызывались, где произошёл handoff.

Провайдер-агностичность

Несмотря на название, SDK работает не только с OpenAI:

from agents import Agent, Runner, OpenAIChatCompletionsModel
from openai import AsyncOpenAI

client = AsyncOpenAI(
    base_url="http://localhost:11434/v1",  # Ollama
    api_key="ollama",
)

agent = Agent(
    name="Локальный агент",
    model=OpenAIChatCompletionsModel(
        model="llama4",
        openai_client=client,
    ),
)

Любой сервер с OpenAI-совместимым API подходит: Ollama, vLLM, LiteLLM.

Vercel AI SDK

Репозиторий: github.com/vercel/ai (~22 400 stars)

Особенности

Vercel AI SDK — TypeScript-first библиотека для построения AI-приложений. Главное преимущество: лучшая в экосистеме интеграция с React и Next.js.

Унифицированный API провайдеров. Один и тот же код работает с OpenAI, Anthropic, Google, Mistral и десятками других. Смена провайдера — замена одной строки.

Streaming UI. Потоковый рендеринг ответов модели в React-компоненты из коробки. Не нужно вручную обрабатывать SSE или WebSocket.

v6: агенты и MCP. В версии 6 появилась абстракция Agent, поддержка MCP и встроенные DevTools для отладки.

Пример: агент с инструментами

import { openai } from '@ai-sdk/openai';
import { generateText, tool } from 'ai';
import { z } from 'zod';

const result = await generateText({
  model: openai('gpt-4o'),
  tools: {
    weather: tool({
      description: 'Получить погоду',
      parameters: z.object({ city: z.string() }),
      execute: async ({ city }) => `В ${city} солнечно, +22C`,
    }),
  },
  maxSteps: 5,
  prompt: 'Какая погода в Москве?',
});

Параметр maxSteps разрешает агенту выполнять несколько шагов: вызвать инструмент, обработать результат, вызвать следующий инструмент.

Смена провайдера

import { anthropic } from '@ai-sdk/anthropic';
import { google } from '@ai-sdk/google';

// Один и тот же код, разные модели
const result1 = await generateText({
  model: anthropic('claude-sonnet-4-6'),
  prompt: 'Объясни квантовые вычисления',
});

const result2 = await generateText({
  model: google('gemini-2.0-flash'),
  prompt: 'Объясни квантовые вычисления',
});

Streaming в React

'use client';
import { useChat } from '@ai-sdk/react';

export default function Chat() {
  const { messages, input, handleInputChange, handleSubmit } = useChat();

  return (
    <div>
      {messages.map((m) => (
        <div key={m.id}>
          <strong>{m.role}:</strong> {m.content}
        </div>
      ))}
      <form onSubmit={handleSubmit}>
        <input value={input} onChange={handleInputChange} />
      </form>
    </div>
  );
}

Хук useChat обрабатывает стриминг, историю сообщений и состояние формы. На бэкенде достаточно вернуть streamText() из API-роута.

MCP в Vercel AI SDK v6

import { createMCPClient } from 'ai';

const mcpClient = await createMCPClient({
  transport: {
    type: 'stdio',
    command: 'npx',
    args: ['-y', '@anthropic/mcp-filesystem'],
  },
});

const tools = await mcpClient.tools();

const result = await generateText({
  model: openai('gpt-4o'),
  tools,
  prompt: 'Покажи файлы в текущей директории',
});

await mcpClient.close();

Сравнительная таблица

КритерийAnthropic SDKOpenAI Agents SDKVercel AI SDK
ЯзыкPython, TSPython, JSTypeScript
Stars~5 300~19 500~22 400
МоделиТолько ClaudeOpenAI + провайдерыВсе провайдеры
МультиагентыЧерез MCPHandoffsAgent abstraction
СтримингДаДаЛучший в классе
MCPНативныйНетПоддержка в v6
GuardrailsНетВстроенныеНет
ТрейсингНетВстроенныйDevTools в v6
React-интеграцияНетНетНативная
Для когоClaude-разработчикиPython-разработчикиFullstack / React

Когда какой выбрать

flowchart TD
    START[Выбор SDK] --> Q1{Работаете только с Claude?}
    Q1 -->|Да| R1[Anthropic Agent SDK]
    Q1 -->|Нет| Q2{Нужны handoffs между агентами?}
    Q2 -->|Да| R2[OpenAI Agents SDK]
    Q2 -->|Нет| Q3{Строите веб-приложение на React / Next.js?}
    Q3 -->|Да| R3[Vercel AI SDK]
    Q3 -->|Нет| Q4{Нужна поддержка нескольких провайдеров?}
    Q4 -->|Да| R3
    Q4 -->|Нет| Q5{Основной язык -- Python?}
    Q5 -->|Да| R2
    Q5 -->|Нет| R3

    style START fill:#f8fafc,stroke:#64748b,stroke-width:2px
    style Q1 fill:#f8fafc,stroke:#4f46e5,stroke-width:2px
    style Q2 fill:#f8fafc,stroke:#4f46e5,stroke-width:2px
    style Q3 fill:#f8fafc,stroke:#4f46e5,stroke-width:2px
    style Q4 fill:#f8fafc,stroke:#4f46e5,stroke-width:2px
    style Q5 fill:#f8fafc,stroke:#4f46e5,stroke-width:2px
    style R1 fill:#f8fafc,stroke:#059669,stroke-width:2px
    style R2 fill:#f8fafc,stroke:#059669,stroke-width:2px
    style R3 fill:#f8fafc,stroke:#059669,stroke-width:2px

Частые комбинации:

  • Стартап на Next.js — Vercel AI SDK для фронтенда и бэкенда
  • Python-бэкенд с OpenAI — OpenAI Agents SDK для оркестрации
  • Инструменты для Claude — Anthropic Agent SDK + MCP-серверы
  • Мультипровайдер на Python — OpenAI Agents SDK с кастомным провайдером

Доступность из России

Прямой доступ к API Anthropic и OpenAI из России ограничен. Для работы с этими SDK потребуется VPN или прокси-сервер для маршрутизации запросов.

Anthropic Agent SDK — требуется VPN для доступа к Claude API. SDK взаимодействует с api.anthropic.com.

OpenAI Agents SDK — требуется VPN для доступа к OpenAI API. Однако SDK провайдер-агностичен: можно направить запросы на локальный сервер через Ollama или vLLM, и тогда VPN не нужен.

Vercel AI SDK — сам SDK полностью открытый и устанавливается из npm без ограничений. Работает с любым провайдером, включая:

  • Локальные модели через Ollama
  • Российские провайдеры через кастомные адаптеры
  • Любой OpenAI-совместимый сервер

Vercel AI SDK — наиболее доступный вариант для разработки в условиях ограничений, потому что не привязан к конкретному облачному провайдеру.

Скачать урок

Есть идея или нашли ошибку?

// Обсуждение

Можно писать анонимно. Укажите email, чтобы получать уведомления об ответах.