Blog

  • Organizando a memória de agentes em escala: padrões de namespace no AgentCore Memory

    O problema central: memória sem organização é memória inútil

    Quem já trabalhou com agentes de IA sabe que persistir contexto entre sessões é um dos desafios mais práticos do desenvolvimento. Não basta armazenar informações — é preciso organizá-las de forma que possam ser recuperadas com precisão, no momento certo, pela entidade certa. Sem isso, o agente traz contexto irrelevante, mistura dados de usuários diferentes ou expõe informações que não deveriam ser acessíveis.

    Para endereçar exatamente esse problema, a AWS publicou um guia técnico detalhado sobre o design de namespaces no Amazon Bedrock AgentCore Memory. Se você ainda não conhece o serviço, vale começar pela introdução ao AgentCore Memory antes de mergulhar nos padrões avançados.

    O que são namespaces no AgentCore Memory?

    Namespaces são caminhos hierárquicos que organizam os registros de memória de longo prazo dentro de um recurso de memória do AgentCore. A analogia mais direta é com estruturas de diretórios em um sistema de arquivos: cada registro fica armazenado em um caminho específico, e esse caminho determina como ele será recuperado e quem poderá acessá-lo.

    Por exemplo, as preferências de um usuário podem ficar em /actor/customer-123/preferences/, enquanto o resumo de uma sessão específica fica em /actor/customer-123/session/session-789/summary/. Com essa estrutura, é possível recuperar memórias com exatamente o nível de granularidade necessário.

    Se você já trabalhou com chaves de partição no Amazon DynamoDB ou com estruturas de prefixo no Amazon Simple Storage Service (Amazon S3), o raciocínio é o mesmo: antes de definir a estrutura, você precisa pensar nos padrões de acesso. As perguntas fundamentais são:

    • Quem precisa acessar essas memórias — um único usuário ou todos os usuários de um agente?
    • Qual granularidade de recuperação é necessária — resumos por sessão ou preferências acumuladas ao longo do tempo?
    • Quais são os limites de isolamento — a memória de um usuário pode ser visível para outro?

    A principal diferença em relação a uma chave de partição é que namespaces suportam recuperação hierárquica além do match exato. É possível consultar em qualquer nível da hierarquia, não apenas na folha.

    Templates de namespace e resolução dinâmica

    Ao criar um recurso de memória, o namespace é definido por meio do campo namespaceTemplate dentro de cada configuração de estratégia. Três variáveis pré-definidas estão disponíveis para composição dinâmica:

    • {actorId} — resolve para o identificador do ator nos eventos processados
    • {sessionId} — resolve para o identificador da sessão
    • {memoryStrategyId} — resolve para o identificador da estratégia

    Veja um exemplo de criação de recurso de memória com templates de namespace:

    response = agentcore_client.create_memory(
        name="CustomerSupportMemory",
        description="Memory for customer support agents",
        eventExpiryDuration=30,
        memoryStrategies=[
            {
                "semanticMemoryStrategy": {
                    "name": "customer-facts",
                    "namespaceTemplate": "/actor/{actorId}/facts/"
                }
            },
            {
                "summaryMemoryStrategy": {
                    "name": "session-summaries",
                    "namespaceTemplate": "/actor/{actorId}/session/{sessionId}/summary/"
                }
            }
        ]
    )

    Quando eventos chegam com actorId=customer-456 e sessionId=session-789, os namespaces resolvidos ficam:

    • /actor/customer-456/facts/
    • /actor/customer-456/session/session-789/summary/

    Padrões de design por estratégia de memória

    Cada tipo de estratégia de memória tem necessidades de escopo diferentes. A AWS detalha os padrões recomendados para cada caso.

    1. Memória semântica e preferências: escopo por ator

    A memória semântica captura fatos e conhecimentos extraídos de conversas — por exemplo, “a empresa do cliente tem 500 funcionários”. A memória de preferências captura escolhas e estilos — por exemplo, “o usuário prefere Python para desenvolvimento”. Ambas acumulam valor ao longo do tempo e são relevantes em qualquer sessão futura.

    Para esses casos, o namespace deve ser escopado ao ator:

    • /actor/{actorId}/facts/
    • /actor/{actorId}/preferences/

    Com esse design, fatos e preferências de um usuário ficam consolidados em um único namespace, independentemente de qual sessão os originou. O motor de consolidação do AgentCore Memory mescla memórias relacionadas dentro do mesmo namespace.

    Imagem original — fonte: Aws

    Vale notar que quando o namespace inclui o sessionId no caminho dos fatos (como /actor/{actorId}/{sessionId}/facts/), o motor de consolidação não consegue enxergar registros de sessões diferentes — e os fatos nunca são mesclados. Por isso, para memórias que devem persistir entre sessões, o escopo por ator é o padrão correto.

    Em alguns casos, um administrador pode precisar recuperar informações de múltiplos atores. Para isso, a AWS sugere inverter a estrutura, colocando o identificador do ator como filho do tipo de memória:

    • /customer-issues/{actorId}/
    • /sales/{actorId}/

    Com essa estrutura invertida, uma consulta com namespacePath="/customer-issues/" retorna problemas reportados por todos os clientes, enquanto uma consulta com namespace="/customer-issues/customer-123/" retorna apenas os dados daquele ator específico.

    2. Memória de resumo: escopo por sessão

    A memória de resumo cria narrativas das conversas, capturando pontos principais e decisões. Em vez de alimentar todo o histórico de uma conversa na janela de contexto do modelo de linguagem (LLM), o agente pode recuperar um resumo compacto que preserva as informações essenciais com muito menos tokens.

    Como resumos estão intrinsecamente ligados a uma conversa específica, o namespace deve incluir o identificador da sessão: /actor/{actorId}/session/{sessionId}/summary/. Assim, cada sessão tem seu próprio resumo, mas todos ficam organizados sob o ator para recuperação cruzada quando necessário.

    3. Memória episódica: escopo por sessão com hierarquia de reflexão

    A memória episódica captura rastros completos de raciocínio — o objetivo, os passos executados, os resultados e as reflexões. Como cada episódio representa o que aconteceu em uma interação específica, ele deve ser escopado à sessão, de forma similar aos resumos.

    Reflexões são insights transversais, armazenados em um nível pai. Elas generalizam aprendizados entre sessões — por exemplo, “quando uma restrição de classe tarifária bloqueia uma modificação, busque voos alternativos imediatamente em vez de apenas explicar a política”. O namespace das reflexões deve ser um subcaminho do namespace dos episódios:

    • Episódios: /actor/{actorId}/session/{sessionId}/episodes/
    • Reflexões: /actor/{actorId}/

    Padrões de recuperação de memória

    O AgentCore Memory oferece três APIs principais para recuperação de memória de longo prazo.

    Busca semântica com RetrieveMemoryRecords

    Esse é o método primário durante interações do agente. Ele retorna as memórias semanticamente relevantes para uma consulta, com base em significado — não em correspondência exata de texto.

    # Retrieve memories relevant to the current user query
    memories = agentcore_client.retrieve_memory_records(
        memoryId="mem-12345abcdef",
        namespace="/actor/customer-123/facts/",
        searchCriteria={
            "searchQuery": "What cloud migration approach is the customer using?",
            "topK": 5
        }
    )

    A consulta de busca pode vir diretamente da pergunta do usuário ou ser gerada pelo próprio LLM do agente para cenários mais complexos. No segundo caso, há um custo adicional de latência.

    Listagem direta com ListMemoryRecords

    Usado quando é necessário enumerar memórias dentro de um namespace específico — por exemplo, exibir as preferências armazenadas de um usuário em uma interface, auditar o que existe ou executar operações em lote.

    # List all memories in a specific namespace
    records = agentcore_client.list_memory_records(
        memoryId="mem-12345abcdef",
        namespace="/actor/customer-123/preferences/"
    )

    Acesso e exclusão diretos com GetMemoryRecord e DeleteMemoryRecord

    Quando o ID específico de um registro é conhecido (por exemplo, a partir de uma listagem anterior), é possível acessá-lo ou removê-lo diretamente. Esses métodos são úteis para fluxos de gerenciamento de memória que permitem aos usuários visualizar, corrigir ou excluir registros específicos pela interface da aplicação.

    # Get a specific memory record
    record = agentcore_client.get_memory_record(
        memoryId="mem-12345abcdef",
        memoryRecordId="rec-abc123"
    )
    
    # Delete a specific memory record
    agentcore_client.delete_memory_record(
        memoryId="mem-12345abcdef",
        memoryRecordId="rec-abc123"
    )

    namespace vs. namespacePath: match exato versus recuperação hierárquica

    O AgentCore Memory oferece dois campos distintos para escopar a recuperação, e entender a diferença é crítico para o comportamento correto do sistema.

    O campo namespace realiza correspondência exata — retorna apenas os registros armazenados naquele caminho preciso. Já o campo namespacePath realiza correspondência hierárquica, retornando todos os registros cujo namespace esteja sob o caminho especificado.

    Imagem original — fonte: Aws

    A tabela abaixo, extraída do guia original, resume quando usar cada abordagem:

    • Recuperar preferências semanticamente relevantes: RetrieveMemoryRecords com namespace/actor/customer-123/preferences/
    • Recuperar um resumo de sessão específica: ListMemoryRecords com namespace/actor/customer-123/session/session-001/summary/
    • Listar todas as preferências de um usuário: ListMemoryRecords com namespace/actor/customer-123/preferences/
    • Buscar em todas as memórias de um usuário: RetrieveMemoryRecords com namespacePath/actor/customer-123/
    • Listar resumos de todas as sessões de um usuário: ListMemoryRecords com namespacePath/actor/customer-123/session/

    É importante pensar bem nos padrões de isolamento ao usar namespacePath, pois a travessia em árvore pode expor dados não intencionais se a hierarquia não estiver bem planejada.

    Controle de acesso via IAM

    Os namespaces se integram ao Gerenciamento de Identidade e Acesso (IAM) da AWS por meio de condition keys que restringem quais namespaces uma entidade pode incluir nas requisições à API de memória.

    Políticas de match exato

    Para restringir o acesso a um namespace específico, usa-se StringEquals com a condition key bedrock-agentcore:namespace:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "bedrock-agentcore:RetrieveMemoryRecords",
            "bedrock-agentcore:ListMemoryRecords"
          ],
          "Resource": "arn:aws:bedrock-agentcore:us-east-1:123456789012:memory/mem-12345abcdef",
          "Condition": {
            "StringEquals": {
              "bedrock-agentcore:namespace": "/actor/${aws:PrincipalTag/userId}/preferences/"
            }
          }
        }
      ]
    }

    Essa política garante que um usuário só consiga recuperar memórias do seu próprio namespace de preferências, usando a tag de principal userId para escopo dinâmico.

    Políticas de recuperação hierárquica

    Para acesso hierárquico, usa-se StringLike com a condition key bedrock-agentcore:namespacePath:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "bedrock-agentcore:RetrieveMemoryRecords",
            "bedrock-agentcore:ListMemoryRecords"
          ],
          "Resource": "arn:aws:bedrock-agentcore:us-east-1:123456789012:memory/mem-12345abcdef",
          "Condition": {
            "StringLike": {
              "bedrock-agentcore:namespacePath": "/actor/${aws:PrincipalTag/userId}/*"
            }
          }
        }
      ]
    }

    Com essa configuração, o usuário pode realizar recuperação hierárquica em seus próprios namespaces (fatos, preferências, resumos), enquanto o acesso aos dados de outros usuários é bloqueado.

    Conclusão: design de namespace é fundação, não detalhe

    O guia publicado pela AWS deixa claro que o design de namespaces é tão fundamental quanto o design de esquemas em um banco de dados. Pensar nos padrões de acesso e nos limites de isolamento antes de definir os templates de namespace é o que separa um sistema de memória eficaz de um que traz contexto errado ou expõe dados indevidamente.

    Os pontos-chave do guia são:

    • Pense nos padrões de acesso e isolamento antes de criar os templates de namespace
    • Escope memórias semânticas e de preferências ao ator (/actor/{actorId}/) para consolidação entre sessões
    • Escope resumos e episódios à sessão (/actor/{actorId}/session/{sessionId}/), pois são específicos de cada conversa
    • Use namespace para match exato quando souber o caminho preciso, e namespacePath para recuperação hierárquica quando precisar buscar em uma subárvore
    • Use barras no início e no fim dos caminhos para manter consistência e evitar colisões de prefixo
    • Use as condition keys do IAM (bedrock-agentcore:namespace e bedrock-agentcore:namespacePath) para controlar quais namespaces podem ser acessados

    Para aprofundar, a AWS disponibiliza a documentação de organização do AgentCore Memory, a documentação de organização de memória de longo prazo e o repositório de exemplos no GitHub.

    Fonte

    Organizing Agents’ memory at scale: Namespace design patterns in AgentCore Memory (https://aws.amazon.com/blogs/machine-learning/organizing-agents-memory-at-scale-namespace-design-patterns-in-agentcore-memory/)

  • Projetando Confiança e Segurança em Aplicações com Amazon Bedrock

    Por que IA responsável virou pauta estratégica

    A IA generativa está transformando rapidamente a forma como empresas operam — de atendimento ao cliente a criação de conteúdo, as possibilidades parecem crescer a cada semana. Mas junto com essa expansão vem uma responsabilidade que muitas equipes ainda estão aprendendo a lidar: como garantir que essas aplicações sejam seguras, confiáveis e eticamente construídas?

    A AWS publicou um material aprofundado sobre como projetar confiança e segurança em aplicações baseadas no Amazon Bedrock, e os números apresentados no documento deixam claro que isso não é apenas uma questão técnica — é um diferencial competitivo real. Uma pesquisa da Accenture em parceria com a AWS mostra que organizações com uma abordagem madura de IA responsável registram 82% de melhoria na confiança dos colaboradores em relação à adoção de IA. Além disso, empresas que oferecem produtos com IA responsável experimentam um aumento de 25% na fidelidade e satisfação dos clientes.

    Esses dados reforçam que investir em segurança e responsabilidade no desenvolvimento de IA não é custo — é construção de valor.

    As dimensões centrais da IA responsável segundo a AWS

    Para estruturar esse trabalho, a AWS identifica oito dimensões que formam a espinha dorsal de uma implementação responsável de IA. Entender cada uma delas ajuda as equipes a não deixar pontos cegos no desenvolvimento:

    • Segurança: foca em prevenir saídas prejudiciais do sistema e evitar uso indevido, direcionando os sistemas de IA para priorizar a proteção de usuários e da própria aplicação.
    • Controlabilidade: diz respeito aos mecanismos que monitoram e orientam o comportamento do sistema de IA, garantindo que ele opere dentro de parâmetros definidos.
    • Equidade (Fairness): considera os impactos da IA sobre diferentes grupos de usuários, evitando discriminação ou tratamento desigual.
    • Explicabilidade (Explainability): foca em compreender e avaliar as saídas do sistema, tornando os resultados interpretáveis.
    • Segurança e privacidade: garante que dados e modelos sejam obtidos, utilizados e protegidos de forma adequada.
    • Veracidade e robustez: busca resultados corretos mesmo diante de entradas inesperadas ou adversariais.
    • Governança: assegura que o desenvolvimento, a implantação e o gerenciamento dos sistemas de IA estejam alinhados com padrões éticos, exigências legais e valores sociais.
    • Transparência: foca em entender como os sistemas de IA tomam decisões, por que produzem determinados resultados e quais dados utilizam.

    A recomendação da AWS é revisar e aplicar todas essas dimensões em qualquer implementação de IA. Para se aprofundar, o blog da AWS disponibiliza um artigo dedicado: Considerações para endereçar as dimensões centrais da IA responsável em aplicações Amazon Bedrock.

    O ciclo de vida da IA responsável

    Além de entender as dimensões, é fundamental saber quando aplicar cada consideração de segurança. A AWS estrutura isso em três fases distintas do ciclo de vida da IA responsável:

    Fase 1: Design e Desenvolvimento

    Nesta fase, a orientação é avaliar minuciosamente os riscos potenciais de segurança antes de escrever qualquer linha de código. A equipe precisa ter clareza sobre o que a aplicação de IA deve fazer, o que ela não deve fazer e o que precisa ser ativamente impedido. As proteções (guardrails) devem ser incorporadas desde o início — não adicionadas depois como um remendo. Também é essencial que todos na equipe de desenvolvimento compreendam as capacidades e os limites da aplicação.

    Fase 2: Implantação

    É aqui que a teoria encontra a realidade. Na fase de implantação, medidas robustas de segurança devem ser implementadas em múltiplas camadas: desde treinamento abrangente dos usuários até processos proativos de monitoramento e revisão. Cada aplicação, produto e funcionalidade precisa ter protocolos claros de segurança e diretrizes para o usuário final. A AWS recomenda pensar além do lançamento — é necessário construir um framework de segurança holístico, que pode incluir etapas como testes de red team, para proteger a marca, os usuários e as partes interessadas.

    Fase 3: Operações

    Segurança não é algo que se configura uma vez e esquece. Na fase operacional, a vigilância contínua é indispensável. Mecanismos de feedback em tempo real ajudam a identificar problemas de segurança cedo, e avaliações periódicas de desempenho são fundamentais. A equipe também deve monitorar mudanças na forma como a aplicação é utilizada, já que os riscos evoluem conforme a tecnologia avança. Para mais detalhes, a AWS disponibiliza o Guia de Uso Responsável de IA.

    Detecção de abusos: camadas de proteção

    Os modelos de fundação disponíveis no Amazon Bedrock já são construídos com mecanismos de segurança para prevenir saídas prejudiciais. Mas em ambientes de produção, a AWS recomenda implementar sistemas adicionais de segurança nas entradas para criar capacidades de detecção precoce de conteúdos problemáticos, usuários suspeitos ou padrões de uso indevido.

    Vale destacar: o próprio Amazon Bedrock pode implementar mecanismos automatizados de detecção de abusos para identificar possíveis violações da Política de Uso Aceitável da AWS (AUP) e dos Termos de Serviço, incluindo a Política de IA Responsável ou a AUP de provedores de modelos terceiros. Mais detalhes estão disponíveis no documento de detecção de abusos do Amazon Bedrock.

    Ferramentas e técnicas para prevenção de abusos

    Para manter a confiança nos serviços de IA, a ação preventiva é o caminho mais eficiente — e a AWS oferece ferramentas específicas para isso. O ponto de partida é definir claramente o escopo do caso de uso de IA, o que envolve:

    • Entender quem são os usuários da aplicação
    • Antecipar cenários potenciais de uso indevido
    • Definir a tolerância a riscos do negócio

    Esse escopo orienta o desenvolvimento de um framework de segurança preciso, que endereça os riscos específicos da implementação sem comprometer o desempenho esperado.

    Monitoramento com Amazon CloudWatch

    O Amazon CloudWatch oferece visibilidade essencial sobre o comportamento e o desempenho dos sistemas de IA. Com o logging configurado de forma abrangente, é possível capturar informações importantes em diferentes segmentos de usuários e tipos de interação, como:

    • Volumes de requisições
    • Latências de resposta
    • Taxas de rejeição
    • Acionamentos de filtros de conteúdo

    Esses dados permitem identificar padrões de abuso ou comportamentos inesperados antes que afetem as operações. Dashboards do CloudWatch visualizam as métricas conforme as prioridades de monitoramento, e alertas automatizados notificam a equipe quando limites são ultrapassados. Um ponto de atenção importante: por padrão, o logging do Amazon Bedrock está desativado. É necessário ativá-lo para a aplicação — para configurar isso, a AWS orienta entrar em contato com o gerente de conta.

    Proteção personalizada com Amazon Bedrock Guardrails

    O Amazon Bedrock Guardrails oferece mecanismos de proteção configuráveis, adaptados a perfis de risco e políticas de conteúdo específicos. É possível personalizar o Bedrock Guardrails para atender aos requisitos da aplicação, incluindo:

    • Definir tópicos indesejáveis relevantes para o domínio da aplicação
    • Configurar limites apropriados de filtragem de conteúdo
    • Configurar parâmetros de detecção e redação de informações sensíveis alinhados às políticas de dados

    Também é possível configurar controles que priorizam a precisão e previnem alucinações, mantendo a flexibilidade criativa conforme as necessidades da aplicação. Uma configuração cuidadosa do Guardrails permite equilibrar desempenho e segurança de acordo com os requisitos e fatores de risco de cada caso de uso.

    O processo de resposta a abusos

    Mesmo com todos os mecanismos de segurança implementados, abusos ainda podem ocorrer à medida que novos riscos surgem. Caso a equipe receba um relatório de abuso da equipe de Confiança e Segurança da AWS (AWS Trust & Safety), a AWS orienta seguir estas etapas:

    • Confirmar o recebimento: acusar o recebimento do relatório de abuso em até 24 horas. Se a investigação ainda estiver em andamento, informar à AWS e indicar o prazo estimado para conclusão.
    • Investigar o problema: conduzir uma investigação completa, incluindo análise dos logs (se habilitados), revisão dos inputs do Amazon Bedrock e verificação de acessos não autorizados. Embora os relatórios de abuso da AWS incluam uma amostra de IDs de prompts, a recomendação é investigar o uso geral da aplicação para identificar padrões e possíveis problemas sistêmicos.
    • Tomar as medidas adequadas: se necessário, implementar correções, atualizar as proteções, tratar usuários em violação ou redesenhar funcionalidades. É importante avaliar se são necessárias correções sistêmicas ou de causa raiz, e não apenas ações pontuais sobre um usuário abusivo. Um incidente por um único usuário pode indicar vulnerabilidades nos mecanismos de segurança que permitem abusos contínuos.
    • Reportar à AWS Trust & Safety: após a investigação e implementação de correções, fornecer um relatório à equipe com os achados e as etapas de remediação. Ser transparente sobre o que aconteceu e como foi endereçado. Se a conclusão for de que não houve violação, explicar o raciocínio e incluir exemplos dos prompts e do caso de uso do negócio sempre que possível.

    Conclusão

    Construir aplicações de IA generativa com segurança e responsabilidade não é uma tarefa opcional — é parte fundamental do desenvolvimento de produtos que as pessoas e as organizações possam confiar. A AWS estruturou um conjunto robusto de dimensões, fases do ciclo de vida e ferramentas práticas para ajudar as equipes a fazer isso de forma sistemática.

    Para equipes brasileiras que trabalham com o Amazon Bedrock, o recado é claro: incorporar segurança desde o design, monitorar continuamente em produção e ter um processo definido para responder a incidentes são práticas que protegem tanto os usuários quanto o negócio.

    Para continuar se aprofundando no tema, a AWS disponibiliza o portal de IA Responsável e a documentação de melhores práticas de machine learning — recursos que oferecem frameworks e ferramentas adicionais para construir sistemas de IA seguros e eficazes.

    Fonte

    Designing trust and safety into Amazon Bedrock powered applications (https://aws.amazon.com/blogs/security/designing-trust-and-safety-into-amazon-bedrock-powered-applications/)

  • Execute proxies MCP personalizados no Amazon Bedrock AgentCore Runtime sem servidor

    Por que um proxy MCP serverless importa em produção

    Quando agentes de IA se conectam a ferramentas por meio do Protocolo de Contexto de Modelo (MCP), eles ganham acesso a capacidades que vão de consultas a bancos de dados e chamadas de API até operações em arquivos e integrações com serviços de terceiros. Em produção, essas interações precisam de governança adequada, controles e observabilidade alinhados às políticas de segurança da organização.

    Isso inclui sanitizar entradas de ferramentas antes que cheguem aos sistemas de backend, gerar trilhas de auditoria em formatos específicos ou redigir dados sensíveis na camada de protocolo. Esses requisitos são moldados por padrões internos de governança, regulamentações do setor e as especificidades de cada ambiente de produção.

    A AWS publicou um guia mostrando como implantar um proxy MCP serverless no Amazon Bedrock AgentCore Runtime que fornece exatamente essa camada programável.

    O contexto: Gateway, interceptores Lambda e quando o proxy faz mais sentido

    O Amazon Bedrock AgentCore Gateway já oferece governança centralizada para integração entre agentes e ferramentas, incluindo descoberta semântica de ferramentas, credenciais gerenciadas e aplicação de políticas. Para organizações que precisam embutir lógica personalizada no caminho de requisição do Gateway, o serviço suporta interceptores Lambda — que permitem executar código de validação, transformação ou filtragem como funções AWS Lambda em cada invocação de ferramenta.

    Porém, algumas organizações já investiram em lógica de filtragem MCP personalizada fortemente acoplada a bibliotecas internas ou sistemas de conformidade on-premises. Elas querem reutilizar essa lógica no AgentCore Runtime sem refatorá-la em funções Lambda. Outras operam em ambientes híbridos onde executar controles como um servidor MCP independente oferece mais portabilidade. Nesses casos, um proxy MCP serverless rodando no AgentCore Runtime é um padrão complementar e mais adequado.

    O que é o AgentCore Runtime e por que ele serve de base para o proxy

    O AgentCore Runtime é um ambiente de computação totalmente gerenciado para implantar agentes de IA e servidores MCP. Ele oferece infraestrutura serverless com escalonamento automático, observabilidade integrada via Amazon CloudWatch e OpenTelemetry, além do AgentCore Identity para autenticação e autorização.

    Como o Runtime suporta nativamente o protocolo MCP, ele permite hospedar servidores MCP — incluindo proxies MCP que adicionam controles personalizados ao tráfego. O proxy apresentado no guia é stateless, roda como uma carga de trabalho serverless no Runtime, descobre ferramentas de um servidor MCP upstream na inicialização, re-expõe essas ferramentas com sua lógica personalizada aplicada e encaminha requisições de forma transparente.

    Visão geral da arquitetura

    A solução envolve três camadas lógicas que trabalham juntas via MCP: o cliente MCP, o proxy MCP no AgentCore Runtime e o servidor MCP upstream. O fluxo de requisições percorre essas camadas em sequência: o cliente envia requisições MCP ao proxy, o proxy aplica a lógica personalizada e encaminha a requisição ao servidor MCP upstream, e o servidor upstream processa a requisição e retorna a resposta pelo mesmo caminho.

    Imagem original — fonte: Aws

    O servidor MCP upstream pode ser hospedado em qualquer lugar — no próprio AgentCore Runtime, na infraestrutura da organização ou como serviço de terceiros. No guia publicado pela AWS, o AgentCore Gateway é usado como servidor upstream porque já fornece um endpoint compatível com MCP com alvos registrados, permitindo seguir o passo a passo sem precisar configurar um servidor MCP separado.

    Como o proxy MCP funciona internamente

    A implementação usa o FastMCP para descobrir ferramentas do servidor MCP upstream na inicialização e encaminhar cada requisição do cliente em tempo de execução. O proxy não define ferramentas próprias e não tem conhecimento prévio do que o servidor upstream expõe.

    Quando o processo do proxy inicia, ele envia uma requisição padrão tools/list ao servidor upstream. O servidor retorna o catálogo completo de ferramentas disponíveis. Para cada ferramenta, o proxy registra dinamicamente uma ferramenta FastMCP local com o mesmo nome e descrição. Cada ferramenta é suportada por uma função handler que encaminha requisições tools/call ao servidor upstream e retorna a resposta.

    Clientes MCP que se conectam ao proxy veem o mesmo catálogo de ferramentas e obtêm os mesmos resultados como se estivessem se conectando diretamente ao servidor upstream. Como o proxy é um servidor MCP Python padrão que você possui e implanta, é possível inserir lógica personalizada antes de encaminhar uma chamada de ferramenta ou após receber a resposta.

    Autorização entre os componentes

    A autorização é aplicada de forma independente em cada camada da arquitetura, criando fronteiras de confiança distintas ao longo do fluxo.

    Do agente ao proxy MCP

    Quando um agente se conecta ao proxy MCP, ele usa o AgentCore Identity para autenticação e autorização. O proxy utiliza as capacidades que o AgentCore Identity oferece, incluindo gerenciamento centralizado de identidades de agentes e armazenamento seguro de credenciais.

    Do proxy ao servidor MCP upstream

    O proxy precisa se autenticar no servidor MCP upstream ao qual se conecta. O método de autenticação depende dos requisitos do servidor upstream. O AgentCore Identity oferece autorização de entrada para cargas de trabalho hospedadas no AgentCore Runtime por meio de Gerenciamento de Identidade e Acesso da AWS (IAM) usando AWS Signature Version 4 (SigV4) e autorização baseada em Token Web JSON (JWT) usando credenciais de cliente OAuth 2.0.

    Para autorização baseada em IAM, o proxy assina requisições usando SigV4 com a função de execução IAM que herda do AgentCore Runtime. O script de implantação concede a essa função permissões bedrock-agentcore:InvokeGateway, com o campo Resource com escopo para o Gateway. O proxy usa a sessão boto3 do runtime para assinar requisições automaticamente.

    Para autorização OAuth, o proxy substitui a assinatura SigV4 por um token bearer obtido via concessão de credenciais de cliente OAuth 2.0. O token é armazenado em cache na memória e atualizado automaticamente quando se aproxima da expiração. Cada requisição de saída ao servidor MCP upstream inclui o token como cabeçalho Authorization: Bearer. O projeto no GitHub usa autorização baseada em IAM como método padrão, mas o script de implantação também suporta autorização baseada em JWT.

    Do servidor upstream para as ferramentas

    O servidor MCP upstream se autentica nas ferramentas downstream usando provedores de credenciais do AgentCore Identity, que gerenciam tokens OAuth 2.0, chaves de API e rotação de credenciais de forma transparente. A autorização de saída opera da mesma forma independentemente de as requisições se originarem do proxy ou de um cliente direto.

    Pré-requisitos para a implantação

    Implantando a solução

    O processo começa clonando o repositório do GitHub e revisando a estrutura do projeto. Em seguida, o arquivo deploy_config.json deve ser configurado com os valores do ambiente: o endpoint do servidor MCP upstream em gateway_endpoint, a região AWS em region, e opcionalmente o Nome de Recurso Amazon (ARN) do Gateway em gateway_api_id para restringir as permissões IAM a esse recurso específico.

    O campo auth_mode determina como o proxy se autentica no servidor upstream — o padrão é "iam" para autenticação baseada em IAM. Para autenticação OAuth, define-se auth_mode como "jwt" e configuram-se os campos do Cognito.

    O script automatizado setup_and_deploy.py executa o fluxo completo de implantação em sequência:

    • Valida pré-requisitos — verifica se AWS CLI, Python e Docker estão disponíveis e se as credenciais AWS estão configuradas
    • Cria uma função de execução IAM com política de confiança que permite ao bedrock-agentcore.amazonaws.com assumir a função, incluindo permissões para invocar o Gateway, gravar no Amazon CloudWatch Logs e extrair imagens do Amazon ECR
    • Configura o agente com a CLI do AgentCore executando agentcore configure com o protocolo MCP, apontando para o entrypoint do proxy em mcp_proxy/main.py
    • Lança o agente no AgentCore Runtime via agentcore launch, passando o endpoint do servidor upstream como variável de ambiente (GATEWAY_ENDPOINT)

    Após a implantação, o status do agente proxy MCP pode ser verificado com agentcore status --agent mcp_proxy. O ARN do agente exibido na saída é usado no cliente de teste para invocar o proxy.

    Oportunidades de personalização

    Tokenização de dados sensíveis

    Argumentos de chamadas de ferramentas podem conter Informações de Identificação Pessoal (PII) que não devem chegar aos sistemas de backend em texto claro. O fluxo de encaminhamento do proxy oferece um ponto de interceptação natural para adicionar tokenização. O código relevante fica na função _make_tool_handler em main.py:

    def _make_tool_handler(tool_name: str):
        """Create a tool handler function that forwards calls to the gateway."""
        def handler(**kwargs) -> str:
            # --- Tokenize: scan kwargs for PII and replace with tokens ---
            result = _send_gateway_request(
                "tools/call",
                {"name": tool_name, "arguments": kwargs}
            )
            content = result.get("content", [])
            # --- Detokenize: reverse tokens in content before returning ---
            if content and isinstance(content, list):
                texts = [c.get("text", str(c)) for c in content if isinstance(c, dict)]
                return "\n".join(texts) if texts else json.dumps(result)
            return json.dumps(result)
        return handler

    A tokenização pode ser adicionada em dois pontos dentro do closure do handler: antes da chamada a _send_gateway_request, para escanear os valores de kwargs em busca de padrões de PII e substituí-los por tokens reversíveis (consulte o Guia de Tokenização para Melhorar a Segurança de Dados e Reduzir o Escopo de Auditoria na AWS); e após o retorno de _send_gateway_request, para reverter os tokens no conteúdo da resposta antes de devolvê-la ao cliente.

    Controle de acesso por ferramenta

    É possível restringir quais ferramentas um determinado chamador pode invocar, mesmo que o servidor upstream exponha o catálogo completo. Isso é implementado adicionando uma verificação de política no início da função handler criada por _make_tool_handler. Antes de encaminhar a requisição tools/call ao servidor upstream, o handler avalia a identidade do chamador em relação a uma política de acesso. Se o chamador não estiver autorizado para aquela ferramenta, o handler retorna uma resposta de erro sem contatar o servidor upstream. Também é possível filtrar a resposta de tools/list na função register_gateway_tools para expor apenas as ferramentas que correspondem a uma determinada política.

    Limpeza dos recursos

    Para evitar cobranças recorrentes, os recursos criados devem ser removidos após os testes. A CLI do AgentCore fornece um comando destroy que remove o agente e seus recursos associados:

    agentcore destroy --agent <agent-name> --delete-ecr-repo --force

    Em seguida, a política IAM inline e a função de execução devem ser removidas:

    aws iam delete-role-policy --role-name <your-MCPProxy-Server-Role> --policy-name <your-Gateway-Access-Policy>
    aws iam delete-role --role-name <your-MCPProxy-Server-Role>

    Se um AgentCore Gateway foi criado especificamente para este exercício e não é mais necessário, ele também deve ser removido:

    agentcore gateway delete-mcp-gateway --name <your-Gateway> --force

    Conclusão

    O padrão de proxy MCP serverless no AgentCore Runtime oferece uma camada programável onde é possível aplicar lógica personalizada como validação de entrada, logging, limitação de taxa ou enriquecimento de resposta. O proxy é stateless, roda como um contêiner padrão no Runtime e pode ser conectado a qualquer servidor MCP upstream compatível, encadeando múltiplos endpoints ou adicionando lógica de middleware específica para a carga de trabalho.

    O código-fonte completo, scripts de implantação e agente de teste estão disponíveis no GitHub. Para saber mais sobre como construir e implantar agentes no AgentCore e usar o framework Strands Agents, a AWS disponibiliza a documentação do Amazon Bedrock AgentCore e o SDK do Strands Agents.

    Fonte

    Run custom MCP proxies serverless on Amazon Bedrock AgentCore Runtime (https://aws.amazon.com/blogs/machine-learning/run-custom-mcp-proxies-serverless-on-amazon-bedrock-agentcore-runtime/)

  • Controle de acesso com session tags no IAM Identity Center

    O problema de escala no gerenciamento de acesso AWS

    À medida que as organizações expandem sua presença na Amazon Web Services (AWS), gerenciar o acesso de forma segura, escalável e eficiente em múltiplas contas se torna um desafio crescente. A abordagem tradicional — criar usuários IAM individuais e atribuir permissões manualmente — não sustenta ambientes corporativos complexos.

    Para endereçar esse problema, a AWS oferece o AWS IAM Identity Center, uma solução centralizada para gerenciar o acesso de colaboradores a contas AWS. Ele simplifica a autenticação, reforça a segurança e proporciona uma experiência de login consistente em diferentes ambientes.

    O ponto mais poderoso dessa solução, no entanto, está na combinação entre permission sets e session tags — uma dupla que abre caminho para controle de acesso granular e otimização de custos sem aumentar a complexidade operacional.

    O que são session tags e por que elas importam

    Session tags são atributos dinâmicos que podem ser passados de um provedor de identidade externo para a AWS durante o processo de autenticação. Em vez de definir permissões estáticas por usuário, é possível usar informações contextuais — como departamento, projeto ou perfil de custo — para determinar o que cada sessão pode fazer.

    Essa abordagem viabiliza o que a AWS chama de controle de acesso baseado em atributos (ABAC): as permissões são determinadas pelos atributos do usuário, não por regras fixas atribuídas individualmente. O resultado é um modelo mais flexível, onde adicionar um novo colaborador ao grupo correto no provedor de identidade já é suficiente para garantir o acesso adequado — sem necessidade de reconfigurar políticas IAM.

    Essa integração também habilita recursos avançados da AWS, como os perfis de uso do AWS Glue e o AWS Systems Manager Session Manager com Run As, permitindo que administradores mapeiem permissões e configurações de runtime dinamicamente com base nos atributos do usuário.

    A arquitetura: Microsoft Entra ID + IAM Identity Center

    O artigo publicado pela AWS demonstra como session tags derivadas de atributos de grupos no Microsoft Entra ID podem entregar uma funcionalidade equivalente às tags de roles do AWS Identity and Access Management (IAM). A integração usa dois protocolos complementares:

    • SAML 2.0 — para autenticação federada entre o Entra ID e o IAM Identity Center
    • SCIM — para sincronização automática de usuários e grupos do Entra ID para a AWS

    O fluxo de autenticação funciona da seguinte forma: o usuário acessa a aplicação corporativa configurada no Azure, o Microsoft Entra ID realiza o login, e durante a autenticação SAML, atributos do usuário (como departamento, função, centro de custo ou ID de projeto) são enviados como session tags para o IAM Identity Center. A partir daí, esses atributos são usados para aplicar permissões granulares dentro da AWS.

    Os usuários podem acessar a AWS pelo console ou pela Interface de Linha de Comando da AWS (AWS CLI), e o acesso é concedido a contas específicas dentro do AWS Organizations.

    Pré-requisitos para implementar a solução

    Antes de colocar a solução em prática, a AWS lista os seguintes requisitos:

    Implementando a solução passo a passo

    1. Criar um perfil de uso no AWS Glue

    O caso de uso demonstrado utiliza os perfis de uso do AWS Glue para controle flexível de custos. Para o exemplo, deve-se criar um perfil chamado developer com as seguintes configurações:

    • Número de workers padrão: 20
    • Tipo de worker padrão: G.1X
    • Tipos de worker permitidos: G.1X, G.2X, G.4X e G.8X

    Essas configurações se aplicam tanto a jobs quanto a sessões interativas.

    2. Criar um permission set personalizado

    Em vez de usar permission sets predefinidos, a AWS recomenda criar um permission set personalizado e anexar as seguintes políticas gerenciadas da AWS:

    • AWSGlueConsoleFullAccess
    • IAMReadOnlyAccess

    Vale destacar que o exemplo usa políticas com permissões amplas por simplicidade didática. Em ambientes de produção, a AWS orienta seguir o princípio do menor privilégio e escopar as permissões adequadamente.

    Após criar o permission set, é necessário provisioná-lo em uma conta AWS atribuindo acesso a usuários ou grupos no IAM Identity Center. Mais detalhes estão disponíveis em Atribuir acesso de usuário ou grupo a contas AWS.

    3. Configurar atributos de usuário no Microsoft Entra ID

    Esta etapa é o coração da solução. A configuração segue o passo 5 da documentação Configure SAML e SCIM com Microsoft Entra ID e IAM Identity Center para habilitar o ABAC.

    No portal do Azure, dentro da aplicação corporativa criada, acesse a seção Single sign-on e depois Attributes & Claims. Em seguida, adicione uma nova claim com as seguintes configurações:

    • Name: AccessControl:<NomeDoAtributo> — para o exemplo, use AccessControl:glue:UsageProfile
    • Claim conditions:
      • User type: Members
      • Source: Attribute
      • Value: developer

    O ponto central aqui é que as tags são atribuídas com base na associação de grupo no Entra ID. Isso significa que qualquer usuário que faça login no IAM Identity Center e pertença ao grupo configurado receberá automaticamente o valor da tag aplicado à sua sessão — sem necessidade de configurar tags individualmente por usuário.

    Quando o AWS Glue recebe chamadas de API para criação de recursos, o sistema verifica se o usuário ou role está marcado com a chave glue:UsageProfile e o nome do perfil como valor.

    Testando e validando a configuração

    Com tudo configurado, o teste consiste em fazer login como usuário pelo Microsoft Entra ID acessando https://myapps.microsoft.com/ e verificar a criação de jobs no AWS Glue usando o perfil developer. Um job criado com sucesso dentro das configurações do perfil confirma que as session tags estão sendo aplicadas corretamente.

    Validação via AWS CloudTrail

    Para confirmar que as tags de sessão estão sendo transmitidas corretamente durante a autenticação, a AWS recomenda verificar o evento AssumeRoleWithSAML no AWS CloudTrail. O caminho é:

    • Acessar o console do CloudTrail
    • Selecionar Event history
    • Filtrar pelo nome de evento AssumeRoleWithSAML
    • Abrir um evento relevante e inspecionar a seção requestParameters
    • Confirmar que as session tags esperadas aparecem em PrincipalTags

    Outros casos de uso: AWS Systems Manager Session Manager

    A mesma lógica pode ser estendida para o AWS Systems Manager Session Manager com suporte a Run As para usuários federados.

    Por padrão, o Session Manager inicia sessões usando uma conta de sistema gerada automaticamente chamada ssm-user. Para instâncias Linux, é possível configurar sessões para serem executadas como um usuário específico do sistema operacional. Nesse cenário, basta configurar o provedor de identidade para passar o atributo AccessControl:SSMSessionRunAs com o nome de um usuário do SO como valor durante a federação — e a sessão será iniciada com esse usuário automaticamente.

    Limpeza dos recursos

    Para evitar cobranças desnecessárias após os testes, a AWS orienta remover os recursos criados:

    • Remover a instância do IAM Identity Center e limpar a aplicação corporativa no Microsoft Entra
    • Excluir o perfil de uso do AWS Glue
    • Remover quaisquer outros recursos AWS provisionados durante os testes

    Por que essa abordagem importa

    A combinação de IAM Identity Center, SAML 2.0 e session tags representa uma evolução significativa na forma como organizações gerenciam acesso em ambientes AWS multi-conta. Ao usar ABAC com atributos vindos de um provedor de identidade externo, as equipes de segurança conseguem manter controle granular sem a complexidade de gerenciar usuários IAM individuais ou roles estáticas.

    À medida que os ambientes de nuvem crescem em complexidade, adotar federação de identidade moderna e ABAC via IAM Identity Center é uma das formas mais eficazes de equilibrar segurança rigorosa com agilidade operacional.

    Recursos adicionais

    Fonte

    Access control with IAM Identity Center session tags (https://aws.amazon.com/blogs/security/access-control-with-iam-identity-center-session-tags/)

  • AWS Glue 5.1 já está disponível em todas as regiões comerciais e GovCloud (US)

    O que foi anunciado

    A AWS anunciou a disponibilidade geral do AWS Glue 5.1 em todas as regiões comerciais e nas regiões AWS GovCloud (US). Com essa expansão, as regiões Ásia-Pacífico (Nova Zelândia), AWS GovCloud (US-West) e AWS GovCloud (US-East) passam a contar com a versão mais recente do serviço.

    Para quem não conhece, o AWS Glue é um serviço serverless e escalável de integração de dados. Ele simplifica as tarefas de descoberta, preparação, movimentação e integração de dados provenientes de múltiplas fontes — sem a necessidade de gerenciar infraestrutura.

    O que muda na versão 5.1

    Atualização dos motores principais

    O AWS Glue 5.1 atualiza os principais componentes de execução do serviço. Os destaques são:

    • Apache Spark 3.5.6 — motor de processamento distribuído de dados
    • Python 3.11 — linguagem de programação amplamente usada em pipelines de dados
    • Scala 2.12.18 — linguagem alternativa para desenvolvimento de jobs no Glue

    Essas atualizações trazem melhorias de desempenho e segurança para os jobs existentes.

    Suporte atualizado a formatos de tabela abertos

    A versão 5.1 também atualiza as bibliotecas de formatos de tabela abertos (open table formats), que são fundamentais para arquiteturas de Data Lakehouse modernas:

    • Apache Hudi 1.0.2
    • Apache Iceberg 1.10.0
    • Delta Lake 3.3.2

    Novidades do Apache Iceberg formato versão 3.0

    O Glue 5.1 introduz suporte ao Apache Iceberg no formato versão 3.0, que adiciona capacidades relevantes para quem trabalha com grandes volumes de dados:

    • Valores padrão para colunas (default column values)
    • Vetores de exclusão para tabelas merge-on-read (deletion vectors)
    • Transformações com múltiplos argumentos (multi-argument transforms)
    • Rastreamento de linhagem de linhas (row lineage tracking)

    Controle de acesso mais granular com o Lake Formation

    Uma das mudanças mais significativas desta versão está na integração com o AWS Lake Formation. O controle de acesso refinado (fine-grained access control) do Lake Formation foi estendido para operações de escrita — tanto Linguagem de Manipulação de Dados (DML) quanto Linguagem de Definição de Dados (DDL) — para Spark DataFrames e Spark SQL.

    Anteriormente, esse controle estava disponível apenas para operações de leitura. Com essa expansão, as equipes ganham um nível muito maior de governança sobre quem pode modificar dados e estruturas dentro do lake.

    Além disso, o Glue 5.1 adiciona controle de acesso em nível de tabela completa (full-table access control) no Apache Spark para tabelas Apache Hudi e Delta Lake, ampliando ainda mais as opções de segurança disponíveis.

    Como começar a usar

    O AWS Glue 5.1 já está disponível em todas as regiões comerciais e GovCloud (US) da AWS. É possível começar a utilizá-lo por meio das APIs da AWS, AWS CLI, AWS SDK ou pelo AWS Glue Studio. Para mais detalhes, a AWS disponibiliza a página do produto e a documentação oficial.

    Fonte

    AWS Glue 5.1 is now available in all AWS Commercial and AWS GovCloud (US) Regions (https://aws.amazon.com/about-aws/whats-new/2026/04/aws-glue-5-1-all-govcloud-commercial-regions/)

  • NVIDIA Nemotron 3 Nano Omni já está disponível no Amazon SageMaker JumpStart

    O que é o NVIDIA Nemotron 3 Nano Omni?

    A NVIDIA disponibilizou o modelo Nemotron 3 Nano Omni no Amazon SageMaker JumpStart com disponibilidade imediata desde o dia zero do lançamento. Trata-se de um Modelo de Linguagem Grande (LLM) multimodal aberto, com 30 bilhões de parâmetros totais e 3 bilhões de parâmetros ativos — uma configuração chamada de 30B A3B.

    O modelo é construído sobre uma arquitetura híbrida chamada Mamba2 Transformer com Mistura de Especialistas (MoE), que combina três componentes principais:

    • Nemotron 3 Nano LLM — a espinha dorsal de linguagem
    • CRADIO v4-H — o encoder de visão para imagens e vídeos
    • Parakeet — o encoder de fala para transcrição e compreensão de áudio

    Essa arquitetura unificada aceita vídeo, áudio, imagens e texto como entrada e gera texto como saída. O modelo suporta um contexto de 131 mil tokens, raciocínio em cadeia de pensamento, chamada de ferramentas, saída em JSON e timestamps em nível de palavra para tarefas de transcrição. No SageMaker JumpStart, ele está disponível em precisão FP8, equilibrando acurácia e eficiência para cargas de trabalho empresariais. A licença é a NVIDIA Open Model Agreement, permitindo uso comercial.

    Por que um modelo multimodal unificado importa?

    Fluxos de trabalho de agentes empresariais são, por natureza, multimodais. Um agente precisa interpretar telas, documentos, áudio, vídeo e texto — frequentemente dentro do mesmo ciclo de raciocínio. O problema é que a maioria dos sistemas agênticos atuais costura vários modelos separados para visão, fala e linguagem. Isso gera:

    • Aumento de latência por múltiplas passagens de inferência
    • Complexidade na orquestração e no tratamento de erros
    • Fragmentação de contexto entre modalidades
    • Custos e pontos de falha amplificados ao longo do tempo

    O Nemotron 3 Nano Omni resolve esse problema funcionando como o sub-agente de percepção e contexto multimodal em um sistema de agentes. Ele fornece ao sistema de agentes “olhos e ouvidos”: lê telas, interpreta documentos, transcreve fala e analisa vídeo — tudo mantendo um contexto multimodal convergido ao longo dos ciclos de raciocínio.

    Para quem está construindo arquiteturas agênticas, isso significa colapsar saltos de inferência, lógica de orquestração e sobrecarga de sincronização entre modelos em uma única chamada de modelo.

    Formatos de entrada suportados

    • Vídeo: mp4 — até 2 minutos, até 256 frames
    • Áudio: wav, mp3 — até 1 hora, taxa de amostragem de 8kHz ou superior
    • Imagem: JPEG, PNG (RGB) — resolução padrão
    • Texto: String — até 131K de contexto

    Casos de uso empresariais

    Agentes de uso computacional

    O Nemotron 3 Nano Omni alimenta o loop de percepção de agentes que navegam em Interfaces Gráficas de Usuário (GUI). Ele lê telas, entende o estado da interface ao longo do tempo e valida resultados, enquanto agentes de execução cuidam das ações. Isso elimina a necessidade de pipelines de percepção separados. Aplicações práticas incluem dashboards de gerenciamento de incidentes, busca agêntica, automação de navegador e agentes de fluxo de trabalho de e-mail.

    Inteligência documental

    O modelo interpreta documentos, gráficos, tabelas, capturas de tela e entradas de mídia mista, permitindo que agentes raciocinem de forma coerente sobre estrutura visual e conteúdo textual. Isso é fundamental para análises empresariais e fluxos de conformidade envolvendo contratos, declarações de trabalho, documentos financeiros e literatura científica.

    Agentes de compreensão de áudio e vídeo

    Para fluxos de atendimento ao cliente, pesquisa e monitoramento, o Nemotron 3 Nano Omni mantém contexto contínuo de áudio e vídeo. Ele conecta o que foi dito, mostrado e documentado em um único fluxo de raciocínio. Isso viabiliza aplicações como análise de gravações de reuniões, gerenciamento de ativos de mídia e entretenimento, verificação de pedidos em drive-thru e revisão de vídeos de atendimento ao cliente.

    Como fazer o deploy no SageMaker JumpStart

    O deploy do Nemotron 3 Nano Omni pelo Amazon SageMaker JumpStart pode ser feito de duas formas. O JumpStart cuida da infraestrutura, dos containers de inferência otimizados e do download dos artefatos do modelo automaticamente.

    Pré-requisitos

    Deploy pelo SageMaker Studio

    • Abra o Amazon SageMaker Studio
    • No painel de navegação esquerdo, selecione JumpStart
    • Pesquise por Nemotron 3 Nano Omni
    • Selecione o card do modelo e clique em Deploy
    • Configure o tipo de instância e as configurações de deploy
    • Clique em Deploy para criar o endpoint

    Deploy pelo SDK Python do SageMaker

    Também é possível fazer o deploy de forma programática usando o SDK Python do SageMaker:

    from sagemaker.jumpstart.model import JumpStartModel
    
    model = JumpStartModel(
        model_id="huggingface-vlm-nvidia-nemotron3-nano-omni-30ba3b-reasoning-fp8",
        role="",
    )
    
    predictor = model.deploy(
        accept_eula=True,
    )

    Executando inferência

    Compreensão de imagem

    import base64
    
    def encode_image(image_path):
        with open(image_path, "rb") as f:
            return base64.b64encode(f.read()).decode("utf-8")
    
    image_b64 = encode_image("example.jpg")
    
    payload = {
        "messages": [{
            "role": "user",
            "content": [
                {"type": "text", "text": "Describe this image in detail."},
                {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{image_b64}"}},
            ],
        }],
        "max_tokens": 1024,
        "temperature": 0.2,
    }
    
    response = predictor.predict(payload)
    print(response["choices"][0]["message"]["content"])

    Compreensão de vídeo com raciocínio

    import base64
    
    def encode_video(video_path):
        with open(video_path, "rb") as f:
            return base64.b64encode(f.read()).decode("utf-8")
    
    video_b64 = encode_video("meeting_recording.mp4")
    
    payload = {
        "messages": [{
            "role": "user",
            "content": [
                {"type": "video_url", "video_url": {"url": f"data:video/mp4;base64,{video_b64}"}},
                {"type": "text", "text": "Summarize the key discussion points."},
            ],
        }],
        "max_tokens": 20480,
        "temperature": 0.6,
        "top_p": 0.95,
    }
    
    response = predictor.predict(payload)
    print(response["choices"][0]["message"]["content"])

    Transcrição de áudio

    import base64
    
    def encode_audio(audio_path):
        with open(audio_path, "rb") as f:
            return base64.b64encode(f.read()).decode("utf-8")
    
    audio_b64 = encode_audio("customer_call.wav")
    
    payload = {
        "messages": [{
            "role": "user",
            "content": [
                {"type": "audio_url", "audio_url": {"url": f"data:audio/wav;base64,{audio_b64}"}},
                {"type": "text", "text": "Transcribe this audio and identify key action items."},
            ],
        }],
        "max_tokens": 1024,
        "temperature": 0.2,
    }
    
    response = predictor.predict(payload)
    print(response["choices"][0]["message"]["content"])

    Parâmetros de inferência recomendados

    Os valores recomendados variam de acordo com o modo de inferência:

    • Modo Thinking (raciocínio): temperature 0.6, top_p 0.95, max_tokens 20480 — para raciocínio complexo
    • Modo Instruct: temperature 0.2, max_tokens 1024 — para tarefas gerais e Reconhecimento Automático de Fala (ASR)

    Para tarefas que envolvem raciocínio e compreensão complexa, recomenda-se habilitar o modo thinking. Para transcrição e tarefas diretas, o modo instruct oferece respostas mais rápidas.

    Limpeza de recursos

    Para evitar cobranças desnecessárias, exclua o endpoint do SageMaker ao terminar:

    predictor.delete_endpoint()

    Conclusão

    O NVIDIA Nemotron 3 Nano Omni representa um avanço relevante em inteligência multimodal disponível no Amazon SageMaker JumpStart. Ao unificar compreensão de vídeo, áudio, imagem e texto em um único modelo eficiente, ele simplifica o desenvolvimento de aplicações agênticas empresariais e entrega, segundo a NVIDIA, até 9x mais throughput em comparação com modelos omni abertos alternativos.

    Seja para construir agentes que navegam em interfaces gráficas, pipelines de inteligência documental para fluxos de conformidade, ou sistemas de análise de áudio e vídeo para atendimento ao cliente, o Nemotron 3 Nano Omni oferece a camada de percepção necessária em uma única chamada de modelo. Para mais informações sobre o modelo, acesse a página do NVIDIA Nemotron no Hugging Face.

    Fonte

    NVIDIA Nemotron 3 Nano Omni model now available on Amazon SageMaker JumpStart (https://aws.amazon.com/blogs/machine-learning/nvidia-nemotron-3-nano-omni-model-now-available-on-amazon-sagemaker-jumpstart/)

  • Migrando um agente de texto para assistente de voz com Amazon Nova 2 Sonic

    Por que migrar de texto para voz não é trivial

    Transformar um agente de texto em um assistente de voz parece simples à primeira vista — afinal, a lógica de negócio já existe, certo? A AWS, no entanto, deixa claro que essa visão subestima as diferenças fundamentais entre os dois modelos de interação. Setores como finanças, saúde, educação e varejo estão explorando o Amazon Nova 2 Sonic para viabilizar interações de fala em tempo real, e entender o que muda na arquitetura é o primeiro passo para uma migração bem-sucedida.

    A AWS também disponibilizou uma Skill no repositório de exemplos do Nova que funciona com IDEs de IA como Kiro e Claude Code para converter automaticamente um agente de texto em agente de voz.

    As diferenças entre agentes de texto e de voz

    Antes de qualquer decisão arquitetural, é preciso entender em quais dimensões esses dois tipos de agente se comportam de forma diferente:

    • Entrada do usuário: No texto, o usuário digita no próprio ritmo, rola a tela e copia conteúdo. Na voz, tudo acontece em tempo real, com possibilidade de interrupção (barge-in) e pausas que carregam significado.
    • Estilo de resposta: Agentes de texto entregam parágrafos, listas, tabelas e links de uma vez. Agentes de voz precisam de frases curtas, uma informação por vez, com confirmações intermediárias (“Quer que eu continue?”).
    • Tolerância à latência: No texto, alguns segundos de espera são aceitáveis com um indicador de carregamento. Na voz, o silêncio parece falha de conexão — a resposta precisa chegar em centenas de milissegundos.
    • Gerenciamento de turnos: Texto é estritamente sequencial: o usuário envia, o agente responde. Voz é fluida, com sobreposição de fala, detecção de atividade de voz (VAD) e suporte a interrupções.
    • Transporte: Agentes de texto usam HTTP/REST ou Server-Sent Events (SSE). Agentes de voz exigem conexão bidirecional persistente, como WebSocket ou WebRTC.

    Design de resposta: menos é mais na voz

    Um exemplo prático ilustra bem a diferença. Um agente bancário de texto poderia retornar um resumo completo de todas as contas de uma vez, com saldos formatados em lista. Já um agente de voz deve quebrar essa informação em partes, guiando o usuário ativamente:

    Texto: “Aqui está o resumo da sua conta: Corrente (****4521): R$ 3.245,67 | Poupança (****8903): R$ 12.450,00 | Cartão de Crédito (****2187): -R$ 1.823,45 (vencimento: 15 de março)”

    Voz: “Você tem três contas. Sua conta corrente termina em 4521 com saldo de três mil duzentos e quarenta e cinco reais. Quer que eu continue com as outras ou prefere detalhes desta?”

    O agente de voz fragmenta a informação e confirma antes de prosseguir, adotando um estilo de conversa autônomo que guia o usuário em vez de despejar tudo de uma vez.

    Latência e chamadas de ferramentas

    No texto, múltiplas chamadas sequenciais a ferramentas são toleráveis. Na voz, cada chamada adiciona um silêncio perceptível. O Amazon Nova 2 Sonic suporta chamadas assíncronas de ferramentas, o que significa que a conversa continua naturalmente enquanto as ferramentas processam em segundo plano. O modelo aceita novas entradas, pode executar múltiplas ferramentas em paralelo e se adapta caso o usuário mude de assunto no meio do processo.

    Arquitetura da migração: três componentes, três evoluções

    A AWS divide a arquitetura de um agente de texto em três componentes principais, e cada um evolui de forma diferente na transição para voz:

    Imagem original — fonte: Aws

    1. A aplicação cliente

    O cliente de um agente de texto geralmente se comunica via REST ou streaming HTTP unidirecional — algo relativamente simples de implementar. Um cliente de voz, por outro lado, exige conexão bidirecional persistente, codificação e decodificação de áudio, lógica de barge-in, controle de ruído e exibição de transcrição. Isso frequentemente significa refatoração completa ou reescrita do componente. Por exemplo, um protótipo construído com Streamlit provavelmente precisaria ser reconstruído com um framework como React para suportar conexões bidirecionais. A AWS disponibiliza um exemplo de cliente web leve em React com WebSocket.

    2. O orquestrador

    O orquestrador é o núcleo de qualquer agente — gerencia o system prompt, seleciona ferramentas ou sub-agentes e mantém o contexto da conversa. Em agentes de texto, ele conecta o cliente ao modelo de raciocínio e às ferramentas. Em agentes de voz, as mesmas responsabilidades se mantêm, mas adicionam streaming de áudio, Reconhecimento Automático de Fala (ASR), Detecção de Atividade de Voz (VAD) e Síntese de Fala (TTS).

    O Amazon Nova 2 Sonic oferece uma interface de streaming bidirecional que unifica todas essas funcionalidades. Em vez de encadear componentes separados de ASR → Modelo de Linguagem Grande (LLM) → TTS, o Sonic integra reconhecimento de fala, raciocínio, uso de ferramentas e síntese de fala em um único modelo. Isso permite reutilizar prompts e ferramentas existentes, simplificando a arquitetura e reduzindo a latência.

    Imagem original — fonte: Aws

    3. A camada de lógica de negócio

    As ferramentas que conectam o agente aos sistemas de negócio — APIs, bancos de dados, pipelines de Geração Aumentada por Recuperação (RAG), sub-agentes — podem ser reaproveitadas com pouca ou nenhuma alteração de código. A integração usa protocolos como Protocolo de Contexto de Modelo (MCP), Agente-para-Agente (A2A) e HTTP padrão.

    Exemplo prático com Strands Agents

    A AWS demonstra a migração usando o framework Strands Agents. O ponto central é que o estilo de código para agentes de texto e de voz é muito parecido. Abaixo, o exemplo de ferramentas compartilhadas entre os dois tipos de agente:

    from strands import Agent, tool
    from strands.models import BedrockModel
    
    # ---- Mock tools will be used in both text and voice agents ----
    @tool
    def authenticate_customer(account_id: str, date_of_birth: str) -> str:
        """Verify customer identity and return an auth token."""
        # In real implementation, call your auth service / API
        if account_id == "123456":
            return "AUTH_TOKEN_ABC123"
        return "Authentication failed"
    
    @tool
    def get_account_balance(auth_token: str) -> str:
        """Return the customer's current account balance."""
        if auth_token == "AUTH_TOKEN_ABC123":
            return "Your current checking account balance is $5,420."
        return "Unauthorized request"
    
    @tool
    def get_recent_transactions(auth_token: str) -> str:
        """Return recent transactions."""
        if auth_token == "AUTH_TOKEN_ABC123":
            return "Recent transactions: $45 groceries, $120 utilities, $18 coffee."
        return "Unauthorized request"

    O agente de texto com Amazon Nova 2 Lite como LLM:

    # ---- Nova 2 Lite model ----
    model = BedrockModel(model_id="amazon.nova-2-lite-v1:0")
    
    # ---- Banking assistant text agent ----
    bank_agent = Agent(
        model=model,
        system_prompt="""You are a banking assistant. Answer user questions about account balances, recent transactions accurately. Always validate user identity before providing sensitive information.
    """,
        tools=[authenticate_customer, get_account_balance, get_recent_transactions],
    )

    E o agente de voz usando o Strands BidiAgent com Nova 2 Sonic, reaproveitando as mesmas ferramentas:

    # voice_orchestrator.py — BidiAgent with sub-agents as tools
    from strands.experimental.bidi.agent import BidiAgent
    from strands.experimental.bidi.models.nova_sonic import BidiNovaSonicModel
    
    # ---- Nova 2 Sonic model ----
    model = BidiNovaSonicModel(
        region="us-east-1",
        model_id="amazon.nova-2-sonic-v1:0",
        provider_config={"audio": {"voice": "tiffany", "input_sample_rate": 16000, "output_sample_rate": 16000}},
    )
    
    # ---- Banking assistant voice agent ----
    agent = BidiAgent(
        model=model,
        system_prompt="""
    You are a banking assistant. Speak naturally and answer questions about account balances, recent transactions. Confirm the customer's identity before sharing sensitive details. Use short, clear responses and acknowledge when retrieving data.
    """,
        tools=[authenticate_customer, get_account_balance, get_recent_transactions],
    )
    
    await agent.run(inputs=[ws_input], outputs=[ws_output])

    Adaptando o system prompt para voz

    O system prompt é a base tanto de agentes de texto quanto de voz — define o papel, o tom e as restrições do agente. Na transição para voz, ele precisa ser adaptado para o contexto de áudio em tempo real: mais conciso, conversacional, com orientações divididas em etapas menores e considerando a latência e o contexto de múltiplos turnos.

    Exemplo de adaptação para o agente bancário:

    • Prompt de texto: “You are a banking assistant. Answer user questions about account balances, recent transactions accurately. Always validate user identity before providing sensitive information.”
    • Prompt adaptado para voz: “You are a banking assistant. Speak naturally and answer questions about account balances, recent transactions. Confirm the customer’s identity before sharing sensitive details. Use short, clear responses and acknowledge when retrieving data.”

    No orquestrador de voz com Nova 2 Sonic, o próprio modelo gerencia o system prompt, a seleção de ferramentas e o contexto da sessão — não é mais necessário um LLM separado para raciocínio no nível do orquestrador.

    Reutilizando sub-agentes com ajustes para voz

    Se a arquitetura atual já usa múltiplos agentes especializados, eles podem ser reaproveitados para voz com alguns ajustes. O diagrama abaixo mostra um assistente bancário onde o orquestrador de voz aciona sub-agentes de autenticação e de consultas de hipoteca:

    Imagem original — fonte: Aws

    Os principais ajustes recomendados pela AWS são:

    • Respostas mais curtas: Um sub-agente de texto pode retornar um parágrafo detalhado. Para voz, o ideal é 1 a 2 frases que o orquestrador possa falar naturalmente. A instrução no system prompt do sub-agente deve ser algo como “Resuma em 1 a 2 frases concisas”.
    • Redução de latência: Escolha modelos menores e mais rápidos para sub-agentes — por exemplo, começar com Nova 2 Lite em vez de um modelo maior. Em conversas de voz, cada inferência adicional gera uma pausa perceptível. Para o Nova 2 Lite, a recomendação é limitar ou evitar o modo de raciocínio estendido para reduzir latência. Mais detalhes no Amazon Nova Developer Guide para Amazon Nova 2.
    • Menor verbosidade nos resultados de ferramentas: Sub-agentes que retornam grandes payloads JSON aumentam a latência, podem reduzir a precisão e expor dados sensíveis. Respostas enxutas e direcionadas são críticas em experiências de voz.
    • Mensagens de preenchimento: Com o Nova 2 Sonic, é possível fazer chamadas assíncronas de ferramentas e personalizar mensagens intermediárias, mantendo o usuário engajado enquanto o agente processa tarefas mais longas.

    A maioria desses ajustes envolve mudanças de prompt e configuração, não modificações arquiteturais. As ferramentas, a lógica de negócio e o deployment dos sub-agentes permanecem os mesmos. Para mais padrões de arquitetura e boas práticas de gerenciamento de latência em agentes de voz, consulte este post.

    Conclusão

    Migrar um agente de texto para um assistente de voz não é apenas adicionar uma camada de áudio. O modelo de interação é fundamentalmente diferente — do design de resposta ao orçamento de latência, passando pelo gerenciamento de turnos. Com uma arquitetura multi-agente bem estruturada e o Amazon Nova 2 Sonic, a camada de lógica de negócio permanece intacta, e a transição se torna muito mais gerenciável.

    Para um exemplo funcional completo de agente de voz com Amazon Nova 2 Sonic, a AWS disponibiliza o Amazon Nova 2 Sonic no Strands BidiAgent. Documentação e recursos adicionais:

    Fonte

    Migrating a text agent to a voice assistant with Amazon Nova 2 Sonic (https://aws.amazon.com/blogs/machine-learning/migrating-a-text-agent-to-a-voice-assistant-with-amazon-nova-2-sonic/)

  • O que a atualização de março de 2026 do Catálogo de Técnicas de Ameaças significa para seu ambiente AWS

    O Catálogo de Técnicas de Ameaças da AWS ganhou três novas entradas

    A equipe de Resposta a Incidentes de Clientes da AWS (AWS CIRT — Customer Incident Response Team) mantém um repositório público chamado Catálogo de Técnicas de Ameaças para AWS (TTC) — um documento vivo que documenta padrões reais de ataque observados em engajamentos de resposta a incidentes. A ideia é simples e valiosa: em vez de guardar esse conhecimento internamente, a AWS o disponibiliza para que qualquer equipe de segurança possa se preparar antes de precisar lidar com um incidente.

    A atualização de março de 2026 traz três novas entradas, todas com algo em comum: exploram comportamentos normais e esperados da plataforma para manter acesso não autorizado ou dificultar a recuperação. Veja o que mudou e por que isso importa para o seu ambiente.

    O que está sendo observado na prática

    Abuso de refresh tokens do Cognito: a persistência silenciosa

    O Amazon Cognito usa refresh tokens para que aplicações possam obter novos tokens de acesso sem exigir que o usuário faça login novamente. Por padrão, esses tokens têm validade de 30 dias — e podem ser configurados com validade de até 10 anos.

    O problema documentado na entrada T1098.A006 é o seguinte: quando um agente malicioso obtém um refresh token válido — seja por roubo de credenciais, comprometimento de armazenamento no lado do cliente ou abuso de permissões elevadas — ele pode chamar a API cognito-idp:GetTokensFromRefreshToken para gerar novos tokens silenciosamente, mantendo acesso ativo por toda a janela de validade do token.

    O detalhe mais perigoso: o usuário legítimo continua usando a aplicação normalmente, porque sua sessão também renova tokens de forma independente. As chamadas do invasor não invalidam a sessão original. Isso cria um acesso paralelo e persistente, completamente invisível para o usuário.

    Em ambientes onde a rotação de refresh tokens não está habilitada, o mesmo token pode ser reutilizado indefinidamente dentro do período de validade. Equipes de resposta que acreditaram ter contido o comprometimento inicial já descobriram, semanas depois, que o acesso não autorizado continuava ativo por meio de um refresh token que nem sabiam que existia.

    Mitigação recomendada: habilitar a rotação de refresh tokens e reduzir o tempo de vida desses tokens são as ações mais diretas para reduzir esse risco.

    Exclusão de imagens AMI: atacando a capacidade de recuperação

    As Imagens de Máquina da Amazon (AMI — Amazon Machine Images) são peças centrais em estratégias de recuperação de desastres. Elas contêm o sistema operacional, configurações de aplicação e tudo o que é necessário para reconstruir a infraestrutura. Exatamente por isso, elas se tornaram alvo.

    A técnica documentada em T1485.A002 envolve o uso da API ec2:DeregisterImage para remover AMIs e dificultar — ou inviabilizar — a recuperação após um incidente. Por padrão, quando uma AMI é desregistrada, ela simplesmente some. Regras de retenção no Recycle Bin permitem recuperar a imagem, mas apenas se essa funcionalidade tiver sido explicitamente habilitada antes do incidente.

    Em casos reais acompanhados pela AWS CIRT, o impacto foi além da perda imediata: os agentes maliciosos também removeram as imagens “golden” — aquelas versões base e validadas que as equipes planejavam usar para restaurar os sistemas. Sem elas, a recuperação se torna muito mais lenta e complexa.

    Mitigação recomendada: habilitar regras de retenção no Recycle Bin para AMIs críticas. O TTC fornece orientações detalhadas sobre como detectar e mitigar essa técnica.

    Roles adicionais na nuvem: o ponto cego nas políticas de confiança

    A entrada T1098.003: Roles Adicionais na Nuvem foi atualizada para incluir o rastreamento da chamada de API UpdateAssumeRolePolicy.

    O contexto é relevante: muitas equipes configuram alertas para detectar a criação de novas roles via iam:CreateRole. Para contornar esse monitoramento, agentes maliciosos com permissões suficientes passaram a modificar a política de confiança de uma role já existente usando UpdateAssumeRolePolicy. Com isso, eles adicionam uma conta externa ou uma identidade que controlam como principal confiável — sem criar nenhuma role nova, sem criar nenhuma política nova.

    A role existente simplesmente passa a confiar em um novo principal, que o invasor pode assumir quando quiser. Nenhum alarme dispara. Nenhuma anomalia óbvia aparece. A modificação se mistura ao volume normal de operações do AWS Identity and Access Management (IAM), especialmente em ambientes com grande número de roles onde mudanças em políticas de confiança não são monitoradas ativamente.

    Mitigação recomendada: incluir UpdateAssumeRolePolicy no monitoramento e configurar alertas para modificações em políticas de confiança de roles existentes.

    A tendência que conecta os três casos

    Há um fio condutor claro nas três atualizações: agentes maliciosos estão usando comportamentos sutis, padrões ou inesperados para escapar da detecção. Refresh tokens funcionando exatamente como foram projetados. Desregistro de AMIs concluindo sem nenhum bloqueio. Políticas de confiança sendo modificadas por chamadas de API completamente legítimas.

    Essas ações provavelmente não dispararão alarmes na maioria dos ambientes — porque parecem operações normais. Essa é uma mudança de postura que merece atenção. Em vez de exploits inéditos ou zero-days, as técnicas catalogadas refletem agentes que entendem como os serviços de nuvem funcionam e usam esse conhecimento para se esconder à vista de todos.

    A implicação para equipes de segurança é direta: as estratégias de prevenção e detecção precisam evoluir além do monitoramento de ações obviamente maliciosas. É preciso observar ações legítimas acontecendo em contexto ilegítimo — a chamada de API certa, feita pelo principal errado, no momento errado.

    Checklist: o que revisar agora no seu ambiente

    A AWS recomenda que as equipes revisem as entradas relevantes do TTC e avaliem se o monitoramento atual conseguiria detectar esses padrões:

    • T1098.A006: Abuso de Refresh Token do Cognito — Você está monitorando chamadas de cognito-idp:GetTokensFromRefreshToken vindas de fontes inesperadas? A rotação de refresh tokens está habilitada?
    • T1485.A002: Exclusão de Imagem AMI — Você tem regras de retenção no Recycle Bin protegendo suas AMIs críticas? Você saberia se uma AMI de produção fosse desregistrada fora de uma janela de manutenção?
    • T1098.003: Roles Adicionais na Nuvem — Modificações em políticas de confiança são rastreadas e geram alertas? Uma conta externa poderia ser adicionada a uma role existente sem que ninguém percebesse?

    Todas essas técnicas deixam rastros no AWS CloudTrail, e o TTC fornece orientações específicas sobre o que monitorar e como responder.

    Por que o TTC existe e como usá-lo

    O Catálogo de Técnicas de Ameaças para AWS parte de uma premissa simples: os padrões observados em engajamentos de resposta a incidentes não deveriam ficar guardados a sete chaves. Quando uma técnica se repete em múltiplos clientes, documentá-la e torná-la pública é a forma mais eficaz de permitir que outras equipes se preparem antes de se encontrarem no meio de um incidente.

    A recomendação da AWS é que equipes de segurança revisem o catálogo regularmente, incorporem suas técnicas em exercícios de modelagem de ameaças e o utilizem como vocabulário compartilhado para discutir ameaças específicas de ambientes de nuvem. O catálogo continuará evoluindo conforme novos padrões forem observados em campo.

    Recursos adicionais

    Fonte

    What the March 2026 Threat Technique Catalog update means for your AWS environment (https://aws.amazon.com/blogs/security/what-the-march-2026-threat-technique-catalog-update-means-for-your-aws-environment/)

  • Amazon Connect Talent: solução de contratação com IA agora em Preview

    O que é o Amazon Connect Talent?

    A AWS anunciou a disponibilidade em Preview do Amazon Connect Talent, uma solução de recrutamento com inteligência artificial voltada para equipes de aquisição de talentos que precisam avaliar grandes volumes de candidatos com consistência e agilidade.

    Segundo a AWS, o serviço foi desenvolvido com base em décadas de ciência de contratação da própria Amazon — o que significa que os modelos e metodologias por trás das avaliações não partem do zero, mas de uma base bastante consolidada de práticas internas.

    Como o serviço funciona na prática

    O Amazon Connect Talent utiliza agentes de IA para conduzir três etapas centrais do processo seletivo de forma automatizada:

    • Entrevistas por voz estruturadas: conduzidas por IA com perguntas adaptativas, sem necessidade de um recrutador humano presente no momento da entrevista.
    • Avaliações baseadas em ciência: testes de competências aplicados de forma padronizada a todos os candidatos.
    • Pontuação consistente: os candidatos são avaliados com critérios uniformes, reduzindo variações subjetivas no processo.

    Do lado dos candidatos, o processo pode ser feito a qualquer hora do dia, sete dias por semana, a partir de qualquer dispositivo — o que amplia bastante o alcance geográfico e de horário para empresas que recrutam em escala.

    O que o recrutador recebe ao final

    Após as entrevistas e avaliações, o recrutador tem acesso a um painel completo com:

    • Pontuações dos candidatos
    • Transcrições das entrevistas
    • Avaliações detalhadas geradas pelo agente de IA

    A proposta é que o recrutador humano foque nas decisões estratégicas — escolher entre os finalistas, conduzir entrevistas aprofundadas — enquanto a triagem inicial fica a cargo da IA.

    Capacidades disponíveis no Preview

    A AWS detalhou o conjunto de funcionalidades que já está disponível nesta fase de Preview:

    • Avaliações de habilidades conduzidas por IA
    • Entrevistas por voz com perguntas adaptativas
    • Portal do candidato mobile-first com personalização de marca
    • Painel completo para recrutadores
    • Ferramentas de onboarding para administradores do sistema
    • Integrações com sistemas de Rastreamento de Candidatos (ATS — Applicant Tracking System) para implantação rápida

    Escala e disponibilidade regional

    Um dos pontos destacados pela AWS é a capacidade de escala: o Amazon Connect Talent consegue avaliar centenas de candidatos simultaneamente, o que o torna especialmente útil em períodos de contratação intensa — como expansões de equipe, sazonalidades ou grandes processos seletivos corporativos.

    Atualmente, o serviço está disponível nas regiões AWS US East (N. Virginia) e AWS US West (Oregon). Para saber mais e solicitar acesso ao Preview, a AWS disponibilizou a página oficial do Amazon Connect Talent.

    Fonte

    Amazon Connect Talent for AI-powered hiring (now available in Preview) (https://aws.amazon.com/about-aws/whats-new/2026/04/amazon-connect-talent-ai-powered/)

  • Como Construir Agentes de IA com Strands SDK, SageMaker AI e MLflow

    Por que usar modelos no SageMaker AI em vez de serviços gerenciados?

    Empresas que constroem agentes de IA frequentemente precisam de mais do que os serviços gerenciados de modelos de fundação (FM — Foundation Model) conseguem oferecer. Requisitos como controle preciso de desempenho, otimização de custos em escala, conformidade regulatória, residência de dados e configurações de rede que se integrem às arquiteturas de segurança existentes são comuns em ambientes corporativos.

    O Amazon SageMaker AI atende a esses requisitos ao dar às organizações controle sobre recursos de computação, comportamento de escalabilidade e posicionamento de infraestrutura — tudo isso aproveitando a camada operacional gerenciada da AWS. Os modelos implantados via SageMaker AI podem alimentar agentes de IA, lidar com cargas de trabalho conversacionais e se integrar com frameworks de orquestração, assim como os FMs disponíveis no Amazon Bedrock. A diferença fundamental é que a organização mantém o controle arquitetural sobre como e onde a inferência acontece.

    Neste artigo, a AWS demonstra como construir agentes de IA usando o Strands Agents SDK com modelos implantados em endpoints do SageMaker AI. O tutorial cobre o deploy de modelos de fundação via SageMaker JumpStart, a integração com o Strands Agents, a configuração de observabilidade com MLflow e a implementação de testes A/B entre variantes de modelos.

    Visão geral das ferramentas envolvidas

    O Strands Agents SDK é um SDK de código aberto que adota uma abordagem orientada a modelos para construir e executar agentes de IA com poucas linhas de código. Ele escala desde casos de uso simples até os mais complexos, e do desenvolvimento local até o deploy em produção.

    O Amazon SageMaker JumpStart é um hub de aprendizado de máquina (ML — Machine Learning) que acelera a jornada de ML das equipes. Com ele, é possível avaliar, comparar e selecionar FMs rapidamente com base em métricas de qualidade e responsabilidade predefinidas.

    O SageMaker AI MLflow é uma funcionalidade gerenciada que simplifica o ciclo de vida de ML por meio de rastreamento de experimentos, versionamento de modelos e gerenciamento de deploy.

    Um Jupyter Notebook com o código completo está disponível no repositório no GitHub.

    Construindo o primeiro agente com Strands

    Um agente Strands combina um modelo, um prompt de sistema e um conjunto de ferramentas. O SDK oferece suporte a diversos provedores de modelos, incluindo o Amazon SageMaker AI, e disponibiliza ferramentas comuns por meio do pacote strands-agent-tools. O trecho de código abaixo mostra como criar um primeiro agente usando o Strands Agents SDK com o modelo Claude 4.5 Sonnet via Amazon Bedrock:

    model = BedrockModel(
        model_id="us.anthropic.claude-sonnet-4-5-20250929-v1:0"
    )
    
    agent = Agent(model=model, tools=[http_request])
    agent("Where is the international space station now?")

    Uma lista de perfis de inferência disponíveis pode ser consultada no Guia do Usuário do Amazon Bedrock. Exemplos detalhados de agentes construídos com o Strands Agents SDK estão disponíveis no repositório de exemplos no GitHub.

    Passo a passo: construindo um agente Strands com SageMaker AI

    O Strands Agents SDK implementa um provedor nativo para o SageMaker AI, permitindo executar agentes contra modelos implantados em endpoints de inferência do SageMaker. Isso inclui tanto modelos pré-treinados do SageMaker JumpStart quanto modelos customizados com fine-tuning. O modelo utilizado deve suportar APIs de completions de chat compatíveis com OpenAI. O tutorial usa os modelos Qwen3 4B e Qwen3 8B disponíveis no SageMaker JumpStart.

    Pré-requisitos

    • Uma conta AWS com acesso ao Amazon Bedrock e ao Amazon SageMaker AI
    • Uma role com permissões para SageMaker AI, Amazon Bedrock, SageMaker AI Serverless MLflow, Amazon S3 e SageMaker JumpStart
    • Um Jupyter Notebook rodando localmente ou no SageMaker AI Studio

    Passo 1: Instalar os pacotes necessários

    %%writefile requirements.txt
    strands-agents>=1.9.1
    strands-agents-tools>=0.2.8
    mlflow>=3.4.0
    strands-agents[sagemaker]
    mlflow-sagemaker>=1.5.11
    
    pip install -r requirements.txt

    Passo 2: Fazer o deploy do modelo como endpoint no SageMaker AI

    # Deploy initial endpoint with Qwen-4B
    import sagemaker
    import boto3
    from boto3.session import Session
    from sagemaker.jumpstart.model import JumpStartModel
    
    boto_session = Session()
    sts = boto3.client('sts')
    account_id = sts.get_caller_identity().get("Account")
    region = boto_session.region_name
    
    ENDPOINT_NAME = INITIAL_CONFIG_NAME = "llm-qwen-endpoint-sagemaker"
    
    model_a = JumpStartModel(
        model_id="huggingface-reasoning-qwen3-4b",
        model_version="1.0.0",
        name="qwen3-4b-model"
    )
    
    predictor_a = model_a.deploy(
        initial_instance_count=1,
        instance_type="ml.g5.2xlarge",
        endpoint_name=ENDPOINT_NAME
    )

    Passo 3: Usar o modelo implantado com o agente Strands

    from strands.models.sagemaker import SageMakerAIModel
    from strands import Agent, tool
    from strands_tools import http_request, calculator
    
    model_sagemaker = SageMakerAIModel(
        endpoint_config={
            "endpoint_name": ENDPOINT_NAME,
            "region_name": region
        },
        payload_config={
            "max_tokens": 2048,
            "temperature": 0.2,
            "stream": True,
        }
    )
    
    agent = Agent(model=model_sagemaker, tools=[http_request])
    agent("Where is the international space station now? (Use: http://api.open-notify.org/iss-now.json)")

    Para mais informações sobre o SageMaker AI como provedor de modelos para o Strands Agents, consulte a documentação do Amazon SageMaker no site do Strands Agents.

    Observabilidade com SageMaker AI Serverless MLflow

    O SageMaker AI Serverless MLflow oferece observabilidade abrangente para agentes de IA, capturando automaticamente traces de execução, padrões de uso de ferramentas e fluxos de tomada de decisão — sem necessidade de instrumentação manual. O serviço gerenciado reduz a sobrecarga operacional e se integra nativamente ao Strands Agents SDK, permitindo monitorar o comportamento dos agentes em múltiplos deploys, identificar gargalos de desempenho e manter trilhas de auditoria para requisitos de conformidade.

    Passo 1: Configurar o MLflow App

    É possível configurar um MLflow App via interface do SageMaker AI Studio ou programaticamente com o SDK Boto3. O exemplo abaixo usa o Boto3:

    s3_client = boto3.client('s3', region_name=region)
    bucket_name = f'{account_id}-mlflow-bucket'
    
    if region == 'us-east-1':
        s3_client.create_bucket(Bucket=bucket_name)
    else:
        s3_client.create_bucket(
            Bucket=bucket_name,
            CreateBucketConfiguration={'LocationConstraint': region}
        )
    
    sagemaker_client = boto3.client('sagemaker')
    
    mlflow_app_details = sagemaker_client.create_mlflow_app(
        Name='strands-mlflow-app',
        ArtifactStoreUri=f's3://{account_id}-mlflow-bucket/artifacts',
        RoleArn=role,
    )
    print(f"MLflow app creation initiated: {mlflow_app_details['Arn']}")

    Passo 2: Habilitar o logging automático para o agente

    import os
    import mlflow
    
    tracking_uri = mlflow_app_details['Arn']
    os.environ["MLFLOW_TRACKING_URI"] = tracking_uri
    
    mlflow.set_experiment("Strands-MLflow")
    mlflow.strands.autolog()

    Passo 3: Executar o agente com rastreamento ativo

    def capitalize(response):
        return response.upper()
    
    agent = Agent(model=model_sagemaker, tools=[http_request])
    response = agent("Where is the international space station now?")
    capitalize(response.message['content'][0]['text'])

    Os traces e métricas ficam disponíveis na interface do MLflow App por meio de uma URL pré-assinada:

    presigned_response = sagemaker_client.create_presigned_mlflow_app_url(
        Arn=mlflow_app_details['Arn']
    )
    mlflow_ui_url = presigned_response['AuthorizedUrl']
    print(f"MLflow UI URL: {mlflow_ui_url}")

    Rastreamento manual de funções personalizadas

    O logging automático do MLflow captura a invocação do agente e suas chamadas de ferramentas e FMs. Funções externas ao agente, como a capitalize do exemplo, não são registradas automaticamente. Para rastrear um bloco completo de código, o MLflow oferece a capacidade de rastreamento manual via decoradores:

    @mlflow.trace(span_type="func", attributes={"operation": "capitalize"})
    def capitalize(response):
        return response.upper()
    
    @mlflow.trace
    def run_agent():
        agent = Agent(tools=[http_request])
        mlflow.update_current_trace(request_preview="Run Strands Agent")
        response = agent("Where is the international space station now? (Use: http://api.open-notify.org/iss-now.json) ")
        capitalized_response = capitalize(response.message['content'][0]['text'])
        return capitalized_response
    
    capitalized_response = run_agent()
    print(capitalized_response)

    Testes A/B com múltiplas variantes de modelos

    Com o SageMaker AI, é possível otimizar os modelos de linguagem de grande porte (LLM — Large Language Model) para aplicações de agentes. Por exemplo, ao considerar uma migração do Qwen3-4B para o Qwen3-8B, não é necessário fazer a troca completa imediatamente. É possível implantar o novo modelo lado a lado com o atual e distribuir o tráfego entre os dois endpoints de LLM para conduzir testes A/B antes de confirmar a atualização.

    Configurando as variantes de produção

    # Step1: Create a model from JumpStart
    model_b_name ="sagemaker-strands-demo-qwen3-8b"
    model_b_id, model_b_version = "huggingface-reasoning-qwen3-8b", "1.0.0"
    
    model_8b = JumpStartModel(
        model_id="huggingface-reasoning-qwen3-8b",
        model_version="1.0.0",
        name=model_b_name
    )
    model_b.create(instance_type="ml.g5.2xlarge")
    
    # Step2: Create production variants for A/B testing
    production_variants = [
        {
            "VariantName": "qwen-4b-variant",
            "ModelName": "qwen3-4b-model",
            "InitialInstanceCount": 1,
            "InstanceType": "ml.g5.2xlarge",
            "InitialVariantWeight": 0.5
        },
        {
            "VariantName": "qwen3-8b-variant",
            "ModelName": model_b_name,
            "InitialInstanceCount": 1,
            "InstanceType": "ml.g5.2xlarge",
            "InitialVariantWeight": 0.5
        }
    ]
    
    # Step3: Create new endpoint configuration
    ENDPOINT_CONFIG_AB_TESTING = "llm-endpoint-config-ab"
    sagemaker_client.create_endpoint_config(
        EndpointConfigName=ENDPOINT_CONFIG_AB_TESTING,
        ProductionVariants=production_variants
    )
    
    # Step4: Update the endpoint with new A/B testing configuration
    sagemaker_client.update_endpoint(
        EndpointName=ENDPOINT_NAME,
        EndpointConfigName=ENDPOINT_CONFIG_AB_TESTING
    )
    
    waiter = boto3.client('sagemaker').get_waiter('endpoint_in_service')
    waiter.wait(EndpointName=ENDPOINT_NAME)

    Para um experimento controlado, é possível criar dois agentes apontando para variantes específicas:

    model_sagemaker_a = SageMakerAIModel(
        endpoint_config={
            "endpoint_name": ENDPOINT_NAME,
            "region_name": region,
            "target_variant":"qwen-4b-variant"
        },
        payload_config={
            "max_tokens": 2048,
            "temperature": 0.2,
            "stream": True,
        }
    )
    
    model_sagemaker_b = SageMakerAIModel(
        endpoint_config={
            "endpoint_name": ENDPOINT_NAME,
            "region_name": region,
            "target_variant":"qwen-8b-variant"
        },
        payload_config={
            "max_tokens": 2048,
            "temperature": 0.2,
            "stream": True,
        }
    )

    Avaliando os agentes com MLflow GenAI

    Com ambas as variantes implantadas, o próximo passo é avaliá-las sistematicamente usando o framework de avaliação de IA generativa (GenAI — Generative Artificial Intelligence) do MLflow, que combina métricas customizadas e juízes baseados em LLM.

    Criando o dataset de avaliação

    eval_dataset = [
        {
            "inputs": {"query": "Calculate 15% tip on a $85.50 bill. Use calculator tool"},
            "expectations": {
                "expected_tool": "calculator",
                "expected_facts": ["The tip amount is approximately $12.83"]
            }
        },
        {
            "inputs": {"query": "What is 2048 divided by 64? Use calculator tool"},
            "expectations": {
                "expected_tool": "calculator",
                "expected_facts": ["The answer is 32"]
            }
        }
    ]

    Definindo os scorers de avaliação

    from mlflow.genai.scorers import scorer, Correctness, RelevanceToQuery
    from mlflow.entities import Feedback
    
    @scorer
    def tool_selection_scorer(inputs, outputs, expectations):
        expected_tool = expectations.get("expected_tool", "")
        tool_used = expected_tool in outputs.get("tools", [])
        return Feedback(name="tool_selection", value=1.0 if tool_used else 0.0)

    Executando a avaliação comparativa

    import mlflow
    from strands import Agent
    from strands_tools import calculator
    
    mlflow.set_experiment("Strands_Agents_AB_Evaluation")
    
    def predict_4b(query):
        agent = Agent(model=model_sagemaker_a, tools=[calculator])
        response = agent(query)
        return {"outputs": str(response), "tools": list(response.metrics.tool_metrics.keys())}
    
    def predict_8b(query):
        agent = Agent(model=model_sagemaker_b, tools=[calculator])
        response = agent(query)
        return {"outputs": str(response), "tools": list(response.metrics.tool_metrics.keys())}
    
    scorers = [
        tool_selection_scorer,
        Correctness(model="bedrock:/us.amazon.nova-pro-v1:0"),
        RelevanceToQuery(model="bedrock:/us.amazon.nova-pro-v1:0")
    ]
    
    eval_results_4b = mlflow.genai.evaluate(data=eval_dataset, predict_fn=predict_4b, scorers=scorers)
    eval_results_8b = mlflow.genai.evaluate(data=eval_dataset, predict_fn=predict_8b, scorers=scorers)

    Comparando os resultados

    metrics_4b = eval_results_4b.metrics
    metrics_8b = eval_results_8b.metrics
    
    for metric in metrics_4b:
        print(f"{metric}: 4B={metrics_4b[metric]:.3f}, 8B={metrics_8b[metric]:.3f}")

    Caso o novo modelo se mostre superior, basta ajustar os pesos das variantes para direcionar 100% do tráfego para ele:

    production_variants = [
        {
            "VariantName": "qwen-8b-variant",
            "ModelName": model_b_name,
            "InitialInstanceCount": 1,
            "InstanceType": "ml.g5.2xlarge",
            "InitialVariantWeight": 1
        }
    ]

    Solução de problemas e limpeza de recursos

    Caso ocorra o erro ImportError: cannot import name 'TokenUsageKey' from 'mlflow.tracing.constant' ou outros problemas com o rastreamento do Strands no MLflow, verifique se a versão do MLflow instalada é 3.4.0 ou superior, e se a role utilizada possui permissões de leitura, escrita e listagem no bucket S3 configurado como artifact store do MLflow.

    Para remover os recursos criados ao longo do tutorial:

    sagemaker_client.delete_endpoint(EndpointName=ENDPOINT_NAME)
    sagemaker_client.delete_endpoint_config(EndpointConfigName=INITIAL_CONFIG_NAME)
    sagemaker_client.delete_endpoint_config(EndpointConfigName=ENDPOINT_CONFIG_AB_TESTING)
    
    sagemaker_client.delete_mlflow_app(
        Arn=server_info["Arn"]
    )

    Conclusão

    A combinação do Strands Agents SDK com o Amazon SageMaker AI e o SageMaker Serverless MLflow cria um framework robusto para construir, implantar e monitorar agentes de IA com controle total sobre a infraestrutura. O deploy de modelos no SageMaker AI garante controle preciso sobre recursos de computação, configurações de rede e políticas de escalabilidade — especialmente valioso para organizações com requisitos específicos de desempenho, custo ou conformidade. A integração com o MLflow oferece observabilidade sólida, rastreamento de comportamento dos agentes e trilhas de auditoria.

    Para quem quiser se aprofundar, a AWS recomenda explorar o Strands Agents SDK e consultar o guia de decisão entre Amazon Bedrock e Amazon SageMaker AI para entender qual serviço é mais adequado para cada caso de uso.

    Fonte

    Build Strands Agents with SageMaker AI models and MLflow (https://aws.amazon.com/blogs/machine-learning/build-strands-agents-with-sagemaker-ai-models-and-mlflow/)