Filtros de Domínio e Data de Publicação para Web Search no AgentCore

Por que filtros de fonte e data importam para agentes de IA

Quando um agente de Inteligência Artificial (IA) usa busca na web para embasar suas respostas, a organização por trás desse agente precisa de mecanismos para controlar de onde vêm as informações e quão recentes elas precisam ser. Um agente de serviços financeiros não deveria fundamentar respostas em um blog sem curadoria. Um agente de informações de produto não deveria citar preços de três anos atrás quando o usuário pergunta sobre disponibilidade atual.

Pensando exatamente nesse problema, a AWS anunciou filtros de domínio e data de publicação em tempo de execução para o Web Search no Amazon Bedrock AgentCore — a plataforma da AWS para construir, conectar e otimizar agentes em escala com qualquer framework ou modelo. Essa capacidade faz parte da versão 1.2.0 do conector de busca na web.

O que há de novo na versão 1.2.0 do conector

O lançamento introduz dois novos recursos dentro do objeto filters no esquema de entrada da ferramenta Web Search:

1. Filtro de domínio em tempo de execução

É possível passar uma lista de inclusão (allowlist) ou exclusão (denylist) de domínios em cada invocação de tools/call. Isso oferece controle por requisição sobre quais fontes o agente pode consultar:

  • filters.domainFilter.include — resultados desses domínios são retornados
  • filters.domainFilter.exclude — resultados desses domínios são suprimidos

Cada lista suporta até 100 domínios, contados de forma independente.

2. Filtro por data de publicação

É possível restringir resultados a conteúdo publicado dentro de um intervalo de datas específico, usando limites em formato ISO-8601 UTC:

  • filters.publishedDateFilter.from — data de publicação mais antiga (inclusive)
  • filters.publishedDateFilter.to — data de publicação mais recente (inclusive)

Ambos os filtros são opcionais e aplicados por requisição. Omiti-los preserva o comportamento existente, onde todo o conteúdo indexado é elegível.

Por que filtros em tempo de execução fazem diferença

Cargas de trabalho reais com agentes exigem um controle mais granular do que políticas organizacionais amplas conseguem oferecer sozinhas:

  • Restrição de fonte por tarefa: um agente de conformidade analisando atualizações regulatórias deveria buscar apenas em domínios .gov e publicadores aprovados, não na web aberta.
  • Escopo temporal: um agente de inteligência de mercado resumindo “os resultados desta semana” nunca deveria trazer análises de trimestres anteriores, mesmo que estejam bem ranqueadas para a consulta.
  • Permissão/bloqueio dinâmico por chamada: uma plataforma multitenant atendendo clientes diferentes pode precisar de políticas de domínio distintas por requisição, sem criar alvos separados para cada cliente.
  • Garantia de atualidade do conteúdo: um agente de suporte ao cliente respondendo “o que mudou na última versão” deveria retornar apenas documentação publicada nos últimos 7 dias.

Como funciona: o fluxo da requisição

O ciclo de vida de uma requisição filtrada funciona da seguinte forma: o agente envia um tools/call com a consulta e os filtros; o Gateway mescla os filtros de tempo de execução com a política de nível administrativo; executa a consulta filtrada contra o índice web; aplica conformidade nos resultados brutos; e retorna apenas os resultados verificados para o agente embasar sua resposta.

Todo o ciclo acontece no lado do servidor. Não há loop de filtragem no cliente, nenhum pós-processamento e nenhuma ida e volta adicional.

O modelo de filtragem em camadas: admin + tempo de execução

Um princípio central desse lançamento é que os filtros de tempo de execução podem restringir, mas nunca ampliar o escopo definido por um administrador. Isso garante que a política corporativa seja sempre respeitada, independentemente do que uma chamada em tempo de execução solicite.

As listas de domínios no nível administrativo são configuradas durante a criação do recurso de conector. A lógica de mesclagem funciona assim:

  • Listas de inclusão (allowlist): a lista efetiva é a interseção entre as listas admin e runtime. Se o admin permite [a.com, b.com, c.com] e a chamada runtime inclui [b.com, c.com, d.com], apenas b.com e c.com são pesquisados. O domínio d.com está fora da lista admin e é silenciosamente descartado.
  • Listas de exclusão (denylist): a lista efetiva é a união entre as listas admin e runtime. Se o admin bloqueia [x.com] e a chamada runtime exclui [y.com], ambos ficam bloqueados.

Ou seja: uma chamada runtime não pode pesquisar um domínio que o admin não autorizou, e não pode desbloquear um domínio que o admin negou. Os filtros runtime só conseguem restringir ainda mais o espaço de busca.

