🗓️
Актуальность: 24 октября 2026 года. Проверены Messages API 2026-10-21, Python SDK 2.0.0, TypeScript SDK 1.0.0, модели поколения 5.5, кэширование, batch, MCP и Claude Agent SDK. Примеры сверены с документацией, но не запускались против API.

Anthropic SDK — официальные клиентские библиотеки для Claude API: генерация текста, изображения и документы, потоковые ответы, инструменты, структурированный вывод и пакетные задания. Claude Agent SDK запускает готовый цикл Claude Code в вашей среде; Managed Agents размещает агентную среду у Anthropic.

Для примеров нужны Python, ключ Claude API и доступный баланс либо применимые API-кредиты. Model ID храните в конфигурации. В руководстве используется claude-sonnet-5-5.

Как выбрать подходящий инструмент

ИнструментЧто даётКогда выбирать
Anthropic Client SDKПрямой доступ к Messages API и другим API AnthropicНужен собственный цикл приложения и полный контроль над инструментами
Claude Agent SDKГотовый агентный цикл, встроенные инструменты, контекст и разрешения Claude CodeАгент должен работать с файлами, командами и кодовой базой
Claude Code CLIИнтерактивная работа из терминалаРазработка и разовые задачи без встраивания в приложение
Managed AgentsРазмещённые Anthropic долгие или асинхронные агенты с управляемой инфраструктуройНе хочется самостоятельно обслуживать среду выполнения и сессии

Claude Agent SDK доступен как библиотека для Python и TypeScript. Если нужен прямой вызов Claude API, используйте Client SDK: цикл инструментов можно реализовать самостоятельно или применить предоставляемый SDK beta tool runner. Готовый цикл не отменяет проверку прав и входных данных.


Установка и авторизация

Для показанной версии клиентских библиотек установите:

python -m pip install "anthropic==2.0.0"
# Альтернатива для TypeScript-проекта:
npm install --save-exact @anthropic-ai/sdk@1.0.0

Клиент новой версии принимает один источник авторизации: не передавайте одновременно API-ключ, auth token и другой профиль учётных данных. Лицензия основных новых Client SDK — Apache 2.0 вместо MIT; условия Agent SDK проверяйте отдельно.

Ключ задайте в ANTHROPIC_API_KEY через защищённую конфигурацию среды. Не помещайте его в репозиторий, браузерный код, скриншоты или журналы. Созданный через Anthropic() клиент читает эту переменную; загрузку .env нужно организовать отдельно.

Миграция на API 2026-10-21

Новые основные версии SDK используют API 2026-10-21. Перед обновлением зависимостей прогоните контрольные запросы и проверьте руководство миграции:

  1. Удалите temperature, top_p, top_k, включая прежние значения по умолчанию: теперь они дают HTTP 400.
  2. Новые SDK отправляют API-ключ через Authorization: Bearer, а не X-Api-Key. Проверьте прокси и шлюз; не дублируйте секрет в обоих заголовках. Ручные HTTP-запросы по-прежнему могут использовать x-api-key.
  3. Прямые блоки document перенесите из сообщений ассистента в пользовательские. Документы внутри tool_result — отдельный допустимый случай. Непустые citations в пользовательских текстовых блоках запрещены; это не запрет включать цитирование документов или сохранять цитаты в сообщениях ассистента.
  4. Python MessageParam теперь объединение типов: создавайте обычные словари вместо MessageParam(...). В TypeScript учитывайте сужение типов по роли сообщения.
  5. Клиентская компактизация TS/Ruby tool runner через compactionControl удалена: переходите на поддерживаемую серверную компактизацию либо документированный compactBeforeNextTurn(). Beta-параметры Models используйте через beta-клиент.
  6. В TypeScript обновляйте SDK провайдеров Bedrock/Vertex/Foundry/AWS/Google Cloud согласованно с основной библиотекой. Старые модели Bedrock до 4.7 не поддерживают новую версию API: для них нельзя механически обновить заголовок.
  7. Если обслуживаете Admin API, проверьте замену workspace_id на scope, роли и область доступа ключей. В ant CLI удалены аргументы ключа и токена в командной строке — используйте защищённую передачу через среду.

