• Messaggi
  • Agenti gestiti
  • Amministrazione
Search...
⌘K
CLI, SDK e librerie
Panoramica
CLI ant
Guida rapidaOpzioni di autenticazioneUtilizzo della CLIScripting e automazione
SDK client
MiddlewarePythonTypeScriptC#GoJavaPHPRuby
Librerie e integrazioni
Apple Foundation ModelsCompatibilità con OpenAI SDK
Log in
C#
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Solutions

  • AI agents
  • Code modernization
  • Coding
  • Customer support
  • Education
  • Financial services
  • Government
  • Life sciences

Partners

  • Amazon Bedrock
  • Google Cloud's Vertex AI

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Company

  • Anthropic
  • Careers
  • Economic Futures
  • Research
  • News
  • Responsible Scaling Policy
  • Security and compliance
  • Transparency

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Help and security

  • Availability
  • Status
  • Support
  • Discord

Terms and policies

  • Privacy policy
  • Responsible disclosure policy
  • Terms of service: Commercial
  • Terms of service: Consumer
  • Usage policy
CLI, SDK e librerie/SDK client

SDK C#

Installa e configura l'SDK C# di Anthropic per applicazioni .NET con integrazione IChatClient

L'SDK C# di Anthropic fornisce un accesso pratico all'API REST di Anthropic da applicazioni scritte in C#.

L'SDK C# è attualmente in beta. Le API potrebbero cambiare tra le versioni.

Per la documentazione delle funzionalità dell'API con esempi di codice, consulta il riferimento API. Questa pagina tratta le funzionalità e la configurazione dell'SDK specifiche per C#.

A partire dalla versione 10+, il pacchetto Anthropic è ora l'SDK ufficiale di Anthropic per C#. Le versioni del pacchetto 3.X e precedenti erano utilizzate in precedenza per l'SDK creato dalla community tryAGI, che è stato spostato su tryAGI.Anthropic. Se devi continuare a utilizzare il client precedente nel tuo progetto, aggiorna il riferimento del pacchetto a tryAGI.Anthropic.

Installazione

Installa il pacchetto da NuGet:

dotnet add package Anthropic

Requisiti

Questa libreria richiede .NET Standard 2.0 o versioni successive.

Utilizzo

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.ClaudeOpus4_8,
};

var message = await client.Messages.Create(parameters);

Console.WriteLine(message);

Per le opzioni di autenticazione, inclusa la Workload Identity Federation, consulta Autenticazione.

Configurazione del client

Configura il client utilizzando le variabili d'ambiente:

using Anthropic;

// Configurato tramite le variabili d'ambiente ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN e ANTHROPIC_BASE_URL
AnthropicClient client = new();

Oppure manualmente:

using Anthropic;

AnthropicClient client = new() { ApiKey = "my-anthropic-api-key" };

Oppure utilizzando una combinazione dei due approcci.

Consulta questa tabella per le opzioni disponibili:

ProprietàVariabile d'ambienteObbligatoriaValore predefinito
ApiKeyANTHROPIC_API_KEYfalse-
AuthTokenANTHROPIC_AUTH_TOKENfalse-
BaseUrlANTHROPIC_BASE_URLtrue"https://api.anthropic.com"

Modifica della configurazione

Per utilizzare temporaneamente una configurazione del client modificata, riutilizzando la stessa connessione e gli stessi pool di thread, chiama WithOptions su qualsiasi client o servizio:

using System;

var message = await client
    .WithOptions(options =>
        options with
        {
            BaseUrl = "https://example.com",
            Timeout = TimeSpan.FromSeconds(42),
        }
    )
    .Messages.Create(parameters);

Console.WriteLine(message);

L'utilizzo di un'espressione with semplifica la costruzione delle opzioni modificate.

Il metodo WithOptions non influisce sul client o servizio originale.

Streaming

L'SDK definisce metodi che restituiscono flussi di "chunk" di risposta, dove ogni chunk può essere elaborato individualmente non appena arriva, invece di attendere la risposta completa. I metodi di streaming corrispondono generalmente a risposte SSE o JSONL.

Un metodo di streaming ha sempre un suffisso Streaming nel nome, anche se non ha una variante non-streaming.

Questi metodi di streaming restituiscono IAsyncEnumerable:

using System;
using Anthropic.Models.Messages;

MessageCreateParams parameters = new()
{
    MaxTokens = 1024,
    Messages =
    [
        new()
        {
            Role = Role.User,
            Content = "Hello, Claude",
        },
    ],
    Model = Model.ClaudeOpus4_8,
};

await foreach (var message in client.Messages.CreateStreaming(parameters))
{
    Console.WriteLine(message);
}

Gestione degli errori

L'SDK genera tipi di eccezioni non controllate personalizzate:

  • AnthropicApiException: classe base per gli errori dell'API. Consulta questa tabella per vedere quale sottoclasse di eccezione viene generata per ciascun codice di stato HTTP:
