Claude Platform Docs
SDK, CLI и библиотекиКлиентские SDK

C# SDK

Установка и настройка Anthropic C# SDK для приложений .NET с интеграцией IChatClient

Anthropic C# SDK предоставляет удобный доступ к Claude API из приложений, написанных на C#.

Установка

Установите пакет из NuGet:

dotnet add package Anthropic

Требования

Для этой библиотеки требуется .NET Standard 2.0 или более поздняя версия.

Использование

using System;
using Anthropic;
using Anthropic.Models.Messages;

AnthropicClient client = new();

MessageCreateParams parameters = new()
{
    MaxTokens = 1024,
    Messages = [new UserMessageParam { Content = "Hello, Claude" }],
    Model = Model.ClaudeOpus5_5,
};

var message = await client.Messages.Create(parameters);

foreach (var block in message.Content)
{
    if (block.TryPickText(out var textBlock))
    {
        Console.WriteLine(textBlock.Text);
    }
}

Сведения о вариантах аутентификации, включая Workload Identity Federation, см. в разделе Аутентификация. Если ваш ключ API является ключом персональной или сервисной учётной записи, который не привязан к рабочему пространству, укажите идентификатор рабочего пространства в заголовке запроса anthropic-workspace-id; в разделе Выбор рабочего пространства показан вариант указания для каждого запроса в этом SDK.

Настройка клиента

Настройте клиент с помощью переменных окружения:

using Anthropic;

// Настраивается с помощью переменных окружения ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN и ANTHROPIC_BASE_URL
AnthropicClient client = new();

Или вручную:

using Anthropic;

AnthropicClient client = new() { ApiKey = "my-anthropic-api-key" };

Или используя комбинацию обоих подходов.

Доступные параметры приведены в этой таблице:

СвойствоПеременная окруженияОбязательноЗначение по умолчанию
ApiKeyANTHROPIC_API_KEYfalse-
AuthTokenANTHROPIC_AUTH_TOKENfalse-
BaseUrlANTHROPIC_BASE_URLtrue"https://api.anthropic.com"

Изменение конфигурации

Чтобы временно использовать изменённую конфигурацию клиента, повторно используя те же пулы соединений и потоков, вызовите WithOptions для любого клиента или сервиса:

using System;

var message = await client
    .WithOptions(options =>
        options with
        {
            BaseUrl = "https://example.com",
            Timeout = TimeSpan.FromSeconds(42),
        }
    )
    .Messages.Create(parameters);

Console.WriteLine(message);

Использование выражения with упрощает создание изменённых параметров.

Метод WithOptions не влияет на исходный клиент или сервис.

Потоковая передача

SDK определяет методы, которые возвращают потоки «фрагментов» (chunks) ответа, где каждый фрагмент может быть обработан отдельно сразу после поступления, без ожидания полного ответа. Методы «streaming» (потоковая передача) обычно соответствуют ответам SSE или JSONL.

Метод потоковой передачи всегда имеет суффикс Streaming в своём имени, даже если у него нет варианта без потоковой передачи.

Эти методы потоковой передачи возвращают IAsyncEnumerable:

using System;
using Anthropic.Models.Messages;

MessageCreateParams parameters = new()
{
    MaxTokens = 1024,
    Messages = [new UserMessageParam { Content = "Hello, Claude" }],
    Model = Model.ClaudeOpus5_5,
};

await foreach (var message in client.Messages.CreateStreaming(parameters))
{
    Console.WriteLine(message);
}

Обработка ошибок

SDK выбрасывает пользовательские непроверяемые типы исключений:

  • AnthropicApiException: базовый класс для ошибок API. В этой таблице указано, какой подкласс исключения выбрасывается для каждого кода состояния HTTP:
СтатусИсключение
400AnthropicBadRequestException
401AnthropicUnauthorizedException
403AnthropicForbiddenException
404AnthropicNotFoundException
422AnthropicUnprocessableEntityException
429AnthropicRateLimitException
5xxAnthropic5xxException
другиеAnthropicUnexpectedStatusCodeException

Кроме того, все ошибки 4xx наследуются от Anthropic4xxException.

  • AnthropicSseException: выбрасывается при ошибках, возникших во время потоковой передачи SSE после успешного начального HTTP-ответа.

  • AnthropicIOException: сетевые ошибки ввода-вывода.

  • AnthropicInvalidDataException: не удалось интерпретировать успешно разобранные данные. Например, при обращении к свойству, которое должно быть обязательным, но API неожиданно не включил его в ответ.

  • AnthropicException: базовый класс для всех исключений.

Повторные попытки

По умолчанию SDK автоматически выполняет 2 повторные попытки с коротким экспоненциальным откатом между запросами.