Изменения валидации касаются также Message Batches и подсчёта токенов. Предыдущая версия API 2023-06-01 не объявляется отключённой только из-за выхода новой. Закрепите зависимости и сохраните проверенный путь отката.

Текущая линейка моделей

Цены Claude API на 24 октября 2026 года: доллары США за миллион токенов, стандартный режим, без дополнительных инструментальных сборов.

Модель и IDВходВыходКонтекстМаксимальный синхронный вывод
Fable 5.1 — claude-fable-5-1$10$501 млн128 тыс.
Opus 5.5 — claude-opus-5-5$4$201 млн128 тыс.
Sonnet 5.5 — claude-sonnet-5-5$2$101 млн128 тыс.
Haiku 5.5 — claude-haiku-5-5, вход до 100 тыс. включительно$0,10$0,501 млн128 тыс.
Haiku 5.5, вход больше 100 тыс.$0,50$2,501 млн128 тыс.

У Haiku 5.5 порог включает весь вход текущего запроса, в том числе чтение и запись кэша. При превышении порога повышенный тариф применяется ко всему этому запросу, а не только к превышению; предыдущие запросы не пересчитываются.

Запись кэша на 5 минут стоит 1,25 обычной цены входа, на час — 2 цены. Чтение миллиона кэшированных токенов стоит $0,25 у Fable 5.1, $0,20 у Opus 5.5 и $0,10 у Sonnet 5.5. У Haiku 5.5 — $0,01 или $0,05 в зависимости от порога входа. Не применяйте ко всем моделям одно правило скидки на чтение.

Message Batches даёт скидку 50% к стандартным токенным тарифам. Fast mode для Opus 5.5 стоит $8/$40 за вход/выход, не сочетается с batch и с 15 октября доступен без специального beta-заголовка. Выполнение только в США через inference_geo увеличивает соответствующие токенные тарифы в 1,1 раза. Эти суммы не равны стоимости подписки Claude.

Настройки усилия в API: Opus 5.5/Haiku 5.5 — medium, Sonnet 5.5/Fable 5.1 — high. Opus 5.5 и Fable 5.1 всегда используют адаптивное рассуждение. Sonnet 5.5 не принимает thinking: disabled; для уменьшения рассуждений есть between_tools при low/medium/high. Haiku 5.5 при этих уровнях разрешает отключение thinking, но старый режим enabled с budget_tokens ему не подходит.

При переносе с Haiku 4.5 пересчитайте токены: токенизатор изменился. Нельзя переносить старые оценки стоимости и объёма изображений без измерения.

Messages API: минимальный рабочий вызов

Messages API принимает историю сообщений и генерирует следующий ответ ассистента. Системную инструкцию передают в верхнеуровневом поле system; в показанном базовом запросе используем верхнеуровневый system. Актуальная схема также описывает SystemMessageParam; расширенные сценарии системных сообщений внутри диалога сверяйте с выбранной версией и соответствующим руководством, а не переносите старый запрет на роль system.

from anthropic import Anthropic

client = Anthropic()

response = client.messages.create(
    model='claude-sonnet-5-5',
    max_tokens=2048,
    output_config={"effort": "low"},
    system='Ты — технический ассистент. Отвечай кратко и по делу.',
    messages=[
        {
            'role': 'user',
            'content': 'Объясни разницу между REST и GraphQL',
        }
    ],
)

for block in response.content:
    if block.type == 'text':
        print(block.text)

Проверяйте response.stop_reason и response.usage, а не только наличие объекта ответа. max_tokens включает рассуждения: для короткого примера задайте output_config={"effort": "low"} и увеличьте лимит при max_tokens. Следующие фрагменты продолжают пример с уже созданным client. API-вызовы и обработка изображений описаны в Messages API.

Потоковый ответ

На уровне API поток включается параметром stream: true. В Python SDK потоковый интерфейс выглядит так:

with client.messages.stream(
    model='claude-sonnet-5-5',
    max_tokens=2048,
    output_config={"effort": "low"},
    messages=[
        {'role': 'user', 'content': 'Составь план архитектуры API'}
    ],
) as stream:
    for text in stream.text_stream:
        print(text, end='', flush=True)

Изображения и документы

Поле content может быть строкой или массивом типизированных блоков. В него можно включать текст, изображения и документы:

import base64

with open('diagram.png', 'rb') as file:
    image_data = base64.standard_b64encode(file.read()).decode()

response = client.messages.create(
    model='claude-sonnet-5-5',
    max_tokens=2048,
    output_config={"effort": "low"},
    messages=[
        {
            'role': 'user',
            'content': [
                {
                    'type': 'image',
                    'source': {
                        'type': 'base64',
                        'media_type': 'image/png',
                        'data': image_data,
                    },
                },
                {
                    'type': 'text',
                    'text': 'Опиши архитектуру на диаграмме и найди слабые места.',
                },
            ],
        }
    ],
)

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


Вызов собственных инструментов

Инструмент состоит из описания, схемы и функции приложения. Модель предлагает вызов, но не получает право исполнять произвольный код. На Opus 5.5 и Sonnet 5.5 используйте tool_choice: {"type": "auto"}; принудительные any/tool не поддерживаются. strict: true улучшает соответствие схеме, но не заменяет проверку доступа.

Самодостаточный учебный пример ищет только в заданном словаре и не обращается к внешним сервисам:

import json
from anthropic import Anthropic

client = Anthropic()
documents = {"возврат": "Заявки на возврат принимает служба поддержки."}
tools = [{
    "name": "search_docs",
    "description": "Ищет фрагменты в учебном справочнике по ключевому слову.",
    "strict": True,
    "input_schema": {
        "type": "object",
        "properties": {"query": {"type": "string"}},
        "required": ["query"],
        "additionalProperties": False,
    },
}]
messages = [{"role": "user", "content": "Как подать заявку на возврат?"}]
for step in range(10):
    response = client.messages.create(
        model="claude-sonnet-5-5", max_tokens=4096,
        output_config={"effort": "low"}, tools=tools,
        tool_choice={"type": "auto"}, messages=messages,
    )
    # Сохраняем все блоки, включая thinking и подписи, без перестройки.
    messages.append({"role": "assistant", "content": response.content})
    calls = [b for b in response.content if b.type == "tool_use"]
    if response.stop_reason == "max_tokens":
        raise RuntimeError("Ответ усечён: увеличьте лимит и повторите безопасно")
    if not calls:
        if response.stop_reason != "end_turn":
            raise RuntimeError(f"Неожиданное завершение: {response.stop_reason}")
        text = "\n".join(b.text for b in response.content if b.type == "text")
        if not text:
            raise RuntimeError("Нет окончательного текста")
        print(text)
        break
    results = []
    for call in calls:
        args = call.input
        valid = (
            call.name == "search_docs" and isinstance(args, dict)
            and set(args) == {"query"} and isinstance(args["query"], str)
            and 0 < len(args["query"].strip()) <= 200
        )
        if not valid:
            results.append({"type": "tool_result", "tool_use_id": call.id,
                            "is_error": True, "content": "Недопустимый запрос"})
            continue
        query = args["query"].strip().casefold()
        found = [v for k, v in documents.items() if query in k or k in query]
        results.append({"type": "tool_result", "tool_use_id": call.id,
                        "content": json.dumps(found, ensure_ascii=False)})
    messages.append({"role": "user", "content": results})
else:
    raise RuntimeError("Достигнут предел в 10 шагов")

Если модель запросила несколько инструментов, верните все результаты одним пользовательским сообщением с соответствующими tool_use_id. Для сетевого поиска дополнительно нужны проверка прав на документы, таймаут, ограничения объёма и защита от недоверенных инструкций в найденном тексте. Для действий с побочными эффектами — подтверждение и защита от повторного выполнения. Не перестраивайте задним числом system, инструменты и раннюю историю с подписанными thinking-блоками: проверка префикса может отклонить продолжение.

