API AI (OpenAI/Anthropic)
Come integrare l'AI nei tuoi software usando le API di OpenAI e Anthropic. Dalla prima chiamata all'output strutturato, con system prompt professionali pronti all'uso.
API AI (OpenAI/Anthropic)
L'Avv. Marco Rossi analizza contratti ogni giorno. La chat funziona, ma con 20 contratti al giorno diventa un collo di bottiglia: copia-incolla, attesa, riformattazione. Le API permettono di integrare l'AI direttamente nel gestionale dello studio, eliminando ogni passaggio manuale.
Dalla chat all'API
La chat è come andare in posta: fai la fila, parli con l'operatore, aspetti la risposta. L'API è come una raccomandata automatica: il tuo software invia la richiesta, riceve la risposta, la elabora — tutto senza intervento umano.
Il flusso è semplice:
Il tuo codice → Richiesta HTTP → Server AI → Risposta JSON → Il tuo codice la elaboraOgni richiesta contiene: il modello da usare, i messaggi (system + user), i parametri (temperatura, max token). Ogni risposta contiene: il testo generato, i token usati, i metadati.
Setup OpenAI
Ecco la prima chiamata API con OpenAI. Il system prompt trasforma il modello generico in un assistente legale specializzato:
from openai import OpenAI
# Inizializza il client con la tua API key
client = OpenAI(api_key="sk-la-tua-chiave")
# System prompt specializzato per lo studio legale
system_prompt = """Sei un assistente legale per lo studio dell'Avv. Marco Rossi.
Analizza contratti commerciali italiani.
Rispondi sempre in italiano, citando gli articoli di legge pertinenti.
Segnala clausole vessatorie con il prefisso [ATTENZIONE]."""
# Invio della richiesta
risposta = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": "Analizza questo contratto: ..."}
],
temperature=0.2 # Bassa: risposte precise e coerenti
)
# Estrai il testo della risposta
testo = risposta.choices[0].message.content
print(testo)Setup Anthropic
La libreria Anthropic ha una struttura simile ma con differenze importanti: max_tokens è obbligatorio e il system prompt va in un parametro separato:
import anthropic
# Inizializza il client Anthropic
client = anthropic.Anthropic(api_key="sk-ant-la-tua-chiave")
# Chiamata API con Claude
risposta = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=2048, # Obbligatorio con Anthropic
system="""Sei un assistente legale per lo studio dell'Avv. Rossi.
Analizza contratti italiani, cita articoli di legge, segnala rischi.""",
messages=[
{"role": "user", "content": "Analizza questo contratto: ..."}
]
)
# La risposta è una lista di blocchi di contenuto
testo = risposta.content[0].text
print(testo)System prompt per professionisti
Il system prompt è la personalità permanente del tuo assistente. Definisce chi è, come parla e cosa sa fare. Ecco tre prompt professionali pronti all'uso:
AVVOCATO:
Sei l'assistente legale dello studio Rossi. Analizzi contratti commerciali
italiani. Citi sempre gli articoli del codice civile pertinenti. Segnali
clausole vessatorie e rischi con [ATTENZIONE]. Rispondi in italiano formale.
MEDICO:
Sei l'assistente clinico della Dott.ssa Bianchi. Riassumi letteratura
medica, prepari schede informative per pazienti e analizzi linee guida.
Usi un linguaggio accessibile ma scientificamente accurato. Specifichi
sempre che le informazioni non sostituiscono il parere medico.
CONSULENTE FISCALE:
Sei l'assistente dello studio Conti. Analizzi normativa fiscale italiana,
circolari AdE e scadenze tributarie. Rispondi citando riferimenti
normativi precisi. Segnali variazioni rispetto alla normativa precedente.Output strutturato (JSON)
Per integrare l'AI nei software gestionali serve JSON strutturato, non testo libero. Ecco come estrarre dati da un contratto in formato processabile:
import json
from openai import OpenAI
client = OpenAI(api_key="sk-la-tua-chiave")
risposta = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": """Analizza il contratto e restituisci
SOLO un JSON valido con questa struttura:
{
"parti": ["nome parte 1", "nome parte 2"],
"oggetto": "descrizione sintetica",
"durata_mesi": 12,
"valore_euro": 50000,
"clausole_critiche": [
{"articolo": "Art. 8", "rischio": "alto", "motivo": "..."}
],
"penali": true,
"recesso_anticipato": true
}"""},
{"role": "user", "content": testo_contratto}
],
temperature=0.1 # Minima: output deterministico
)
# Parsing del JSON dalla risposta
dati_contratto = json.loads(risposta.choices[0].message.content)
# Ora puoi salvare nel gestionale
print(f"Contratto tra: {dati_contratto['parti']}")
print(f"Clausole critiche: {len(dati_contratto['clausole_critiche'])}")Gestione costi e limiti
Ogni chiamata API ha un costo basato sui token (circa 4 caratteri = 1 token). Ecco come stimare la spesa:
# Stima costo per analisi contratto
# GPT-4o: ~$2.50 / 1M token input, ~$10 / 1M token output
# Claude Sonnet: ~$3 / 1M token input, ~$15 / 1M token output
token_input = 8000 # Contratto di 30 pagine circa
token_output = 2000 # Analisi dettagliata
# Calcolo costo GPT-4o
costo_input = (token_input / 1_000_000) * 2.50
costo_output = (token_output / 1_000_000) * 10.00
costo_totale = costo_input + costo_output
print(f"Costo per contratto: ${costo_totale:.4f}")
print(f"Costo per 20 contratti/giorno: ${costo_totale * 20:.2f}")
print(f"Costo mensile stimato (20 gg): ${costo_totale * 20 * 20:.2f}")
# Risultato tipico: ~0.04 euro per contratto
# 20 contratti/giorno = ~0.80 euro/giorno
# Costo mensile: ~16 euro vs ore di lavoro risparmiateTieni presente i rate limit: ogni piano API ha un tetto di richieste al minuto. Implementa sempre un sistema di retry con attesa esponenziale per gestire i limiti.
Da ricordare
- ●Le API trasformano l'AI da strumento manuale a componente integrato nei tuoi software
- ●OpenAI e Anthropic hanno strutture simili ma differenze nei parametri obbligatori
- ●Il system prompt è il cuore dell'integrazione: definisce competenza, tono e formato
- ●Per i gestionali serve output JSON strutturato, non testo libero
- ●I costi sono minimi: pochi centesimi per operazione, decine di euro al mese per un uso intensivo
- ●Implementa sempre gestione errori e retry: le API sono affidabili ma non infallibili