Verwenden Sie Sampling mit Ihrem AgentCore Gateway
Sampling ist eine MCP-Funktion, die es einem MCP-Server ermöglicht, während eines Tool-Aufrufs vom Client eine LLM-Fertigstellung anzufordern. Dadurch können Server KI-Funktionen nutzen, ohne direkten Zugriff auf ein Sprachmodell zu benötigen — der Client verarbeitet den Modellaufruf und gibt das Ergebnis zurück. AgentCore Gateway leitet Sampling-Anfragen von MCP-Serverzielen an Ihre Clients weiter und ersetzt die Anfrage durch eine vom Gateway id generierte Kennung.
Voraussetzungen
So verwenden Sie Sampling mit Ihrem Gateway:
-
Sitzungen aktiviert — Für das Sampling ist Sitzungsunterstützung erforderlich. Weitere Informationen finden Sie unter Verwenden von MCP-Sitzungen mit Ihrem Gateway.
-
Antwort-Streaming aktiviert — Sampling-Anfragen werden während einer offenen Verbindung als SSE-Chunks gesendet.
trueInstreamingConfiguration.enableResponseStreamingIhren Gateways auf eingestellt.protocolConfiguration.mcp -
MCP-Serverzieltyp — Sampling-Anfragen stammen von MCP-Serverzielen.
-
Der Client gibt die Sampling-Fähigkeit an — Der Client muss während der Anfrage angeben, dass er Sampling unterstützt.
initializeDas Gateway leitet Sampling-Anfragen nur an Clients weiter, die diese Fähigkeit deklariert haben.
Wie funktioniert Sampling
Wenn ein MCP-Serverziel während der Ausführung des Tools einen LLM-Abschluss benötigt, sendet es eine sampling/createMessage Anfrage. Das Gateway leitet diese Anfrage als SSE-Ereignis an den Client weiter und ersetzt so die Anfrage. id Der Client ruft sein Sprachmodell auf und sendet das Ergebnis zurück an das Gateway, das es an das Ziel weiterleitet.
Die Sampling-Anfrage beinhaltet:
-
messages— Die Konversationsnachrichten, die an das Modell gesendet werden sollen. -
modelPreferences— Optionale Hinweise zu den gewünschten Modellfunktionen (Intelligenz, Geschwindigkeit, Kosten). -
systemPrompt— Optionale Systemaufforderung für das Modell. -
maxTokens— Maximale Anzahl der zu generierenden Token.
Der Kunde antwortet mit:
-
model— Das Modell, das verwendet wurde. -
role— Immerassistant. -
content— Der generierte Inhalt (Text oder Bild).
Anmerkung
Der Kunde hat die volle Kontrolle darüber, welches Modell verwendet werden soll und wie mit der Anfrage umgegangen werden soll. Bei den Servern modelPreferences handelt es sich um Hinweise, nicht um Anforderungen. Der Client kann die Anfrage auch auf der Grundlage seiner eigenen Richtlinien ändern oder ablehnen.
Ablauf der Probenahme
-
Der Client sendet eine
tools/callAnfrage mit demMcp-Session-IdHeader. -
Das Gateway leitet den Tool-Aufruf an das MCP-Serverziel weiter.
-
Das Ziel öffnet einen SSE-Stream und sendet eine
sampling/createMessageAnfrage. -
Gateway leitet die Sampling-Anfrage als SSE-Ereignis an den Client weiter und ersetzt so die Anfrage
id. -
Der Client ruft sein Sprachmodell mit den bereitgestellten Nachrichten auf.
-
Der Client sendet eine neue Anfrage mit dem Sampling-Ergebnis unter Verwendung derselben
Mcp-Session-Idundidder Anfrage des Gateways. -
Das Gateway leitet das Ergebnis an das MCP-Serverziel weiter.
-
Das Ziel setzt die Verarbeitung fort und gibt das endgültige Werkzeugergebnis zurück.
-
Gateway leitet das Endergebnis an den Client weiter und schließt den Stream.
Anleitung für Entwickler von MCP-Servern
Wichtig
MCP-Serverziele, die Sampling-Anfragen senden, sollten Sampling-Aufrufe in Try-Catch-Blöcke packen und den Fall behandeln, dass der Client Sampling nicht unterstützt. Wenn der Client des Gateways keine Sampling-Fähigkeit deklariert hat, deklariert das Gateway diese auch nicht gegenüber dem Ziel. Wenn das Ziel trotzdem eine Sampling-Anfrage sendet, gibt das Gateway einen Fehler -32601 (Methode nicht gefunden) an das Ziel zurück.
Server sollten einen Fallback-Pfad implementieren (z. B. ein integriertes Modell verwenden oder den AI-assisted Schritt überspringen), wenn Sampling nicht verfügbar ist.
Fehlerbehandlung
| Szenario | Fehler | Description |
|---|---|---|
|
Der Client sendet eine Sampling-Antwort, wenn keine Sampling-Anfrage aussteht |
JSON-RPC |
Für diese Sitzung wurde keine passende Sampling-Anfrage gefunden. |
|
Der Client sendet eine Stichprobenantwort mit einer |
JSON-RPC |
Die |
|
Der MCP-Server sendet eine Sampling-Anfrage, aber das Gateway hat keine Unterstützung deklariert |
JSON-RPC |
Zum MCP-Serverziel zurückgekehrt. Siehe Problembehandlung. |
Fehlerbehebung
Fehler: „Fehler beim Aufrufen des Tools 'sample_tool': Methode nicht gefunden:" sampling/createMessage
Dieser Fehler tritt auf, wenn ein MCP-Serverziel eine Sampling-Anfrage sendet, der Client des Gateways jedoch währenddessen keine Sampling-Funktion deklariert hat. initialize Das Gateway gibt einen Fehler -32601 (Methode nicht gefunden) an das Ziel zurück, und das Ziel gibt dies möglicherweise als Fehler bei der Ausführung des Tools an den Client zurück.
Um dies zu lösen:
-
Wenn Sie der MCP-Serverentwickler sind: Fügen Sie eine Fehlerbehandlung zu Ihren Sampling-Aufrufen hinzu. Implementieren Sie einen Fallback-Pfad, wenn Sampling nicht unterstützt wird:
Wichtig
Sie müssen
related_request_id=ctx.request_context.request_idin Ihremcreate_messageAnruf Folgendes angeben. Dies ist erforderlich, damit das Gateway die Sampling-Anfrage korrekt dem ursprünglichen Tool-Aufruf zuordnen kann. Ohne sie funktioniert die Probennahme nicht.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) -
Wenn Sie der Gateway-Client-Entwickler sind: Stellen Sie sicher, dass Ihr Kunde die Sampling-Funktion für folgende Fälle deklariert:
initialize{ "capabilities": { "sampling": {} } }
Codebeispiele
Anmerkung
Der LangGraph MCP Client (langchain-mcp-adapters) und der Strands MCP Client unterstützen derzeit kein Sampling. Verwenden Sie den unten gezeigten MCP Client-Ansatz, um Sampling-Anfragen von Ihrem Gateway aus zu bearbeiten.