Anthropic C# SDK 讓以 C# 撰寫的應用程式能夠方便地存取 Anthropic REST API。
C# SDK 目前處於測試版階段。API 可能會在版本之間變更。
如需包含程式碼範例的 API 功能文件,請參閱 API 參考。本頁面涵蓋 C# 特有的 SDK 功能與設定。
自版本 10+ 起,Anthropic 套件現在是官方的 Anthropic C# SDK。套件版本 3.X 及以下先前用於 tryAGI 社群建置的 SDK,該 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" };或結合這兩種方式。
請參閱此表格以了解可用的選項:
| 屬性 | 環境變數 | 必填 | 預設值 |
|---|---|---|---|
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 定義了回傳回應「區塊」(chunk)串流的方法,每個區塊可以在抵達時立即個別處理,而不需等待完整的回應。串流方法通常對應於 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 次,並在請求之間使用短暫的指數退避(exponential backoff)。
只有以下錯誤類型會被重試:
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);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 定義了回傳二進位回應的方法,這些方法用於不一定需要解析的 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 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。使用 AnthropicBedrockMantleClient 存取 Messages-API Bedrock 端點,或使用 AnthropicBedrockClient(bedrock-runtime 路徑)。AnthropicBedrockMantleClient 接受一個選用的 MantleAwsClientOptions 設定物件;AnthropicBedrockClient 接受 AnthropicBedrockCredentialsHelper.FromEnv() 或明確的憑證。Anthropic.Aws。使用 AnthropicAwsClient;在用戶端上設定 WorkspaceId 或設定 ANTHROPIC_AWS_WORKSPACE_ID 環境變數(請參閱 Workspaces)。以測試版提供。Anthropic.Foundry。使用 AnthropicFoundryClient 搭配 DefaultAnthropicFoundryCredentials.FromEnv() 或明確的憑證。新專案請使用 AnthropicBedrockMantleClient;AnthropicBedrockClient 保留給使用 Bedrock InvokeModel API 的現有應用程式。
雖然此套件的版本號為 10+,但它目前處於測試版階段。在測試版期間,次要版本或修補版本中可能會出現重大變更。一旦函式庫達到穩定版本,將會更嚴格地遵循 SemVer 慣例。請透過提交 issue 分享您的意見回饋。
此套件大致遵循 SemVer 慣例,但某些不向後相容的變更可能會以次要版本發布:
我們嚴肅看待向後相容性,以確保您能享有順暢的升級體驗。
Was this page helpful?