Anthropic C# SDKは、C#で書かれたアプリケーションからAnthropic REST APIへの便利なアクセスを提供します。
C# SDKは現在ベータ版です。APIはバージョン間で変更される可能性があります。
コード例を含むAPI機能のドキュメントについては、APIリファレンスを参照してください。このページではC#固有のSDK機能と設定について説明します。
バージョン10以降、AnthropicパッケージはC#向けの公式Anthropic SDKとなりました。パッケージバージョン3.X以下は、以前はtryAGIコミュニティが構築したSDKに使用されていましたが、これは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.ClaudeOpus5,
};
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を含む認証オプションについては、認証を参照してください。
環境変数を使用してクライアントを設定します:
using Anthropic;
// ANTHROPIC_API_KEY、ANTHROPIC_AUTH_TOKEN、ANTHROPIC_BASE_URL 環境変数を使用して設定されます
AnthropicClient client = new();または手動で設定します:
using Anthropic;
AnthropicClient client = new() { ApiKey = "my-anthropic-api-key" };または、2つのアプローチを組み合わせて使用することもできます。
利用可能なオプションについては、次の表を参照してください:
| プロパティ | 環境変数 | 必須 | デフォルト値 |
|---|---|---|---|
ApiKey | ANTHROPIC_API_KEY | false | - |
AuthToken | ANTHROPIC_AUTH_TOKEN | false | - |
BaseUrl | ANTHROPIC_BASE_URL | true | "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は、レスポンスの「チャンク」ストリームを返すメソッドを定義しています。各チャンクは、完全なレスポンスを待つのではなく、到着次第個別に処理できます。ストリーミングメソッドは一般的に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.ClaudeOpus5,
};
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:最初のHTTPレスポンスが成功した後、SSEストリーミング中に発生したエラーに対してスローされます。
AnthropicIOException:I/Oネットワークエラー。
AnthropicInvalidDataException:正常にパースされたデータの解釈に失敗した場合。たとえば、必須であるはずのプロパティにアクセスしたが、APIが予期せずレスポンスからそれを省略した場合などです。
AnthropicException:すべての例外の基底クラス。
SDKはデフォルトで2回自動的にリトライし、リクエスト間に短い指数バックオフを適用します。
次のエラータイプのみがリトライされます:
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は、結果のページネーションされたリストを返すメソッドを定義しています。結果に1ページずつアクセスする方法と、すべてのページにわたって項目ごとにアクセスする便利な方法を提供します。
すべてのページにわたるすべての結果を反復処理するには、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);SDKは、Microsoft.Extensions.AI.AbstractionsライブラリのIChatClientインターフェースの実装を提供します。これにより、AnthropicClient(およびAnthropic.Services.IBetaService)を、これらのコア抽象化と統合する他のライブラリで使用できるようになります。たとえば、MCP C# SDK(ModelContextProtocol)ライブラリのツールは、IChatClientを通じて公開されたAnthropicClientで直接使用できます。
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")
.AsBuilder()
.UseFunctionInvocation()
.Build();
// MCP C# SDK の McpClient を使用します
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は、バイナリレスポンスを返すメソッドを定義しています。これらは、非JSONデータなど、必ずしもパースする必要のないAPIレスポンスに使用されます。
これらのメソッドは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 StreamSDKは、レスポンスをC#クラスのインスタンスにデシリアライズするメソッドを定義しています。レスポンスヘッダー、ステータスコード、または生のレスポンスボディにアクセスするには、クライアントまたはサービスの任意のHTTPメソッド呼び出しの前にWithRawResponseを付けます:
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=debugSDKは、ドキュメント化されたAPIを便利に使用できるように型付けされています。ただし、ドキュメント化されていない、またはまだサポートされていないAPIの部分を扱うこともサポートしています。
コード例を含む詳細なプラットフォームセットアップガイドについては、以下を参照してください:
C# SDKは、個別のNuGetパッケージを通じて次のプラットフォームをサポートしています:
Anthropic.Vertex。クライアントのセットアップについては、Claude on Google Cloudを参照してください。Anthropic.Bedrock。Messages-API BedrockエンドポイントにはAnthropicBedrockMantleClientを、またはAnthropicBedrockClient(bedrock-runtimeパス)を使用します。AnthropicBedrockMantleClientはオプションのMantleAwsClientOptions設定オブジェクトを受け取ります。AnthropicBedrockClientはAnthropicBedrockCredentialsHelper.FromEnv()または明示的な認証情報を受け入れます。Anthropic.Aws。AnthropicAwsClientを使用します。クライアントでWorkspaceIdを設定するか、ANTHROPIC_AWS_WORKSPACE_ID環境変数を設定します(ワークスペースを参照)。ベータ版で利用可能です。Anthropic.Foundry。DefaultAnthropicFoundryCredentials.FromEnv()または明示的な認証情報とともにAnthropicFoundryClientを使用します。新しいプロジェクトにはAnthropicBedrockMantleClientを使用してください。AnthropicBedrockClientは、BedrockのInvokeModel APIを使用する既存のアプリケーション向けに残されています。
このパッケージはバージョン10以降としてバージョン管理されていますが、現在ベータ版です。ベータ期間中は、マイナーリリースまたはパッチリリースで破壊的変更が発生する可能性があります。ライブラリが安定版リリースに達すると、SemVerの規約がより厳密に遵守されます。issueを提出してフィードバックを共有してください。
このパッケージは一般的にSemVerの規約に従いますが、特定の後方互換性のない変更がマイナーバージョンとしてリリースされる場合があります:
スムーズなアップグレード体験を確実に提供できるよう、後方互換性は真剣に考慮されています。
Was this page helpful?