Anthropic C# SDK는 C#으로 작성된 애플리케이션에서 Anthropic REST API에 편리하게 접근할 수 있도록 제공합니다.
C# SDK는 현재 베타 버전입니다. API는 버전 간에 변경될 수 있습니다.
코드 예제가 포함된 API 기능 문서는 API 레퍼런스를 참조하세요. 이 페이지는 C# 전용 SDK 기능과 구성을 다룹니다.
버전 10+부터 Anthropic 패키지는 이제 C#용 공식 Anthropic 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는 응답 "청크" 스트림을 반환하는 메서드를 정의하며, 전체 응답을 기다리는 대신 각 청크가 도착하는 즉시 개별적으로 처리할 수 있습니다. 스트리밍 메서드는 일반적으로 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는 사용자 정의 unchecked 예외 타입을 발생시킵니다:
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는 페이지네이션된 결과 목록을 반환하는 메서드를 정의합니다. 결과를 한 번에 한 페이지씩 또는 모든 페이지에 걸쳐 항목별로 접근할 수 있는 편리한 방법을 제공합니다.
모든 페이지의 모든 결과를 반복하려면 필요에 따라 자동으로 더 많은 페이지를 가져오는 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. 클라이언트 설정은 Google Cloud의 Claude를 참조하세요.Anthropic.Bedrock. Messages-API Bedrock 엔드포인트에는 AnthropicBedrockMantleClient를, (bedrock-runtime 경로에는) AnthropicBedrockClient를 사용하세요. 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 규칙이 더 엄격하게 준수됩니다. 이슈를 제출하여 피드백을 공유해 주세요.
이 패키지는 일반적으로 SemVer 규칙을 따르지만, 특정 하위 호환성이 없는 변경 사항은 마이너 버전으로 릴리스될 수 있습니다:
원활한 업그레이드 경험을 보장하기 위해 하위 호환성을 중요하게 생각합니다.
Was this page helpful?