Para detalhes completos de configuração e regras de composição, consulte a documentação de configuração de filtros de domínio no Guia do Desenvolvedor.

Comportamento de conformidade dos filtros

Quando os filtros estão ativos, o Web Search prioriza precisão em detrimento de abrangência. Resultados que não podem ser verificados contra os critérios do filtro são excluídos em vez de retornados sem filtragem:

  • Com filtro de domínio ativo: resultados sem um domínio reconhecível são excluídos.
  • Com filtro de data ativo: resultados sem uma data de publicação reconhecida são excluídos.

É possível receber menos resultados com filtros ativos, mas todos os resultados recebidos satisfazem os critérios especificados.

Como começar

O Web Search é entregue pelo AgentCore Gateway, uma capacidade do Amazon Bedrock AgentCore que oferece um endpoint gerenciado, compatível com o Protocolo de Contexto de Modelo (MCP — Model Context Protocol), para conectar agentes a ferramentas.

Pré-requisitos

  • Um Amazon Bedrock AgentCore Gateway com um alvo Web Search fixado na versão 1.2.0 ou posterior do conector.
  • Permissões de Gerenciamento de Identidade e Acesso (IAM — Identity and Access Management): o agente ou aplicação chamadora precisa de bedrock-agentcore:InvokeGateway no Nome de Recurso Amazon (ARN — Amazon Resource Name) do gateway, e a função de serviço do Gateway precisa de bedrock-agentcore:InvokeWebSearch. Consulte a documentação de configuração do papel de serviço do Gateway para a política completa.
  • O SDK AWS mais recente (Python, JavaScript, Java, .NET, Go, Ruby ou PHP).

Passo 1: Criar um alvo Web Search com a versão 1.2.0

Use o SDK AWS para Python (Boto3) para criar (ou atualizar) um alvo fixado na versão 1.2.0, com políticas de domínio no nível administrativo. Se você já tem um alvo Web Search na versão 1.1.0, pode usar UpdateGatewayTarget para fixá-lo na 1.2.0 em vez de criar um novo alvo. Para opções adicionais de configuração, incluindo a CLI do AgentCore e o console, consulte a documentação de configuração da ferramenta Web Search.

import boto3

gateway_client = boto3.client("bedrock-agentcore-control", region_name="us-east-1")

# Create a Web Search target pinned to version 1.2.0 with admin-level domain filtering
target = gateway_client.create_gateway_target(
    gatewayIdentifier="your-gateway-id",
    name="web-search-filtered",
    targetConfiguration={
        "mcp": {
            "connector": {
                "source": {"connectorId": "web-search", "version": "1.2.0"},
                "configurations": [
                    {
                        "name": "WebSearch",
                        "parameterValues": {
                            "domainFilter": {
                                "include": [
                                    "approved-wire-1.com",
                                    "approved-wire-2.com",
                                    "sec.gov",
                                    "investor.gov",
                                ],
                                "exclude": ["unreliable-source.net"],
                            }
                        },
                    }
                ],
            }
        }
    },
    credentialProviderConfigurations=[
        {"credentialProviderType": "GATEWAY_IAM_ROLE"}
    ],
)

print(f"Target ID: {target['targetId']}")
print(f"Status: {target['status']}")

Passo 2: Invocar com filtros em tempo de execução

Imagine um agente que monitora ações de enforcement da SEC para uma equipe jurídica. A equipe confia apenas em sec.gov como fonte primária e precisa de ações do mês corrente, não de registros históricos. Veja o payload tools/call que o agente envia:

{
  "jsonrpc": "2.0",
  "id": "1",
  "method": "tools/call",
  "params": {
    "name": "WebSearch",
    "arguments": {
      "query": "latest SEC enforcement actions 2026",
      "filters": {
        "domainFilter": {
          "include": ["sec.gov"],
          "exclude": []
        },
        "publishedDateFilter": {
          "from": "2026-07-01T00:00:00Z",
          "to": "2026-08-04T23:59:59Z"
        }
      }
    }
  }
}

O agente recebe apenas resultados de sec.gov publicados nas últimas cinco semanas. Não há comentários jurídicos de terceiros nem registros desatualizados nos resultados.

Nota: o nome da ferramenta no tools/call segue o padrão <nome-do-alvo>___WebSearch. Para o alvo criado anteriormente, seria web-search-filtered___WebSearch.

Exemplos de código por caso de uso

A seguir estão exemplos de como usar o cliente MCP criado a partir do AgentCore Gateway com os novos filtros em tempo de execução. Para criar o cliente MCP, consulte a documentação com exemplos de código para criação do cliente MCP.

Exemplo 1: Assistente de pesquisa clínica com requisitos de citação regulatória