Структурированный JSON

Если приложению нужен ответ по заданной схеме, передайте JSON Schema через output_config.format:

import json

text_to_analyze = "24 октября 2026 года компания Пример представила новый сервис."
response = client.messages.create(
    model='claude-sonnet-5-5',
    max_tokens=2048,
    output_config={
        'effort': 'low',
        'format': {
            'type': 'json_schema',
            'schema': {
                'type': 'object',
                'properties': {
                    'persons': {
                        'type': 'array',
                        'items': {'type': 'string'},
                    },
                    'companies': {
                        'type': 'array',
                        'items': {'type': 'string'},
                    },
                    'dates': {
                        'type': 'array',
                        'items': {'type': 'string'},
                    },
                },
                'required': ['persons', 'companies', 'dates'],
                'additionalProperties': False,
            },
        }
    },
    messages=[
        {'role': 'user', 'content': text_to_analyze}
    ],
)

if response.stop_reason != 'end_turn':
    raise RuntimeError(f'Ответ не завершён: {response.stop_reason}')
texts = [block.text for block in response.content if block.type == 'text']
if not texts:
    raise RuntimeError('Нет JSON-ответа')
entities = json.loads(''.join(texts))
expected = {'persons', 'companies', 'dates'}
if (not isinstance(entities, dict) or set(entities) != expected
        or any(not isinstance(v, list)
               or any(not isinstance(x, str) for x in v)
               for v in entities.values())):
    raise ValueError('Ответ не соответствует ожидаемой структуре')
print(entities)

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


Prompt caching: кэширование повторяющегося контекста

Prompt caching сохраняет префикс запроса: определения инструментов, системные инструкции и сообщения до контрольной точки. Это снижает задержку и стоимость повторной обработки одинакового большого контекста.

Есть два режима:

  • автоматический: cache_control задаётся на уровне запроса, а контрольная точка перемещается по мере роста диалога;
  • явный: cache_control ставится на конкретный блок в конце стабильного префикса.

По умолчанию используется тип ephemeral со сроком жизни 5 минут. Для сценариев с большими паузами доступен TTL 1h; запись такого кэша стоит дороже.

response = client.messages.create(
    model='claude-sonnet-5-5',
    max_tokens=2048,
    output_config={"effort": "low"},
    system=[
        {
            'type': 'text',
            'text': '<большой постоянный контекст>',
            'cache_control': {'type': 'ephemeral'},
        }
    ],
    messages=[
        {'role': 'user', 'content': 'Ответь по этому контексту'}
    ],
)

print(response.usage.cache_creation_input_tokens)
print(response.usage.cache_read_input_tokens)

Автоматический режим включается так:

response = client.messages.create(
    model='claude-sonnet-5-5',
    max_tokens=2048,
    output_config={"effort": "low"},
    cache_control={'type': 'ephemeral'},
    system='Постоянная системная инструкция',
    messages=[{'role': 'user', 'content': 'Ответь по контексту'}],
)

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

У API есть окно обратного поиска в 20 блоков и до четырёх контрольных точек. Минимальная длина кэшируемого префикса зависит от модели и платформы; для Fable 5.1, Opus 5.5, Sonnet 5.5 и Haiku 5.5 в Claude API — 512 токенов. Ограничения Bedrock проверяйте отдельно. Строки-заглушки в примерах ниже минимального порога: замените их реальным стабильным контекстом. Стоимость чтения Sonnet 5.5 — $0,10 за миллион токенов; запись на 5 минут — $2,50, на час — $4. Диагностика кэша доступна без beta-заголовка с 23 сентября; без запроса diagnostics поле диагностики может быть null.

Если cache_creation_input_tokens и cache_read_input_tokens равны нулю, проверьте длину префикса и точное совпадение блоков.


Message Batches: массовая асинхронная обработка

Message Batches API подходит для суммаризации, перевода, классификации, извлечения данных и массовых проверок, которым не нужен немедленный ответ. Пакетная обработка стоит на 50% дешевле стандартных вызовов Messages API.