Повторные попытки выполняются только для следующих типов ошибок:

  • Ошибки соединения (например, из-за проблем с сетевым подключением)
  • 408 Request Timeout
  • 409 Conflict
  • 429 Rate Limit
  • 5xx Internal

API также может явно указать SDK повторить или не повторять запрос.

Чтобы задать собственное количество повторных попыток, настройте клиент с помощью свойства MaxRetries:

using Anthropic;

AnthropicClient client = new() { MaxRetries = 3 };

Или настройте отдельный вызов метода с помощью WithOptions:

using System;

var message = await client
    .WithOptions(options =>
        options with { MaxRetries = 3 }
    )
    .Messages.Create(parameters);

Console.WriteLine(message);

Тайм-ауты

По умолчанию время ожидания запросов истекает через 10 минут.

Чтобы задать собственный тайм-аут, настройте клиент с помощью параметра Timeout:

using System;
using Anthropic;

AnthropicClient client = new() { Timeout = TimeSpan.FromSeconds(42) };

Или настройте отдельный вызов метода с помощью WithOptions:

using System;

var message = await client
    .WithOptions(options =>
        options with { Timeout = TimeSpan.FromSeconds(42) }
    )
    .Messages.Create(parameters);

Console.WriteLine(message);

Пагинация

SDK определяет методы, которые возвращают постраничные списки результатов. Он предоставляет удобные способы доступа к результатам либо по одной странице за раз, либо поэлементно по всем страницам.

Автоматическая пагинация

Чтобы перебрать все результаты на всех страницах, используйте метод Paginate, который автоматически загружает дополнительные страницы по мере необходимости. Метод возвращает IAsyncEnumerable:

using System;

var page = await client.Messages.Batches.List(parameters);
await foreach (var item in page.Paginate())
{
    Console.WriteLine(item);
}

Ручная пагинация

Чтобы получить доступ к элементам отдельной страницы и вручную запросить следующую страницу, используйте свойство Items, а также методы HasNext и Next:

var page = await client.Messages.Batches.List();
while (true)
{
    foreach (var item in page.Items)
    {
        Console.WriteLine(item);
    }
    if (!page.HasNext())
    {
        break;
    }
    page = await page.Next();
}

Проверка ответов

В редких случаях API может вернуть ответ, который не соответствует ожидаемому типу. По умолчанию SDK в этом случае не выбрасывает исключение. Он выбрасывает AnthropicInvalidDataException только при непосредственном обращении к свойству.

Если вы предпочитаете заранее проверить, что ответ полностью корректно типизирован, вызовите Validate:

var message = await client.Messages.Create(parameters);
message.Validate();

Или настройте клиент с помощью параметра ResponseValidation:

using Anthropic;

AnthropicClient client = new() { ResponseValidation = true };

Или настройте отдельный вызов метода с помощью WithOptions:

using System;

var message = await client
    .WithOptions(options =>
        options with { ResponseValidation = true }
    )
    .Messages.Create(parameters);

Console.WriteLine(message);

Интеграция с IChatClient

SDK предоставляет реализацию интерфейса IChatClient из библиотеки Microsoft.Extensions.AI.Abstractions. Это позволяет использовать AnthropicClient (и Anthropic.Services.IBetaService) с другими библиотеками, которые интегрируются с этими базовыми абстракциями. Например, инструменты из библиотеки MCP C# SDK (ModelContextProtocol) можно использовать напрямую с AnthropicClient, предоставляемым через IChatClient.

using Anthropic;
using Microsoft.Extensions.AI;
using ModelContextProtocol.Client;

// Настраивается с помощью переменных окружения ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN и ANTHROPIC_BASE_URL
AnthropicClient client = new();

IChatClient chatClient = client.AsIChatClient("claude-opus-5-5")
    .AsBuilder()
    .UseFunctionInvocation()
    .Build();

// Используется McpClient из MCP C# SDK
McpClient learningServer = await McpClient.CreateAsync(
    new HttpClientTransport(new() { Endpoint = new("https://learn.microsoft.com/api/mcp") }));

ChatOptions options = new() { Tools = [.. await learningServer.ListToolsAsync()] };

Console.WriteLine(await chatClient.GetResponseAsync("Tell me about IChatClient", options));

Запросы и ответы

Чтобы отправить запрос к Claude API, создайте экземпляр класса Params и передайте его соответствующему методу клиента. Когда ответ получен, он десериализуется в экземпляр класса C#.

Например, client.Messages.Create следует вызывать с экземпляром MessageCreateParams, и он вернёт экземпляр Task<Message>.

Расширенное использование

Двоичные ответы

SDK определяет методы, которые возвращают двоичные ответы; они используются для ответов API, которые не обязательно нужно разбирать, например для данных не в формате JSON.

Эти методы возвращают HttpResponse:

using System;
using Anthropic.Models.Files;

