Introduzione a Claude Sonnet 5.5 e al suo posizionamento sul mercato

Claude Sonnet 5.5 è il modello più veloce ed economico della famiglia 5.5 di Anthropic, rilasciato il 28 settembre 2026. È identificato nell’API con il nome claude-sonnet-5-5 e costa 2 USD per milione di token in input e 10 USD per milione di token in output. Secondo Anthropic, Sonnet 5.5 è 30 % più veloce e fino al 30 % più economico rispetto al suo predecessore Sonnet 5.

Il changelog di novembre di “This Month In AI” elenca la famiglia 5.5 (Sonnet, Haiku, Opus) e i piani disponibili (Free, Pro, Max, Ultra, Team, Enterprise). Per chi vuole confrontare le performance, è utile il confronto tra Sonnet 5.5, DeepSeek V4.1 Flash e Kolibri‑1, disponibile nella documentazione ufficiale.

Claude Platform e modalità di accesso

Il nome commerciale per gli sviluppatori è Claude Platform. L’accesso avviene tramite la Claude API, ma il modello è anche disponibile su Amazon Web Services, Google Cloud e Microsoft Azure. Per le aziende europee con vincoli di fornitore, questa pluralità di canali è fondamentale.

Nel tutorial utilizziamo l’API diretta, perché è la più semplice da provare. La scheda ufficiale del modello indica che Sonnet 5.5 è ottimizzato per generazione di codice, analisi dei dati, creazione di contenuti, comprensione visiva e uso agentico di strumenti. La data di conoscenza affidabile è giugno 2026, mentre la data di ritiro non sarà prima del 28 settembre 2027, garantendo la stabilità dell’identificatore per almeno un anno.

Novità tecniche rispetto alle versioni precedenti

    • Ragionamento adattivo (adaptive thinking) attivo di default.
    • L’impostazione between_tools spegne il ragionamento iniziale e riduce l’effort computazionale.
    • La lunghezza minima di un prompt cacheabile è 512 token, molto più bassa dei 4 096 token richiesti da Haiku 4.5 o Opus 4.6.

Confronto dei modelli della famiglia 5.5

La famiglia attuale comprende:

    • Claude Sonnet 5.5 – claude-sonnet-5-5 – 2 USD/1M input, 10 USD/1M output – ideale per agenti, codice, analisi e lavoro quotidiano.
    • Claude Haiku 5.5 – claude-haiku-5-5 – 0,10 USD/1M input, 0,50 USD/1M output (prompt fino a 100 000 token) – adatto a classificazione, estrazione, routing ad alto volume.
    • Claude Opus 5.5 – identificativo da pagina modelli – costi più bassi del 40 % rispetto a Opus 4, pensato per coding prolungato e lavori di conoscenza complessi.

Per Haiku 5.5, superati i 100 000 token di prompt, il listino sale a 0,50 USD in input e 2,50 USD in output. Per Opus 5.5 è consigliato verificare prezzi e identificativo sulla pagina ufficiale prima di scrivere codice.

Prerequisiti e installazione

Ogni voce è importante: un errore di ambiente al passo 2 può costare più tempo di tutto il resto del tutorial.

RequisitoVersioneNote
Python3.12 o successivaSu Windows usa py -3.12
Pacchetto anthropicultima versione su PyPIIl tutorial usa solo messages, streaming e batch
pytestultima versioneSolo per i test del passo 12
python‑dotenvultima versionePer leggere la chiave dal file .env
Account Claude Platformcon credito attivoServe una chiave API, non basta l’abbonamento a Claude.ai
Terminalebash, zsh o PowerShellGli esempi sono per Linux e macOS

Un punto che confonde molti è la distinzione tra abbonamento a Claude.ai e accesso API. I crediti mensili (100 $ per Max, 200 $ per Ultra, fino a 500 $ per Team) vanno attivati dal lato Platform e non sbloccano nulla finché non si crea una chiave.

Dal punto di vista della conformità, Sonnet 5.5 è disponibile con opzione di zero data retention e l’inferenza negli Stati Uniti costa 1,1 × il prezzo standard. Se si trattano dati personali di clienti europei, è necessario consultare il DPO per regione e contratto prima di inviare ticket reali. In questo tutorial usiamo dati inventati.

Passi 1‑3: configurazione della chiave API e primo messaggio

Passo 1 – Creazione e protezione della chiave

