C# SDK
为 .NET 应用程序安装和配置 Anthropic C# SDK,并集成 IChatClient
Anthropic C# SDK 为使用 C# 编写的应用程序提供了便捷访问 Claude API 的方式。
安装
从 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 UserMessageParam { 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(工作负载身份联合)在内的身份验证选项,请参阅身份验证。如果您的 API 密钥是未限定到某个工作区的个人或服务账户密钥,请在 anthropic-workspace-id 请求标头中设置工作区 ID;选择工作区介绍了此 SDK 的按请求设置选项。
客户端配置
使用环境变量配置客户端:
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 方法不会影响原始客户端或服务。
流式传输
"Streaming"(流式传输):SDK 定义了返回响应"块"(chunk)流的方法,每个块在到达后即可单独处理,而无需等待完整响应。流式传输方法通常对应 SSE 或 JSONL 响应。
流式传输方法的名称中始终带有 Streaming 后缀,即使它没有非流式传输的变体。
这些流式传输方法返回 IAsyncEnumerable:
using System;
using Anthropic.Models.Messages;
MessageCreateParams parameters = new()
{
MaxTokens = 1024,
Messages = [new UserMessageParam { 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:在初始 HTTP 响应成功后,SSE 流式传输过程中遇到错误时抛出。 -
AnthropicIOException:I/O 网络错误。 -
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 提供了 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-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.Files;
FileDownloadParams parameters = new() { FileID = "file_id" };
var response = await client.Files.Download(parameters);
Console.WriteLine(response);要将响应内容保存到文件或任意 Stream,请使用 CopyToAsync 方法:
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# 类实例的方法。要访问响应头、状态码或原始响应体,请在客户端或服务上的任意 HTTP 方法调用前加上 WithRawResponse:
var response = await client.WithRawResponse.Messages.Create(parameters);
var statusCode = response.StatusCode;
var headers = response.Headers;也可以通过 RawMessage 属性访问原始的 HttpResponseMessage。
对于非流式传输响应,如有需要,您可以将响应反序列化为 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=debugOpenTelemetry 追踪
当您的应用程序使用 AddSource("com.anthropic.sdk.csharp*") 将 SDK 的源添加到其 OpenTelemetry tracer provider 时,SDK 会为其发送的每个请求发出一个 span。要将这些 span 发送到您的可观测性平台,请参阅在 Claude SDK 中设置 OpenTelemetry。
未记录的 API 功能
SDK 针对已记录的 API 进行了类型化,以便于使用。不过,它也支持使用 API 中未记录或尚未支持的部分。
平台集成
C# SDK 通过单独的 NuGet 包支持以下平台:
- Agent Platform:
Anthropic.Vertex。有关客户端设置,请参阅 Claude Models on Google Cloud (Google managed)。 - Bedrock:
Anthropic.Bedrock。对于 Messages-API Bedrock 端点,请使用AnthropicBedrockMantleClient;或使用AnthropicBedrockClient(bedrock-runtime路径)。AnthropicBedrockMantleClient接受一个可选的MantleAwsClientOptions配置对象;AnthropicBedrockClient接受AnthropicBedrockCredentialsHelper.FromEnv()或显式凭据。 - Claude Platform on AWS:
Anthropic.Aws。使用AnthropicAwsClient;在客户端上设置WorkspaceId或设置ANTHROPIC_AWS_WORKSPACE_ID环境变量(请参阅工作区)。以 beta 形式提供。 - Foundry:
Anthropic.Foundry。将AnthropicFoundryClient与DefaultAnthropicFoundryCredentials.FromEnv()或显式凭据一起使用。
新项目请使用 AnthropicBedrockMantleClient;AnthropicBedrockClient 保留用于使用 Bedrock InvokeModel API 的现有应用程序。
C# SDK 还通过 Anthropic.GoogleCloud 包中的 AnthropicGoogleCloudClient 支持 Claude Models on Google Cloud (Anthropic managed)。此客户端处于 beta 阶段。请在可选的 GoogleCloudClientOptions 值上设置 WorkspaceId,或设置 ANTHROPIC_GOOGLE_CLOUD_WORKSPACE_ID 环境变量。请参阅项目、位置和工作区解析。
语义化版本控制
此 SDK 的每个主版本默认在 anthropic-version 请求头中发送一个 API 版本,每个新的 API 版本都会伴随一个新的主版本。第一个发送 2026-10-21 的主版本是 13.0.0;请参阅迁移到 API 版本 2026-10-21。
此包通常遵循 SemVer 约定,但某些向后不兼容的更改可能会作为次要版本发布:
- 对库内部的更改,这些内部内容在技术上是公开的,但并非有意或有文档说明供外部使用。
- 预计在实践中不会影响绝大多数用户的更改。
我们非常重视向后兼容性,以确保您可以获得顺畅的升级体验。
其他资源
Was this page helpful?