Um assistente para a equipe de assuntos regulatórios de uma farmacêutica, onde a política da empresa exige que toda resposta cite apenas FDA, NIH ou ClinicalTrials.gov:

import json

# Pharma research assistant: only approved regulatory sources
compliance_request = json.dumps({
    "jsonrpc": "2.0",
    "id": "req-001",
    "method": "tools/call",
    "params": {
        "name": "WebSearch",
        "arguments": {
            "query": "FDA drug approval process 2026 guidance",
            "maxResults": 10,
            "filters": {
                "domainFilter": {
                    "include": ["fda.gov", "nih.gov", "clinicaltrials.gov"]
                }
            }
        }
    }
})

# Send via your MCP client (SigV4-signed or OAuth-authenticated)
response = mcp_client.send(compliance_request)
results = json.loads(response)

# Every result is from fda.gov, nih.gov, or clinicaltrials.gov
for result in results["result"]["content"]:
    print(result["text"])

Exemplo 2: Agente de atualização de ações, apenas cobertura desta semana

Um agente que gera atualizações de ações ao longo do dia de negociação, garantindo que apenas resultados dos últimos 7 dias sejam retornados:

from datetime import datetime, timedelta, timezone

# Calculate the 7-day window
now = datetime.now(timezone.utc)
seven_days_ago = now - timedelta(days=7)

stock_update_request = json.dumps({
    "jsonrpc": "2.0",
    "id": "req-002",
    "method": "tools/call",
    "params": {
        "name": "WebSearch",
        "arguments": {
            "query": "semiconductor stocks latest developments",
            "maxResults": 15,
            "filters": {
                "publishedDateFilter": {
                    "from": seven_days_ago.strftime("%Y-%m-%dT%H:%M:%SZ"),
                    "to": now.strftime("%Y-%m-%dT%H:%M:%SZ")
                }
            }
        }
    }
})

response = mcp_client.send(stock_update_request)

Exemplo 3: Conformidade de relações com investidores — fontes primárias e trimestre atual

Um agente para preparar rascunhos de análise de resultados, com duas regras rígidas: apenas fontes primárias (registros SEC e páginas oficiais de investidores) e apenas publicações do trimestre atual:

# IR compliance agent: primary sources + current quarter only
financial_request = json.dumps({
    "jsonrpc": "2.0",
    "id": "req-003",
    "method": "tools/call",
    "params": {
        "name": "WebSearch",
        "arguments": {
            "query": "AMZN quarterly earnings report Q2 2026",
            "maxResults": 10,
            "filters": {
                "domainFilter": {
                    "include": ["sec.gov", "investor.gov"],
                    "exclude": ["example-crowd-commentary-1.com", "example-crowd-commentary-2.com"]
                },
                "publishedDateFilter": {
                    "from": "2026-04-01T00:00:00Z",
                    "to": "2026-08-04T23:59:59Z"
                }
            }
        }
    }
})

response = mcp_client.send(financial_request)

Exemplo 4: Plataforma SaaS com políticas de fonte por tenant

Uma plataforma de agentes de pesquisa como serviço atendendo clientes de saúde, jurídico e financeiro — cada um com políticas de fonte contratualmente acordadas. Um único alvo de gateway serve 200 tenants, cada um com sua própria política de fonte, aplicada dinamicamente em tempo de execução usando o SDK Strands Agents:

from strands import Agent
from strands.models import BedrockModel
from strands.tools.mcp.mcp_client import MCPClient
from mcp.client.streamable_http import streamablehttp_client

# Per-tenant domain policies (from your config database)
TENANT_POLICIES = {
    "tenant-healthcare": {
        "include": ["pubmed.ncbi.nlm.nih.gov", "who.int", "cdc.gov"],
        "exclude": ["example-consumer-health-site.com"],
    },
    "tenant-legal": {
        "include": ["law.cornell.edu", "supremecourt.gov", "uscourts.gov"],
        "exclude": [],
    },
    "tenant-finance": {
        "include": ["sec.gov", "federalreserve.gov", "example-approved-wire.com"],
        "exclude": ["example-social-forum-site.com"],
    },
}

