Migrazione da Text Completions
Migrazione da Text Completions a Messages
Quando si effettua la migrazione da Text Completions a Messages, considera le seguenti modifiche.
Input e output
Il cambiamento più significativo tra Text Completions e Messages è il modo in cui si specificano gli input del modello e si ricevono gli output dal modello.
Con Text Completions, gli input sono stringhe grezze:
prompt = "\n\nHuman: Ciao\n\nAssistant: Ciao, sono Claude. Come posso aiutarti?\n\nHuman: Puoi spiegarmi la Glicolisi?\n\nAssistant:"
Con Messages, si specifica una lista di messaggi di input invece di un prompt grezzo:
Ogni messaggio di input ha un role
e un content
.
Nomi dei ruoli
L’API Text Completions si aspetta turni alternati \n\nHuman:
e \n\nAssistant:
, ma l’API Messages si aspetta i ruoli user
e assistant
. Potresti vedere la documentazione che fa riferimento a turni “human” o “user”. Questi si riferiscono allo stesso ruolo e saranno “user” in futuro.
Con Text Completions, il testo generato dal modello viene restituito nei valori completion
della risposta:
>>> response = anthropic.completions.create(...)
>>> response.completion
" Ciao, sono Claude"
Con Messages, la risposta è il valore content
, che è una lista di blocchi di contenuto:
>>> response = anthropic.messages.create(...)
>>> response.content
[{"type": "text", "text": "Ciao, sono Claude"}]
Mettere le parole in bocca a Claude
Con Text Completions, puoi pre-compilare parte della risposta di Claude:
prompt = "\n\nHuman: Ciao\n\nAssistant: Ciao, mi chiamo"
Con Messages, puoi ottenere lo stesso risultato facendo in modo che l’ultimo messaggio di input abbia il ruolo assistant
:
messages = [
{"role": "human", "content": "Ciao"},
{"role": "assistant", "content": "Ciao, mi chiamo"},
]
In questo caso, il content
della risposta continuerà dal content
dell’ultimo messaggio di input:
{
"role": "assistant",
"content": [{"type": "text", "text": " Claude. Come posso assisterti oggi?" }],
...
}
Prompt di sistema
Con Text Completions, il prompt di sistema viene specificato aggiungendo testo prima del primo turno \n\nHuman:
:
prompt = "Oggi è il 1 gennaio 2024.\n\nHuman: Ciao, Claude\n\nAssistant:"
Con Messages, specifichi il prompt di sistema con il parametro system
:
anthropic.Anthropic().messages.create(
model="claude-3-opus-20240229",
max_tokens=1024,
system="Oggi è il 1 gennaio 2024.", # <-- prompt di sistema
messages=[
{"role": "user", "content": "Ciao, Claude"}
]
)
Nomi dei modelli
L’API Messages richiede di specificare la versione completa del modello (ad es. claude-3-opus-20240229
).
In precedenza supportavamo la specifica solo del numero di versione principale (ad es. claude-2
), che comportava aggiornamenti automatici alle versioni minori. Tuttavia, non raccomandiamo più questo modello di integrazione e Messages non lo supporta.
Motivo di arresto
Text Completions ha sempre un stop_reason
di uno dei seguenti:
"stop_sequence"
: Il modello ha terminato naturalmente il suo turno o è stata generata una delle tue sequenze di arresto personalizzate."max_tokens"
: Il modello ha generato il tuomax_tokens
specificato di contenuto o ha raggiunto il suo massimo assoluto.
Messages ha un stop_reason
di uno dei seguenti valori:
"end_turn"
: Il turno di conversazione è terminato naturalmente."stop_sequence"
: È stata generata una delle tue sequenze di arresto personalizzate specificate."max_tokens"
: (invariato)
Specifica di max tokens
- Text Completions: parametro
max_tokens_to_sample
. Nessuna convalida, ma valori limitati per modello. - Messages: parametro
max_tokens
. Se si passa un valore superiore a quello supportato dal modello, restituisce un errore di convalida.
Formato di streaming
Quando si usa "stream": true
con Text Completions, la risposta includeva uno qualsiasi degli eventi server-sent completion
, ping
e error
. Vedi Streaming di Text Completions per i dettagli.
Messages può contenere più blocchi di contenuto di vari tipi, quindi il suo formato di streaming è un po’ più complesso. Vedi Streaming di Messages per i dettagli.