StatoEccezione
400AnthropicBadRequestException
401AnthropicUnauthorizedException
403AnthropicForbiddenException
404AnthropicNotFoundException
422AnthropicUnprocessableEntityException
429AnthropicRateLimitException
5xxAnthropic5xxException
altriAnthropicUnexpectedStatusCodeException

Inoltre, tutti gli errori 4xx ereditano da Anthropic4xxException.

  • AnthropicSseException: generata per errori riscontrati durante lo streaming SSE dopo una risposta HTTP iniziale riuscita.

  • AnthropicIOException: errori di rete I/O.

  • AnthropicInvalidDataException: impossibilità di interpretare dati analizzati correttamente. Ad esempio, quando si accede a una proprietà che dovrebbe essere obbligatoria, ma l'API l'ha inaspettatamente omessa dalla risposta.

  • AnthropicException: classe base per tutte le eccezioni.

Tentativi di ripetizione

L'SDK riprova automaticamente 2 volte per impostazione predefinita, con un breve backoff esponenziale tra le richieste.

Vengono ripetuti solo i seguenti tipi di errore:

  • Errori di connessione (ad esempio, a causa di un problema di connettività di rete)
  • 408 Request Timeout
  • 409 Conflict
  • 429 Rate Limit
  • 5xx Internal

L'API può anche indicare esplicitamente all'SDK di riprovare o meno una richiesta.

Per impostare un numero personalizzato di tentativi, configura il client utilizzando la proprietà MaxRetries:

using Anthropic;

AnthropicClient client = new() { MaxRetries = 3 };

Oppure configura una singola chiamata di metodo utilizzando WithOptions:

using System;

var message = await client
    .WithOptions(options =>
        options with { MaxRetries = 3 }
    )
    .Messages.Create(parameters);

Console.WriteLine(message);

Timeout

Le richieste scadono dopo 10 minuti per impostazione predefinita.

Per impostare un timeout personalizzato, configura il client utilizzando l'opzione Timeout:

using System;
using Anthropic;

AnthropicClient client = new() { Timeout = TimeSpan.FromSeconds(42) };

Oppure configura una singola chiamata di metodo utilizzando WithOptions:

using System;

var message = await client
    .WithOptions(options =>
        options with { Timeout = TimeSpan.FromSeconds(42) }
    )
    .Messages.Create(parameters);

Console.WriteLine(message);

Paginazione

L'SDK definisce metodi che restituiscono elenchi paginati di risultati. Fornisce modi pratici per accedere ai risultati una pagina alla volta o elemento per elemento attraverso tutte le pagine.

Paginazione automatica

Per iterare attraverso tutti i risultati in tutte le pagine, usa il metodo Paginate, che recupera automaticamente altre pagine secondo necessità. Il metodo restituisce un IAsyncEnumerable:

using System;

var page = await client.Messages.Batches.List(parameters);
await foreach (var item in page.Paginate())
{
    Console.WriteLine(item);
}

Paginazione manuale

Per accedere ai singoli elementi della pagina e richiedere manualmente la pagina successiva, usa la proprietà Items e i metodi HasNext e 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();
}

Validazione della risposta

In rari casi, l'API potrebbe restituire una risposta che non corrisponde al tipo previsto. Per impostazione predefinita, l'SDK non genera un'eccezione in questo caso. Genera AnthropicInvalidDataException solo se accedi direttamente alla proprietà.

Se preferisci verificare in anticipo che la risposta sia completamente ben tipizzata, chiama Validate:

var message = await client.Messages.Create(parameters);
message.Validate();

Oppure configura il client utilizzando l'opzione ResponseValidation:

using Anthropic;

AnthropicClient client = new() { ResponseValidation = true };

Oppure configura una singola chiamata di metodo utilizzando WithOptions:

using System;

var message = await client
    .WithOptions(options =>
        options with { ResponseValidation = true }
    )
    .Messages.Create(parameters);

Console.WriteLine(message);

Integrazione IChatClient

L'SDK fornisce un'implementazione dell'interfaccia IChatClient dalla libreria Microsoft.Extensions.AI.Abstractions. Questo consente di utilizzare AnthropicClient (e Anthropic.Services.IBetaService) con altre librerie che si integrano con queste astrazioni di base. Ad esempio, gli strumenti nella libreria SDK C# di MCP (ModelContextProtocol) possono essere utilizzati direttamente con un AnthropicClient esposto tramite IChatClient.

using Anthropic;
using Microsoft.Extensions.AI;
using ModelContextProtocol.Client;

// Configurato tramite le variabili d'ambiente ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN e ANTHROPIC_BASE_URL
AnthropicClient client = new();

IChatClient chatClient = client.AsIChatClient("claude-opus-4-8")
    .AsBuilder()
    .UseFunctionInvocation()
    .Build();

// Utilizzo di McpClient dall'SDK C# di MCP
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));

Richieste e risposte

Per inviare una richiesta all'API di Claude, crea un'istanza di una classe Params e passala al metodo client corrispondente. Quando la risposta viene ricevuta, viene deserializzata in un'istanza di una classe C#.

Ad esempio, client.Messages.Create deve essere chiamato con un'istanza di MessageCreateParams e restituirà un'istanza di Task<Message>.

