---
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). На этой странице рассматриваются специфичные для C# функции SDK и его настройка.
</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()
        {
            Role = Role.User,
            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`    | Нет         | -                             |
| `AuthToken` | `ANTHROPIC_AUTH_TOKEN` | Нет         | -                             |
| `BaseUrl`   | `ANTHROPIC_BASE_URL`   | Да          | `"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 определяет методы, возвращающие потоки «фрагментов» (chunk) ответа, где каждый фрагмент может быть обработан отдельно сразу по мере поступления, не дожидаясь полного ответа. Методы «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()
        {
            Role = Role.User,
            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
```

### Недокументированная функциональность 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 на AWS](https://platform.claude.com/docs/ru/build-with-claude/claude-platform-on-aws)
  * [Google Cloud](https://platform.claude.com/docs/ru/build-with-claude/claude-on-vertex-ai)
  * [Microsoft Foundry](https://platform.claude.com/docs/ru/build-with-claude/claude-in-microsoft-foundry)
</Note>

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

* **Agent Platform:** `Anthropic.Vertex`. Настройку клиента см. в разделе [Claude на Google Cloud](https://platform.claude.com/docs/ru/build-with-claude/claude-on-vertex-ai).
* **Bedrock:** `Anthropic.Bedrock`. Используйте `AnthropicBedrockMantleClient` для конечной точки Bedrock с Messages API или `AnthropicBedrockClient` (путь `bedrock-runtime`). `AnthropicBedrockMantleClient` принимает необязательный объект конфигурации `MantleAwsClientOptions`; `AnthropicBedrockClient` принимает `AnthropicBedrockCredentialsHelper.FromEnv()` или явные учётные данные.
* **Claude Platform на 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`.

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

Этот пакет в целом следует соглашениям [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)
