As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
nota
A conversa em vários turnos do Amazon Bedrock Flows está em versão prévia do Amazon Bedrock e está sujeita a alterações.
A conversa em vários turnos do Amazon Bedrock Flows permite back-and-forth conversas dinâmicas entre usuários e fluxos, semelhantes a um diálogo natural. Quando um nó do agente exige esclarecimento ou contexto adicional, ele pode pausar de forma inteligente a execução do fluxo e solicitar ao usuário informações específicas. Isso cria uma experiência mais interativa e sensível ao contexto, pois o nó pode adaptar seu comportamento com base nas respostas do usuário. Por exemplo, se uma consulta inicial do usuário for ambígua ou incompleta, o nó poderá fazer perguntas complementares para coletar os detalhes necessários. Depois que o usuário fornece as informações solicitadas, o fluxo retoma perfeitamente a execução com a entrada enriquecida, garantindo resultados mais precisos e relevantes. Esse recurso é particularmente valioso para cenários complexos em que uma única interação pode não ser suficiente para entender e atender totalmente às necessidades do usuário.
Tópicos
Como processar uma conversa de vários turnos em um fluxo
Para usar uma conversa de vários turnos em um fluxo, você precisa de um nó de agente conectado a um agente do Amazon Bedrock. Quando você executa o fluxo, uma conversa em vários turnos acontece quando o agente precisa de mais informações do usuário antes de continuar. Esta seção descreve um fluxo que usa um agente com as seguintes instruções:
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.
Para obter informações sobre a criação de um agente, consulteAutomatize tarefas em seu aplicativo usando agentes de IA.
Etapa 1: iniciar o fluxo
Você inicia um fluxo chamando a InvokeFlowoperação. Você inclui o conteúdo inicial que deseja enviar para o fluxo. No exemplo a seguir, o document
campo contém uma solicitação para criar uma playlist. Cada conversa tem um identificador exclusivo (ID de execução) que identifica a conversa dentro do fluxo. Para obter o ID de execução, você não envia o executionID
campo em sua primeira chamada paraInvokeFlow
. A resposta de InvokeFlow
inclui o ID de execução. Em seu código, use o identificador para rastrear várias conversas e identificar uma conversa em outras chamadas para a InvokeFlow
operação.
Veja a seguir um exemplo de JSON para uma solicitação paraInvokeFlow
.
{
"flowIdentifier": "XXXXXXXXXX",
"flowAliasIdentifier": "YYYYYYYYYY",
"inputs": [
{
"content": {
"document": "Create a playlist."
},
"nodeName": "FlowInputNode",
"nodeOutputName": "document"
}
]
}
Etapa 2: recuperar solicitações do agente
Se o nó do agente no fluxo decidir que precisa de mais informações do usuário, o fluxo de resposta (responseStream
) InvokeFlow
incluirá um objeto de FlowMultiTurnInputRequestEvent
evento. O evento tem as informações solicitadas no campo content
(FlowMultiTurnInputContent
). No exemplo a seguir, a solicitação no document
campo é para obter informações sobre o número de músicas, o gênero da música e o tema da playlist. Em seu código, você precisa obter essas informações do usuário.
Veja a seguir um exemplo de objeto FlowMultiTurnInputRequestEvent
JSON.
{
"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."
}
}
Como o fluxo não pode continuar até que mais entradas sejam recebidas, o fluxo também emite um FlowCompletionEvent
evento. Um fluxo sempre emite o FlowMultiTurnInputRequestEvent
antes doFlowCompletionEvent
. Se o valor de completionReason
in the FlowCompletionEvent
event forINPUT_REQUIRED
, o fluxo precisará de mais informações antes de continuar.
Veja a seguir um exemplo de objeto FlowCompletionEvent
JSON.
{
"completionReason": "INPUT_REQUIRED"
}
Etapa 3: enviar a resposta do usuário ao fluxo
Envie a resposta do usuário de volta ao fluxo chamando a InvokeFlow
operação novamente. Certifique-se de incluir o executionId
para a conversa.
Veja a seguir um exemplo de JSON para a InvokeFlow
solicitação. O document
campo contém a resposta do usuário.
{
"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"
}
]
}
Se o fluxo precisar de mais informações, ele criará outros FlowMultiTurnInputRequestEvent
eventos.
Etapa 4: encerrar o fluxo
Quando não são necessárias mais informações, o fluxo emite um FlowOutputEvent
evento que contém a resposta final.
Veja a seguir um exemplo de objeto FlowOutputEvent
JSON.
{
"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!"
}
}
O fluxo também emite um FlowCompletionEvent
evento. O valor de completionReason
é SUCCESS
.
Veja a seguir um exemplo de objeto FlowCompletionEvent
JSON.
{
"completionReason": "SUCCESS"
}
O diagrama de sequência a seguir mostra as etapas em um fluxo de várias voltas.

Criando e executando um exemplo de fluxo
Neste exemplo, você cria um fluxo que usa um agente para criar playlists para uma estação de rádio. O agente faz perguntas esclarecedoras para determinar o número de músicas, o gênero musical e o tema da playlist.
Para criar o fluxo
-
Crie um agente no console do Amazon Bedrock seguindo as instruções emCriar e configurar o agente manualmente.
Para a etapa 2.d, insira
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.
.-
Para a etapa 2.e, em Entrada do usuário, escolha Ativado. Isso permite que o agente solicite mais informações, conforme necessário.
-
Crie o fluxo seguindo as instruções emCrie um fluxo no Amazon Bedrock. Certifique-se de que o fluxo tenha um nó de entrada, um nó de agentes e um nó de saída.
Vincule o nó do agente ao agente que você criou na etapa 1. O fluxo deve se parecer com a imagem a seguir.
Execute o fluxo no console Amazon Bedrock. Para testar, você pode rastrear as etapas percorridas pelo fluxo. Para obter mais informações, consulte Teste um fluxo no Amazon Bedrock.
O exemplo de código Python a seguir mostra como usar o fluxo.
Para executar o código, especifique o seguinte:
region_name
— A AWS região na qual você está executando o fluxo.FLOW_ID
— O ID do fluxo.FLOW_ALIAS_ID
— O ID do alias do fluxo.
Para obter informações sobre como obter o IDs, consulteVeja informações sobre fluxos no Amazon Bedrock. O código solicita que uma solicitação inicial seja enviada ao fluxo e solicita mais informações conforme necessário pelo fluxo. O código não gerencia outras solicitações do agente, como solicitações para chamar AWS Lambda funções. Para obter mais informações, consulte Como o Amazon Bedrock Agents funciona. Durante a execução, o código gera FlowTraceEvent
objetos que você pode usar para rastrear o caminho da entrada até a resposta que o fluxo retorna. Para obter mais informações, consulte Acompanhe cada etapa do seu fluxo visualizando seu traçado no Amazon Bedrock.
"""
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)})