Bei der Migration von Text Completions zu Messages sind folgende Änderungen zu beachten.

Eingaben und Ausgaben

Die größte Änderung zwischen Text Completions und Messages ist die Art und Weise, wie Sie Modelleingaben festlegen und Ausgaben vom Modell erhalten.

Bei Text Completions sind Eingaben einfache Zeichenketten:

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

Bei Messages geben Sie stattdessen eine Liste von Eingabenachrichten an:

Jede Eingabenachricht hat eine role und einen content.

Rollenbezeichnungen

Die Text Completions API erwartet abwechselnde \n\nHuman: und \n\nAssistant: Züge, während die Messages API user und assistant Rollen erwartet. Sie werden möglicherweise Dokumentation sehen, die sich entweder auf “human” oder “user” Züge bezieht. Diese beziehen sich auf dieselbe Rolle und werden zukünftig als “user” bezeichnet.

Bei Text Completions wird der vom Modell generierte Text in den completion-Werten der Antwort zurückgegeben:

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

Bei Messages ist die Antwort der content-Wert, der eine Liste von Inhaltsblöcken ist:

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

Claude Worte in den Mund legen

Bei Text Completions können Sie einen Teil von Claudes Antwort vorausfüllen:

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

Bei Messages können Sie dasselbe Ergebnis erzielen, indem Sie die letzte Eingabenachricht die Rolle assistant haben lassen:

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

In diesem Fall wird der Antwort-content den Inhalt der letzten Eingabenachricht fortsetzen:

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

System Prompt

Bei Text Completions wird der System Prompt durch Hinzufügen von Text vor dem ersten \n\nHuman: Zug angegeben:

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

Bei Messages geben Sie den System Prompt mit dem system Parameter an:

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

Modellnamen

Die Messages API erfordert, dass Sie die vollständige Modellversion angeben (z.B. claude-3-opus-20240229).

Früher unterstützten wir die Angabe nur der Hauptversionsnummer (z.B. claude-2), was zu automatischen Upgrades auf Minor-Versionen führte. Wir empfehlen dieses Integrationsmuster jedoch nicht mehr, und Messages unterstützen es nicht.

Stop-Grund

Text Completions haben immer einen stop_reason von entweder:

  • "stop_sequence": Das Modell hat entweder seinen Zug natürlich beendet, oder eine Ihrer benutzerdefinierten Stop-Sequenzen wurde generiert.
  • "max_tokens": Entweder hat das Modell Ihre angegebenen max_tokens an Inhalt generiert, oder es hat sein absolutes Maximum erreicht.

Messages haben einen stop_reason mit einem der folgenden Werte:

  • "end_turn": Der Gesprächszug endete natürlich.
  • "stop_sequence": Eine Ihrer angegebenen benutzerdefinierten Stop-Sequenzen wurde generiert.
  • "max_tokens": (unverändert)

Festlegen von max tokens

  • Text Completions: max_tokens_to_sample Parameter. Keine Validierung, aber begrenzte Werte pro Modell.
  • Messages: max_tokens Parameter. Wenn ein Wert übergeben wird, der höher ist als vom Modell unterstützt, wird ein Validierungsfehler zurückgegeben.

Streaming-Format

Bei Verwendung von "stream": true bei Text Completions enthielt die Antwort Server-Sent-Events vom Typ completion, ping und error. Siehe Text Completions Streaming für Details.

Messages können mehrere Inhaltsblöcke verschiedener Typen enthalten, daher ist das Streaming-Format etwas komplexer. Siehe Messages Streaming für Details.