Durante la migrazione dalle Text Completions ai Messages, considera i seguenti cambiamenti.

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:

Python
prompt = "\n\nHuman: Hello there\n\nAssistant: Hi, I'm Claude. How can I help?\n\nHuman: Can you explain Glycolysis to me?\n\nAssistant:"

Con Messages, si specifica invece 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 di \n\nHuman: e \n\nAssistant:, ma l’API Messages si aspetta i ruoli user e assistant. Potresti vedere documentazione che fa riferimento sia a turni “human” che “user”. Questi si riferiscono allo stesso ruolo e saranno “user” d’ora in avanti.

Con Text Completions, il testo generato dal modello viene restituito nei valori completion della risposta:

Python
>>> response = anthropic.completions.create(...)
>>> response.completion
" Hi, I'm Claude"

Con Messages, la risposta è il valore content, che è una lista di blocchi di contenuto:

Python
>>> response = anthropic.messages.create(...)
>>> response.content
[{"type": "text", "text": "Hi, I'm Claude"}]

Mettere le parole in bocca a Claude

Con Text Completions, puoi pre-compilare parte della risposta di Claude:

Python
prompt = "\n\nHuman: Hello\n\nAssistant: Hello, my name is"

Con Messages, puoi ottenere lo stesso risultato facendo in modo che l’ultimo messaggio di input abbia il ruolo assistant:

Python
messages = [
  {"role": "human", "content": "Hello"},
  {"role": "assistant", "content": "Hello, my name is"},
]

In questo caso, il content della risposta continuerà dall’ultimo messaggio di input content:

JSON
{
  "role": "assistant",
  "content": [{"type": "text", "text": " Claude. How can I assist you today?" }],
  ...
}

Prompt di sistema

Con Text Completions, il prompt di sistema viene specificato aggiungendo testo prima del primo turno \n\nHuman::

Python
prompt = "Today is January 1, 2024.\n\nHuman: Hello, Claude\n\nAssistant:"

Con Messages, si specifica il prompt di sistema con il parametro system:

Python
anthropic.Anthropic().messages.create(
    model="claude-3-opus-20240229",
    max_tokens=1024,
    system="Today is January 1, 2024.", # <-- prompt di sistema
    messages=[
        {"role": "user", "content": "Hello, Claude"}
    ]
)

Nomi dei modelli

L’API Messages richiede che si specifichi la versione completa del modello (es. claude-3-opus-20240229).

In precedenza supportavamo la specifica solo del numero di versione principale (es. claude-2), che risultava in aggiornamenti automatici alle versioni minori. Tuttavia, non raccomandiamo più questo pattern di integrazione, e Messages non lo supporta.

Motivo di arresto

Text Completions ha sempre un stop_reason che può essere:

  • "stop_sequence": Il modello ha terminato naturalmente il suo turno, o è stata generata una delle tue sequenze di stop personalizzate.
  • "max_tokens": Il modello ha generato il tuo max_tokens specificato di contenuto, o ha raggiunto il suo massimo assoluto.

Messages ha un stop_reason con uno dei seguenti valori:

  • "end_turn": Il turno conversazionale è terminato naturalmente.
  • "stop_sequence": È stata generata una delle sequenze di stop personalizzate specificate.
  • "max_tokens": (invariato)

Specificare i token massimi

  • Text Completions: parametro max_tokens_to_sample. Nessuna validazione, ma valori limitati per modello.
  • Messages: parametro max_tokens. Se si passa un valore superiore a quello supportato dal modello, restituisce un errore di validazione.

Formato di streaming

Quando si usa "stream": true con Text Completions, la risposta includeva eventi server-sent di tipo completion, ping, e error. Vedi Streaming 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 Messages per i dettagli.