Quando si migra da Text Completions a Messages, considera le seguenti modifiche.

Input e output

Il cambiamento più grande 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: 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:

messages = [
  {"role": "user", "content": "Ciao."},
  {"role": "assistant", "content": "Ciao, sono Claude. Come posso aiutarti?"},
  {"role": "user", "content": "Puoi spiegarmi la glicolisi?"},
]

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 si riferisce 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:

Python
>>> response = anthropic.completions.create(...)
>>> response.completion
" Ciao, sono Claude"

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

Python
>>> response = anthropic.beta.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:

Python
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:

Python
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:

JSON
{
  "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::

Python
prompt = "Oggi è il 1 gennaio 2024.\n\nHuman: Ciao, Claude\n\nAssistant:"

Con Messages, specifichi il prompt di sistema con il parametro system:

Python
anthropic.Anthropic().beta.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 risultava in 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 il suo turno naturalmente o è stata generata una delle tue sequenze di arresto 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 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)

Specificare il massimo di token

  • 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.