Amazon Bedrockの各基盤モデルには、独自のプロンプト形式とベストプラクティスがあります。このガイドでは、Claude、Titan、Llama、Mistralから最適な結果を得るためのモデル固有の技術を解説します。
モデル固有のプロンプトが重要な理由
各モデルは異なる方法で学習されており、特定の形式に最もよく反応します。適切な形式を使用することで、出力品質が大幅に向上します。
Anthropic Claude
Claudeは、XMLタグと明確な指示を使用した構造化プロンプトに優れています。
システムプロンプトの使用
response = client.converse(
modelId='anthropic.claude-3-sonnet-20240229-v1:0',
system=[{
"text": "あなたは熟練のPython開発者です。型ヒント付きのクリーンなコードを書いてください。"
}],
messages=[
{"role": "user", "content": [{"text": "JSONパーサー関数を書いてください。"}]}
]
)
XMLタグによる構造化
このフィードバックを分析してください:
<feedback>
商品の到着は遅れましたが、品質は素晴らしかったです。
</feedback>
この形式で回答してください:
<analysis>
<sentiment>ポジティブ/ネガティブ/混合</sentiment>
<summary>簡潔な要約</summary>
</analysis>
アシスタント応答の事前入力
messages = [
{"role": "user", "content": [{"text": "3つの利点を挙げてください:"}]},
{"role": "assistant", "content": [{"text": "1."}]} # 形式をガイド
]
Claudeパラメータ
| パラメータ | 範囲 | 推奨値 |
|---|---|---|
| temperature | 0-1 | 0.3-0.7 |
| top_p | 0-1 | 0.9 |
| max_tokens | 1-4096+ | タスク依存 |
Amazon Titan
Titanは、直接的な指示ベースのプロンプトを使用します。
基本形式
response = client.invoke_model(
modelId='amazon.titan-text-express-v1',
body=json.dumps({
"inputText": "機械学習を簡単に説明してください。",
"textGenerationConfig": {
"maxTokenCount": 1024,
"temperature": 0.7
}
})
)
構造化された指示
タスク:以下のテキストを3つの箇条書きで要約してください。
テキスト:[コンテンツ]
要約:
Titanパラメータ
| パラメータ | 範囲 | 備考 |
|---|---|---|
| temperature | 0-1 | 低いほど決定的 |
| topP | 0-1 | Nucleusサンプリング |
| maxTokenCount | 1-8192 | 出力制限 |
Meta Llama
Llama 3は、命令フォーマットに特殊トークンを使用します。
Llama 3形式
prompt = """<|begin_of_text|><|start_header_id|>system<|end_header_id|>
あなたは親切なコーディングアシスタントです。<|eot_id|><|start_header_id|>user<|end_header_id|>
Pythonでhello worldプログラムを書いてください。<|eot_id|><|start_header_id|>assistant<|end_header_id|>
"""
response = client.invoke_model(
modelId='meta.llama3-1-70b-instruct-v1:0',
body=json.dumps({
"prompt": prompt,
"max_gen_len": 1024,
"temperature": 0.7
})
)
Llama特殊トークン
| トークン | 目的 |
|---|---|
<|begin_of_text|> |
プロンプト開始 |
<|start_header_id|> |
ロールヘッダー開始 |
<|end_header_id|> |
ロールヘッダー終了 |
<|eot_id|> |
ターン終了 |
Llamaパラメータ
| パラメータ | 範囲 | 備考 |
|---|---|---|
| temperature | 0-1 | 創造性制御 |
| top_p | 0-1 | Nucleusサンプリング |
| max_gen_len | 1-2048 | 出力長 |
Mistral AI
Mistralは、構造化プロンプトに命令タグを使用します。
Mistral形式
prompt = """<s>[INST] あなたは親切なアシスタントです。 [/INST]</s>
[INST] クラウドコンピューティングを説明してください。 [/INST]"""
response = client.invoke_model(
modelId='mistral.mistral-large-2402-v1:0',
body=json.dumps({
"prompt": prompt,
"max_tokens": 1024,
"temperature": 0.7
})
)
Mistralトークン
| トークン | 目的 |
|---|---|
<s> |
シーケンス開始 |
[INST] |
命令開始 |
[/INST] |
命令終了 |
</s> |
シーケンス終了 |
Converse API(統一)の使用
Converse APIはモデル固有の形式を抽象化します:
# 任意のテキストモデルで動作
response = client.converse(
modelId='anthropic.claude-3-sonnet-20240229-v1:0', # またはtitan、llama、mistral
system=[{"text": "あなたは親切なアシスタントです。"}],
messages=[
{"role": "user", "content": [{"text": "こんにちは!"}]}
],
inferenceConfig={"maxTokens": 1024, "temperature": 0.7}
)
モデル比較
| 機能 | Claude | Titan | Llama | Mistral |
|---|---|---|---|---|
| システムプロンプト | あり | 限定的 | あり | あり |
| XMLタグ | 優秀 | 基本 | 基本 | 基本 |
| マルチターン | ネイティブ | ネイティブ | トークンベース | トークンベース |
| 最適な用途 | 複雑なタスク | 汎用 | コード、推論 | 効率性 |
ベストプラクティスまとめ
| モデル | 重要なプラクティス |
|---|---|
| Claude | 構造化にXMLタグを使用 |
| Titan | 指示を明確でシンプルに |
| Llama | 正しい特殊トークンを使用 |
| Mistral | [INST]タグを適切に使用 |
適切なモデルの選択
flowchart TB
A["タスクの種類"] --> B{"複雑な推論?"}
B -->|Yes| C["Claude Opus/Sonnet"]
B -->|No| D{"コスト優先?"}
D -->|Yes| E["Claude Haiku / Llama 8B"]
D -->|No| F{"速度が必要?"}
F -->|Yes| G["Mistral / Titan"]
F -->|No| H["Claude Sonnet / Llama 70B"]
style C fill:#8b5cf6,color:#fff
style E fill:#22c55e,color:#fff
重要なポイント
- 各モデルに最適な形式がある - モデル固有のプロンプトを使用
- ClaudeはXMLタグが得意 - 構造化で出力品質が向上
- Llama/Mistralは特殊トークンが必要 - 最良の結果のために正しくフォーマット
- Converse APIで簡素化 - モデル非依存のプロンプトが許容される場合に使用
- モデル間でテスト - 同じプロンプトでも性能が異なる可能性