• Сообщения
  • Управляемые агенты
  • Администрирование
Search...
⌘K
CLI, SDK и библиотеки
Обзор
ant CLI
Быстрый стартВарианты аутентификацииИспользование CLIСкрипты и автоматизация
Клиентские SDK
Промежуточное ПОPythonTypeScriptC#GoJavaPHPRuby
Библиотеки и интеграции
Apple Foundation ModelsСовместимость с OpenAI SDK
Log in
C#
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Solutions

  • AI agents
  • Code modernization
  • Coding
  • Customer support
  • Education
  • Financial services
  • Government
  • Life sciences

Partners

  • Amazon Bedrock
  • Google Cloud's Vertex AI

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Company

  • Anthropic
  • Careers
  • Economic Futures
  • Research
  • News
  • Responsible Scaling Policy
  • Security and compliance
  • Transparency

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Help and security

  • Availability
  • Status
  • Support
  • Discord

Terms and policies

  • Privacy policy
  • Responsible disclosure policy
  • Terms of service: Commercial
  • Terms of service: Consumer
  • Usage policy
CLI, SDK и библиотеки/Клиентские SDK

C# SDK

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

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

C# SDK в настоящее время находится в стадии бета-версии. API могут меняться между версиями.

Документацию по функциям API с примерами кода см. в справочнике по API. На этой странице рассматриваются специфичные для C# функции и настройки SDK.

Начиная с версии 10+, пакет Anthropic является официальным Anthropic SDK для C#. Версии пакета 3.X и ниже ранее использовались для SDK, созданного сообществом tryAGI, который переехал в tryAGI.Anthropic. Если вам нужно продолжить использовать прежний клиент в вашем проекте, обновите ссылку на пакет на tryAGI.Anthropic.

Установка

Установите пакет из 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()
        {
            Role = Role.User,
            Content = "Hello, Claude",
        },
    ],
    Model = Model.ClaudeOpus4_8,
};

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

Console.WriteLine(message);

Варианты аутентификации, включая Workload Identity Federation, см. в разделе Аутентификация.

Конфигурация клиента

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

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) ответа, где каждый фрагмент может быть обработан индивидуально сразу после его получения, вместо ожидания полного ответа. Методы потоковой передачи обычно соответствуют ответам в формате SSE или JSONL.

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

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

using System;
using Anthropic.Models.Messages;

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

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-4-8")
    .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.Beta.Files;

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

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

Console.WriteLine(response);

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

using System.IO;

using var response = await client.Beta.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

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

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

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

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

  • Amazon Bedrock
  • Amazon Bedrock (устаревший вариант)
  • Vertex AI
  • Microsoft Foundry
  • Claude Platform на AWS

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

  • Bedrock: Anthropic.Bedrock. Используйте AnthropicBedrockMantleClient для конечной точки Bedrock с Messages API или AnthropicBedrockClient (путь bedrock-runtime). AnthropicBedrockMantleClient принимает необязательный объект конфигурации MantleAwsClientOptions; AnthropicBedrockClient принимает AnthropicBedrockCredentialsHelper.FromEnv() или явные учётные данные.
  • Vertex AI: Anthropic.Vertex. Настройку клиента см. в разделе Vertex AI.
  • Foundry: Anthropic.Foundry. Используйте AnthropicFoundryClient с DefaultAnthropicFoundryCredentials.FromEnv() или явными учётными данными.
  • . Используйте ; задайте на клиенте или переменную окружения (см. ). Доступно в бета-версии.

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

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

Хотя этот пакет имеет версию 10+, в настоящее время он находится в стадии бета-версии. В течение бета-периода критические изменения могут появляться в минорных или патч-релизах. Как только библиотека достигнет стабильного релиза, соглашения SemVer будут соблюдаться более строго. Поделитесь отзывом, создав issue.

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

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

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

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

  • Репозиторий GitHub
  • Пакет NuGet
  • Справочник по API
  • Потоковая передача сообщений

Was this page helpful?

  • Установка
  • Требования
  • Использование
  • Конфигурация клиента
  • Изменение конфигурации
  • Потоковая передача
  • Обработка ошибок
  • Повторные попытки
  • Тайм-ауты
  • Пагинация
  • Автоматическая пагинация
  • Ручная пагинация
  • Валидация ответов
  • Интеграция с IChatClient
  • Запросы и ответы
  • Расширенное использование
  • Бинарные ответы
  • Необработанные ответы
  • Логирование
  • Недокументированная функциональность API
  • Интеграции с платформами
  • Семантическое версионирование
  • Дополнительные ресурсы
Claude Platform на AWS:
Anthropic.Aws
AnthropicAwsClient
WorkspaceId
ANTHROPIC_AWS_WORKSPACE_ID
Рабочие пространства