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.
| Requisito | Versione | Note |
|---|---|---|
| Python | 3.12 o successiva | Su Windows usa py -3.12 |
Pacchetto anthropic | ultima versione su PyPI | Il tutorial usa solo messages, streaming e batch |
| pytest | ultima versione | Solo per i test del passo 12 |
| python‑dotenv | ultima versione | Per leggere la chiave dal file .env |
| Account Claude Platform | con credito attivo | Serve una chiave API, non basta l’abbonamento a Claude.ai |
| Terminale | bash, zsh o PowerShell | Gli 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’SDK; 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