Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Anmerkung
Amazon Bedrock Flows Multi-Turn-Konversation befindet sich in der Vorschauversion für Amazon Bedrock und kann sich ändern.
Amazon Bedrock Flows Multi-Turn-Konversation ermöglicht dynamische back-and-forth Konversationen zwischen Benutzern und Flows, ähnlich einem natürlichen Dialog. Wenn ein Agent-Knoten Klarstellungen oder zusätzlichen Kontext benötigt, kann er die Ausführung des Flows intelligent unterbrechen und den Benutzer zur Eingabe bestimmter Informationen auffordern. Dies sorgt für ein interaktiveres und kontextsensitiveres Erlebnis, da der Knoten sein Verhalten an die Antworten der Benutzer anpassen kann. Wenn beispielsweise eine erste Benutzerabfrage mehrdeutig oder unvollständig ist, kann der Knoten Folgefragen stellen, um die erforderlichen Details zu sammeln. Sobald der Benutzer die angeforderten Informationen eingegeben hat, setzt der Flow die Ausführung mit der angereicherten Eingabe nahtlos fort, sodass genauere und relevantere Ergebnisse gewährleistet sind. Diese Funktion ist besonders nützlich für komplexe Szenarien, in denen eine einzige Interaktion möglicherweise nicht ausreicht, um die Bedürfnisse des Benutzers vollständig zu verstehen und zu erfüllen.
Themen
Wie verarbeitet man eine Konversation mit mehreren Turns in einem Flow
Um eine Multi-Turn-Konversation in einem Flow zu verwenden, benötigen Sie einen Agentenknoten, der mit einem Amazon Bedrock-Agenten verbunden ist. Wenn Sie den Flow ausführen, findet eine Multi-Turn-Konversation statt, wenn der Agent weitere Informationen vom Benutzer benötigt, bevor er fortfahren kann. In diesem Abschnitt wird ein Flow beschrieben, der einen Agenten verwendet, mit den folgenden Anweisungen:
You are a playlist creator for a radio station. When asked to create a playlist, ask for the number of songs, the genre of music, and a theme for the playlist.
Informationen zum Erstellen eines Agenten finden Sie unterAutomatisieren Sie Aufgaben in Ihrer Anwendung mithilfe von KI-Agenten.
Schritt 1: Starten Sie den Flow
Sie starten einen Flow, indem Sie den InvokeFlowVorgang aufrufen. Sie fügen den ursprünglichen Inhalt hinzu, den Sie an den Flow senden möchten. Im folgenden Beispiel enthält das document
Feld eine Anforderung zum Erstellen einer Playlist. Jede Konversation hat eine eindeutige Kennung (Ausführungs-ID), die die Konversation innerhalb des Flows identifiziert. Um die Ausführungs-ID zu erhalten, senden Sie das executionID
Feld bei Ihrem ersten Anruf nicht anInvokeFlow
. Die Antwort von InvokeFlow
enthält die Ausführungs-ID. Verwenden Sie in Ihrem Code die Kennung, um mehrere Konversationen nachzuverfolgen und eine Konversation bei weiteren Aufrufen des InvokeFlow
Vorgangs zu identifizieren.
Im Folgenden finden Sie ein JSON-Beispiel für eine Anfrage anInvokeFlow
.
{
"flowIdentifier": "XXXXXXXXXX",
"flowAliasIdentifier": "YYYYYYYYYY",
"inputs": [
{
"content": {
"document": "Create a playlist."
},
"nodeName": "FlowInputNode",
"nodeOutputName": "document"
}
]
}
Schritt 2: Agentenanfragen abrufen
Wenn der Agentknoten im Flow entscheidet, dass er weitere Informationen vom Benutzer benötigt, InvokeFlow
enthält der Antwortstream (responseStream
) von ein FlowMultiTurnInputRequestEvent
Ereignisobjekt. Das Ereignis enthält die angeforderten Informationen im Feld content
(FlowMultiTurnInputContent
). Im folgenden Beispiel bezieht sich die Anfrage in dem document
Feld auf Informationen über die Anzahl der Songs, das Musikgenre und das Thema für die Playlist. In Ihrem Code müssen Sie diese Informationen dann vom Benutzer abrufen.
Das Folgende ist ein Beispiel für ein FlowMultiTurnInputRequestEvent
JSON-Objekt.
{
"nodeName": "AgentsNode_1",
"nodeType": "AgentNode",
"content": {
"document": "Certainly! I'd be happy to create a playlist for you. To make sure it's tailored to your preferences, could you please provide me with the following information:
1. How many songs would you like in the playlist?
2. What genre of music do you prefer?
3. Is there a specific theme or mood you'd like for the playlist? Once you provide these details, I'll be able to create a customized playlist just for you."
}
}
Da der Flow erst fortgesetzt werden kann, wenn weitere Eingaben eingegangen sind, gibt der Flow auch ein FlowCompletionEvent
Ereignis aus. Ein Flow gibt immer das FlowMultiTurnInputRequestEvent
vor dem aus. FlowCompletionEvent
Wenn der Wert von completionReason
in dem FlowCompletionEvent
Ereignis gleich istINPUT_REQUIRED
, benötigt der Flow weitere Informationen, bevor er fortgesetzt werden kann.
Im Folgenden finden Sie ein Beispiel für ein FlowCompletionEvent
JSON-Objekt.
{
"completionReason": "INPUT_REQUIRED"
}
Schritt 3: Senden Sie die Benutzerantwort auf den Flow
Senden Sie die Benutzerantwort zurück an den Flow, indem Sie den InvokeFlow
Vorgang erneut aufrufen. Stellen Sie sicher, dass Sie das executionId
für die Konversation angeben.
Im Folgenden finden Sie ein JSON-Beispiel für die Anfrage anInvokeFlow
. Das document
Feld enthält die Antwort des Benutzers.
{
"flowIdentifier": "AUS7BMHXBE",
"flowAliasIdentifier": "4KUDB8VBEF",
"executionId": "b6450554-f8cc-4934-bf46-f66ed89b60a0",
"inputs": [
{
"content": {
"document": "1. 5 songs 2. Welsh rock music 3. Castles"
},
"nodeName": "AgentsNode_1",
"nodeInputName": "agentInputText"
}
]
}
Wenn der Flow mehr Informationen benötigt, erzeugt der Flow weitere FlowMultiTurnInputRequestEvent
Ereignisse.
Schritt 4: Beenden Sie den Flow
Wenn keine weiteren Informationen benötigt werden, gibt der Flow ein FlowOutputEvent
Ereignis aus, das die endgültige Antwort enthält.
Im Folgenden finden Sie ein Beispiel für ein FlowOutputEvent
JSON-Objekt.
{
"nodeName": "FlowOutputNode",
"content": {
"document": "Great news! I've created a 5-song Welsh rock playlist centered around the theme of castles.
Here's the playlist I've put together for you: Playlist Name: Welsh Rock Castle Anthems
Description: A 5-song Welsh rock playlist featuring songs about castles
Songs:
1. Castell y Bere - Super Furry Animals
2. The Castle - Manic Street Preachers
3. Caerdydd (Cardiff Castle) - Stereophonics
4. Castell Coch - Catatonia
5. Chepstow Castle - Feeder
This playlist combines Welsh rock bands with songs that reference castles or specific Welsh castles.
Enjoy your castle-themed Welsh rock music experience!"
}
}
Der Flow gibt auch ein FlowCompletionEvent
Ereignis aus. Der Wert von completionReason
ist SUCCESS
.
Im Folgenden finden Sie ein Beispiel für ein FlowCompletionEvent
JSON-Objekt.
{
"completionReason": "SUCCESS"
}
Das folgende Sequenzdiagramm zeigt die Schritte in einem Multiturn-Flow.

