翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AgentCore ゲートウェイでサンプリングを使用する
サンプリングは、 MCP サーバーがツール呼び出し中にクライアントから LLM の完了をリクエストできるようにする MCP 機能です。これにより、サーバーは言語モデルに直接アクセスすることなく AI 機能を活用できます。クライアントはモデルの呼び出しを処理し、結果を返します。AgentCore Gateway は、MCP サーバーターゲットからのサンプリングリクエストをクライアントに転送し、リクエストをidゲートウェイ生成識別子に置き換えます。
前提条件
ゲートウェイでサンプリングを使用するには:
-
有効なセッション (バージョン 2025-11-25 以前) — サンプリングにはセッションサポートが必要です。「ゲートウェイで MCP セッションを使用する」を参照してください。バージョン
2026-07-28以降では、これらのバージョンはステートレスであるため、sessionConfigurationをゲートウェイに追加する必要はありません。 -
レスポンスストリーミングが有効 (バージョン 2025-11-25 以前) — サンプリングリクエストは、オープン接続中に SSE チャンクとして送信されます。ゲートウェイの
trueでstreamingConfiguration.enableResponseStreamingを に設定しますprotocolConfiguration.mcp。バージョン2026-07-28以降では、レスポンスストリーミングを有効にする必要はありません。これらのバージョンは、レスポンスストリームでサーバーが開始したリクエストではなく、マルチラウンドトリップリクエスト (MRTR) パターンを通じてサンプリングを提供します。詳細については、Model Context Protocol ドキュメントの「マルチラウンドトリップリクエスト」を参照してください。 -
MCP サーバーターゲットタイプ — サンプリングリクエストは MCP サーバーターゲットから送信されます。
-
クライアントがサンプリング機能を宣言する — クライアントは、ゲートウェイがサンプリングリクエストを転送するためのサンプリングのサポートを宣言する必要があります。バージョン
2025-11-25以前では、クライアントはこのサポートをinitializeリクエストで宣言します。バージョン2026-07-28以降では、クライアントは_metaフィールド () のリクエストごとに宣言しますio.modelcontextprotocol/clientCapabilities。
サンプリングの仕組み
ツールの実行中に MCP サーバーターゲットが LLM を完了する必要がある場合は、 sampling/createMessage リクエストを送信します。ゲートウェイはこのリクエストを SSE イベントとしてクライアントに転送し、リクエスト を置き換えますid。クライアントは言語モデルを呼び出し、結果をゲートウェイに送り返し、その結果をターゲットに転送します。
注記
ここで説明するフローは、サーバーがオープン SSE ストリームでサーバー開始リクエストsampling/createMessageとして送信するバージョン 2025-11-25以前に適用されます。バージョン 2026-07-28以降では、サンプリングは代わりにマルチラウンドトリップリクエスト (MRTR) パターンを使用します。サーバーは、 を resultTypeに設定して中間結果を返しますinput_required。次に、クライアントは元のリクエストの再試行の完了を提供します。詳細については、Model Context Protocol ドキュメントの「マルチラウンドトリップリクエスト
サンプリングリクエストには以下が含まれます。
-
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 アシストステップのスキップなど)。
リクエスト状態の保護 (バージョン 2026-07-28 以降)
バージョン 2026-07-28以降では、サンプリングはマルチラウンドトリップリクエスト (MRTR) パターンを使用します。このパターンは、クライアントと MCP サーバーターゲットrequestStateの間で不透明になります。この値を保護することは共有責任です。ゲートウェイはそれを保存せずに承認して転送しますが、MCP サーバーターゲットはそれを検証し、あるユーザーが別のユーザーのリクエスト状態を再生できないようにする必要があります。MCP サーバーが従う必要がある完全な責任共有モデルと保護ガイダンスについては、「MCP サーバーターゲットの考慮事項」の「誘発とサンプリングのリクエスト状態を保護する」を参照してください。
エラー処理
| シナリオ | エラー | 説明 |
|---|---|---|
|
保留中のサンプリングリクエストがない場合にクライアントがサンプリングレスポンスを送信する |
JSON-RPC |
このセッションに一致するサンプリングリクエストが見つかりませんでした。 |
|
クライアント |
JSON-RPC |
は、 |
|
MCP サーバーがサンプリングリクエストを送信したが、ゲートウェイがサポートを宣言しなかった |
JSON-RPC |
MCP サーバーターゲットに戻ります。トラブルシューティングを参照してください。 |
トラブルシューティング
エラー: "Error calling tool 'sample_tool': Method not found: sampling/createMessage"
このエラーは、MCP サーバーターゲットがサンプリングリクエストを送信しても、ゲートウェイのクライアントがサンプリング機能を宣言しなかった場合に発生します。バージョン 2025-11-25以前では、クライアントは 中にこの機能を宣言しますinitialize。バージョン 2026-07-28以降では、クライアントは _metaフィールドの各リクエストに対して宣言します。ゲートウェイは -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) -
ゲートウェイクライアント開発者の場合: バージョン
2025-11-25以前では、クライアントが 中にサンプリング機能を宣言していることを確認しますinitialize。バージョン2026-07-28以降では、_metaフィールド () の各リクエストに対して宣言しますio.modelcontextprotocol/clientCapabilities。次の例は、initialize宣言を示しています。{ "capabilities": { "sampling": {} } }
コードサンプル
注記
LangGraph MCP クライアント (langchain-mcp-adapters) と Strands MCP クライアントは現在サンプリングをサポートしていません。ゲートウェイからのサンプリングリクエストを処理するには、以下に示す MCP クライアントアプローチを使用します。