Utilizzo avanzato

Risposte binarie

L'SDK definisce metodi che restituiscono risposte binarie, utilizzate per risposte dell'API che non devono necessariamente essere analizzate, come dati non JSON.

Questi metodi restituiscono 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);

Per salvare il contenuto della risposta in un file, o in qualsiasi Stream, usa il metodo 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 Stream

Risposte grezze

L'SDK definisce metodi che deserializzano le risposte in istanze di classi C#. Per accedere agli header della risposta, al codice di stato o al corpo grezzo della risposta, anteponi WithRawResponse a qualsiasi chiamata di metodo HTTP su un client o servizio:

var response = await client.WithRawResponse.Messages.Create(parameters);
var statusCode = response.StatusCode;
var headers = response.Headers;

È possibile accedere anche all'HttpResponseMessage grezzo tramite la proprietà RawMessage.

Per le risposte non-streaming, puoi deserializzare la risposta in un'istanza di una classe C# se necessario:

using System;
using Anthropic.Models.Messages;

var response = await client.WithRawResponse.Messages.Create(parameters);
Message deserialized = await response.Deserialize();
Console.WriteLine(deserialized);

Per le risposte in streaming, puoi deserializzare la risposta in un IAsyncEnumerable se necessario:

using System;

var response = await client.WithRawResponse.Messages.CreateStreaming(parameters);
await foreach (var item in response.Enumerate())
{
    Console.WriteLine(item);
}

Logging

Tutti i messaggi di log sono destinati esclusivamente al debug. Il formato e il contenuto dei messaggi di log potrebbero cambiare tra le versioni.

Abilita il logging di debug impostando una variabile d'ambiente:

export ANTHROPIC_LOG=debug

Funzionalità API non documentate

L'SDK è tipizzato per un utilizzo pratico dell'API documentata. Tuttavia, supporta anche l'utilizzo di parti dell'API non documentate o non ancora supportate.

Integrazioni con le piattaforme

Per guide dettagliate alla configurazione delle piattaforme con esempi di codice, consulta:

  • Amazon Bedrock
  • Amazon Bedrock (legacy)
  • Vertex AI
  • Microsoft Foundry
  • Claude Platform su AWS

L'SDK C# supporta le seguenti piattaforme tramite pacchetti NuGet separati:

  • Bedrock: Anthropic.Bedrock. Usa AnthropicBedrockMantleClient per l'endpoint Bedrock dell'API Messages, oppure AnthropicBedrockClient (percorso bedrock-runtime). AnthropicBedrockMantleClient accetta un oggetto di configurazione opzionale MantleAwsClientOptions; AnthropicBedrockClient accetta AnthropicBedrockCredentialsHelper.FromEnv() o credenziali esplicite.
  • Vertex AI: Anthropic.Vertex. Consulta Vertex AI per la configurazione del client.
  • Foundry: Anthropic.Foundry. Usa AnthropicFoundryClient con DefaultAnthropicFoundryCredentials.FromEnv() o credenziali esplicite.
  • Claude Platform su AWS: Anthropic.Aws. Usa AnthropicAwsClient; imposta WorkspaceId sul client o la variabile d'ambiente ANTHROPIC_AWS_WORKSPACE_ID (consulta Workspace). Disponibile in beta.

Usa AnthropicBedrockMantleClient per i nuovi progetti; AnthropicBedrockClient rimane disponibile per le applicazioni esistenti che utilizzano l'API InvokeModel di Bedrock.

Versionamento semantico

Sebbene questo pacchetto abbia una versione 10+, è attualmente in beta. Durante il periodo beta, potrebbero verificarsi modifiche che interrompono la compatibilità nelle release minori o patch. Una volta che la libreria raggiungerà la release stabile, le convenzioni SemVer saranno seguite più rigorosamente. Condividi il tuo feedback aprendo una issue.

Questo pacchetto segue generalmente le convenzioni SemVer, anche se alcune modifiche non retrocompatibili potrebbero essere rilasciate come versioni minori:

  1. Modifiche agli elementi interni della libreria che sono tecnicamente pubblici ma non destinati o documentati per uso esterno.
  2. Modifiche che non si prevede abbiano impatto sulla stragrande maggioranza degli utenti nella pratica.

La retrocompatibilità è presa seriamente per garantire un'esperienza di aggiornamento fluida.

Risorse aggiuntive

  • Repository GitHub
  • Pacchetto NuGet
  • Riferimento API
  • Messaggi in streaming

Was this page helpful?

  • Installazione
  • Requisiti
  • Utilizzo
  • Configurazione del client
  • Modifica della configurazione
  • Streaming
  • Gestione degli errori
  • Tentativi di ripetizione
  • Timeout
  • Paginazione
  • Paginazione automatica
  • Paginazione manuale
  • Validazione della risposta
  • Integrazione IChatClient
  • Richieste e risposte
  • Utilizzo avanzato
  • Risposte binarie
  • Risposte grezze
  • Logging
  • Funzionalità API non documentate
  • Integrazioni con le piattaforme
  • Versionamento semantico
  • Risorse aggiuntive