def search_for_tenant(tenant_id: str, query: str, days_back: int = 30):
    """Execute a policy-compliant web search for a specific tenant."""
    from datetime import datetime, timedelta, timezone

    policy = TENANT_POLICIES[tenant_id]
    now = datetime.now(timezone.utc)
    date_from = (now - timedelta(days=days_back)).strftime("%Y-%m-%dT%H:%M:%SZ")

    def create_transport():
        return streamablehttp_client(
            gateway_url,
            headers={"Authorization": f"Bearer {get_token()}"},
        )

    mcp_client = MCPClient(create_transport)
    model = BedrockModel(
        model_id="us.anthropic.claude-sonnet-4-20250514-v1:0",
        max_tokens=2048,
    )

    with mcp_client:
        tools = mcp_client.list_tools_sync()
        agent = Agent(model=model, tools=tools)

        # The agent's system prompt instructs it to pass these filters
        # on every WebSearch invocation
        system_prompt = f"""You are a research assistant. When using WebSearch, ALWAYS include these filters in your tool call:
- domainFilter.include: {policy['include']}
- domainFilter.exclude: {policy['exclude']}
- publishedDateFilter.from: {date_from}
Never search outside approved domains."""

        result = agent(query, system_prompt=system_prompt)
        return result.message

# Usage
answer = search_for_tenant(
    "tenant-healthcare",
    "What are the latest clinical trial results for GLP-1 drugs?"
)

Importante: a filtragem baseada em prompt de sistema (como mostrada acima) depende do agente seguir as instruções — não é uma aplicação rígida. Para aplicação forçada, configure os domínios permitidos no nível do alvo (lista de inclusão admin). Filtros runtime passados diretamente no payload do tools/call fornecem aplicação no nível da API que não pode ser contornada pelo modelo.

Referência do esquema de entrada

O objeto filters introduzido na versão 1.2.0 do conector adiciona domainFilter (listas de inclusão/exclusão, até 100 domínios cada) e publishedDateFilter (limites inclusivos em UTC no formato ISO-8601) aos campos existentes query e maxResults. Para o esquema de entrada completo e referência campo a campo, consulte o esquema de entrada na documentação do Amazon Bedrock AgentCore.

Disponibilidade e zero egresso de dados

A filtragem de domínio e data em tempo de execução está disponível hoje nas regiões US East (Norte da Virgínia) (us-east-1), Europe (Irlanda) (eu-west-1) e Asia Pacific (Tóquio) (ap-northeast-1) para o Web Search no Amazon Bedrock AgentCore.

Além dos filtros, esse lançamento também expande a disponibilidade do Web Search para duas novas regiões AWS: eu-west-1 (Dublin) e ap-northeast-1 (Tóquio). Clientes na Europa e na Ásia-Pacífico podem agora invocar o Web Search a partir de um endpoint regional mais próximo de suas cargas de trabalho, reduzindo latência e oferecendo um ponto de entrada baseado na União Europeia (UE) para organizações com requisitos de proximidade de dados.

O Web Search se beneficia da arquitetura de zero egresso de dados do AgentCore: as consultas de busca são servidas inteiramente dentro da infraestrutura AWS. As consultas dos clientes não são enviadas a um mecanismo de busca de terceiros nem roteadas para fora da AWS. Para organizações em setores regulamentados — como serviços financeiros, saúde e governo — isso elimina toda uma categoria de revisão de conformidade.

Compatibilidade retroativa

Esses recursos são totalmente compatíveis com versões anteriores:

  • Sem quebras de compatibilidade. A versão 1.2.0 é uma versão menor. Os novos campos são aditivos e o objeto filters é opcional. Chamadas de API existentes sem filtros continuam funcionando exatamente como antes.
  • Suporte a SDK. Disponível nos SDKs AWS (Python/Boto3, JavaScript/TypeScript, Java, .NET, Go, Ruby e PHP), Interface de Linha de Comando (CLI — Command Line Interface) da AWS e CLI do AgentCore.
  • Suporte ao console. O console AWS para alvos Web Search do AgentCore agora exibe as entradas de lista de inclusão e exclusão de domínios na interface de configuração do conector.

Conclusão

A filtragem de domínio e data de publicação em tempo de execução oferece aos desenvolvedores que constroem sobre o Amazon Bedrock AgentCore Gateway a precisão por chamada necessária para criar agentes confiáveis e em conformidade com políticas — sem abrir mão da simplicidade de uma ferramenta de busca gerenciada no lado do servidor. Seja restringindo um agente a fontes regulatórias aprovadas, limitando resultados às últimas 24 horas ou aplicando dinamicamente políticas específicas por tenant, o Web Search no AgentCore mantém o controle com zero egresso de dados, autenticação nativa IAM e sem dependências externas.

Para começar, acesse: documentação de filtragem do Web Search no Amazon Bedrock AgentCore Developer Guide, preços do Amazon Bedrock AgentCore e página do produto Web Search no AgentCore.

Fonte

Domain and publish date filters for Web Search on AgentCore (https://aws.amazon.com/blogs/machine-learning/domain-and-publish-date-filters-for-web-search-on-agentcore/)

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *