AgentCore ゲートウェイでサンプリングを使用する
サンプリングは、 MCP サーバーがツール呼び出し中にクライアントから LLM の完了をリクエストできるようにする MCP 機能です。これにより、サーバーは言語モデルに直接アクセスすることなく AI 機能を活用できます。クライアントはモデルの呼び出しを処理し、結果を返します。AgentCore Gateway は、MCP サーバーターゲットからのサンプリングリクエストをクライアントに転送し、リクエストをidゲートウェイ生成識別子に置き換えます。
前提条件
ゲートウェイでサンプリングを使用するには:
-
セッションが有効 — サンプリングにはセッションサポートが必要です。「ゲートウェイで MCP セッションを使用する」を参照してください。
-
レスポンスストリーミングが有効 — サンプリングリクエストは、オープン接続中に SSE チャンクとして送信されます。ゲートウェイの
trueでstreamingConfiguration.enableResponseStreamingを に設定しますprotocolConfiguration.mcp。 -
MCP サーバーターゲットタイプ — サンプリングリクエストは MCP サーバーターゲットから送信されます。
-
クライアントがサンプリング機能を宣言する — クライアントは、
initializeリクエスト中にサンプリングのサポートを宣言する必要があります。ゲートウェイは、この機能を宣言したクライアントにのみサンプリングリクエストを転送します。
サンプリングの仕組み
ツールの実行中に MCP サーバーターゲットが LLM を完了する必要がある場合は、 sampling/createMessage リクエストを送信します。ゲートウェイはこのリクエストを SSE イベントとしてクライアントに転送し、リクエスト を置き換えますid。クライアントは言語モデルを呼び出し、結果をゲートウェイに送り返し、その結果をターゲットに転送します。
サンプリングリクエストには以下が含まれます。
-
messages— モデルに送信する会話メッセージ。 -
modelPreferences— 必要なモデル機能 (インテリジェンス、速度、コスト) に関するオプションのヒント。 -
systemPrompt— モデルのオプションのシステムプロンプト。 -
maxTokens— 生成するトークンの最大数。
クライアントは次のように応答します。
-
model— 使用されたモデル。 -
role— 常にassistant。 -
content— 生成されたコンテンツ (テキストまたはイメージ)。
注記
クライアントは、使用するモデルとリクエストの処理方法を完全に制御できます。サーバーの modelPreferencesは、要件ではなくヒントです。クライアントは、独自のポリシーに基づいてリクエストを変更または拒否することもできます。
サンプリングフロー
-
クライアントは
Mcp-Session-Idヘッダーを使用してtools/callリクエストを送信します。 -
Gateway は、ツール呼び出しを MCP サーバーターゲットに転送します。
-
ターゲットは SSE ストリームを開き、
sampling/createMessageリクエストを送信します。 -
Gateway はサンプリングリクエストを SSE イベントとしてクライアントに転送し、リクエスト を置き換えます
id。 -
クライアントは、提供されたメッセージを使用して言語モデルを呼び出します。
-
クライアントは、ゲートウェイのリクエスト
idと同じMcp-Session-Idと を使用して、サンプリング結果を含む新しいリクエストを送信します。 -
Gateway は、結果を MCP サーバーターゲットに転送します。
-
ターゲットは処理を続行し、最終的なツール結果を返します。
-
Gateway は最終結果をクライアントに転送し、ストリームを閉じます。
MCP サーバーターゲット開発者向けガイダンス
重要
サンプリングリクエストを送信する MCP サーバーターゲットは、サンプリング呼び出しを try-catch ブロックにラップし、クライアントがサンプリングをサポートしていない場合を処理する必要があります。ゲートウェイのクライアントがサンプリング機能を宣言しなかった場合、ゲートウェイはそれをターゲットに宣言しません。ターゲットがサンプリングリクエストを送信すると、ゲートウェイはターゲットに -32601 (メソッドが見つかりません) エラーを返します。
サンプリングが利用できない場合、サーバーはフォールバックパスを実装する必要があります (組み込みモデルの使用や AI アシストステップのスキップなど)。
エラー処理
| シナリオ | エラー | 説明 |
|---|---|---|
|
保留中のサンプリングリクエストがない場合にクライアントがサンプリングレスポンスを送信する |
JSON-RPC |
このセッションに一致するサンプリングリクエストが見つかりませんでした。 |
|
クライアント |
JSON-RPC |
は、 |
|
MCP サーバーがサンプリングリクエストを送信したが、ゲートウェイがサポートを宣言しなかった |
JSON-RPC |
MCP サーバーターゲットに戻ります。トラブルシューティングを参照してください。 |
トラブルシューティング
エラー: "Error calling tool 'sample_tool': Method not found: sampling/createMessage"
このエラーは、MCP サーバーターゲットがサンプリングリクエストを送信しても、ゲートウェイのクライアントが 中にサンプリング機能を宣言しなかった場合に発生しますinitialize。ゲートウェイは -32601 (メソッドが見つからない) エラーをターゲットに返し、ターゲットはこれをツール実行エラーとしてクライアントに返す場合があります。
解決するには:
-
MCP サーバー開発者の場合: サンプリング呼び出しに関するエラー処理を追加します。サンプリングがサポートされていない場合は、フォールバックパスを実装します。
重要
create_message通話related_request_id=ctx.request_context.request_idには を含める必要があります。これは、ゲートウェイがサンプリングリクエストを元のツール呼び出しに正しく関連付けるために必要です。これがないと、サンプリングは機能しません。try: result = await ctx.session.create_message( messages=[{"role": "user", "content": {"type": "text", "text": "Summarize this document"}}], max_tokens=500, related_request_id=ctx.request_context.request_id, ) except Exception as e: # Fallback when client doesn't support sampling logger.warning(f"Sampling not supported: {e}") result = fallback_summarization(document) -
ゲートウェイクライアント開発者の場合: クライアントが 中にサンプリング機能を宣言していることを確認します
initialize。{ "capabilities": { "sampling": {} } }
コードサンプル
注記
LangGraph MCP クライアント (langchain-mcp-adapters) と Strands MCP クライアントは現在サンプリングをサポートしていません。ゲートウェイからのサンプリングリクエストを処理するには、以下に示す MCP クライアントアプローチを使用します。