Flows, Prompt Management e Intelligent Routing
- ⬜🔧 Tool use: dando ferramentas ao modelo (function calling)(AWS Bedrock — GenAI em Produção)
Recomendamos completar os pré-requisitos antes de seguir, mas nada te impede de continuar.
Encadear chamadas de LLM na unha — uma função que chama o modelo, lê a resposta, decide o próximo passo com um if, chama de novo — funciona até virar um emaranhado de orquestração espalhada pelo código, com prompts hardcoded e zero visibilidade de onde o fluxo travou. O Bedrock oferece três peças para tirar isso do seu código e colocar em artefatos governados: Flows para desenhar o fluxo, Prompt Management para versionar os prompts, e Intelligent Prompt Routing para escolher o modelo certo por request. Este módulo mostra o que cada uma resolve e — o mais importante — como decidir entre Flows, Agents e Step Functions.
Bedrock Flows: o workflow visual e determinístico
Flows (GA em nov/2024, ex-"Prompt Flows") é um builder drag-and-drop que encadeia prompts, Knowledge Bases, Agents, funções Lambda, condicionais e iteradores num fluxo determinístico de GenAI. Você desenha o grafo; a ordem dos passos é sua, não do modelo. O exemplo abaixo é um fluxo de triagem de suporte: resume o chamado, decide por uma condição se é urgente e, se for, consulta a base de runbooks antes de responder.
- Prompts do Prompt Management (versionados) e nós de inferência direta a um modelo.
- Knowledge Bases, para embutir RAG dentro do fluxo.
- Agents do Bedrock, quando um passo específico precisa de autonomia.
- Funções Lambda, para lógica ou integração custom (chamar uma API, transformar dados).
- Nós de Condição (branches por regra) e Iteradores (loop sobre uma lista) para controle de fluxo.
- Guardrails aplicados a nós, filtrando entrada e saída dentro do próprio Flow.
Execução síncrona vs. long-running
A execução síncrona de um Flow é limitada a ~5 minutos — boa para pedidos interativos. Para pipelines longos (processar um documento grande, várias etapas de KB/Agent), a execução assíncrona (long-running, em preview em meados de 2026) sobe o teto para até 24h e devolve o resultado depois. Verifique disponibilidade e limites atuais no console/docs da sua região.
Quando escolher Flows
Use quando o processo de GenAI tem passos CONHECIDOS e ordem definida — prompt chaining, roteamento condicional simples, um ou dois branches — e você quer montar isso arrastando blocos, com Guardrails e visibilidade por step em tempo real, sem escrever a orquestração em código.
Prompt Management: o prompt como artefato versionado
Prompt Management (GA em nov/2024) deixa você criar, testar, versionar e compartilhar prompts como recursos da conta AWS. Ele existe para matar um antipadrão específico: o prompt hardcoded numa f-string espalhada pelo código, que ninguém consegue revisar, comparar ou trocar sem redeploy.
Prompt como recurso, não string no código
O Prompt Management transforma o prompt em recurso da conta: você cria, testa no playground, VERSIONA (v1, v2, …), compara versões lado a lado e promove uma versão sem redeploy da aplicação. O app referencia um Prompt ID/ARN + versão; trocar o prompt em produção vira mudar a versão apontada, com trilha de auditoria.
- Variáveis/placeholders no corpo do prompt (ex.: {{idioma}}, {{ticket}}), preenchidas em runtime.
- Versionamento imutável: cada versão é um snapshot; produção aponta para uma versão fixa.
- Comparação de versões e teste no playground antes de promover.
- Configuração de modelo e parâmetros (temperature, topP, system) presa ao próprio prompt.
- Reuso entre times na mesma conta e integração direta como nó dentro de um Flow.
import boto3
bedrock = boto3.client("bedrock-runtime", region_name="us-east-1")
# modelId aponta para um Prompt versionado do Prompt Management (ARN + versao),
# NAO para um foundation model. O Bedrock resolve o prompt armazenado,
# injeta as variaveis e executa no modelo/parametros configurados no proprio prompt.
resp = bedrock.converse(
modelId="arn:aws:bedrock:us-east-1:123456789012:prompt/PROMPT_ID:2",
promptVariables={
"idioma": {"text": "pt-BR"},
"ticket": {"text": "Cliente nao consegue logar apos reset de senha."},
},
)
print(resp["output"]["message"]["content"][0]["text"])
print("tokens:", resp["usage"])Repare no truque: em vez do texto do prompt, você passa o ARN do prompt (com a versão :2) no lugar do modelId, e só manda as promptVariables. O modelo, o system e os parâmetros vêm presos à versão do prompt — funciona igual com InvokeModel. Promover a v3 em produção é mudar a versão apontada, sem tocar no código da aplicação.
Intelligent Prompt Routing: custo × qualidade por request
Nem todo request precisa do modelo mais caro. Um "resuma esta frase" e um "analise este contrato de 40 páginas e aponte cláusulas de risco" têm custo de inferência muito diferente, mas na prática muita gente manda tudo para o modelo forte por segurança. O Intelligent Prompt Routing (GA em abr/2025) é um endpoint serverless único que, a cada request, prevê a qualidade que cada modelo entregaria e roteia para o melhor equilíbrio custo × qualidade — dentro da mesma família (Anthropic Claude, Meta Llama ou Amazon Nova).
O claim de economia (é claim da AWS, não garantia)
No anúncio de GA (abr/2025), a AWS reportou até ~63% de redução de custo mantendo a acurácia de baseline em cargas mistas. Trate como benchmark de marketing: o ganho real depende da distribuição do SEU tráfego — quanto maior a fração de requests 'fáceis' que caem no modelo barato, maior a economia. Meça no seu tráfego antes de prometer número para o negócio.
- Você escolhe uma família e 2 modelos dela (ex.: Claude Haiku + Sonnet, ou Nova Micro + Pro).
- Define o critério de tolerância de qualidade (o quanto de queda você aceita para economizar).
- O router prevê, por request, a qualidade esperada de cada modelo e manda para o mais barato que atinge o critério.
- Requests 'fáceis' caem no modelo barato; os 'difíceis' sobem para o forte — sem você escrever nenhuma regra manual.
import boto3
rt = boto3.client("bedrock-runtime", region_name="us-east-1")
# O router e um recurso serverless: um "modelId" unico que decide, por request,
# entre 2 modelos da MESMA familia (ex.: Claude Haiku vs Sonnet). Voce chama
# como qualquer modelo no Converse; o roteamento e transparente.
resp = rt.converse(
modelId="arn:aws:bedrock:us-east-1:123456789012:default-prompt-router/anthropic.claude:1",
messages=[{
"role": "user",
"content": [{"text": "Resuma este contrato em 3 bullets: ..."}],
}],
)
print(resp["output"]["message"]["content"][0]["text"])
# A resposta traz um trace indicando qual modelo o router escolheu para este request.
print("trace de roteamento:", resp.get("trace"))Você tem um pipeline de GenAI com passos conhecidos e ordem definida (prompt → condição → Knowledge Base → resposta) e quer montá-lo visualmente, sem escrever orquestração. Qual ferramenta encaixa melhor?
Agents/AgentCore vs Flows vs Step Functions
Três serviços da AWS orquestram trabalho, e é fácil escolher o errado. A pergunta que separa os três é uma só: quem decide o próximo passo? O modelo, em runtime? Você, no papel, antes de rodar? Ou é uma orquestração ampla que vai muito além de GenAI?
| Ferramenta | Controle | Melhor para | Duração | Quando escolher |
|---|---|---|---|---|
| Agents / AgentCore | Autônomo — o LLM decide caminho e tools em runtime | Tarefas abertas, tool use dinâmico, multi-turn | Runtime até 8h por sessão | A decisão do próximo passo precisa ser tomada pelo modelo em runtime |
| Bedrock Flows | Determinístico — você desenha o grafo (com alguns branches) | Pipelines GenAI de passos fixos, prompt chaining, roteamento condicional simples | Síncrono 5 min / assíncrono até 24h | O fluxo de GenAI é conhecido e você quer visual/low-code sem escrever orquestração |
| AWS Step Functions | Determinístico genérico — máquina de estados de propósito geral | Orquestração ampla de infra e negócio, 200+ integrações AWS | Até 1 ano por execução | A orquestração vai além de GenAI: coordenar filas, ECS, Lambda, aprovações |
Regra prática: se a decisão do próximo passo precisa ser tomada pelo modelo em runtime, é AgentCore. Se o fluxo de GenAI é fixo (com no máximo alguns branches), é Flows. Se a orquestração é ampla e vai além de GenAI, é Step Functions. E não é ou-um-ou-outro: é comum combinar — uma Step Functions de negócio que, num estado, invoca um Flow ou um Agent do Bedrock para a parte de GenAI.
📋 Um pipeline recebe um chamado de suporte, gera um resumo e — se o resumo indicar urgência — dispara uma busca na Knowledge Base de runbooks antes de responder. Os passos são fixos e há uma condição.
É um fluxo de GenAI com passos conhecidos e uma única ramificação condicional. O Flows encadeia prompt → condição → Knowledge Base de forma visual e determinística, com Guardrails e visibilidade por step, sem você escrever orquestração em código.
Alt: AgentCore (Agents) — Daria autonomia que você não precisa: o caminho é fixo, então deixar o LLM 'decidir' em runtime só adiciona não-determinismo, custo de tokens e latência.
Alt: AWS Step Functions — Resolve, mas é orquestração genérica: você reconstruiria a parte de GenAI (chamadas de modelo, Guardrails, KB) na mão, perdendo o builder visual do Flows.
- → o prompt vive fora do fluxo, versionado
- → a maior parte do volume
- → por exceção
- Rede e entrega
- IA e machine learning
- Gestão e governança
- Integração de apps
A pergunta que separa os três não é de capacidade, é de quem detém o controle de fluxo e quem mantém o artefato. Flows para quem não é engenheiro manter; Step Functions quando cada passo precisa ser auditável; agent quando o caminho depende do que se descobre.
- Flows: quando quem mantém não é engenharia. Fluxo visual, com prompts versionados fora dele. Ganha quando a lógica é estável e o dono do processo quer ajustar sem abrir um pull request.
- Step Functions: quando cada passo é auditável. Estado durável, retry por etapa e histórico. É o caminho para fluxo longo, batch e para o ramo que espera decisão humana.
- Agent: quando o caminho depende da descoberta. O modelo decide o próximo passo. Custa mais e é menos previsível — use onde enumerar os caminhos de antemão seria impossível.
- Roteamento por baixo dos três. Independente de quem orquestra, mandar o fácil para o modelo barato é o único padrão que reduz a conta em vez de somar chamadas.
- O prompt versionado fora do fluxo é o que destrava. Prompt Management mantém o texto fora do artefato de orquestração, com versão própria. É o que permite corrigir uma instrução sem republicar o fluxo, e o que permite apontar qual versão do prompt gerou a resposta daquele dia. Prompt embutido no fluxo transforma qualquer ajuste de redação em mudança de artefato.
No Prompt Management, como o seu app executa um prompt versionado em vez de mandar o texto do prompt na chamada?
Sobre o Intelligent Prompt Routing, qual afirmação está correta?
Próximo passo
Você já sabe orquestrar prompts (Flows), versioná-los (Prompt Management) e rotear por custo (Intelligent Prompt Routing). Falta a matéria-prima: como o Bedrock extrai dados de documentos, áudio e vídeo, e como você adapta um modelo ao seu domínio. É o próximo módulo — Data Automation e customização de modelos (slug: bedrock-data-automation-e-customizacao).
Perguntas frequentes
❓ Quando usar fluxo visual em vez de código?
❓ Por que versionar prompt num serviço em vez de no repositório?
❓ Roteamento inteligente de modelo compensa?
Terminou de ler?
Marcar como concluído registra o XP, mantém sua sequência e coloca 3 cartas deste módulo na fila de revisão espaçada.
Próximos passos sugeridos
Temas deste módulo
Discussão
Carregando comentários…