Dalla console di Claude Platform genera una nuova chiave per il progetto, ad esempio claude-desk-dev. Copiala subito, poiché non sarà più mostrata. Salva la chiave in un file .env e proteggi il file:

mkdir claude-desk && cd claude-desk

printf 'ANTHROPICAPIKEY=sk-ant-INSERISCI-QUI\n' > .env

printf '.env\n.venv/\n_pycache_/\n' > .gitignore

chmod 600 .env

Passo 2 – Ambiente virtuale e installazione pacchetti

Creare un ambiente isolato evita conflitti:

python3.12 -m venv .venv

source .venv/bin/activate

python -m pip install --upgrade pip

pip install anthropic python-dotenv pytest

pip freeze > requirements.txt

python -c "import anthropic; print(anthropic._version_)"

L’ultimo comando stampa la versione dell’S​DK; annotala nel README per garantire la riproducibilità.

Passo 3 – Primo messaggio all’API

Crea config.py per centralizzare le impostazioni:

config.py

import os

from dotenv import load_dotenv

load_dotenv()

MODELLO = os.getenv("CLAUDE_MODEL", "claude-sonnet-5-5")

MODELLOECONOMICO = os.getenv("CLAUDEMODEL_CHEAP", "claude-haiku-5-5")

MAXTOKENRISPOSTA = int(os.getenv("CLAUDEMAXTOKENS", "1024"))

if not os.getenv("ANTHROPICAPIKEY"):

raise SystemExit("ANTHROPICAPIKEY mancante: controlla il file .env")

Quindi un test minimo in ciao.py:

ciao.py

from anthropic import Anthropic

from config import MODELLO, MAXTOKENRISPOSTA

client = Anthropic()

risposta = client.messages.create(

model=MODELLO,

maxtokens=MAXTOKEN_RISPOSTA,

messages=[{"role": "user", "content": "Presentati in una frase, in italiano."}],

)

for blocco in risposta.content:

if blocco.type == "text":

print(blocco.text)

print("stopreason:", risposta.stopreason)

print("token:", risposta.usage.inputtokens, "in /", risposta.usage.outputtokens, "out")

L’output tipico è simile a:

Sono Claude, un assistente creato da Anthropic, pronto ad aiutarti in italiano.

stopreason: endturn

token: 18 in / 24 out

Nota il ciclo sui blocchi di content. Con il ragionamento adattivo attivo, la risposta può contenere blocchi diversi da text; accedere direttamente a risposta.content[0].text può provocare errori se il primo blocco è di tipo tooluse o toolresult.

Passi 4‑6: prompt di sistema, conversazione multi‑turno e streaming

Passo 4 – Prompt di sistema come contratto

Il prompt di sistema definisce tono, perimetro e regole di rifiuto. Per un assistente di help‑desk, ad esempio:

You are a courteous Italian e‑commerce help‑desk assistant.

You may only answer questions about order status, refunds, and product information.

If a user asks for something outside this scope, politely decline.

Always respond in Italian and keep answers under 150 words.

Questo prompt viene inserito come primo messaggio nella lista messages.

Passo 5 – Conversazione a più turni

Per gestire una chat continua, conserva la cronologia in una lista e aggiungi nuovi messaggi ad ogni iterazione:

conversation = [

{"role": "system", "content": SYSTEM_PROMPT},

{"role": "user", "content": "Ho appena ordinato un paio di scarpe, qual è lo stato?"},

]

while True:

risposta = client.messages.create(

model=MODELLO,

maxtokens=MAXTOKEN_RISPOSTA,

messages=conversation,

)

# stampa risposta

for blocco in risposta.content:

if blocco.type == "text":

print(blocco.text)

# aggiungi risposta del modello alla cronologia

conversation.append({"role": "assistant", "content": risposta.content})

# leggi nuovo input utente

user_input = input("Tu: ")

if user_input.lower() in ("exit", "quit"):

break

conversation.append({"role": "user", "content": user_input})

Questo schema garantisce che il contesto venga mantenuto e che il modello possa fare riferimento a messaggi precedenti.

Passo 6 – Streaming delle risposte

Per ridurre la latenza percepita, usa lo streaming:

stream = client.messages.create(

model=MODELLO,

maxtokens=MAXTOKEN_RISPOSTA,

messages=conversation,

stream=True,

)

for event in stream:

if event.type == "contentblockstart":

continue

if event.type == "contentblockdelta" and event.delta.type == "text":