Ограничения на дату проверки:

  • до 100 000 запросов или 256 MB в одном batch, в зависимости от того, какой предел достигнут раньше;
  • большинство пакетов завершается менее чем за час, предельное окно обработки составляет 24 часа;
  • результаты доступны 29 дней после создания;
  • custom_id должен быть уникальным и содержать от 1 до 64 букв, цифр, дефисов или подчёркиваний;
  • результаты могут приходить не в порядке исходных запросов;
  • внутри batch не поддерживаются stream: true, Fast mode, fallbacks и max_tokens: 0;
  • для каждого элемента batch значение max_tokens должно быть не меньше 1.
from anthropic import Anthropic
from anthropic.types.message_create_params import MessageCreateParamsNonStreaming
from anthropic.types.messages.batch_create_params import Request

client = Anthropic()

batch = client.messages.batches.create(
    requests=[
        Request(
            custom_id='post-1',
            params=MessageCreateParamsNonStreaming(
                model='claude-sonnet-5-5',
                max_tokens=2048,
                output_config={"effort": "low"},
                messages=[
                    {
                        'role': 'user',
                        'content': 'Суммаризируй текст...',
                    }
                ],
            ),
        ),
        Request(
            custom_id='post-2',
            params=MessageCreateParamsNonStreaming(
                model='claude-sonnet-5-5',
                max_tokens=2048,
                output_config={"effort": "low"},
                messages=[
                    {
                        'role': 'user',
                        'content': 'Извлеки ключевые факты...',
                    }
                ],
            ),
        ),
    ]
)

print(batch.id, batch.processing_status)

Проверяйте client.messages.batches.retrieve(batch.id).processing_status; переходите к результатам после ended. Для поддерживаемых моделей вывод до 300 тыс. токенов требует beta output-300k-2026-03-24; он не доступен для Fable 5.1.

После завершения обрабатывайте каждую запись по custom_id и типу результата: succeeded, errored, canceled или expired.

for entry in client.messages.batches.results(batch.id):
    print(entry.custom_id, entry.result.type)
💡
Перед большим batch: сначала отправьте один запрос той же формы через обычный Messages API. Валидация отдельных элементов batch выполняется асинхронно, поэтому такая проверка помогает обнаружить ошибку до постановки тысяч запросов в очередь.

Prompt caching можно сочетать с batch. Попадания в кэш при параллельной асинхронной обработке предоставляются на основе доступности, поэтому для общего контекста имеет смысл рассмотреть TTL 1h и одинаковые контрольные точки во всех запросах.


MCP и внешние инструменты

MCP connector Claude API подключает удалённые HTTPS-серверы. В mcp_servers задаются сервер, имя и URL; в tools — соответствующий mcp_toolset с тем же именем. OAuth и обновление токена обеспечивает ваше приложение. Локальный stdio, ресурсы и prompts требуют другого MCP-клиента либо Agent SDK: API-коннектор не реализует весь протокол.

  • Базовая beta — mcp-client-2025-11-20.
  • Beta mcp-client-2026-09-15 включает базовые возможности и закрепление полученного списка инструментов; это возможность Claude API.
  • Ответ может содержать mcp_tool_listing перед текстом. Сохраняйте его с сообщением ассистента и используйте ту же beta в продолжении, чтобы не потерять закреплённый набор инструментов.
  • Настройки доступа задаются в mcp_toolset.default_config и configs, а не в старом tool_configuration на уровне сервера.

Начинайте с запрета по умолчанию и разрешайте только нужные инструменты чтения. Проверяйте домен сервера, запрашиваемые права и передаваемые данные; вызовы отправки, изменения и удаления требуют отдельной политики подтверждения. Ответ сервера считайте недоверенным содержимым.

С 20 октября администратор организации может запретить web fetch: запрос с таким инструментом вернёт HTTP 400. Признак поддержки в Models API не обходит политику организации.

Claude Agent SDK

Claude Agent SDK запускает процесс Claude Code в вашей среде и предоставляет встроенные инструменты, цикл, разрешения и работу с контекстом. Это отдельные пакеты claude-agent-sdk и @anthropic-ai/claude-agent-sdk, а не новые имена Client SDK. Для Managed Agents среда размещена у Anthropic.

