SDK C# Anthropic menyediakan akses yang mudah ke REST API Anthropic dari aplikasi yang ditulis dalam C#.
SDK C# saat ini dalam tahap beta. API dapat berubah antar versi.
Untuk dokumentasi fitur API dengan contoh kode, lihat referensi API. Halaman ini membahas fitur dan konfigurasi SDK yang khusus untuk C#.
Mulai versi 10+, paket Anthropic kini menjadi SDK Anthropic resmi untuk C#. Versi paket 3.X dan di bawahnya sebelumnya digunakan untuk SDK buatan komunitas tryAGI, yang telah dipindahkan ke tryAGI.Anthropic. Jika Anda perlu terus menggunakan klien sebelumnya dalam proyek Anda, perbarui referensi paket Anda ke tryAGI.Anthropic.
Instal paket dari NuGet:
dotnet add package AnthropicPustaka ini memerlukan .NET Standard 2.0 atau yang lebih baru.
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);
}
}Untuk opsi autentikasi termasuk Workload Identity Federation, lihat Autentikasi.
Konfigurasikan klien menggunakan variabel lingkungan:
using Anthropic;
// Dikonfigurasi menggunakan variabel lingkungan ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN, dan ANTHROPIC_BASE_URL
AnthropicClient client = new();Atau secara manual:
using Anthropic;
AnthropicClient client = new() { ApiKey = "my-anthropic-api-key" };Atau menggunakan kombinasi dari kedua pendekatan tersebut.
Lihat tabel ini untuk opsi yang tersedia:
| Properti | Variabel lingkungan | Wajib | Nilai default |
|---|---|---|---|
ApiKey | ANTHROPIC_API_KEY | false | - |
AuthToken | ANTHROPIC_AUTH_TOKEN | false | - |
BaseUrl | ANTHROPIC_BASE_URL | true | "https://api.anthropic.com" |
Untuk menggunakan konfigurasi klien yang dimodifikasi secara sementara, sambil tetap menggunakan kembali koneksi dan thread pool yang sama, panggil WithOptions pada klien atau layanan mana pun:
using System;
var message = await client
.WithOptions(options =>
options with
{
BaseUrl = "https://example.com",
Timeout = TimeSpan.FromSeconds(42),
}
)
.Messages.Create(parameters);
Console.WriteLine(message);Menggunakan ekspresi with memudahkan pembuatan opsi yang dimodifikasi.
Metode WithOptions tidak memengaruhi klien atau layanan asli.
SDK mendefinisikan metode yang mengembalikan stream "chunk" respons, di mana setiap chunk dapat diproses secara individual segera setelah tiba alih-alih menunggu respons lengkap. Metode streaming umumnya sesuai dengan respons SSE atau JSONL.
Metode streaming selalu memiliki akhiran Streaming pada namanya, bahkan jika tidak memiliki varian non-streaming.
Metode streaming ini mengembalikan 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 melemparkan tipe exception unchecked kustom:
AnthropicApiException: Kelas dasar untuk kesalahan API. Lihat tabel ini untuk mengetahui subkelas exception mana yang dilemparkan untuk setiap kode status HTTP:| Status | Exception |
|---|---|
| 400 | AnthropicBadRequestException |
| 401 | AnthropicUnauthorizedException |
| 403 | AnthropicForbiddenException |
| 404 | AnthropicNotFoundException |
| 422 | AnthropicUnprocessableEntityException |
| 429 | AnthropicRateLimitException |
| 5xx | Anthropic5xxException |
| lainnya | AnthropicUnexpectedStatusCodeException |
Selain itu, semua kesalahan 4xx mewarisi dari Anthropic4xxException.
AnthropicSseException: dilemparkan untuk kesalahan yang ditemui selama streaming SSE setelah respons HTTP awal yang berhasil.
AnthropicIOException: Kesalahan jaringan I/O.
AnthropicInvalidDataException: Kegagalan dalam menginterpretasikan data yang berhasil diurai. Misalnya, saat mengakses properti yang seharusnya wajib, tetapi API secara tidak terduga menghilangkannya dari respons.
AnthropicException: Kelas dasar untuk semua exception.
SDK secara otomatis mencoba ulang 2 kali secara default, dengan exponential backoff singkat di antara permintaan.
Hanya tipe kesalahan berikut yang dicoba ulang:
API juga dapat secara eksplisit menginstruksikan SDK untuk mencoba ulang atau tidak mencoba ulang suatu permintaan.
Untuk mengatur jumlah percobaan ulang kustom, konfigurasikan klien menggunakan properti MaxRetries:
using Anthropic;
AnthropicClient client = new() { MaxRetries = 3 };Atau konfigurasikan satu pemanggilan metode menggunakan WithOptions:
using System;
var message = await client
.WithOptions(options =>
options with { MaxRetries = 3 }
)
.Messages.Create(parameters);
Console.WriteLine(message);Permintaan akan habis waktunya setelah 10 menit secara default.
Untuk mengatur batas waktu kustom, konfigurasikan klien menggunakan opsi Timeout:
using System;
using Anthropic;
AnthropicClient client = new() { Timeout = TimeSpan.FromSeconds(42) };Atau konfigurasikan satu pemanggilan metode menggunakan WithOptions:
using System;
var message = await client
.WithOptions(options =>
options with { Timeout = TimeSpan.FromSeconds(42) }
)
.Messages.Create(parameters);
Console.WriteLine(message);SDK mendefinisikan metode yang mengembalikan daftar hasil yang dipaginasi. SDK menyediakan cara yang mudah untuk mengakses hasil baik satu halaman pada satu waktu maupun item demi item di semua halaman.
Untuk melakukan iterasi melalui semua hasil di semua halaman, gunakan metode Paginate, yang secara otomatis mengambil lebih banyak halaman sesuai kebutuhan. Metode ini mengembalikan IAsyncEnumerable:
using System;
var page = await client.Messages.Batches.List(parameters);
await foreach (var item in page.Paginate())
{
Console.WriteLine(item);
}Untuk mengakses item halaman individual dan meminta halaman berikutnya secara manual, gunakan properti Items, serta metode HasNext dan 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();
}Dalam kasus yang jarang terjadi, API dapat mengembalikan respons yang tidak sesuai dengan tipe yang diharapkan. Secara default, SDK tidak melemparkan exception dalam kasus ini. SDK hanya melemparkan AnthropicInvalidDataException jika Anda mengakses properti tersebut secara langsung.
Jika Anda lebih suka memeriksa bahwa respons sepenuhnya bertipe dengan benar di awal, maka panggil Validate:
var message = await client.Messages.Create(parameters);
message.Validate();Atau konfigurasikan klien menggunakan opsi ResponseValidation:
using Anthropic;
AnthropicClient client = new() { ResponseValidation = true };Atau konfigurasikan satu pemanggilan metode menggunakan WithOptions:
using System;
var message = await client
.WithOptions(options =>
options with { ResponseValidation = true }
)
.Messages.Create(parameters);
Console.WriteLine(message);SDK menyediakan implementasi antarmuka IChatClient dari pustaka Microsoft.Extensions.AI.Abstractions. Ini memungkinkan AnthropicClient (dan Anthropic.Services.IBetaService) digunakan dengan pustaka lain yang terintegrasi dengan abstraksi inti ini. Misalnya, alat dalam pustaka MCP C# SDK (ModelContextProtocol) dapat digunakan secara langsung dengan AnthropicClient yang diekspos melalui IChatClient.
using Anthropic;
using Microsoft.Extensions.AI;
using ModelContextProtocol.Client;
// Dikonfigurasi menggunakan variabel lingkungan ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN, dan ANTHROPIC_BASE_URL
AnthropicClient client = new();
IChatClient chatClient = client.AsIChatClient("claude-opus-5")
.AsBuilder()
.UseFunctionInvocation()
.Build();
// Menggunakan McpClient dari 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));Untuk mengirim permintaan ke Claude API, buat instance dari kelas Params dan teruskan ke metode klien yang sesuai. Ketika respons diterima, respons tersebut dideserialisasi menjadi instance dari kelas C#.
Misalnya, client.Messages.Create harus dipanggil dengan instance MessageCreateParams, dan akan mengembalikan instance Task<Message>.
SDK mendefinisikan metode yang mengembalikan respons biner, yang digunakan untuk respons API yang tidak perlu diurai, seperti data non-JSON.
Metode ini mengembalikan 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);Untuk menyimpan konten respons ke file, atau Stream apa pun, gunakan metode 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 mendefinisikan metode yang mendeserialisasi respons menjadi instance dari kelas C#. Untuk mengakses header respons, kode status, atau body respons mentah, awali pemanggilan metode HTTP apa pun pada klien atau layanan dengan WithRawResponse:
var response = await client.WithRawResponse.Messages.Create(parameters);
var statusCode = response.StatusCode;
var headers = response.Headers;HttpResponseMessage mentah juga dapat diakses melalui properti RawMessage.
Untuk respons non-streaming, Anda dapat mendeserialisasi respons menjadi instance dari kelas C# jika diperlukan:
using System;
using Anthropic.Models.Messages;
var response = await client.WithRawResponse.Messages.Create(parameters);
Message deserialized = await response.Deserialize();
Console.WriteLine(deserialized);Untuk respons streaming, Anda dapat mendeserialisasi respons menjadi IAsyncEnumerable jika diperlukan:
using System;
var response = await client.WithRawResponse.Messages.CreateStreaming(parameters);
await foreach (var item in response.Enumerate())
{
Console.WriteLine(item);
}Semua pesan log hanya ditujukan untuk debugging. Format dan konten pesan log dapat berubah antar rilis.
Aktifkan debug logging dengan mengatur variabel lingkungan:
export ANTHROPIC_LOG=debugSDK diketik untuk penggunaan yang mudah dari API yang terdokumentasi. Namun, SDK juga mendukung bekerja dengan bagian API yang tidak terdokumentasi atau belum didukung.
Untuk panduan penyiapan platform yang terperinci dengan contoh kode, lihat:
SDK C# mendukung platform berikut melalui paket NuGet terpisah:
Anthropic.Vertex. Lihat Claude di Google Cloud untuk penyiapan klien.Anthropic.Bedrock. Gunakan AnthropicBedrockMantleClient untuk endpoint Bedrock Messages-API, atau AnthropicBedrockClient (jalur bedrock-runtime). AnthropicBedrockMantleClient menerima objek konfigurasi MantleAwsClientOptions opsional; AnthropicBedrockClient menerima AnthropicBedrockCredentialsHelper.FromEnv() atau kredensial eksplisit.Anthropic.Aws. Gunakan AnthropicAwsClient; atur WorkspaceId pada klien atau variabel lingkungan ANTHROPIC_AWS_WORKSPACE_ID (lihat Workspaces). Tersedia dalam beta.Anthropic.Foundry. Gunakan AnthropicFoundryClient dengan DefaultAnthropicFoundryCredentials.FromEnv() atau kredensial eksplisit.Gunakan AnthropicBedrockMantleClient untuk proyek baru; AnthropicBedrockClient tetap tersedia untuk aplikasi yang sudah ada yang menggunakan API InvokeModel Bedrock.
Meskipun paket ini diberi versi 10+, paket ini saat ini dalam tahap beta. Selama periode beta, perubahan yang merusak kompatibilitas dapat terjadi pada rilis minor atau patch. Setelah pustaka mencapai rilis stabil, konvensi SemVer akan diikuti dengan lebih ketat. Bagikan masukan dengan mengajukan issue.
Paket ini umumnya mengikuti konvensi SemVer, meskipun perubahan tertentu yang tidak kompatibel ke belakang dapat dirilis sebagai versi minor:
Kompatibilitas ke belakang ditangani dengan serius untuk memastikan Anda dapat mengandalkan pengalaman pembaruan yang lancar.
Was this page helpful?