テキスト補完からメッセージに移行する際は、以下の変更点を考慮してください。

入力と出力

テキスト補完とメッセージの最大の違いは、モデルへの入力の指定方法と、モデルからの出力の受け取り方です。

テキスト補完では、入力は生の文字列です:

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

メッセージでは、生のプロンプトの代わりに入力メッセージのリストを指定します:

各入力メッセージにはrolecontentがあります。

ロール名

テキスト補完APIは\n\nHuman:\n\nAssistant:の交互のターンを想定していますが、メッセージAPIはuserassistantのロールを想定しています。ドキュメントで「human」または「user」のターンについて言及されているのを目にするかもしれません。これらは同じロールを指し、今後は「user」となります。

テキスト補完では、モデルが生成したテキストはレスポンスのcompletion値で返されます:

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

メッセージでは、レスポンスはcontent値で、これはコンテンツブロックのリストです:

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

Claudeの発言を事前に設定する

テキスト補完では、Claudeの応答の一部を事前に設定できます:

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

メッセージでは、最後の入力メッセージをassistantロールにすることで同じ結果を得られます:

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

この場合、レスポンスのcontentは最後の入力メッセージのcontentから続きます:

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

システムプロンプト

テキスト補完では、システムプロンプトは最初の\n\nHuman:ターンの前にテキストを追加することで指定します:

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

メッセージでは、systemパラメータでシステムプロンプトを指定します:

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

モデル名

メッセージAPIでは、完全なモデルバージョン(例:claude-3-opus-20240229)を指定する必要があります。

以前は、メジャーバージョン番号のみ(例:claude-2)を指定することをサポートしており、これによりマイナーバージョンへの自動アップグレードが行われていました。しかし、この統合パターンは推奨されなくなり、メッセージではサポートされていません。

停止理由

テキスト補完では、常に以下のいずれかのstop_reasonがあります:

  • "stop_sequence":モデルが自然にターンを終了したか、カスタム停止シーケンスの1つが生成された場合
  • "max_tokens":モデルが指定されたmax_tokensのコンテンツを生成したか、絶対最大値に達した場合

メッセージでは、stop_reasonは以下のいずれかの値になります:

  • "end_turn":会話のターンが自然に終了した場合
  • "stop_sequence":指定されたカスタム停止シーケンスの1つが生成された場合
  • "max_tokens":(変更なし)

最大トークンの指定

  • テキスト補完:max_tokens_to_sampleパラメータ。バリデーションはありませんが、モデルごとに上限値があります。
  • メッセージ:max_tokensパラメータ。モデルがサポートする値より高い値を渡すと、バリデーションエラーが返されます。

ストリーミング形式

テキスト補完で"stream": trueを使用する場合、レスポンスにはcompletionpingerrorのサーバー送信イベントが含まれます。詳細はテキスト補完ストリーミングを参照してください。

メッセージには様々なタイプの複数のコンテンツブロックが含まれる可能性があるため、そのストリーミング形式はやや複雑です。詳細はメッセージストリーミングを参照してください。