print(event.delta.text, end="", flush=True)

if event.type == "message_stop":

print("\n[Fine risposta]")

Lo streaming invia i token non appena generati, migliorando l’esperienza utente.

Passi 7‑9: tool use, cache del prompt e gestione dei costi

Passo 7 – Utilizzo di tool per consultare lo stato ordine

Claude può invocare tool definiti dall’utente. Definiamo una funzione fittizia getorderstatus(order_id) e la registriamo come tool:

tool_definition = {

"name": "getorderstatus",

"description": "Restituisce lo stato di un ordine dato l'ID.",

"input_schema": {

"type": "object",

"properties": {"order_id": {"type": "string"}},

"required": ["order_id"],

},

}

Nel messaggio, chiedi al modello di usare il tool quando necessario. Quando il modello restituisce un blocco di tipo tooluse, il client deve chiamare la funzione reale e inviare il risultato con toolresult:

if blocco.type == "tool_use":

orderid = blocco.input["orderid"]

status = getorderstatus(order_id) # funzione mock

conversation.append({

"role": "assistant",

"content": [{"type": "toolresult", "tooluse_id": blocco.id, "content": status}]

})

Passo 8 – Cache del prompt

Claude 5.5 permette di cacheare prompt di almeno 512 token. Salviamo il prompt di sistema e le prime istruzioni in un file promptcache.txt e lo includiamo con l’opzione cacheprompt=True:

with open("prompt_cache.txt", "r") as f:

cached_prompt = f.read()

conversation = [

{"role": "system", "content": cached_prompt},

# altri messaggi...

]

Usare la cache riduce i costi di token di input per ogni chiamata successiva.

Passo 9 – Monitoraggio e limitazione dei costi

Per tenere sotto controllo le spese, aggiungi una funzione di logging:

def log_usage(usage):

with open("usage.log", "a") as f:

f.write(f"{datetime.now()}, in:{usage.inputtokens}, out:{usage.outputtokens}\\n")

Chiama log_usage(risposta.usage) dopo ogni risposta. È possibile impostare un budget mensile e interrompere l’interazione quando la soglia viene superata.

Passi 10‑12: testing, script batch e distribuzione

Passo 10 – Test automatici con pytest

Scrivi test unitari per verificare il comportamento dei tool e della gestione della cronologia:

def testgetorder_status():

assert getorderstatus("ORD123") == "Confermato"

def testconversationflow():

conv = [{"role": "user", "content": "Qual è lo stato dell'ordine ORD123?"}]

resp = client.messages.create(

model=MODELLO,

maxtokens=MAXTOKEN_RISPOSTA,

messages=conv,

)

assert any(blocco.type == "tool_use" for blocco in resp.content)

Esegui con pytest -q.

Passo 11 – Script batch per esecuzioni programmate

Per automatizzare il controllo degli ordini, crea uno script batch_check.py che legge un file CSV di ID ordine, chiama il modello e salva le risposte in un altro CSV:

import csv

from anthropic import Anthropic

from config import MODELLO, MAXTOKENRISPOSTA

client = Anthropic()

with open("orders.csv") as fin, open("results.csv", "w", newline="") as fout:

reader = csv.DictReader(fin)

writer = csv.DictWriter(fout, fieldnames=["order_id", "status"])

writer.writeheader()

for row in reader:

resp = client.messages.create(

model=MODELLO,

maxtokens=MAXTOKEN_RISPOSTA,

messages=[{"role": "user", "content": f"Qual è lo stato dell'ordine {row['order_id']}?"}],

)

status = resp.content[0].text.strip()

writer.writerow({"orderid": row["orderid"], "status": status})

Passo 12 – Distribuzione e conclusioni

Imballa l’applicazione in un container Docker per garantire portabilità:

Dockerfile

FROM python:3.12-slim

WORKDIR /app

COPY . /app

RUN pip install --no-cache-dir -r requirements.txt

ENV PYTHONUNBUFFERED=1

CMD ["python", "claude_desk.py"]

Costruisci e avvia:

docker build -t claude-desk .

docker run --env-file .env -it claude-desk

Alla fine dei 12 passi, avrai un assistente da riga di comando funzionante, con test, gestione della cache, streaming, tool use e monitoraggio dei costi, pronto per essere integrato in un ambiente di produzione.

Nota finale: anche se l’esempio è specifico per un help‑desk e‑commerce, la struttura è ri