FileDownloadParams parameters = new() { FileID = "file_id" };

var response = await client.Files.Download(parameters);

Console.WriteLine(response);

Чтобы сохранить содержимое ответа в файл или любой Stream, используйте метод CopyToAsync:

using System.IO;

using var response = await client.Files.Download(parameters);
using var contentStream = await response.ReadAsStream();
using var fileStream = File.Open(path, FileMode.OpenOrCreate);
await contentStream.CopyToAsync(fileStream); // Or any other Stream

Необработанные ответы

SDK определяет методы, которые десериализуют ответы в экземпляры классов C#. Чтобы получить доступ к заголовкам ответа, коду состояния или необработанному телу ответа, добавьте префикс WithRawResponse к любому вызову HTTP-метода клиента или сервиса:

var response = await client.WithRawResponse.Messages.Create(parameters);
var statusCode = response.StatusCode;
var headers = response.Headers;

Необработанный HttpResponseMessage также доступен через свойство RawMessage.

Для ответов без потоковой передачи вы при необходимости можете десериализовать ответ в экземпляр класса C#:

using System;
using Anthropic.Models.Messages;

var response = await client.WithRawResponse.Messages.Create(parameters);
Message deserialized = await response.Deserialize();
Console.WriteLine(deserialized);

Для ответов с потоковой передачей вы при необходимости можете десериализовать ответ в IAsyncEnumerable:

using System;

var response = await client.WithRawResponse.Messages.CreateStreaming(parameters);
await foreach (var item in response.Enumerate())
{
    Console.WriteLine(item);
}

Логирование

Включите отладочное логирование, задав переменную окружения:

export ANTHROPIC_LOG=debug

Трассировка OpenTelemetry

Когда ваше приложение добавляет источники SDK в свой провайдер трассировщика OpenTelemetry с помощью AddSource("com.anthropic.sdk.csharp*"), SDK создаёт спан для каждого отправляемого запроса. Чтобы отправлять спаны на вашу платформу наблюдаемости, см. Настройка OpenTelemetry с Claude SDK.

Недокументированная функциональность API

SDK типизирован для удобного использования документированного API. Однако он также поддерживает работу с недокументированными или ещё не поддерживаемыми частями API.

Интеграции с платформами

C# SDK поддерживает следующие платформы через отдельные пакеты NuGet:

  • Agent Platform: Anthropic.Vertex. Настройку клиента см. в разделе Claude Models on Google Cloud (Google managed).
  • Bedrock: Anthropic.Bedrock. Используйте AnthropicBedrockMantleClient для эндпоинта Bedrock с Messages API или AnthropicBedrockClient (путь bedrock-runtime). AnthropicBedrockMantleClient принимает необязательный объект конфигурации MantleAwsClientOptions; AnthropicBedrockClient принимает AnthropicBedrockCredentialsHelper.FromEnv() или явно заданные учётные данные.
  • Claude Platform on AWS: Anthropic.Aws. Используйте AnthropicAwsClient; задайте WorkspaceId в клиенте или переменную окружения ANTHROPIC_AWS_WORKSPACE_ID (см. Рабочие пространства). Доступно в бета-версии.
  • Foundry: Anthropic.Foundry. Используйте AnthropicFoundryClient с DefaultAnthropicFoundryCredentials.FromEnv() или явно заданными учётными данными.

Используйте AnthropicBedrockMantleClient для новых проектов; AnthropicBedrockClient сохраняется для существующих приложений, использующих API Bedrock InvokeModel.

C# SDK также поддерживает Claude Models on Google Cloud (Anthropic managed) через AnthropicGoogleCloudClient из пакета Anthropic.GoogleCloud. Этот клиент находится в бета-версии. Задайте WorkspaceId в необязательном значении GoogleCloudClientOptions или задайте переменную окружения ANTHROPIC_GOOGLE_CLOUD_WORKSPACE_ID. См. Определение проекта, расположения и рабочего пространства.

Семантическое версионирование

Каждая мажорная версия этого SDK по умолчанию отправляет одну версию API в заголовке anthropic-version, и с каждой новой версией API выходит новая мажорная версия. Первая мажорная версия, отправляющая 2026-10-21, — 13.0.0; см. Переход на версию API 2026-10-21.

Этот пакет в целом следует соглашениям SemVer, хотя некоторые обратно несовместимые изменения могут выпускаться в минорных версиях:

  1. Изменения во внутренних компонентах библиотеки, которые технически являются публичными, но не предназначены и не задокументированы для внешнего использования.
  2. Изменения, которые, как ожидается, на практике не затронут подавляющее большинство пользователей.

Мы серьёзно относимся к обратной совместимости, чтобы вы могли рассчитывать на беспроблемное обновление.

Дополнительные ресурсы

Was this page helpful?