По быстрому старту нужны Python 3.10+ либо Node.js 18+; бинарный файл Claude Code обычно входит в поставку, но это зависит от платформы и установки optional dependencies. Не путайте требования Agent SDK с Node.js 22+ для npm-установки самого Claude Code.

python -m pip install --upgrade claude-agent-sdk

После проверки закрепите точную установленную версию в зависимостях. Пример анализа без инструментов записи:

import asyncio
from pathlib import Path
from claude_agent_sdk import ClaudeAgentOptions, ResultMessage, query

async def main():
    options = ClaudeAgentOptions(
        cwd=str(Path.cwd()),
        model="claude-sonnet-5-5",
        tools=["Read", "Glob", "Grep"],
        allowed_tools=["Read", "Glob", "Grep"],
        disallowed_tools=["Bash", "Write", "Edit"],
        permission_mode="plan",
        setting_sources=[],
        strict_mcp_config=True,
        mcp_servers={},
        max_turns=5,
        max_budget_usd=1.0,
    )
    async for message in query(
        prompt="Изучи README и назови основные модули. Не изменяй файлы.",
        options=options,
    ):
        if isinstance(message, ResultMessage):
            if message.is_error:
                raise RuntimeError("Агент завершился с ошибкой или достиг лимита")
            print(message.result)

asyncio.run(main())

Параметр allowed_tools только предварительно одобряет инструменты, а не ограничивает их список; для выбора доступных встроенных инструментов используется tools. По умолчанию загружаются пользовательские, проектные и локальные настройки. setting_sources=[] отключает эти источники, но не все входные инструкции и не управляемую политику. В Python SDK 0.1.59 и старше пустой список не отключал загрузку настроек — обновитесь перед использованием такого ограничения.

Среди изменений сентября и октября — подписанная компактизация по запросу (compact-2026-09-04), beta-классы browser/computer toolset для Python и TypeScript, а также динамические workflows Managed Agents. Они требуют отдельного подключения: наличие Client SDK не предоставляет браузер, рабочий стол или безопасную среду исполнения автоматически. При компактизации возвращайте подписанный блок вместо старой истории согласно протоколу и сохраняйте последующие сообщения без перестройки.

API-кредиты Max и Team могут покрывать подходящие вызовы API и Agent SDK после привязки Console-организации; они не оплачивают подписочное использование Claude Code и не означают безлимитный доступ.

Эта конфигурация не заменяет изоляцию ОС. Запускайте процесс в отдельной копии проекта, без производственных секретов; проверяйте управляемые хуки и настройки. Авторизация через API-ключ или поддерживаемого провайдера отличается от подписки Claude. Нельзя предлагать пользователям стороннего продукта вход через claude.ai и расход их подписочных лимитов без предварительного разрешения Anthropic.

Ошибки, таймауты и повторные попытки

Обрабатывайте как минимум четыре класса сбоев:

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

Параметры ретраев, таймаутов и названия исключений зависят от версии SDK. Общая схема выглядит так:

import anthropic

client = anthropic.Anthropic(
    max_retries=2,
    timeout=120.0,
)

try:
    response = client.messages.create(
        model='claude-sonnet-5-5',
        max_tokens=2048,
        output_config={"effort": "low"},
        messages=[{'role': 'user', 'content': 'Привет'}],
    )
except anthropic.RateLimitError:
    # Поставить запрос в очередь или повторить позже с backoff
    ...
except anthropic.APIStatusError as error:
    print(error.status_code)  # Не выводим тело запроса, ключи и документы
except anthropic.APIConnectionError:
    # Проверить сеть и политику повторов
    ...

Значения таймаута и числа повторов в примере — стартовая конфигурация, а не гарантия для любой нагрузки. Для длинного вывода используйте поток и общий срок задачи. SDK уже выполняет ограниченные повторы: не умножайте их дополнительным бесконтрольным циклом. Не повторяйте без изменений ошибку валидации. Для временных сбоев используйте экспоненциальную задержку с разбросом, ограничение числа попыток и идемпотентность операций вашего приложения.


