---
title: C# SDK
url: https://platform.claude.com/docs/ru/cli-sdks-libraries/sdks/csharp
description: Установка и настройка Anthropic C# SDK для приложений .NET с интеграцией IChatClient
---

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

<Info>
  Документацию по функциям API с примерами кода см. в [справочнике API](https://platform.claude.com/docs/ru/api/overview). На этой странице описаны функции и настройка SDK, специфичные для C#.
</Info>

<Warning>
  Начиная с версии 10+, пакет `Anthropic` является официальным Anthropic SDK для C#. Версии пакета 3.X и ниже ранее использовались для SDK сообщества tryAGI, который был перемещён в [`tryAGI.Anthropic`](https://www.nuget.org/packages/tryagi.Anthropic/). Если вам нужно продолжить использовать прежний клиент в вашем проекте, обновите ссылку на пакет на `tryAGI.Anthropic`.
</Warning>

## Установка

Установите пакет из [NuGet](https://www.nuget.org/packages/Anthropic):

```bash
dotnet add package Anthropic
```

## Требования

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

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

```csharp
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, см. в разделе [Аутентификация](https://platform.claude.com/docs/ru/manage-claude/authentication). Если ваш ключ API является [ключом персональной или сервисной учётной записи](https://platform.claude.com/docs/ru/manage-claude/authentication#key-types), который не привязан к рабочему пространству, укажите идентификатор рабочего пространства в заголовке запроса `anthropic-workspace-id`; в разделе [Выбор рабочего пространства](https://platform.claude.com/docs/ru/manage-claude/authentication#select-a-workspace) показан вариант указания для каждого запроса в этом SDK.

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

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

```csharp
using Anthropic;

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

Или вручную:

```csharp
using Anthropic;

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

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

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

| Свойство    | Переменная окружения   | Обязательно | Значение по умолчанию         |
| ----------- | ---------------------- | ----------- | ----------------------------- |
| `ApiKey`    | `ANTHROPIC_API_KEY`    | false       | -                             |
| `AuthToken` | `ANTHROPIC_AUTH_TOKEN` | false       | -                             |
| `BaseUrl`   | `ANTHROPIC_BASE_URL`   | true        | `"https://api.anthropic.com"` |

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

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

```csharp
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`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/with-expression) упрощает создание изменённых параметров.

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

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

SDK определяет методы, которые возвращают потоки «фрагментов» (chunks) ответа, где каждый фрагмент может быть обработан отдельно сразу после поступления, без ожидания полного ответа. Методы «streaming» (потоковая передача) обычно соответствуют ответам [SSE](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events) или [JSONL](https://jsonlines.org).

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

Эти методы потоковой передачи возвращают [`IAsyncEnumerable`](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.iasyncenumerable-1):

```csharp
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:

| Статус | Исключение                               |
| ------ | ---------------------------------------- |
| 400    | `AnthropicBadRequestException`           |
| 401    | `AnthropicUnauthorizedException`         |
| 403    | `AnthropicForbiddenException`            |
| 404    | `AnthropicNotFoundException`             |
| 422    | `AnthropicUnprocessableEntityException`  |
| 429    | `AnthropicRateLimitException`            |
| 5xx    | `Anthropic5xxException`                  |
| другие | `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`:

```csharp
using Anthropic;

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

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

```csharp
using System;

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

Console.WriteLine(message);
```

## Тайм-ауты

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

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

```csharp
using System;
using Anthropic;

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

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

```csharp
using System;

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

Console.WriteLine(message);
```

## Пагинация

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

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

Чтобы перебрать все результаты на всех страницах, используйте метод `Paginate`, который автоматически загружает дополнительные страницы по мере необходимости. Метод возвращает [`IAsyncEnumerable`](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.iasyncenumerable-1):

```csharp
using System;

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

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

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

```csharp
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`:

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

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

```csharp
using Anthropic;

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

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

```csharp
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`.

```csharp
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`:

```csharp
using System;
using Anthropic.Models.Files;

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

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

Console.WriteLine(response);
```

Чтобы сохранить содержимое ответа в файл или любой [`Stream`](https://learn.microsoft.com/en-us/dotnet/api/system.io.stream), используйте метод [`CopyToAsync`](https://learn.microsoft.com/en-us/dotnet/api/system.io.stream.copytoasync):

```csharp
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-метода клиента или сервиса:

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

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

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

```csharp
using System;
using Anthropic.Models.Messages;

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

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

```csharp
using System;

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

### Логирование

<Warning>
  Все сообщения журнала предназначены только для отладки. Формат и содержимое сообщений журнала могут меняться между выпусками.
</Warning>

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

```bash
export ANTHROPIC_LOG=debug
```

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

Когда ваше приложение добавляет источники SDK в свой провайдер трассировщика OpenTelemetry с помощью `AddSource("com.anthropic.sdk.csharp*")`, SDK создаёт спан для каждого отправляемого запроса. Чтобы отправлять спаны на вашу платформу наблюдаемости, см. [Настройка OpenTelemetry с Claude SDK](https://platform.claude.com/docs/ru/manage-claude/opentelemetry/sdk).

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

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

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

<Note>
  Подробные руководства по настройке платформ с примерами кода см.:

  * [Amazon Bedrock](https://platform.claude.com/docs/ru/build-with-claude/claude-in-amazon-bedrock)
  * [Amazon Bedrock (Opus 4.6 и более ранние)](https://platform.claude.com/docs/ru/build-with-claude/claude-on-amazon-bedrock-legacy)
  * [Claude Platform on AWS](https://platform.claude.com/docs/ru/build-with-claude/claude-platform-on-aws)
  * [Claude Models on Google Cloud (Google managed)](https://platform.claude.com/docs/ru/build-with-claude/claude-models-on-google-cloud/google-managed)
  * [Microsoft Foundry](https://platform.claude.com/docs/ru/build-with-claude/claude-in-microsoft-foundry)

  См. также [Claude Models on Google Cloud (Anthropic managed)](https://platform.claude.com/docs/ru/build-with-claude/claude-models-on-google-cloud/anthropic-managed).
</Note>

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

* **Agent Platform:** `Anthropic.Vertex`. Настройку клиента см. в разделе [Claude Models on Google Cloud (Google managed)](https://platform.claude.com/docs/ru/build-with-claude/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` (см. [Рабочие пространства](https://platform.claude.com/docs/ru/build-with-claude/claude-platform-on-aws#workspaces)). Доступно в бета-версии.
* **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`. См. [Определение проекта, расположения и рабочего пространства](https://platform.claude.com/docs/ru/build-with-claude/claude-models-on-google-cloud/anthropic-managed#project-location-and-workspace-resolution).

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

Каждая мажорная версия этого SDK по умолчанию отправляет одну версию API в заголовке `anthropic-version`, и с каждой новой версией API выходит новая мажорная версия. Первая мажорная версия, отправляющая `2026-10-21`, — 13.0.0; см. [Переход на версию API 2026-10-21](https://platform.claude.com/docs/ru/api/migration-2026-10-21#upgrade).

Этот пакет в целом следует соглашениям [SemVer](https://semver.org/spec/v2.0.0.html), хотя некоторые обратно несовместимые изменения могут выпускаться в минорных версиях:

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

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

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

* [Репозиторий GitHub](https://github.com/anthropics/anthropic-sdk-csharp)
* [Пакет NuGet](https://www.nuget.org/packages/Anthropic)
* [Справочник API](https://platform.claude.com/docs/ru/api/overview)
* [Потоковая передача сообщений](https://platform.claude.com/docs/ru/build-with-claude/streaming)
