Text Completionsからの移行
Text CompletionsからMessagesへの移行
Text CompletionsからMessagesに移行する際は、以下の変更点を考慮してください。
入力と出力
Text CompletionsとMessagesの最大の違いは、モデルへの入力の指定方法とモデルからの出力の受け取り方です。
Text Completionsでは、入力は生の文字列です:
prompt = "\n\nHuman: こんにちは\n\nAssistant: こんにちは、私はClaudeです。どのようにお手伝いできますか?\n\nHuman: 解糖系について説明してもらえますか?\n\nAssistant:"
Messagesでは、生のプロンプトの代わりに入力メッセージのリストを指定します:
各入力メッセージにはrole
とcontent
があります。
ロール名
Text Completions APIでは\n\nHuman:
と\n\nAssistant:
の交互のターンを期待しますが、Messages APIではuser
とassistant
のロールを期待します。ドキュメントでは「human」または「user」のターンと呼ばれることがありますが、これらは同じロールを指しており、今後は「user」になります。
Text Completionsでは、モデルが生成したテキストはレスポンスのcompletion
値で返されます:
>>> response = anthropic.completions.create(...)
>>> response.completion
" こんにちは、私はClaudeです"
Messagesでは、レスポンスはcontent
値で、これはコンテンツブロックのリストです:
>>> response = anthropic.messages.create(...)
>>> response.content
[{"type": "text", "text": "こんにちは、私はClaudeです"}]
Claudeの口に言葉を入れる
Text Completionsでは、Claudeの応答の一部を事前に入力できます:
prompt = "\n\nHuman: こんにちは\n\nAssistant: こんにちは、私の名前は"
Messagesでは、最後の入力メッセージのrole
をassistant
にすることで同じ結果を得ることができます:
messages = [
{"role": "human", "content": "こんにちは"},
{"role": "assistant", "content": "こんにちは、私の名前は"},
]
その際、レスポンスのcontent
は最後の入力メッセージのcontent
から続きます:
{
"role": "assistant",
"content": [{"type": "text", "text": " Claudeです。今日はどのようにお手伝いできますか?" }],
...
}
システムプロンプト
Text Completionsでは、システムプロンプトは最初の\n\nHuman:
ターンの前にテキストを追加することで指定します:
prompt = "今日は2024年1月1日です。\n\nHuman: こんにちは、Claude\n\nAssistant:"
Messagesでは、system
パラメータでシステムプロンプトを指定します:
anthropic.Anthropic().messages.create(
model="claude-3-opus-20240229",
max_tokens=1024,
system="今日は2024年1月1日です。", # <-- システムプロンプト
messages=[
{"role": "user", "content": "こんにちは、Claude"}
]
)
モデル名
Messages APIでは、完全なモデルバージョン(例: claude-3-opus-20240229
)を指定する必要があります。
以前は、メジャーバージョン番号のみ(例: claude-2
)を指定することをサポートしており、マイナーバージョンへの自動アップグレードが行われていました。しかし、このような統合パターンはもはや推奨されておらず、Messagesではサポートされていません。
停止理由
Text Completionsのstop_reason
は常に以下のいずれかです:
"stop_sequence"
: モデルが自然にターンを終了したか、カスタムの停止シーケンスのいずれかが生成された。"max_tokens"
: 指定したmax_tokens
のコンテンツがモデルによって生成されたか、絶対最大値に達した。
Messagesのstop_reason
は以下のいずれかの値です:
"end_turn"
: 会話のターンが自然に終了した。"stop_sequence"
: 指定したカスタムの停止シーケンスのいずれかが生成された。"max_tokens"
: (変更なし)
max tokensの指定
- Text Completions:
max_tokens_to_sample
パラメータ。検証はないが、モデルごとに上限値あり。 - Messages:
max_tokens
パラメータ。モデルがサポートする値より大きい値を渡すと、検証エラーが返される。
ストリーミング形式
Text Completionsで"stream": true
を使用すると、レスポンスにはcompletion
、ping
、error
のサーバーセントイベントが含まれます。詳細はText Completionsストリーミングを参照してください。
Messagesには、さまざまなタイプの複数のコンテンツブロックを含めることができるため、そのストリーミング形式はやや複雑です。詳細はMessagesストリーミングを参照してください。