Selecione suas preferências de cookies

Usamos cookies essenciais e ferramentas semelhantes que são necessárias para fornecer nosso site e serviços. Usamos cookies de desempenho para coletar estatísticas anônimas, para que possamos entender como os clientes usam nosso site e fazer as devidas melhorias. Cookies essenciais não podem ser desativados, mas você pode clicar em “Personalizar” ou “Recusar” para recusar cookies de desempenho.

Se você concordar, a AWS e terceiros aprovados também usarão cookies para fornecer recursos úteis do site, lembrar suas preferências e exibir conteúdo relevante, incluindo publicidade relevante. Para aceitar ou recusar todos os cookies não essenciais, clique em “Aceitar” ou “Recusar”. Para fazer escolhas mais detalhadas, clique em “Personalizar”.

Converse com um fluxo do Amazon Bedrock

Modo de foco
Converse com um fluxo do Amazon Bedrock - Amazon Bedrock

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á.

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.

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.

Etapas de fluxo para uma conversa em vários turnos.

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
  1. Crie um agente no console do Amazon Bedrock seguindo as instruções emCriar e configurar o agente manualmente.

    • Para a etapa 2.d, insiraYou 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.

  2. 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.

  3. Vincule o nó do agente ao agente que você criou na etapa 1. O fluxo deve se parecer com a imagem a seguir.

    Conversa flua em vários turnos
  4. 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)})
PrivacidadeTermos do sitePreferências de cookies
© 2025, Amazon Web Services, Inc. ou suas afiliadas. Todos os direitos reservados.