Полезные сценарии

Ответы по внутренней базе знаний

Исходные данные: документы компании и поисковый инструмент. Приложение передаёт модели вопрос, модель вызывает поиск, а найденные фрагменты возвращаются через tool_result.

Наблюдаемый результат: финальный ответ опирается на найденные документы, а журнал показывает конкретный запрос и использованные результаты. Сценарий не подходит для действий с данными без отдельного уровня разрешений.

Извлечение данных из документов

Исходные данные: текст или поддерживаемый документ и JSON Schema. Приложение запрашивает структурированный вывод, проверяет обязательные поля и сохраняет результат.

Наблюдаемый результат: строка из ответа разбирается как JSON и проходит проверку схемы. Для юридически или финансово значимых документов добавьте проверку человеком.

Массовая обработка контента

Исходные данные: набор независимых текстов, для которых немедленный ответ не требуется. Каждый запрос получает уникальный custom_id и отправляется через Message Batches API.

Наблюдаемый результат: ответы сопоставляются с исходными задачами по custom_id; ошибки и истёкшие запросы попадают в отдельную очередь повторной обработки.

Агент для работы с репозиторием

Исходные данные: изолированная рабочая копия проекта, тестовая команда и ограниченный набор разрешений. Claude Agent SDK анализирует файлы, предлагает или вносит изменения и запускает проверку.

Наблюдаемый результат: изменённые файлы видны в diff, а тесты завершаются ожидаемым кодом выхода. Не предоставляйте агенту производственные секреты или неограниченный доступ к системе.


Как проверить интеграцию

Минимальная проверка Client SDK:

  1. Закрепите SDK и API-версию; проверьте заголовки шлюза и удалённые параметры. Установите SDK и задайте ANTHROPIC_API_KEY.
  2. Отправьте короткий Messages API-запрос.
  3. Проверьте, что ответ содержит текстовый блок.
  4. Запишите response.id, используемую модель, stop_reason и поля usage.
  5. Повторите тест с заведомо неверным параметром и убедитесь, что приложение регистрирует ошибку.

Для инструментов дополнительно проверьте:

  • неизвестное имя инструмента отклоняется приложением;
  • параметры валидируются до выполнения;
  • несколько параллельных tool_use возвращаются одним пользовательским сообщением с соответствующими tool_result;
  • цикл останавливается по лимиту итераций;
  • опасное действие требует отдельного разрешения.

Для prompt caching смотрите cache_creation_input_tokens на первом запросе и cache_read_input_tokens на повторном запросе с тем же префиксом. Для batch проверяйте финальный статус и число элементов во всех категориях результатов.

📌
Примеры в этом материале сверены с документацией, но не заявлены как результат запуска в конкретном окружении. Перед производственным использованием закрепите версии зависимостей и выполните собственные интеграционные тесты.

Чеклист перед запуском

Закреплены версии SDK/API и проверена миграция на 2026-10-21
API-ключ хранится вне исходного кода
Model ID вынесен в конфигурацию и существует в Models API
Для интерактивного интерфейса включён потоковый ответ
Входные параметры инструментов валидируются до выполнения
Агентный цикл ограничен по числу шагов, времени и стоимости
Опасные действия требуют разрешения
Для структурированного результата задана схема и проверяется JSON
Повторы запросов ограничены и используют backoff
Для batch каждый элемент имеет уникальный custom_id
Результаты batch сопоставляются по custom_id, а не по порядку
Кэшируемый префикс стабилен и превышает минимум выбранной модели
Логи не содержат ключей, токенов и чувствительных данных
Есть наблюдаемая проверка результата: ответ, JSON, diff, тест или статус batch

Следующий шаг

Claude Code — кодинг-агент от Anthropic

Если вы выбираете архитектуру приложения на Claude или определяете границы доступа агента, полезно заранее разобрать цикл инструментов, модель угроз и способ проверки результата.

Если захотите обсудить, как это применить у себя или в команде — пишите в Telegram @pimenov