Einen Beispiel-Flow erstellen und ausführen
In diesem Beispiel erstellen Sie einen Flow, der mithilfe eines Agenten Playlisten für einen Radiosender erstellt. Der Agent stellt klärende Fragen, um die Anzahl der Songs, das Musikgenre und das Thema für die Playlist zu ermitteln.
Um den Flow zu erstellen
-
Erstellen Sie einen Agenten in der Amazon Bedrock-Konsole, indem Sie den Anweisungen unter Agenten manuell erstellen und konfigurieren folgen.
Geben Sie für Schritt 2.d ein.
You are a playlist creator for a radio station. When asked to create a playlist, ask for the number of songs, the genre of music, and a theme for the playlist.
-
Wählen Sie für Schritt 2.e unter Benutzereingabe die Option Aktiviert aus. Auf diese Weise kann der Agent bei Bedarf weitere Informationen anfordern.
-
Erstellen Sie den Flow, indem Sie den Anweisungen unter folgenErstellen Sie einen Flow in Amazon Bedrock. Stellen Sie sicher, dass der Flow über einen Eingabeknoten, einen Agentenknoten und einen Ausgabeknoten verfügt.
Verknüpfen Sie den Agentenknoten mit dem Agenten, den Sie in Schritt 1 erstellt haben. Der Flow sollte wie in der folgenden Abbildung aussehen.
Führen Sie den Flow in der Amazon Bedrock-Konsole aus. Zum Testen können Sie die Schritte verfolgen, die der Flow ausführt. Weitere Informationen finden Sie unter Testen Sie einen Flow in Amazon Bedrock.
Das folgende Python-Codebeispiel zeigt, wie der Flow verwendet wird.
Um den Code auszuführen, geben Sie Folgendes an:
region_name
— Die AWS Region, in der Sie den Flow ausführen.FLOW_ID
— Die ID des Flows.FLOW_ALIAS_ID
— Die Alias-ID des Flows.
Hinweise zum Abrufen von finden Sie unterInformationen zu Flows in Amazon Bedrock anzeigen. IDs Der Code fordert Sie auf, eine erste Anfrage an den Flow zu senden, und fordert je nach Bedarf weitere Eingaben an. Der Code verwaltet keine anderen Anfragen des Agenten, z. B. Anfragen zum Aufrufen von AWS Lambda Funktionen. Weitere Informationen finden Sie unter So funktioniert Amazon Bedrock Agents. Während der Ausführung generiert der Code FlowTraceEvent
Objekte, mit denen Sie den Pfad von der Eingabe bis zur Antwort verfolgen können, die der Flow zurückgibt. Weitere Informationen finden Sie unter Verfolgen Sie jeden Schritt in Ihrem Arbeitsablauf, indem Sie sich seinen Verlauf in Amazon Bedrock ansehen.
"""
Runs an Amazon Bedrock flow and handles muli-turn interaction for a single conversation.
"""
import logging
import boto3
import botocore
import botocore.exceptions
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
def invoke_flow(client, flow_id, flow_alias_id, input_data, execution_id):
"""
Invoke an Amazon Bedrock flow and handle the response stream.
Args:
client: Boto3 client for Amazon Bedrock agent runtime
flow_id: The ID of the flow to invoke
flow_alias_id: The alias ID of the flow
input_data: Input data for the flow
execution_id: Execution ID for continuing a flow. Use the value None on first run.
Returns:
Dict containing flow_complete status, input_required info, and execution_id
"""
response = None
request_params = None
if execution_id is None:
# Don't pass execution ID for first run.
request_params = {
"flowIdentifier": flow_id,
"flowAliasIdentifier": flow_alias_id,
"inputs": [input_data],
"enableTrace": True
}
else:
request_params = {
"flowIdentifier": flow_id,
"flowAliasIdentifier": flow_alias_id,
"executionId": execution_id,
"inputs": [input_data],
"enableTrace": True
}
response = client.invoke_flow(**request_params)
if "executionId" not in request_params:
execution_id = response['executionId']
input_required = None
flow_status = ""
# Process the streaming response
for event in response['responseStream']:
# Check if flow is complete.
if 'flowCompletionEvent' in event:
flow_status = event['flowCompletionEvent']['completionReason']
# Check if more input us needed from user.
elif 'flowMultiTurnInputRequestEvent' in event:
input_required = event
# Print the model output.
elif 'flowOutputEvent' in event:
print(event['flowOutputEvent']['content']['document'])
elif 'flowTraceEvent' in event:
logger.info("Flow trace: %s", event['flowTraceEvent'])
return {
"flow_status": flow_status,
"input_required": input_required,
"execution_id": execution_id
}
if __name__ == "__main__":
session = boto3.Session(profile_name='default', region_name='YOUR_FLOW_REGION')
bedrock_agent_client = session.client('bedrock-agent-runtime')
# Replace these with your actual flow ID and alias ID
FLOW_ID = 'YOUR_FLOW_ID'
FLOW_ALIAS_ID = 'YOUR_FLOW_ALIAS_ID'
flow_execution_id = None
finished = False
# Get the intial prompt from the user.
user_input = input("Enter input: ")
flow_input_data = {
"content": {
"document": user_input
},
"nodeName": "FlowInputNode",
"nodeOutputName": "document"
}
logger.info("Starting flow %s", FLOW_ID)
try:
while not finished:
# Invoke the flow until successfully finished.
result = invoke_flow(
bedrock_agent_client, FLOW_ID, FLOW_ALIAS_ID, flow_input_data, flow_execution_id)
status = result['flow_status']
flow_execution_id = result['execution_id']
more_input = result['input_required']
if status == "INPUT_REQUIRED":
# The flow needs more information from the user.
logger.info("The flow %s requires more input", FLOW_ID)
user_input = input(
more_input['flowMultiTurnInputRequestEvent']['content']['document'] + ": ")
flow_input_data = {
"content": {
"document": user_input
},
"nodeName": more_input['flowMultiTurnInputRequestEvent']['nodeName'],
"nodeInputName": "agentInputText"
}
elif status == "SUCCESS":
# The flow completed successfully.
finished = True
logger.info("The flow %s successfully completed.", FLOW_ID)
except botocore.exceptions.ClientError as e:
print(f"Client error: {str(e)}")
logger.error("Client error: %s", {str(e)})
except Exception as e:
print(f"An error occurred: {str(e)}")
logger.error("An error occurred: %s", {str(e)})
logger.error("Error type: %s", {type(e)})