Blog

  • Construindo agentes multi-tenant com o Amazon Bedrock AgentCore

    O desafio de levar agentes de IA para produção em ambientes SaaS

    Provedores de Software como Serviço (SaaS) que desenvolvem aplicações agênticas com múltiplos inquilinos (multi-tenant) enfrentam desafios arquiteturais que vão muito além das preocupações habituais de segurança e governança. Isolamento entre tenants, gerenciamento de identidade, observabilidade, atribuição de custos e mitigação do problema de “vizinho barulhento” são apenas alguns dos obstáculos que separam uma demonstração funcional de um ambiente de produção robusto.

    Para endereçar esse cenário, a AWS anunciou o Amazon Bedrock AgentCore, um serviço gerenciado e serverless para construir, implantar e operar com segurança aplicações agênticas na AWS. O serviço oferece primitivos para deploy de agentes, hospedagem de servidores MCP (Model Context Protocol), além de suporte nativo a gerenciamento de identidade, memória, observabilidade e avaliações — tudo projetado para tornar arquiteturas multi-tenant mais simples de construir.

    Dez componentes de design para agentes multi-tenant

    A AWS detalhou dez componentes arquiteturais que precisam ser considerados ao projetar agentes multi-tenant com o AgentCore. Cada um exige decisões que equilibram isolamento, eficiência operacional e otimização de custos.

    Os padrões de isolamento que permeiam todas essas decisões são três: Silo, Pool e Bridge. A escolha entre eles depende da estratégia de tiers do produto SaaS.

    1. Runtime do agente: dedicado ou compartilhado

    A decisão mais fundamental é como o runtime do agente é provisionado em relação aos tenants. Um runtime dedicado por tenant (padrão Silo) oferece a maior proteção contra o problema do vizinho barulhento e facilita auditorias de conformidade. Um runtime compartilhado reduz custos e overhead operacional, mas exige propagação rigorosa do contexto do tenant dentro do processo.

    O AgentCore Runtime resolve essa tensão com computação baseada em microVMs isoladas por sessão. Cada sessão recebe seu próprio sistema de arquivos persistente, permitindo que os agentes mantenham estado entre etapas de uma interação sem risco de vazamento entre sessões. O contexto do tenant é injetado no ambiente de execução via cabeçalhos HTTP customizados — incluindo identificador do tenant, tier, preferências regionais, feature flags e entitlements.

    2. Modelos: compartilhados, por tier ou fine-tuned

    Modelos de fundação (FM — Foundation Models) compartilhados são o ponto de partida recomendado para a maioria dos deployments multi-tenant. Para casos que exigem terminologia específica, conformidade regulatória ou SLAs de performance, modelos fine-tuned por tenant se tornam necessários, embora introduzam maior complexidade operacional.

    A AWS oferece, via Amazon Bedrock, uma seleção de grandes modelos de linguagem (LLM — Large Language Models) de diferentes provedores, além de suporte a fine-tuning com datasets próprios e importação de modelos customizados via Amazon Bedrock Custom Model Import.

    3. Workflows: padrões Silo, Pool e Bridge

    Workflows podem ser implementados como ferramentas MCP, endpoints de API ou habilidades do agente. O padrão Silo usa habilidades dedicadas por tenant, com toda a lógica de negócio isolada — máxima customização, mas manutenção separada por tenant. O padrão Pool usa habilidades compartilhadas. O padrão Bridge combina os dois: etapas comuns (autenticação, logging, tratamento de erros) ficam em habilidades compartilhadas, que invocam habilidades específicas do tenant em runtime para a lógica crítica de negócio.

    4. RAG multi-tenant

    Sistemas de Geração Aumentada por Recuperação (RAG — Retrieval Augmented Generation) exigem decisões de isolamento de dados. O padrão Silo usa bancos de dados vetoriais dedicados por tenant — recomendado para indústrias reguladas. O padrão Pool usa bancos vetoriais compartilhados com filtragem por metadados e controle de acesso por namespace, mais eficiente em custo para plataformas com muitos tenants pequenos e médios.

    O Amazon Bedrock Knowledge Bases oferece capacidades gerenciadas de RAG com suporte a múltiplos bancos vetoriais e possibilidade de criar bases de conhecimento isoladas ou compartilhadas. Para orientações detalhadas, a AWS publicou referências sobre RAG multi-tenant com Amazon Bedrock Knowledge Bases e sobre multi-tenancy em aplicações RAG com filtragem de metadados.

    5. Contexto do tenant, padrão act-on-behalf e propagação de tokens

    Diferentemente de APIs determinísticas, agentes de IA são não-determinísticos e potencialmente autônomos. Um agente comprometido poderia fazer chamadas não autorizadas a serviços downstream, levando a roubo de credenciais, escalada de privilégios e o problema do “Confused Deputy”.

    A AWS recomenda o padrão de delegação (Act-on-Behalf), em vez de impersonação completa. Nesse modelo, os tokens são transformados em cada fronteira de serviço com credenciais de escopo limitado e uma claim act (conforme o RFC 8693 do OAuth 2.0) que identifica o agente. O AgentCore Identity suporta a troca de token On-behalf-of, permitindo que agentes e servidores MCP troquem um token de acesso do usuário por um novo token com escopo restrito para um recurso downstream específico.

    O contexto do tenant deve ser codificado em Tokens Web JSON (JWT — JSON Web Tokens) capturando três dimensões: Contexto de Segurança (claims padrão: iss, sub, exp, aud), Contexto do Tenant (tenant_id e escopos específicos) e Contexto da Requisição (atributos de domínio para lógica de negócio).

    6. Controle de acesso granular para ferramentas MCP e APIs

    Aplicações agênticas multi-tenant precisam restringir o acesso a servidores MCP por meio de políticas avaliadas em runtime — considerando cotas do tenant, permissões por tier e limites de uso. O AgentCore Policy intercepta e avalia todas as requisições dos agentes antes de permitir acesso a ferramentas, com políticas escritas em linguagem natural ou diretamente em Cedar.

    Na camada de invocação, servidores MCP filtram as ferramentas disponíveis com base no tier do tenant, feature flags e limites de quota. O AgentCore Gateway permite que agentes acessem ferramentas de forma segura, transformando APIs e funções AWS Lambda em ferramentas compatíveis com agentes, com suporte a Amazon API Gateway, schemas OpenAPI, modelos Smithy, funções Lambda e servidores MCP.

    Na camada de acesso a dados, políticas de Controle de Acesso Baseado em Atributos (ABAC — Attribute-Based Access Control) reforçam o isolamento usando condições do AWS Identity and Access Management (IAM — Identity and Access Management) para restringir o acesso a dados com base em tags e atributos do principal.

    7. Memória: isolamento por namespace hierárquico

    O gerenciamento de memória multi-tenant deve implementar cinco níveis lógicos: Global (conhecimento compartilhado entre tenants), Estratégia (padrões específicos por tipo de agente), Tenant (histórico e preferências do tenant), Usuário (contexto individual dentro do tenant) e Sessão (memória de curto prazo para conversas ativas).

    O AgentCore Memory oferece isolamento por namespace hierárquico em todos esses níveis, com suporte a políticas baseadas em recursos e controle de acesso baseado em atributos para acesso granular. A implementação envolve construir identificadores compostos a partir de informações do tenant e do usuário (por exemplo, tenant_123:user_456) e prefixar todas as operações de memória com o caminho de namespace apropriado.

    8. Identidade, confiança e descoberta de agentes

    Conforme agentes interagem com outros agentes além das fronteiras organizacionais, três preocupações fundamentais emergem: identidade (quem é este agente e ele pode provar isso?), confiança (devo confiar neste agente?) e descoberta (como encontro o agente certo?).

    O AgentCore Identity implementa identidades de agente como workload identities, com cada agente recebendo uma identidade verificável criptograficamente ancorada na conta AWS e na infraestrutura IAM da organização. Para confiança, a indústria ainda está trabalhando no problema — o Agent Naming Service (ANS) v2, atualmente um Internet-Draft da IETF (trabalho em andamento), ancora cada identidade de agente a um nome de domínio DNS, com três níveis de verificação: Bronze (PKI), Silver (PKI + DANE) e Gold (PKI + DANE + Transparency Log).

    Para descoberta, o AWS Agent Registry, disponível via Amazon Bedrock AgentCore, oferece um catálogo centralizado para descobrir agentes, habilidades, servidores MCP e recursos customizados em uma organização, com busca por linguagem natural ou estruturada.

    9. Rastreamento de custos por tenant e observabilidade

    A atribuição precisa de custos em ambientes multi-tenant requer instrumentação a nível de aplicação que emita métricas tagueadas por tenant para cada invocação do agente, capturando tokens de entrada/saída, invocações de ferramentas e duração de execução. O AgentCore Observability oferece visibilidade em tempo real dos workflows dos agentes com integração compatível com OpenTelemetry, alimentada pelo Amazon CloudWatch.

    10. Guardrails: segurança de conteúdo

    Guardrails multi-tenant atuam em três pontos: pré-processamento (validação do input antes do processamento pelo agente, bloqueando prompt injections e sanitizando PII conforme requisitos de conformidade como HIPAA e PCI-DSS), pós-processamento (validação das respostas para precisão factual, detecção de alucinações e varredura por vazamento de dados sensíveis) e configurações por tenant ou tier.

    O Amazon Bedrock Guardrails oferece filtragem de conteúdo e controles de segurança com políticas configuráveis para tópicos negados, filtros de conteúdo, filtros de palavras e redação de informações sensíveis.

    Implementando os três padrões com o AgentCore

    Padrão Silo

    No modelo Silo, cada tenant opera dentro de uma stack totalmente isolada, com seu próprio AgentCore Runtime, AgentCore Gateway e AgentCore Memory, todos delimitados por fronteiras IAM separadas. O fluxo começa com a autenticação do usuário no provedor de identidade, que emite um JWT com o contexto do tenant. Um proxy da aplicação SaaS roteia a requisição para o agente correto com base nesse contexto, e o AgentCore Runtime valida o JWT, cria uma sessão microVM isolada e inicia o raciocínio do agente. Quando o agente precisa invocar ferramentas, chama o Gateway dedicado ao tenant, que valida o JWT, extrai o contexto e integra com os recursos backend específicos daquele tenant.

    O trade-off é o maior overhead operacional, já que cada cliente executa recursos dedicados. Mas para workflows críticos de segurança e conformidade, o escopo limitado de impacto potencial justifica a escolha.

    Padrão Pool

    No modelo Pool, os recursos são compartilhados entre múltiplos tenants para maximizar a utilização e a eficiência operacional. O AgentCore Runtime e a lógica do agente são compartilhados, com o contexto do tenant extraído do JWT em cada execução. O AgentCore Memory é particionado com base no contexto do tenant usando namespace (por exemplo, actor_id: "tenant-a:user-123"). O Gateway centralizado roteia chamadas de ferramentas para recursos backend compartilhados, aplicando isolamento via credenciais e configurações com escopo por tenant.

    O modelo Pool é altamente eficiente e pode ser a única opção viável quando há um grande número de tenants pequenos. O trade-off é a necessidade de maior rigor nos testes de controle de acesso granular e mais instrumentação para atribuição de custos por tenant.

    Padrão Bridge

    O modelo Bridge representa um meio-termo estratégico, combinando a eficiência de custo da infraestrutura compartilhada com os benefícios de segurança de recursos isolados. A ideia é poder escolher o nível de isolamento em cada camada e componente individualmente, em vez de estar preso a um padrão único. Por exemplo, é possível ter um AgentCore Runtime e Gateway siloed para tenants premium e um Runtime e Gateway pooled para tenants do tier padrão. Outra variação possível é um Runtime siloed com Gateway e ferramentas pooled.

    Próximos passos

    Este artigo cobre os conceitos fundamentais para construção de agentes multi-tenant. A AWS indicou que publicará posts subsequentes com implementações end-to-end dos modelos Pool e Silo, incorporando os componentes detalhados nas considerações de design. Para quem quiser colocar a mão na massa desde já, a AWS disponibilizou um workshop de agentes multi-tenant com experiência prática usando o Amazon Bedrock AgentCore.

    Fonte

    Building multi-tenant agents with Amazon Bedrock AgentCore (https://aws.amazon.com/blogs/machine-learning/building-multi-tenant-agents-with-amazon-bedrock-agentcore/)

  • Quebrando a barreira da janela de contexto com o Amazon Bedrock AgentCore

    O problema da janela de contexto em documentos grandes

    Quem já tentou analisar documentos extensos com modelos de linguagem grandes (LLM, do inglês Large Language Model) conhece bem o problema: em algum momento, o documento simplesmente não cabe na janela de contexto do modelo. E quando isso acontece, ou a requisição falha, ou o modelo trabalha com informações incompletas — o que compromete diretamente a qualidade das respostas.

    Considere uma tarefa comum de análise financeira: comparar métricas de dois anos consecutivos de relatórios anuais de uma empresa. Cada relatório pode ter entre 300 e 500 páginas. Somando relatórios de analistas, documentos da SEC e materiais complementares, o total facilmente chega a milhões de caracteres. Mesmo os maiores contextos disponíveis hoje têm um teto — e o famoso problema do “lost in the middle” (informação perdida no meio do contexto) ainda afeta modelos mesmo quando o documento tecnicamente cabe.

    A AWS publicou uma abordagem para contornar essa limitação estrutural usando Amazon Bedrock AgentCore em conjunto com o Strands Agents SDK. A técnica é chamada de Modelos de Linguagem Recursivos (RLM, do inglês Recursive Language Models).

    O que são Modelos de Linguagem Recursivos (RLM)

    Os RLMs foram introduzidos por Zhang et al. no artigo arXiv:2512.24601 e propõem uma mudança de perspectiva: em vez de tentar colocar o documento inteiro dentro da janela de contexto, o modelo passa a tratar o documento como um ambiente externo com o qual ele interage programaticamente.

    Na prática, o modelo recebe apenas a pergunta do usuário e uma descrição do ambiente disponível. A partir daí, ele escreve código para buscar, fatiar e analisar o documento de forma iterativa. Quando precisa de compreensão semântica de uma seção específica, ele delega essa análise a uma chamada de sub-LLM, mantendo os resultados em memória de trabalho como variáveis Python — sem consumir espaço na janela de contexto principal.

    Isso cria uma estrutura recursiva: o LLM raiz orquestra a análise via código, chamando sub-LLMs conforme necessário para tarefas semânticas, enquanto o documento completo jamais entra diretamente na janela de contexto do modelo orquestrador.

    Arquitetura da solução com Amazon Bedrock AgentCore

    A implementação descrita pela AWS combina três componentes que trabalham juntos:

    • Agente LLM raiz, construído com o Strands Agents SDK, que recebe a pergunta do usuário e decide qual código executar.
    • Sessão do Amazon Bedrock AgentCore Code Interpreter, rodando em modo de rede pública (PUBLIC), com o documento completo carregado como variável Python.
    • Função llm_query() injetada no sandbox, que chama o Amazon Bedrock diretamente de dentro do Code Interpreter — mantendo os resultados dos sub-LLMs em variáveis Python, sem que eles retornem para o contexto do LLM raiz.

    O modo de rede pública do Bedrock AgentCore Code Interpreter é essencial aqui: ele permite que o sandbox faça chamadas de saída para a API do Amazon Bedrock. O estado persistente da sessão garante que variáveis, resultados intermediários e dados extraídos se acumulem ao longo de múltiplas execuções de código — funcionando como uma memória de trabalho que persiste durante toda a análise.

    Como implementar: passo a passo

    Pré-requisitos

    Para seguir a implementação, são necessários:

    • Uma conta AWS com acesso aos modelos fundacionais do Amazon Bedrock.
    • Python 3.10 ou superior.
    • A Interface de Linha de Comando da AWS (AWS CLI) configurada com as credenciais adequadas.
    • Familiaridade com Python e uso básico do AWS SDK (Boto3).
    • Um Amazon Bedrock AgentCore Code Interpreter configurado em modo de rede PUBLIC.
    • Permissões do Gerenciamento de Identidade e Acesso (IAM) para: bedrock:InvokeModel, bedrock-agentcore:StartCodeInterpreterSession, bedrock-agentcore:InvokeCodeInterpreter e bedrock-agentcore:StopCodeInterpreterSession.

    Passo 1: Iniciar uma sessão do Code Interpreter e carregar o documento

    O primeiro passo é criar uma sessão do Amazon Bedrock AgentCore Code Interpreter e escrever o documento no sandbox:

    import boto3
    import json
    
    # Start a Bedrock AgentCore Code Interpreter session
    client = boto3.client('bedrock-agentcore', region_name='us-east-1')
    response = client.start_code_interpreter_session(
        codeInterpreterIdentifier=code_interpreter_id,
        name="rlm-session",
        sessionTimeoutSeconds=3600
    )
    session_id = response["sessionId"]
    
    # Write the document to the sandbox
    client.invoke_code_interpreter(
        codeInterpreterIdentifier=code_interpreter_id,
        sessionId=session_id,
        name="writeFiles",
        arguments={"content": [{"path": "_context.txt", "text": document}]}
    )

    Passo 2: Inicializar o documento e definir a função llm_query() dentro do sandbox

    Dentro do sandbox, o documento é carregado e a função llm_query() é definida para que as chamadas de sub-LLM possam ser feitas diretamente de dentro do Code Interpreter:

    # Runs inside the Bedrock AgentCore Code Interpreter sandbox
    with open('_context.txt', 'r') as f:
        context = f.read()
    
    def llm_query(prompt: str) -> str:
        """Query a sub-LLM from within the sandbox."""
        response = bedrock_client.invoke_model(
            modelId=sub_model_id,
            body=json.dumps({
                "anthropic_version": "bedrock-2023-05-31",
                "max_tokens": 4096,
                "messages": [{"role": "user", "content": prompt}]
            })
        )
        result = json.loads(response['body'].read())
        return result['content'][0]['text']

    Passo 3: Criar o agente Strands e executar a consulta

    Com o ambiente preparado, basta criar um agente Strands com uma ferramenta execute_python que executa código na sessão e enviar a pergunta:

    from strands import Agent
    
    agent = Agent(
        model="us.anthropic.claude-sonnet-4-5-20250929-v1:0",
        system_prompt=rlm_system_prompt,
        tools=[execute_python],
    )
    
    answer = agent("What are the key revenue trends across these reports?")

    O agente escreve e executa código Python de forma iterativa para explorar o documento, extrair seções relevantes e chamar llm_query() quando precisar de análise semântica de trechos específicos.

    Resultados: RLM vs. abordagens tradicionais

    A AWS avaliou a abordagem em dois subconjuntos do benchmark LongBench v2, comparando três estratégias:

    • Base: o documento completo é enviado diretamente ao modelo em uma única chamada de API com janela de contexto de 200 mil tokens.
    • Long Context: uso da janela estendida de 1 milhão de tokens do Claude, que suporta entradas maiores mas ainda tem limite superior e pode sofrer com o problema do “lost in the middle”.
    • RLM: a abordagem descrita neste post.

    QA Financeiro Multi-Documento (15 questões)

    Os resultados para o subconjunto de QA Financeiro foram os seguintes:

    • A abordagem Base atingiu taxa de sucesso de 46,7% e precisão de 33,3% (Claude Haiku 4.5).
    • A abordagem Long Context atingiu 93,3% de sucesso e 60–66,7% de precisão, dependendo do modelo.
    • O RLM atingiu 100% de taxa de sucesso em todas as configurações avaliadas, com precisão variando de 66,7% (Haiku 4.5 e Sonnet 4.5) a 80,0% (Claude Opus 4.6 + Haiku 4.5 como sub-LLM).
    • Para referência, a precisão de especialistas humanos no mesmo benchmark é de 40%.

    Compreensão de Repositórios de Código (50 questões)

    O segundo subconjunto testou a capacidade de navegar por grandes bases de código — um cenário especialmente adequado para exploração programática. Os resultados foram igualmente expressivos:

    • Base: 30% de sucesso e 20% de precisão.
    • Long Context: 60% de sucesso e 42–46% de precisão.
    • RLM: 100% de sucesso e precisão entre 64% e 76% dependendo do modelo raiz.

    Três conclusões dos resultados

    1. O RLM elimina falhas por limite de contexto. Ao desacoplar o tamanho do documento da janela de contexto, o RLM processa 100% das questões — enquanto Base e Long Context falham em parte delas.

    2. O RLM melhora a precisão na maioria dos modelos. O maior ganho foi observado no Claude Haiku 4.5 (de 33,3% para 66,7%). Modelos mais fortes como Sonnet 4.6 e Opus 4.6 também melhoraram, mas com ganhos menores. O Claude Sonnet 4.5 não apresentou melhora sobre o Long Context baseline, sugerindo que os ganhos dependem da capacidade do modelo raiz de decompor a tarefa em sub-consultas eficazes.

    3. A escolha do sub-LLM tem impacto limitado. Nos experimentos, usar o Claude Haiku 4.5 como sub-LLM em vez do mesmo modelo principal não produziu diferença significativa de precisão. O desempenho é determinado principalmente pela capacidade do modelo raiz de gerar sub-consultas eficientes.

    Como o modelo trabalha na prática

    Para ilustrar o funcionamento real, a AWS descreve uma sequência representativa de um dos casos de avaliação. O modelo precisa comparar métricas financeiras em dois relatórios anuais que somam aproximadamente 1,5 milhão de caracteres.

    Primeiro, o modelo busca marcadores estruturais para entender o layout do documento:

    matches = re.findall(r'Table of Contents|ANNUAL REPORT', context)

    Em seguida, fatia seções específicas para localizar tabelas de receita:

    revenue_section = context[450000:500000]
    print(revenue_section)

    Para análise semântica, delega ao sub-LLM:

    analysis = llm_query(f"Compare these revenue figures: {chunk}")

    Por fim, agrega os resultados de múltiplas seções e chega à resposta final.

    Considerações práticas

    A AWS destaca três pontos importantes para quem for adotar o RLM em produção:

    Latência. O RLM troca latência por capacidade. Nas avaliações, execuções individuais variaram de cerca de 10 segundos para perguntas simples a alguns minutos para questões complexas com contextos grandes. Para processamento em lote ou análise offline, esse tradeoff é bem justificado. Para aplicações em tempo real, vale avaliar se a tarefa realmente exige processar documentos além da janela de contexto do modelo.

    Custo. Cada execução do RLM envolve múltiplas invocações de modelo — tanto o raciocínio iterativo do LLM raiz quanto as chamadas de sub-LLM dentro do sandbox. Para workloads sensíveis a custo, usar um modelo menor (como o Haiku 4.5) como sub-modelo e um modelo maior como raiz é uma estratégia eficaz para reduzir custos sem comprometer a precisão.

    Engenharia de prompt. O prompt de sistema influencia diretamente a eficiência do modelo no uso das ferramentas. Sem orientações claras, modelos tendem a fazer chamadas desnecessárias ao sub-LLM para validar o próprio raciocínio ou imprimir resumos intermediários verbosos. Instruções precisas sobre quando usar execução de código versus raciocínio direto reduzem chamadas desperdiçadas e melhoram a latência.

    Limpeza de recursos

    Para evitar cobranças contínuas, a sessão do Amazon Bedrock AgentCore Code Interpreter deve ser encerrada ao final da análise:

    client.stop_code_interpreter_session(
        codeInterpreterIdentifier=code_interpreter_id,
        sessionId=session_id
    )

    Se um recurso de Code Interpreter dedicado foi criado apenas para esse teste, ele pode ser excluído pelo console do Amazon Bedrock AgentCore ou pela AWS CLI.

    Conclusão

    Os Modelos de Linguagem Recursivos oferecem um caminho prático para processar documentos que excedem as janelas de contexto dos modelos atuais. Combinando o Amazon Bedrock AgentCore com o Strands Agents SDK, é possível implementar RLM para raciocinar sobre dados de entrada arbitrariamente longos através de execução iterativa de código e chamadas de sub-LLM.

    Os resultados dos benchmarks são expressivos: Claude Opus 4.6 com RLM alcança 80% de precisão no LongBench v2 Financial QA — contra 66,7% do Long Context com janela de 1 milhão de tokens e 40% de especialistas humanos. Claude Sonnet 4.5 com RLM atinge 76% no LongBench v2 Code Repository QA — contra 20% do prompting base com janela de 200 mil tokens e 46% do Long Context.

    Tarefas que exigem raciocínio sobre contextos longos — análise financeira, compreensão de repositórios de código, pesquisa em ciências da saúde e ciências da vida, revisão jurídica ou auditoria de conformidade — podem se beneficiar diretamente desse padrão arquitetural.

    Recursos adicionais

    Referências

    • Zhang, A. L., Kraska, T., & Khattab, O. (2025). Recursive Language Models. arXiv:2512.24601
    • Bai, Y., Tu, S., Zhang, J., Peng, H., Wang, X., Lv, X., Cao, S., Xu, J., Hou, L., Dong, Y., Tang, J., & Li, J. (2024). LongBench v2: Towards Deeper Understanding and Reasoning on Realistic Long-context Multitasks. arXiv:2412.15204

    Fonte

    Break the context window barrier with Amazon Bedrock AgentCore (https://aws.amazon.com/blogs/machine-learning/break-the-context-window-barrier-with-amazon-bedrock-agentcore/)

  • Amazon SageMaker AI passa a suportar APIs compatíveis com OpenAI para endpoints de inferência

    O que foi anunciado

    A AWS anunciou que o Amazon SageMaker Inference agora oferece suporte a APIs compatíveis com OpenAI nos endpoints de inferência. Na prática, isso significa que ferramentas e frameworks amplamente utilizados no ecossistema de Inteligência Artificial (IA) — como o OpenAI SDK, LangChain e Strands Agents — podem se conectar diretamente aos endpoints do SageMaker sem nenhuma adaptação especial.

    O que muda na prática

    A grande vantagem dessa novidade é a simplicidade da migração. Para quem já utiliza essas ferramentas apontando para outros serviços, a transição para o SageMaker exige apenas a troca da URL do endpoint. Não é necessário escrever código de integração personalizado, criar wrappers de SDK ou reescrever qualquer parte da aplicação existente.

    Segundo a AWS, toda a lógica já construída continua funcionando normalmente: chamadas ao SDK, streaming e integrações com frameworks seguem operando exatamente como estavam — só que agora apontando para a infraestrutura gerenciada do SageMaker.

    Benefícios imediatos

    Com essa compatibilidade, quem adota o SageMaker Inference passa a ter acesso a uma série de vantagens de infraestrutura que não estavam disponíveis em outras plataformas de API:

    • Escolha de instâncias de GPU: é possível selecionar o tipo de instância mais adequado para cada carga de trabalho.
    • Dados dentro da sua própria Nuvem Privada Virtual (VPC): os dados não precisam sair do ambiente controlado da organização.
    • Flexibilidade de modelos: qualquer modelo de código aberto ou ajustado (fine-tuned) pode ser utilizado.
    • Auto-scaling configurável: as políticas de escalonamento automático podem ser ajustadas conforme a demanda de cada aplicação.

    A autenticação é feita com as credenciais AWS já existentes, com renovação automática de token — sem nenhuma configuração adicional para gerenciar em produção.

    Disponibilidade regional

    O recurso já está disponível nas seguintes regiões: Leste dos EUA (Norte da Virgínia), Oeste dos EUA (Oregon), Leste dos EUA (Ohio), Ásia-Pacífico (Mumbai), Ásia-Pacífico (Jacarta), Europa (Irlanda), Europa (Frankfurt), América do Sul (São Paulo), Ásia-Pacífico (Tóquio), Ásia-Pacífico (Seul), Europa (Londres), Ásia-Pacífico (Singapura), Ásia-Pacífico (Sydney) e Canadá (Central).

    Para equipes brasileiras, vale destacar a presença da região América do Sul (São Paulo) na lista, o que facilita o uso com menor latência e em conformidade com requisitos de residência de dados locais.

    Como saber mais

    Para aprofundar o entendimento sobre essa novidade, a AWS disponibilizou um post de lançamento no blog oficial e a documentação do SageMaker Inference com detalhes técnicos sobre como configurar e utilizar as APIs compatíveis com OpenAI.

    Fonte

    Amazon SageMaker AI now supports OpenAI-compatible APIs for inference endpoints (https://aws.amazon.com/about-aws/whats-new/2026/05/amazon-sagemaker-ai-openai-apis/)

  • SageMaker Unified Studio automatiza provisionamento de conectores Glue para retentativas entre sub-redes

    O que foi anunciado

    A AWS anunciou uma nova capacidade do Amazon SageMaker Unified Studio: a criação automática de conexões para retentativas de jobs do AWS Glue entre sub-redes distintas. O objetivo é aumentar a resiliência de pipelines de dados, reduzindo o tempo de inatividade não planejado em cargas de trabalho críticas para o negócio.

    O problema que essa novidade resolve

    Pipelines de dados que rodam jobs do Glue dependem de conectividade de rede estável. Quando a sub-rede primária de um job fica indisponível — seja por esgotamento de endereços IP ou por degradação de uma Zona de Disponibilidade (ZA) — o job falha. Até então, a solução dependia de engenheiros configurando manualmente conectores de backup ou intervindo durante o incidente, o que aumenta o tempo de resposta e o risco de violação de SLAs.

    Como funciona a automação

    Com essa atualização, o SageMaker Unified Studio passa a provisionar automaticamente os conectores Glue necessários para todas as sub-redes definidas na configuração de VPC (Virtual Private Cloud — Nuvem Privada Virtual) do domínio. O fluxo funciona da seguinte forma:

    • O administrador configura o domínio com múltiplas sub-redes privadas distribuídas entre diferentes Zonas de Disponibilidade.
    • O sistema provisiona automaticamente os conectores necessários para todos os novos projetos criados naquele domínio.
    • Se um job Glue falhar porque a sub-rede primária está indisponível, ele é automaticamente reexecutado em um conector de uma sub-rede alternativa.
    • Nenhuma ação adicional é necessária após a configuração inicial da VPC no domínio.

    Impacto prático para equipes de dados

    A principal vantagem dessa automação é eliminar a necessidade de intervenção manual durante falhas de sub-rede. Equipes que operam pipelines críticos — com compromissos de SLA (Service Level Agreement — Acordo de Nível de Serviço) rigorosos — ganham uma camada extra de resiliência sem precisar arquitetar soluções de contorno manualmente. A configuração acontece uma única vez, no momento em que o domínio VPC é definido, e o restante é gerenciado pela plataforma.

    Disponibilidade

    O recurso já está disponível em todas as regiões AWS onde o Amazon SageMaker Unified Studio é suportado. Para aprofundar o entendimento técnico e conferir os detalhes de configuração, a AWS disponibiliza a documentação oficial do Amazon SageMaker Unified Studio.

    Fonte

    SageMaker Unified Studio automates Glue connector provisioning for cross-subnet job retries (https://aws.amazon.com/about-aws/whats-new/2026/05/sagemaker-unified-studio-glue/)

  • Relatório AWS KY3P já está disponível para due diligence de fornecedores terceiros

    O que é o KY3P e por que isso importa

    A Amazon Web Services (AWS) concluiu a avaliação de segurança do Conheça Seu Terceiro (KY3P), conduzida pela S&P Global. Com isso, os clientes da AWS passam a ter acesso a um relatório padronizado que pode simplificar bastante o processo de due diligence de fornecedores — especialmente para empresas de setores regulados, como o financeiro.

    O KY3P, também conhecido como S&P Global Comprehensive Assessment (anteriormente chamado de TruSight), é uma avaliação validada e baseada em evidências. Seu propósito é apoiar a conformidade regulatória e facilitar a troca padronizada de dados de risco entre a AWS e seus clientes. O diferencial da metodologia é que ela vai além de políticas e declarações: ela valida a implementação e operação real dos controles de segurança.

    O que a avaliação cobre

    A metodologia de avaliação de risco do KY3P contempla mais de 200 controles distribuídos em 26 categorias e nove domínios de risco. Entre os temas abordados estão:

    • Privacidade
    • Gerenciamento de Redes
    • Gerenciamento de Acesso Lógico
    • Segurança Física e Ambiental

    Os critérios de avaliação foram desenvolvidos por um consórcio de instituições financeiras líderes no mercado global. Isso confere ao KY3P um alto nível de reconhecimento e credibilidade junto a reguladores e auditores.

    Como isso beneficia os clientes da AWS

    Com a adoção da nuvem crescendo em ritmo acelerado em diferentes setores, a AWS se tornou um componente crítico nos ambientes de terceiros de muitas organizações. Clientes em setores regulados — como o financeiro — precisam cumprir exigências rigorosas de due diligence sobre seus fornecedores, e isso inclui provedores de nuvem.

    O relatório KY3P permite que esses clientes mapeiem os controles da AWS em relação a frameworks e padrões amplamente utilizados, como:

    • Estrutura de Cibersegurança do NIST versão 2 (NIST CSF v2)
    • Padrão de Segurança de Dados da Indústria de Cartões de Pagamento versão 4.0 (PCI DSS 4.0)
    • ISO 27001:2022

    Isso significa que, em vez de conduzir avaliações independentes e repetitivas, as empresas podem usar os resultados do KY3P para obter visibilidade imediata sobre a cobertura de controles da AWS — reduzindo esforço operacional e acelerando processos de conformidade.

    Como acessar o relatório

    Para saber como obter acesso ao relatório, a AWS disponibiliza uma página dedicada. Mais informações estão disponíveis na página de avaliação AWS KY3P. Quem quiser explorar outros programas de conformidade da AWS também pode consultar os Programas de Conformidade da AWS.

    Fonte

    AWS KY3P report now available for third-party supplier due diligence (https://aws.amazon.com/blogs/security/aws-ky3p-report-now-available-for-third-party-supplier-due-diligence/)

  • Amazon CloudWatch Logs Insights ganha novos comandos e funções de consulta

    O que foi anunciado

    A AWS anunciou uma expansão significativa no Amazon CloudWatch Logs Insights: a linguagem de consulta do serviço passou a suportar 13 novos comandos e funções, ampliando consideravelmente as possibilidades de análise de logs diretamente na plataforma.

    Para quem trabalha no dia a dia com observabilidade e monitoramento na AWS, essa atualização resolve uma série de limitações práticas que antes exigiam processamento externo ou gambiarras nas queries.

    Quais são as novidades

    Os novos recursos foram organizados em três categorias principais:

    Funções de string e numéricas

    • round — arredondamento de valores numéricos
    • startswith — filtra registros cujo campo começa com determinado prefixo
    • endswith — filtra registros cujo campo termina com determinado sufixo
    • case — lógica condicional dentro da query
    • regex_replace — substituição de padrões via expressão regular
    • haversine — cálculo de distância geográfica entre coordenadas

    Funções de codificação e decodificação

    • urlencode e urldecode — codificação e decodificação de URLs
    • base64encode e base64decode — codificação e decodificação de payloads em Base64 diretamente na query

    Novos comandos de parsing e análise

    • parse logfmt — faz o parsing de logs estruturados no formato logfmt, convertendo-os em campos individuais
    • expand — expande arrays JSON aninhados em registros individuais
    • relevantfields — identifica e exibe automaticamente os campos mais relevantes em grupos de logs com alta cardinalidade

    Por que isso importa na prática

    Quem analisa logs no CloudWatch Logs Insights frequentemente se deparava com situações como: precisar manipular strings diretamente na query, decodificar valores em Base64 sem sair da interface, fazer parsing de logs que não estavam em formato JSON, ou ainda calcular distâncias geográficas a partir de coordenadas registradas nos logs.

    Com esses 13 novos recursos, a AWS reduz a necessidade de pré-processar ou transformar logs antes de consultá-los, tornando o fluxo de análise mais ágil e centralizado.

    Disponibilidade

    Todos os novos comandos e funções já estão disponíveis em todas as regiões comerciais da AWS. Para explorar os detalhes de uso e sintaxe de cada função, a AWS disponibiliza a documentação oficial do Amazon CloudWatch Logs.

    Fonte

    Amazon CloudWatch Logs Insights adds new query commands and functions (https://aws.amazon.com/about-aws/whats-new/2026/06/amazon-cloudwatch-logs-insights/)

  • Amazon Aurora MySQL 8.4 está disponível para todos

    O que foi anunciado

    A AWS anunciou a disponibilidade geral do Amazon Aurora MySQL 8.4, versão compatível com o MySQL 8.4 da comunidade — uma versão de Suporte de Longo Prazo (LTS) do MySQL. A novidade traz compatibilidade com o MySQL 8.4.7 da comunidade e uma mudança importante na forma como as versões são numeradas.

    Versionamento alinhado com a comunidade

    A partir do Aurora MySQL 8.4, o número de versão que aparece no seu cluster passa a corresponder diretamente à versão do MySQL da comunidade com a qual ele é compatível. Isso simplifica bastante o entendimento de qual base de código está sendo executada. Além disso, a AWS continua gerenciando os patches subjacentes automaticamente, reduzindo o trabalho operacional do dia a dia.

    A AWS também definiu metas públicas de atualização: versões principais serão lançadas em até 12 meses após o lançamento de uma versão LTS da comunidade, versões menores em até 3 meses, e uma versão LTS menor do Aurora em até 12 meses após cada versão principal. Para acompanhar os objetivos de lançamento por engine, a AWS disponibilizou a agenda de lançamentos open source do Aurora e RDS.

    Segurança reforçada por padrão

    O Aurora MySQL 8.4 chega com configurações de segurança mais rígidas para novos clusters. Os destaques são:

    • TLS obrigatório por padrão, com suporte apenas a TLS 1.2 e 1.3
    • Novas contas utilizam o plugin de autenticação caching_sha2_password
    • Políticas de validação de senha configuráveis via grupos de parâmetros do cluster de banco de dados

    Verificações automáticas antes do upgrade

    Antes de o cluster ficar offline durante uma atualização, verificações automatizadas de pré-upgrade identificam possíveis problemas de compatibilidade. Isso dá mais confiança para quem precisa migrar de versões anteriores. Para entender melhor a experiência completa do cliente com essa versão, a AWS publicou o blog de lançamento do Aurora MySQL 8.4.

    Como fazer o upgrade ou a migração

    Existem três caminhos para atualizar um banco de dados existente para o Aurora MySQL 8.4:

    Para detalhes sobre como realizar upgrades de versão principal, o Guia do Usuário do Amazon Aurora é o ponto de partida recomendado.

    Para quem está migrando de fontes MySQL externas, as opções disponíveis são o AWS Database Migration Service ou o Percona XtraBackup.

    Disponibilidade

    O Aurora MySQL 8.4 já está disponível em todas as regiões da AWS onde o Aurora MySQL é suportado. Para começar a usar, a AWS disponibiliza uma página de introdução ao Amazon Aurora.

    Fonte

    Amazon Aurora MySQL 8.4 is now generally available (https://aws.amazon.com/about-aws/whats-new/2026/05/amazon-aurora-mysql/8-4/)

  • Avaliadores Multimodais no Strands Evals: MLLM como Juiz para Tarefas de Imagem para Texto

    O problema que avaliadores de texto não conseguem resolver

    Se você está construindo sistemas de compras visuais, extração de documentos ou análise de gráficos, você precisa de uma forma confiável de verificar se a resposta do modelo está realmente fundamentada na imagem de origem. Um avaliador que analisa apenas texto não consegue dizer se uma legenda descreve fielmente uma imagem, se o total extraído de uma nota fiscal bate com o documento, ou se um resumo de tela inventou um botão que nunca existiu na página.

    O contexto do mercado reforça a urgência: a Gartner prevê que até 2030, 80% dos softwares empresariais serão multimodais — contra menos de 10% em 2024. Sem avaliação multimodal automatizada, as equipes ficam presas entre revisão humana cara e proxies de texto que não são confiáveis.

    Os quatro novos avaliadores do Strands Evals

    A AWS anunciou quatro novos avaliadores baseados em Modelos de Linguagem Multimodais de Grande Porte (MLLM) como juízes para tarefas de imagem para texto no Kit de Desenvolvimento de Software (SDK) do Strands Evals. Cada avaliador pontua saídas de imagem para texto comparando diretamente com a imagem de origem, enviando a imagem ao modelo juiz junto com a consulta, a resposta e, opcionalmente, uma resposta de referência. O juiz retorna uma pontuação ancorada na imagem e uma string de raciocínio útil para depuração.

    Os quatro avaliadores cobrem os casos de uso mais comuns: legendagem de imagens, resposta visual a perguntas, interpretação de gráficos, extração de campos em documentos, Reconhecimento Ótico de Caracteres (OCR) e sumarização de capturas de tela. Veja o que cada um avalia:

    • Qualidade Geral (Overall Quality): Pontuação em escala Likert de 1 a 5. Avalia a qualidade geral da resposta — relevância, precisão, profundidade e abrangência.
    • Correção (Correctness): Binário. Verifica se a resposta é factualmente correta e completa considerando a imagem e a consulta. Detecta erros factuais, atributos errados, contagens, posições e omissões.
    • Fidelidade (Faithfulness): Binário. Verifica se a resposta está ancorada na imagem sem alucinações — objetos inventados, inferências sem suporte ou vazamento de conhecimento externo.
    • Seguimento de Instruções (Instruction Following): Binário. Verifica se a resposta respeita as restrições da consulta — formato, contagem, escopo e tópico.

    Todos os avaliadores suportam dois modos de operação. O modo baseado em referência compara a resposta com uma resposta-ouro e é útil quando há conjuntos de teste rotulados disponíveis. O modo sem referência avalia apenas a partir da imagem, sendo a única opção quando o sistema opera com imagens ao vivo sem gabarito disponível.

    Passo a passo: avaliando uma tarefa de leitura de gráfico

    Para tornar a API concreta, o exemplo utilizado no anúncio original percorre um único Case. A entrada é um gráfico de barras com a receita média por assinatura paga de streaming por região (EUA/Canadá, Europa/Oriente Médio/África, Ásia-Pacífico, América Latina). O sistema sob teste é um agente de visão simples que responde uma pergunta específica sobre o gráfico.

    Imagem original — fonte: Aws

    Passo 1: Definir o Case e os avaliadores

    O Case encapsula a imagem e a instrução em um MultimodalInput. Fornecer expected_output ativa a avaliação baseada em referência nos avaliadores que suportam esse modo.

    from strands import Agent
    from strands_evals import Case, Experiment
    from strands_evals.evaluators import (
        MultimodalOverallQualityEvaluator,
        MultimodalCorrectnessEvaluator,
        MultimodalFaithfulnessEvaluator,
        MultimodalInstructionFollowingEvaluator,
    )
    from strands_evals.types import ImageData, MultimodalInput
    
    cases = [
        Case[MultimodalInput, str](
            name="revenue-chart-1",
            input=MultimodalInput(
                media=ImageData(source="revenue_chart.jpeg"),
                instruction="Which region has the highest average revenue? "
                            "State the region name and the dollar amount shown in the chart.",
            ),
            expected_output="U.S. and Canada has the highest at $13.32.",
            metadata={"dataset": "ChartQA"},
        ),
    ]
    
    evaluators = [
        MultimodalOverallQualityEvaluator(),        # Likert 1-5
        MultimodalCorrectnessEvaluator(),           # Binary
        MultimodalFaithfulnessEvaluator(),          # Binary
        MultimodalInstructionFollowingEvaluator(),  # Binary
    ]

    Passo 2: Configurar a tarefa e executar o experimento

    A função de tarefa recebe cada Case, executa o modelo de visão com a imagem e a instrução, e retorna a string de resposta para ser avaliada.

    agent = Agent(callback_handler=None)
    task_output = None
    
    def run_task(case):
        global task_output
        image = case.input.media
        messages = [
            {"image": {"format": image.format or "png", "source": {"bytes": image.to_bytes()}}},
            {"text": case.input.instruction},
        ]
        task_output = str(agent(messages))
        return task_output
    
    reports = await Experiment(cases=cases, evaluators=evaluators).run_evaluations_async(
        task=run_task,
        max_workers=1,
    )

    Passo 3: Inspecionar o relatório

    Cada relatório contém pontuações por caso, resultados de aprovação/reprovação e raciocínios:

    print(f"Task Output:\n{task_output}\n")
    print("=" * 50)
    for name, report in zip(
        ["Quality", "Correctness", "Faithfulness", "Instruction"],
        reports,
    ):
        reason = report.reasons[0] if report.reasons else ""
        status = "PASS" if report.test_passes[0] else "FAIL"
        print(f"{name}: {report.scores[0]:.2f} [{status}]")
        print(f"  Reason: {reason}\n")

    A execução sobre o gráfico do exemplo produz o seguinte resultado:

    Task Output:
    According to the chart, the U.S. and Canada region has the highest average revenue per paying streaming membership at $13.32.
    
    ==================================================
    Quality: 1.00 [PASS]
    Reason: The response correctly identifies U.S. and Canada as the highest revenue region at $13.32, directly addressing both parts of the instruction. The answer is factually accurate based on the chart data and provides appropriate context.
    Correctness: 1.00 [PASS]
    Reason: The factual claims are accurate. U.S. and Canada is correctly identified as the region with the highest bar in the chart, and $13.32 is the exact dollar amount visible on that bar. No factual errors found.
    Faithfulness: 1.00 [PASS]
    Reason: The response is fully grounded in the image. Each claim can be directly verified against the chart. U.S. and Canada shows $13.32 and is visibly the highest bar. No hallucinations detected.
    Instruction: 1.00 [PASS]
    Reason: Response perfectly follows instruction by stating both required elements: region name (U.S. and Canada) and dollar amount ($13.32). Matches expected output factually with no constraint violations.

    Dois pontos importantes a observar: cada avaliador retorna uma string de raciocínio além da pontuação — essencial para depuração quando uma execução falha em Integração Contínua (CI). Além disso, o mesmo Case foi pontuado por quatro juízes independentes em um único Experiment, mantendo o fluxo idêntico ao de avaliações com texto apenas.

    Rubricas personalizadas

    Para critérios específicos de domínio, a classe base aceita uma string de rubrica arbitrária:

    from strands_evals.evaluators import MultimodalOutputEvaluator
    
    medical_eval = MultimodalOutputEvaluator(rubric="""Rate diagnostic accuracy:
    - 1.0: All findings correctly identified with proper terminology.
    - 0.5: Key findings identified but imprecise terminology.
    - 0.0: Critical findings missed or misidentified.""")

    O que os experimentos revelaram

    O juiz precisa ver a imagem?

    Uma dúvida natural é se um juiz apenas de texto, recebendo uma descrição detalhada da imagem gerada automaticamente, consegue substituir um juiz multimodal. Os experimentos compararam o MLLM-as-a-Judge (imagem mais texto) contra o Modelo de Linguagem de Grande Porte (LLM) como juiz com descrições longas e curtas da imagem. O resultado foi claro: o juiz multimodal se alinhou mais de perto com as pontuações humanas do que qualquer variante apenas de texto. Além disso, quando se conta a chamada extra ao LLM para gerar a descrição, a rota apenas de texto não é significativamente mais barata ou rápida. Tendo um juiz multimodal disponível, o recomendado é usá-lo diretamente.

    Qual modelo usar como juiz no Amazon Bedrock?

    A AWS avaliou vários MLLMs disponíveis no Amazon Bedrock como juízes, usando alinhamento com pontuações humanas, custo por consulta e latência como critérios. O Anthropic Claude Sonnet 4.6 no Amazon Bedrock ofereceu o melhor equilíbrio entre precisão e custo e é utilizado como modelo juiz padrão nos avaliadores multimodais. Duas observações gerais também se confirmaram: modelos maiores com capacidade de raciocínio são mais confiáveis como juízes; e modelos de preço premium não apresentaram ganho mensurável de precisão sobre os de nível intermediário para essa tarefa.

    Quais escolhas de design de prompt realmente importam?

    Os experimentos testaram diferentes abordagens de design de prompt. As conclusões que se generalizaram foram:

    • Peça ao juiz para raciocinar antes de pontuar. Esta foi a escolha de maior impacto. Saída apenas com pontuação é mais barata e consistente, mas o alinhamento com pontuações humanas cai de forma perceptível.
    • Inclua alguns exemplos de calibração diversificados. O alinhamento melhorou de forma monotônica ao passar de zero exemplos para um punhado deles.
    • Use uma rubrica multidimensional detalhada (precisão visual, aderência a instruções, completude, coerência) em vez de um único prompt holístico. Separar dimensões evita que uma pontuação vaga absorva modos de falha distintos.

    Referência vs. sem referência: quando usar cada modo

    Injetar uma resposta de referência no prompt do juiz ajuda avaliadores ancorados em conteúdo. Qualidade Geral, Correção e Fidelidade se alinharam mais de perto com o julgamento humano quando uma referência estava disponível. Seguimento de Instruções teve comportamento oposto: adicionar conteúdo de referência distraiu o juiz da verificação de restrições estruturais (formato, escopo, ordem, contagem) que são determinadas pela consulta e resposta isoladamente. A diretriz geral é: use referências para métricas ancoradas em conteúdo e dispense-as para métricas estruturais como seguimento de instruções.

    Boas práticas recomendadas

    • Use o MultimodalOverallQualityEvaluator para verificações rápidas de sanidade e adicione os avaliadores binários direcionados (Correção, Fidelidade, Seguimento de Instruções) à medida que diagnostica modos de falha específicos.
    • Comece com o Claude Sonnet 4.6 como juiz e migre para MLLMs menores com capacidade de raciocínio no Amazon Bedrock apenas se custo ou latência forem fatores dominantes.
    • Evite modelos pequenos para julgamento.
    • Mantenha o formato de saída com raciocínio mais pontuação. Saída apenas com pontuação é tentadora pelo custo, mas o alinhamento com pontuações humanas cai de forma perceptível.
    • Use referências para correção, fidelidade e qualidade geral quando disponíveis. Dispense-as para seguimento de instruções.

    Próximos passos

    Os quatro novos avaliadores MLLM-as-a-Judge no Strands Evals movem a avaliação de imagem para texto de revisão humana cara ou proxies de texto não confiáveis para pontuação automatizada ancorada na imagem. Cada avaliador tem como alvo um modo de falha distinto, suporta avaliação baseada em referência e sem referência, e retorna raciocínio diagnóstico junto com cada pontuação.

    Esta é a primeira etapa em direção a uma avaliação multimodal mais ampla no Strands Evals. Os trabalhos futuros incluem avaliação em nível de etapa para uso de ferramentas multimodais e trajetórias de agentes, além de combinações adicionais de modalidades como texto para imagem, vídeo para texto e áudio para texto.

    Para começar, instale o Strands Evals com o comando:

    pip install strands-agents-evals

    Em seguida, explore os recursos disponíveis: leia a documentação do Strands Evals para uma visão geral do fluxo Case → Experiment → Report; consulte a referência do avaliador multimodal para a API completa; experimente o exemplo de avaliador multimodal no repositório de documentação do Strands Agents; e compartilhe feedback e solicitações de funcionalidades no GitHub Issues.

    Fonte

    Multimodal evaluators: MLLM-as-a-judge for image-to-text tasks in Strands Evals (https://aws.amazon.com/blogs/machine-learning/multimodal-evaluators-mllm-as-a-judge-for-image-to-text-tasks-in-strands-evals/)

  • Como construir aplicações de voz em tempo real com Amazon SageMaker AI e vLLM

    Voz em tempo real: o desafio que o modelo request-response não resolve

    Agentes de voz, legendagem ao vivo, análise de contact centers e ferramentas de acessibilidade têm algo em comum: todas dependem de transcrição de fala em tempo real. Isso significa que a aplicação precisa transmitir o áudio enquanto já recebe o texto de volta — simultaneamente, por uma única conexão persistente.

    O modelo tradicional de requisição e resposta (request-response) não serve para esse cenário. Nele, a transcrição só começa depois que o arquivo de áudio inteiro foi recebido, adicionando uma latência que quebra completamente a experiência em tempo real.

    A partir de novembro de 2025, a AWS passou a oferecer o streaming bidirecional para inferência em tempo real no Amazon SageMaker AI, permitindo que dados fluam continuamente nas duas direções entre clientes e contêineres de modelo. Combinado com a Realtime API do vLLM — que usa WebSockets para streaming bidirecional entre cliente e servidor — essa dupla forma uma solução completa para aplicações de voz.

    O post original da AWS demonstra como implantar o Voxtral-Mini-4B-Realtime-2602, o modelo compacto de fala em tempo real da Mistral AI, em um endpoint do SageMaker AI usando um contêiner vLLM com streaming bidirecional. O exemplo completo está disponível no repositório GitHub.

    O que cada componente entrega

    Construir uma aplicação de voz em produção exige que vários componentes de infraestrutura funcionem juntos dentro de orçamentos de latência muito apertados. O SageMaker AI e o vLLM resolvem partes distintas dessa pilha:

    Modelo de fala com serving eficiente em GPU

    No núcleo de qualquer aplicação de voz está um modelo de Reconhecimento Automático de Fala (ASR) que processa o áudio de forma incremental, produzindo tokens de transcrição à medida que o áudio chega — sem esperar pela gravação completa. O vLLM serve esses modelos por meio de sua Realtime API, um endpoint nativo WebSocket em /v1/realtime que aplica execução de grafo CUDA por partes (piecewise CUDA graph execution) para reduzir a sobrecarga de lançamento de kernels de GPU, resultando em menor latência por token durante a transcrição em streaming. Por ser open source, o vLLM garante controle total sobre configuração do modelo, quantização e configurações de compilação, sem dependência de fornecedor (vendor lock-in) na camada de serving.

    Infraestrutura de streaming bidirecional

    O SageMaker AI resolve o problema do protocolo com streaming bidirecional nativo via HTTP/2 na porta 8443, fazendo a ponte automaticamente entre o protocolo de event stream HTTP/2 no lado do cliente e o WebSocket no lado do contêiner. Não é necessário construir ou gerenciar essa camada de tradução de protocolo — o SageMaker AI cuida disso de forma transparente.

    Processamento e codificação de áudio

    O áudio bruto de microfones ou sistemas de telefonia chega em vários formatos e taxas de amostragem. Antes de chegar ao modelo, ele precisa ser reamostrado (tipicamente para 16 kHz mono PCM16), dividido em segmentos de tamanho adequado e codificado em base64 para transmissão. O pipeline do lado do cliente cuida dessa conversão, enquanto a Realtime API do vLLM define o protocolo: chunks PCM16 em base64 entram via WebSocket, e os tokens de transcrição voltam em streaming.

    Gerenciamento de conexão e resiliência

    O SageMaker AI mantém conexões WebSocket com frames de keepalive ping/pong, verifica a saúde do contêiner e fornece monitoramento em nível de endpoint pelo Amazon CloudWatch — tudo isso sem instrumentação customizada.

    Visão geral da solução

    A solução conecta três camadas:

    • Cliente → SageMaker AI: A aplicação se conecta ao endpoint de runtime do SageMaker AI na porta 8443 via HTTP/2. Cada mensagem JSON do protocolo vLLM Realtime (como input_audio_buffer.append ou transcription.delta) é enviada dentro de um RequestPayloadPart com DataType definido como "UTF8".
    • SageMaker AI → Contêiner Docker: O SageMaker AI faz a ponte automaticamente entre o event stream HTTP/2 e o WebSocket, estabelecendo uma conexão WebSocket com o contêiner em ws://localhost:8080/invocations-bidirectional-stream e encaminhando os frames de dados nos dois sentidos.
    • Contêiner Docker: Dentro do contêiner, uma bridge leve em FastAPI (app.py) escuta na porta 8080 e, ao receber uma conexão WebSocket do SageMaker AI, abre uma segunda conexão WebSocket para a Realtime API do vLLM em ws://localhost:8081/v1/realtime, encaminhando mensagens bidirecionalmente.

    O protocolo da Realtime API

    A Realtime API fornece transcrição de áudio em streaming via WebSocket. O áudio deve ser codificado como base64 PCM16 a 16 kHz mono. O fluxo de mensagens funciona assim:

    • Cliente conecta em ws://host/v1/realtime
    • Servidor envia evento session.created
    • Cliente envia opcionalmente session.update com modelo e parâmetros
    • Cliente envia input_audio_buffer.commit quando pronto para enviar áudio
    • Cliente envia eventos input_audio_buffer.append com chunks PCM16 em base64
    • Servidor envia eventos transcription.delta com texto incremental
    • Servidor envia transcription.done com a transcrição final e estatísticas de uso
    • Repete a partir do passo 5 para o próximo enunciado

    O modelo começa a transcrever assim que tem contexto de áudio suficiente, enviando tokens de transcription.delta de volta ao cliente enquanto ele continua enviando chunks de áudio — sem necessidade de esperar o envio completo.

    Construindo o contêiner vLLM customizado

    A solução parte do SageMaker AI vLLM Deep Learning Container e adiciona três elementos: o label Docker de streaming bidirecional, uma bridge WebSocket que traduz entre as rotas esperadas pelo SageMaker AI e os caminhos nativos da API do vLLM, e um entrypoint que executa ambos os processos.

    FROM public.ecr.aws/deep-learning-containers/vllm:0.17.1-gpu-py312-cu129-ubuntu22.04-sagemaker-v1.0-soci
    
    # Tell SageMaker AI this container supports bidirectional streaming
    LABEL com.amazonaws.sagemaker.capabilities.bidirectional-streaming=true
    
    WORKDIR /opt/ml/code
    
    # Install bridge dependencies
    COPY requirements.txt .
    RUN pip install --upgrade --no-cache-dir -r requirements.txt
    
    # WebSocket bridge: routes /invocations-bidirectional-stream → /v1/realtime
    COPY app.py .
    COPY sagemaker-entrypoint.sh entrypoint.sh
    RUN chmod +x entrypoint.sh
    
    ENTRYPOINT ["./entrypoint.sh"]
    
    HEALTHCHECK --interval=30s --timeout=10s --start-period=120s --retries=3 \
        CMD curl -f http://localhost:8080/ping || exit 1

    O label com.amazonaws.sagemaker.capabilities.bidirectional-streaming=true sinaliza ao SageMaker AI que o contêiner suporta streaming bidirecional. Sem esse label, o SageMaker AI não estabelecerá conexões WebSocket com o contêiner.

    A bridge (app.py) é uma aplicação FastAPI que escuta na porta 8080 e encaminha conexões WebSocket para o endpoint /v1/realtime do vLLM na porta interna 8081. Ela também faz proxy dos health checks de /ping para o /health do vLLM.

    VLLM_WS_URL = "ws://localhost:8081/v1/realtime"
    
    @app.websocket("/invocations-bidirectional-stream")
    async def websocket_bridge(sm_ws: WebSocket):
        await sm_ws.accept()
        async with websockets.connect(VLLM_WS_URL) as vllm_ws:
            async def sm_to_vllm():
                """Forward SageMaker AI → vLLM."""
                while True:
                    message = await sm_ws.receive()
                    if "text" in message and message["text"]:
                        await vllm_ws.send(message["text"])
                    elif "bytes" in message and message["bytes"]:
                        # Fallback for non-UTF8 clients
                        await vllm_ws.send(message["bytes"].decode("utf-8"))
    
            async def vllm_to_sm():
                """Forward vLLM → SageMaker AI."""
                async for msg in vllm_ws:
                    if isinstance(msg, str):
                        await sm_ws.send_text(msg)
                    elif isinstance(msg, bytes):
                        await sm_ws.send_bytes(msg)
    
            await asyncio.gather(sm_to_vllm(), vllm_to_sm())

    Implantando no endpoint do SageMaker AI

    As variáveis de ambiente SM_VLLM_* configuram os parâmetros do servidor vLLM:

    vllm_env = {
        "SM_VLLM_MAX_MODEL_LEN": "45000",
        "SM_VLLM_COMPILATION_CONFIG": '{"cudagraph_mode": "PIECEWISE"}'
    }

    O Voxtral-Mini-4B suporta até 262.144 tokens de contexto. O valor MAX_MODEL_LEN=45000 é suficiente para gravar ao vivo aproximadamente uma hora de áudio (3600 segundos / 0,08 segundos por token). O COMPILATION_CONFIG com cudagraph_mode: PIECEWISE oferece otimização de grafo CUDA para melhor throughput de inferência.

    O trecho abaixo cria o endpoint no SageMaker AI:

    # Create model
    voxtral_model = Model.create(
        model_name=model_name,
        primary_container=ContainerDefinition(
            image=inference_image,
            model_data_source=ModelDataSource(
                s3_data_source=S3ModelDataSource(
                    s3_uri=f"{model_artifact}/",
                    s3_data_type="S3Prefix",
                    compression_type="None",
                )
            ),
            environment=vllm_env
        ),
        execution_role_arn=role,
    )
    
    # Create config
    endpoint_config = EndpointConfig.create(
        endpoint_config_name=endpoint_config_name,
        production_variants=[
            ProductionVariant(
                variant_name="AllTraffic",
                model_name=model_name,
                initial_variant_weight=1.0,
                instance_type=instance_type,
                initial_instance_count=1,
                model_data_download_timeout_in_seconds=health_check_timeout,
            )
        ]
    )
    
    # Create endpoint
    endpoint = Endpoint.create(
        endpoint_name=endpoint_name,
        endpoint_config_name=endpoint_config_name
    )
    endpoint.wait_for_status("InService")

    Testando com streaming bidirecional

    Com o endpoint em execução, a invocação é feita pelo SDK Python aws-sdk-sagemaker-runtime-http2, que se comunica via event streams HTTP/2 na porta 8443 do endpoint de runtime do SageMaker AI.

    O repositório inclui um cliente completo sagemaker_bidi_client.py que encapsula o SDK de streaming bidirecional em uma classe SageMakerRealtimeClient. Quando transcribe_audio() é executado, ele primeiro envia um evento session.update para selecionar o modelo e depois transmite o arquivo de áudio em chunks de 4 KB PCM16. O loop de recebimento roda como uma asyncio.Task em segundo plano, enquanto a corrotina principal envia os chunks de áudio — garantindo que ambas as direções do stream HTTP/2 estejam ativas simultaneamente.

    O detalhe-chave que torna esse overlap observável é o await asyncio.sleep(chunk_duration) após cada envio. Ele cadencia a transmissão para corresponder à reprodução em tempo real (~128 ms por chunk de 4 KB a 16 kHz) e cede o controle ao event loop, dando à tarefa de recebimento a chance de processar eventos transcription.delta enquanto mais áudio ainda está sendo enviado.

    Para executar o cliente:

    python sagemaker_bidi_client.py ./audio.wav \
        --region us-east-1

    Demo ao vivo com microfone e Gradio

    O cliente baseado em arquivo é útil para testes, mas o streaming bidirecional entrega sua menor latência com áudio ao vivo. O repositório inclui um cliente de microfone baseado em Gradio (sagemaker_bidi_microphone_client.py) que captura o áudio do microfone e o transmite ao SageMaker AI em tempo real:

    python sagemaker_bidi_microphone_client.py \
        --endpoint-name  \
        --region us-east-1

    O cliente de microfone usa a mesma configuração DataType="UTF8" e o mesmo protocolo da Realtime API do vLLM que o cliente baseado em arquivo. Ele captura o áudio do navegador via Gradio, reamosta para 16 kHz PCM16, codifica cada chunk em base64 e o envia pelo stream bidirecional do SageMaker AI. O texto de transcrição é atualizado na interface à medida que o usuário fala, sem esperar o fim do enunciado.

    Considerações importantes

    • A Realtime API do vLLM espera áudio como PCM16 codificado em base64 a 16 kHz mono. Se o áudio de origem usar um formato ou taxa de amostragem diferente, converta antes de transmitir.
    • O Voxtral-Mini-4B-Realtime-2602 é um modelo de 4 bilhões de parâmetros e cabe em uma única GPU. Uma instância ml.g6.4xlarge (1x NVIDIA L4) é suficiente para hospedá-lo.
    • O SageMaker AI mantém a conexão WebSocket com frames ping/pong a cada 60 segundos, e a conexão é encerrada se 5 pings consecutivos ficarem sem resposta. Para sessões longas, o cliente deve tratar a reconexão em vez de assumir que o stream permanecerá aberto indefinidamente.
    • O tamanho do chunk e o cadenciamento também valem ser ajustados. O exemplo usa chunks de 4 KB, equivalente a aproximadamente 128 ms de áudio a 16 kHz PCM16. Chunks menores reduzem a latência, mas aumentam a sobrecarga por mensagem; chunks maiores melhoram o throughput ao custo de maior latência.

    Limpeza dos recursos

    Para evitar cobranças contínuas, é importante excluir os recursos criados após os testes. O endpoint do SageMaker AI cobra pela instância subjacente enquanto estiver ativo, portanto removê-lo é o passo mais crítico. O notebook que acompanha a solução inclui uma célula de limpeza que exclui o endpoint, a configuração do endpoint e o modelo. Se a imagem de contêiner customizada no Amazon Elastic Container Registry (ECR) ou os artefatos de modelo no Amazon Simple Storage Service (S3) não forem mais necessários, esses recursos devem ser excluídos separadamente para evitar cobranças de armazenamento.

    Conclusão e próximos passos

    A combinação do SageMaker AI com o vLLM demonstra como é possível ir de um modelo de fala no Hugging Face a um serviço de transcrição em tempo real totalmente gerenciado, sem construir infraestrutura de streaming customizada nem gerenciar servidores de GPU. A infraestrutura de streaming bidirecional do SageMaker AI atua como uma ponte transparente entre event streams HTTP/2 (lado do cliente) e WebSocket (lado do contêiner).

    Esse padrão vai além da transcrição de fala. Casos de uso que exigem comunicação contínua e bidirecional — agentes de voz, tradução em tempo real, geração de áudio interativa ou diálogo em streaming com múltiplos turnos — podem usar a mesma arquitetura.

    Para ir além, a AWS sugere as seguintes direções:

    • Estender a demo Gradio em uma aplicação completa: Use o cliente de microfone ao vivo como ponto de partida e adicione funcionalidades como exportação de transcrição ou sumarização encadeando a saída de transcrição em um LLM de texto.
    • Ajustar o endpoint para seus requisitos de latência e custo: Experimente tipos de instância, tamanhos de chunk e configurações de compilação do vLLM para encontrar o equilíbrio certo para sua carga de trabalho.
    • Implantar um modelo diferente: Substitua o Voxtral-Mini-4B-Realtime-2602 por outro modelo suportado pela Realtime API do vLLM atualizando o artefato do modelo e o identificador nos clientes.
    • Aprofundar o conhecimento sobre streaming bidirecional: Consulte a documentação oficial para entender o contrato completo do event stream HTTP/2 e aplicá-lo a outros casos de uso.

    O notebook completo, o cliente baseado em arquivo e a demo ao vivo com microfone estão disponíveis no GitHub.

    Pré-requisitos

    Para reproduzir a solução, são necessários:

    Fonte

    Build real-time voice applications with Amazon SageMaker AI and vLLM (https://aws.amazon.com/blogs/machine-learning/build-real-time-voice-applications-with-amazon-sagemaker-ai-and-vllm/)

  • Por que o Amazon Bedrock AgentCore escolheu o Cedar para proteger fluxos de trabalho agênticos

    O problema central: LLMs não são atores confiáveis

    Agentes de IA têm uma característica fundamental que os diferencia de sistemas tradicionais: eles se adaptam. Encontram múltiplos caminhos para resolver um problema, tomam decisões em tempo real e operam com autonomia. Essa flexibilidade é justamente o que os torna úteis — mas também é o que cria um desafio sério de segurança.

    O Modelo de Linguagem Grande (LLM) no coração de um agente é não determinístico. Suas decisões não podem ser previstas ou garantidas antecipadamente. Ele pode alucinar ações prejudiciais com total confiança. É vulnerável a ataques de injeção de prompt, nos quais adversários inserem comandos maliciosos por meio de respostas de ferramentas ou entradas do usuário. Para um LLM, comandos e dados são a mesma coisa — apenas tokens.

    Por isso, do ponto de vista de segurança, a abordagem correta é tratar o LLM como um ator não confiável. Isso não é pessimismo; é defesa em profundidade.

    A boa notícia é que o LLM não age diretamente sobre o mundo externo. Ele precisa passar por um orquestrador que invoca ferramentas com base em sua saída. É exatamente nesse ponto de passagem que os controles precisam ser aplicados. O que se precisa nessa fronteira é de autorização: uma decisão sobre se cada invocação de ferramenta deve ser permitida e sob quais condições.

    Por que as abordagens comuns não são suficientes

    Dois caminhos costumam ser adotados para lidar com esse problema, mas ambos têm limitações importantes:

    • Fluxos de trabalho hard-coded: eliminam a incerteza, mas também eliminam o propósito de usar um LLM como cérebro do agente. Você acaba construindo uma aplicação tradicional com uma interface de LLM. Além disso, mesmo com essa restrição, usar saídas de LLM em qualquer etapa reabre os mesmos riscos.
    • Humano no loop (human-in-the-loop): oferece uma rede de segurança para operações críticas e sempre terá seu papel. Mas depender disso como mecanismo principal de controle sacrifica a autonomia e pode gerar fadiga de aprovação.

    O que se precisa é de uma camada de aplicação auditável e determinística que fique fora do agente e das ferramentas. Por quê fora? Porque o plano do LLM é exatamente a coisa que não se pode confiar — ele não pode ser responsável por aplicar suas próprias restrições. Controles na camada do LLM, como prompts de sistema e alinhamento em tempo de treinamento, podem ser contornados por injeção de prompt ou alucinação. Verificações hard-coded no código do agente ou das ferramentas são mais robustas, mas tornam-se difíceis de auditar e gerenciar em escala, especialmente quando a lógica de segurança está espalhada por muitas ferramentas e serviços.

    Centralizar a autorização fora de ambos fornece um único ponto de verificação que o LLM não pode contornar — auditável e verificável independentemente do código da aplicação.

    Onde entram as Políticas do AgentCore

    O Amazon Bedrock AgentCore Gateway fica entre o agente e as ferramentas remotas que ele acessa. Quando uma Política do AgentCore é associada a um Gateway, tudo é bloqueado por padrão. As políticas abrem seletivamente essa fronteira, especificando quais invocações de ferramentas são permitidas e sob quais condições. Essa aplicação vale para todo o tráfego de ferramentas roteado pelo Gateway.

    O Amazon Bedrock AgentCore oferece a infraestrutura para implantar e gerenciar agentes em escala. Ele inclui o AgentCore Runtime para hospedar agentes, o AgentCore Gateway para gerenciar como os agentes se conectam a ferramentas usando o Protocolo de Contexto de Modelo (MCP), e a Policy no AgentCore. A Policy intercepta todo o tráfego do agente pelos gateways e avalia cada requisição contra as políticas definidas antes de permitir o acesso à ferramenta.

    Para que essa abordagem escale, as políticas precisam ser mais simples de entender do que o comportamento do agente. E é aí que entra o Cedar.

    O que é o Cedar e por que foi escolhido

    Cedar é uma linguagem de políticas de autorização de código aberto desenvolvida pela AWS que recentemente ingressou na Cloud Native Computing Foundation (CNCF). Ele foi projetado com propriedades específicas: é construído exclusivamente para autorização, legível por humanos e analisável por máquinas usando raciocínio automatizado.

    Linguagem natural é ambígua demais para infraestrutura crítica de segurança. Linguagens de programação de uso geral, como Python, são muito expressivas, mas difíceis de analisar — podem ter efeitos colaterais não intencionais, problemas de terminação e são difíceis de entender. O Cedar evita esses problemas excluindo loops e operações com estado, então a avaliação de políticas termina em tempo O(n) nos casos comuns. Esse tempo de execução limitado significa que os agentes podem tomar decisões de autorização sem prejudicar a experiência do usuário.

    Como o Cedar é usado pelo AgentCore

    A AgentCore Policy usa o Cedar e suas capacidades de análise matemática em vários pontos do fluxo de trabalho do AgentCore Gateway: o motor de autorização Cedar é usado na avaliação de políticas, e o Cedar Analysis é usado durante a criação de políticas e no plano de controle.

    Criação de políticas com IA neuro-simbólica

    Desenvolvedores podem escrever políticas Cedar diretamente ou usar linguagem natural que é traduzida para Cedar por meio de um loop de feedback de IA neuro-simbólica. Essa abordagem combina a flexibilidade do aprendizado de máquina com a exatidão provável do raciocínio automatizado: um LLM gera políticas a partir da linguagem natural, enquanto o Cedar Analysis as valida usando raciocínio simbólico e matemático.

    O fluxo funciona assim: um administrador especifica — em linguagem natural — quais ferramentas MCP o agente pode chamar e sob quais condições. O loop neuro-simbólico formaliza essa descrição em políticas Cedar. Primeiro, o LLM traduz a linguagem natural em políticas Cedar. Em seguida, essas políticas passam por dois estágios de verificação.

    No primeiro estágio, a AgentCore Policy usa um gerador de schema que recebe as descrições das ferramentas MCP e produz um schema Cedar. O Cedar valida as políticas contra esse schema, ajudando a garantir que elas referenciem ferramentas e parâmetros válidos e eliminando classes inteiras de erros em tempo de execução. Se a validação passar, o segundo estágio executa o Cedar Analysis, que codifica cada política como uma fórmula matemática e detecta problemas como políticas que concedem ou negam tudo, ou que contêm condições impossíveis.

    Figura 1: Fluxo de geração de políticas Cedar — Imagem original — fonte: AWS

    Plano de controle

    Ao associar políticas a um AgentCore Gateway, o Cedar Analysis realiza uma análise holística de todo o conjunto de políticas. Em vez de analisar políticas isoladamente, ele examina como elas interagem e qual é o efeito combinado. Essa análise identifica possíveis erros lógicos — como políticas conflitantes ou redundantes — e detecta se o conjunto de políticas produz resultados de autorização não intencionais.

    Aplicação na invocação de ferramentas MCP

    Cada requisição de ferramenta feita ao gateway do AgentCore é avaliada contra as políticas Cedar, que determinam se a invocação da ferramenta MCP com os argumentos fornecidos deve ser permitida. Isso cria o envelope de segurança enquanto permite as pontes necessárias para que o agente realize seu trabalho.

    Filtragem de ferramentas MCP

    O Cedar habilita uma camada adicional de proteção que opera antes de qualquer invocação de ferramenta. Quando um agente emite um comando de listagem de ferramentas, o AgentCore Gateway usa a capacidade de avaliação parcial do Cedar para determinar quais ações sempre seriam negadas sob o conjunto de políticas atual. Essas ações são omitidas da resposta de listagem de ferramentas. O agente e o LLM subjacente nunca veem essas ações de ferramentas, eliminando uma classe inteira de risco: o agente não pode tentar invocar uma ferramenta que não sabe que existe.

    Legibilidade: políticas que auditores entendem

    Conformidade regulatória e auditorias de segurança exigem políticas que humanos possam entender e verificar. As políticas Cedar se leem como linguagem natural estruturada, tornando-as acessíveis a equipes de segurança, responsáveis por conformidade e partes interessadas do negócio. Veja um exemplo do artigo original:

    // Only allow bulk discounts for premium customers with sufficient quantity
    permit (
      principal is AgentCore::OAuthUser,
      action == AgentCore::Action::"ApplyBulkDiscount",
      resource
    ) when {
      principal.hasTag("customer_tier") &&
      principal.getTag("customer_tier") == "Platinum" &&
      context.input.orderQuantity >= 50
    } unless {
      context.input
        .productTypes
        .containsAny (
          ["limited_edition", "seasonal_specials"]
        )
    };

    Auditores sem formação técnica conseguem entender essa política: “Permitir descontos em volume para clientes Platinum que pedem pelo menos 50 itens, exceto para produtos de edição limitada ou especiais de temporada.” A cláusula unless torna a exceção clara, que é como as regras de negócio são tipicamente expressas em linguagem natural.

    Vale notar que essa única política restringe duas fontes de dados diferentes. O nível do cliente vem de uma declaração de Token Web JSON (JWT) — não pode ser alucinado ou manipulado pelo LLM. As entradas da ferramenta, como quantidade do pedido e tipos de produto, porém, originam-se da chamada de ferramenta do LLM. As políticas Cedar restringem essas entradas apenas a valores permitidos, garantindo que mesmo se o LLM produzir argumentos inesperados, a camada de aplicação de políticas os rejeite deterministicamente.

    Análise formal para verificação de políticas

    As políticas Cedar podem ser codificadas como fórmulas matemáticas e analisadas usando técnicas de raciocínio automatizado por meio de um codificador simbólico. A análise de políticas, incluindo comparação de políticas, está disponível como uma ferramenta CLI de código aberto.

    Detectando erros lógicos

    O Cedar Analysis pode detectar quando políticas contêm erros lógicos. Por exemplo, o artigo original mostra uma política com restrições contraditórias — o nível do cliente não pode ser simultaneamente “Gold” e “Platinum”. A intenção era usar || em vez de &&, um erro que tanto humanos quanto sistemas de IA podem cometer ao criar políticas. O Cedar Analysis também detecta políticas que sempre permitem uma determinada ação, geralmente uma indicação de política excessivamente permissiva.

    // This policy cannot allow any requests due to logical errors
    permit (
      principal is AgentCore::OAuthUser,
      action == AgentCore::Action::"ProcessRefund",
      resource
    ) when {
      principal.hasTag("customer_tier") &&
      principal.getTag("customer_tier") == "Gold" &&
      principal.getTag("customer_tier") == "Platinum"
    } unless {
      context.input.refundAmount > 1000
    };

    Detectando conflitos entre políticas

    O Cedar Analysis também analisa o conjunto completo de políticas para detectar inconsistências entre políticas individuais diferentes. O artigo original apresenta um exemplo onde uma política permit permite que clientes Gold processem reembolsos abaixo de $100, enquanto uma política forbid bloqueia clientes Gold (e Platinum) de processar reembolsos abaixo de $500. Como forbid tem precedência sobre permit no Cedar, a política forbid bloquearia todos os reembolsos de clientes Gold apesar da política permit.

    Comparando mudanças de políticas

    Ao atualizar políticas, o Cedar Analysis pode determinar o impacto exato de uma mudança. O artigo original mostra um exemplo onde uma modificação na cláusula unless — aparentemente mais restritiva à primeira vista — na verdade torna a política mais permissiva. O Cedar Analysis detecta isso automaticamente e gera uma tabela mostrando a diferença em permissividade entre o conjunto original e o atualizado:

    Principal type    Action              Resource type    Status
    OAuthUser         ProcessRefund       Gateway          Equivalent
    OAuthUser         ApplyBulkDiscount   Gateway          More permissive

    Essa capacidade de verificação formal é essencial quando agentes operam autonomamente e podem afetar o mundo real. Organizações precisam de certeza matemática de que suas políticas se comportarão conforme o esperado.

    Comportamento determinístico para governança confiável

    Ao contrário dos modelos probabilísticos de IA, a segurança empresarial exige garantias determinísticas. As políticas Cedar sempre produzem a mesma decisão de autorização para requisições idênticas, independentemente da ordem de avaliação ou do estado do sistema. A semântica padrão do Cedar — negar por padrão, forbid vence, sem ordenação — ajuda a garantir comportamento previsível.

    De políticas para produção

    O Raciocínio automatizado já provou seu valor em toda a AWS, desde o AWS IAM Access Analyzer verificando políticas de acesso até segurança comprovável para configurações de rede. Aplicar essas mesmas técnicas à IA agêntica é uma extensão natural: à medida que os agentes assumem mais responsabilidades, a necessidade de garantias matematicamente fundamentadas só cresce.

    A abordagem neuro-simbólica descrita — combinando a flexibilidade do LLM com o rigor do raciocínio automatizado — aponta para um futuro onde agentes podem ser ao mesmo tempo mais autônomos e mais confiáveis, porque a verificação acompanha a autonomia.

    A Policy já está disponível como parte do Amazon Bedrock AgentCore Gateway. Para saber mais sobre o Cedar e suas capacidades, visite o site do Cedar, experimente o Cedar playground ou participe da comunidade Cedar no Slack da CNCF. Para mais informações sobre a Policy no Amazon Bedrock AgentCore Gateway, consulte a documentação da AWS ou explore o console do AgentCore Gateway.

    Fonte

    Why Policy in Amazon Bedrock AgentCore chose Cedar for securing agentic workflows (https://aws.amazon.com/blogs/security/why-policy-in-amazon-bedrock-agentcore-chose-cedar-for-securing-agentic-workflows/)