AWS Bedrock を通じて Anthropic の Claude モデルを使用する際、カスタムインストラクションを設定することで、AI の応答をより細かく制御できます。このブログでは、AWS SDK for JavaScript を使用して Claude のカスタムインストラクションを実装する方法を解説します。
カスタムインストラクションとは
カスタムインストラクションとは、AI モデルの動作や応答スタイルを制御するための指示のことです。これにより、特定のペルソナでの応答や、特定の形式での出力を AI に要求できます。
システムメッセージの活用
Claude モデルでは、system
ロールを使用してカスタムインストラクションを設定します。システムメッセージは会話の冒頭に配置され、その後のやり取り全体に影響します。
Claude APIの呼び出し方法 (AWS SDK for JavaScript)
Amazon Bedrock経由でAnthropic Claudeを利用するには、まずAWS SDK for JavaScript (v3) を用いてBedrock Runtimeクライアントを作成します。
AWSの認証情報(アクセスキーID、シークレットキー、必要に応じてセッショントークン)とリージョンを設定してください。
Bedrockは一部リージョン(例: us-east-1
や us-west-2
)で提供されているため、クライアント生成時に対象リージョンを指定します。
また、Anthropic Claudeモデルを利用する前にAWSアカウントでBedrockへのアクセス権限を持ち、**Anthropic Claudeモデルへの利用同意(マーケットプレイスサブスクリプション)**を行っている必要があります。以下は基本的なセットアップ例です(AWS SDK v3の利用を想定):
import { BedrockRuntimeClient, ConverseCommand } from "@aws-sdk/client-bedrock-runtime";
// AWSリージョンと資格情報は環境変数やデフォルトプロファイルから取得されます
const client = new BedrockRuntimeClient({ region: "us-east-1" }); // 利用するリージョンに変更
上記のようにクライアントを初期化したら、モデルIDを指定してリクエストを送ります。Anthropic Claudeの場合、モデルIDは例えばClaude 3.5 Sonnetであれば"anthropic.claude-3-5-sonnet-20241022-vX:0"
(Xはバージョン番号)、Claude 3.7 Sonnetであれば"anthropic.claude-3-7-sonnet-20250219-v1:0"
といった形式です
docs.aws.amazon.com(モデルIDはAWSコンソールのBedrock一覧やドキュメントで確認できます)。
カスタムインストラクション(システムプロンプト)の実装方法
Anthropic Claudeモデルでは**システムプロンプト(System Prompt)**を指定することで、モデルに対する追加の文脈や指示を与えることができます。Amazon BedrockのClaude呼び出しでは、リクエストJSONのトップレベルフィールド"system"
にシステムプロンプト文字列を設定します
docs.aws.amazon.com。これにより、通常のユーザー入力(user
ロールのメッセージ)に先立ってモデルに対する役割や口調などの指示を与えることが可能です(OpenAIのChatGPTでいう「システムメッセージ」に相当します)。
BedrockのConverse APIを使うのがおすすめ
AWS SDK for JavaScriptでリクエストを送る際は、BedrockのConverse APIを使うのがおすすめです。AWSもInvokeModel APIよりConverse APIの利用を推奨しており、モデル間でパラメータ指定を統一的に扱えます
stackoverflow.com。Converse APIを使う場合、ConverseCommand
のパラメータとしてsystem
フィールドとmessages
配列を渡します。system
にはシステムプロンプト文字列(またはその内容ブロック)を、messages
にはユーザーからのメッセージ履歴を指定します
stackoverflow.com。最初のメッセージは必ずユーザー(role: "user"
)である必要があります
const modelId = "anthropic.claude-3-5-sonnet-20241022-v2:0"; // Claude 3.5 SonnetモデルIDの例
const systemPrompt = "あなたは有能で丁寧なAIアシスタントです。常に敬体で回答してください。";
const userMessage = "こんにちは、今日の天気を教えてください。";
// Converse API用のメッセージ配列とシステムプロンプトを構築
const params = {
modelId,
system: [{ text: systemPrompt }], // システムプロンプトを指定
messages: [
{
role: "user",
content: [{ text: userMessage }]
}
],
inferenceConfig: { maxTokens: 512, temperature: 0.5, topP: 0.9 }
};
const command = new ConverseCommand(params);
const response = await client.send(command);
const assistantReply = response.output.message.content[0].text;
console.log("Claudeの回答:", assistantReply);
上記ではsystem
フィールドにシステムプロンプトを設定し
stackoverflow.com、messages
の配列にはユーザーからのメッセージ(role: "user"
)を含めています。inferenceConfig
では最大トークン数や温度などの生成パラメータを指定できます。client.send(command)
でモデルを呼び出すと、Claudeからの応答がresponse.output.message.content
に返ってきます。このようにsystem
に与えた指示に基づき、Claudeはユーザー入力に応答します。
※注意: 古いClaude v2系モデルをBedrock経由で呼び出す場合はメッセージ形式ではなくテキスト完成APIを使ってプロンプトを構成しました。その場合システム的な指示を入れるには、プロンプト文字列内で例えば"System: ~\n\nHuman: ~"
のように手動で埋め込む必要がありました
stackoverflow.com。Claude 3以降はメッセージ形式+system
フィールドがサポートされているため、文字列を手動で連結するよりもsystem
フィールドを使う方法が公式に用意されています。
Claude 3.5および3.7のサポート状況と注意点
Claude 3.5(Claude 3.5 SonnetやClaude 3.5 Haiku 等)およびClaude 3.7(Claude 3.7 Sonnet)は、いずれもAmazon Bedrock上で提供されるAnthropicの最新モデルで、システムプロンプトに対応しています
docs.aws.amazon.com。Bedrock経由でこれらを利用する際は前述のとおりsystem
フィールドを使ったカスタムインストラクションの指定が可能です。システムメッセージによってモデルの振る舞い(口調や優先事項)を制御できるため、例えば「回答は常に箇条書きにする」「専門家の口調で答える」といった指示をあらかじめ与えることができます。
Claude 3.5および3.7はどちらもメッセージ形式のConverse APIで会話を扱うモデルであり、システムプロンプトの指定方法に大きな違いはありません。両モデルともコンテキストウィンドウが非常に大きく(長文入力への対応能力が高い)ため、システムプロンプト+ユーザーメッセージを含むプロンプト全体がモデルのコンテキストサイズ内に収まる限り、カスタム指示を盛り込むことができます。ただしプロンプト長の制限には注意が必要で、max_tokens
(出力トークン数上限)と入力の合計がモデルのコンテキスト上限を超えるとエラーになります
docs.aws.amazon.com。システムプロンプトも入力の一部としてトークン数にカウントされる点に留意してください。
なお、Claude 3.7 Sonnetでは新機能として**拡張思考モード(Extended Thinking)**が導入されていますが
docs.aws.amazon.com、これは推論プロセス中のステップバイステップ思考を出力するオプション機能です。必要に応じてリクエストに追加のパラメータ(例えば"anthropic_beta": ["extended-thinking"]
など)を指定して有効化できます。システムプロンプト自体の指定方法は通常モードと同じであり、特別な変更は不要です。
効果的なカスタムインストラクションの例
以下に、様々なユースケース向けのシステムメッセージの例を示します:
専門的な応答が必要な場合
const systemMessage = "あなたは金融の専門家です。財務分析や投資に関する質問に対して、専門的な視点から詳細かつ正確な情報を提供してください。専門用語を適切に使用し、必要に応じて定義も含めてください。";
簡潔な応答が必要な場合
const systemMessage = "あなたは常に簡潔で要点をまとめた回答を提供します。不必要な説明は避け、ユーザーの質問に直接関連する情報のみを提供してください。回答は3文以内に収めることを心がけてください。";
特定の形式での出力が必要な場合
const systemMessage = "あなたはデータアナリストです。データに関する質問に対しては、常に以下の形式で回答してください:1) 概要、2) データの分析、3) 主要な洞察、4) 推奨アクション。各セクションは簡潔にまとめてください。";
参考ドキュメント
- AWS Bedrock ユーザーガイド – Converse API
- AWS Bedrockの会話API(Converse API)の使用方法について詳細な説明があります。
- Anthropic Claude API – Messages
- システムメッセージの使用方法と効果的な設計に関する情報が記載されています。
- AWS JavaScript SDK for Bedrock
- AWS SDKを使用したBedrockクライアントの作成と管理に関するドキュメント。
まとめ
AWS Bedrock SDK を使用して Claude モデルにカスタムインストラクションを設定することで、より制御された、一貫性のある AI 応答を得ることができます。システムメッセージを適切に設計することで、特定のユースケースやアプリケーションに最適化された AI 体験を実現できるでしょう。
カスタムインストラクションは、チャットボット、コンテンツ生成、データ分析支援など、様々な AI アプリケーションのパフォーマンスを向上させる強力なツールです。ぜひ自分のユースケースに合わせて適切なカスタムインストラクションを設計し、Claude の能力を最大限に活用してください。