AI

Bedrock Agent em Python via AWS CDK com a API SERP da Bright Data

Este guia mostra como usar o AWS CDK em Python para criar um agente AWS Bedrock que usa a API SERP da Bright Data para dados de pesquisa na web em tempo real.
10 min de leitura
AWS CDK_SERP API blog image

Neste artigo, você verá:

  • O que é o AWS Cloud Development Kit (CDK) e como ele pode ser usado para definir e implantar infraestrutura em nuvem.
  • Por que você deve dar aos agentes AWS Bedrock IA, criados com o AWS CDK, acesso aos resultados de pesquisa na web usando uma ferramenta pronta para IA, como a API SERP da Bright Data.
  • Como criar um agente AWS Bedrock integrado à API SERP usando o AWS CDK em Python.

Vamos começar!

O que é o AWS Cloud Development Kit (CDK)?

O AWS Cloud Development Kit, também conhecido como AWS CDK, é uma estrutura de código aberto para construir infraestrutura em nuvem como código usando linguagens de programação modernas. Ele fornece o que você precisa para provisionar recursos da AWS e implantar aplicativos por meio do AWS CloudFormation usando linguagens de programação como TypeScript, Python, Java, C# e Go.

Graças ao AWS CDK, você também pode criar agentes de IA para o Amazon Bedrock programaticamente — exatamente o que você fará neste tutorial!

Grandes modelos de linguagem são treinados em Conjuntos de dados que representam conhecimento apenas até um determinado momento. Como resultado, eles tendem a produzir respostas imprecisas ou alucinadas. Isso é especialmente problemático para agentes de IA que exigem informações atualizadas.

Isso pode ser resolvido dando ao seu agente de IA a capacidade de buscar dados novos e confiáveis em uma configuração RAG (Retrieval-Augmented Generation, ougeração aumentada por recuperação). Por exemplo, o agente de IA poderia realizar pesquisas na web para reunir informações verificáveis, expandindo seu conhecimento e melhorando a precisão.

É possível criar uma função AWS Lambda personalizada para rastrear mecanismos de pesquisa, mas isso é bastante desafiador. Você teria que lidar com renderização JavaScript, CAPTCHAs, mudanças na estrutura do site e bloqueios de IP.

Uma abordagem melhor é usar uma API SERP rica em recursos, como a API SERP da Bright Data. Ela lida com proxies, desbloqueio, escalabilidade, formatação de dados e muito mais para você. Ao integrá-la ao AWS Bedrock usando uma função Lambda, seu agente de IA criado via AWS CDK poderá acessar resultados de pesquisa em tempo real para respostas mais confiáveis.

Como desenvolver um agente de IA com integração da API SERP usando AWS CDK em Python

Nesta seção passo a passo, você aprenderá como usar o AWS CDK com Python para criar um agente de IA AWS Bedrock. Ele será capaz de buscar dados de mecanismos de pesquisa por meio da API SERP da Bright Data.

A integração será implementada por meio de uma função Lambda (que chama a API SERP) que o agente pode invocar como uma ferramenta. Especificamente, para criar um agente Amazon Bedrock, os principais componentes são:

  • Grupo de ações: define as funções que o agente pode ver e chamar.
  • Função Lambda: implementa a lógica para consultar a API SERP da Bright Data.
  • Agente de IA: coordena as interações entre os modelos básicos, as funções e as solicitações do usuário.

Essa configuração será implementada inteiramente com AWS CDK em Python. Para obter os mesmos resultados usando o console visual AWS Bedrock, consulte nosso guia Amazon Bedrock + Bright Data.

Siga as etapas abaixo para criar um agente AWS Bedrock IA usando AWS CDK, aprimorado com recursos de pesquisa na web em tempo real por meio da API SERP!

Pré-requisitos

Para acompanhar este tutorial, você precisa de:

Etapa 1: Instalar e autorizar a AWS CLI

Antes de prosseguir com o AWS CDK, você precisa instalar o AWS CLI e configurá-lo para que seu terminal possa se autenticar com sua conta AWS.

Observação: se você já tem a AWS CLI instalada e configurada para autenticação, pule esta etapa e passe para a próxima.

Instale a AWS CLI seguindo o guia de instalação oficial para o seu sistema operacional. Após a instalação, verifique a instalação executando:

aws --version

Você deverá ver um resultado semelhante a:

aws-cli/2.31.32 Python/3.13.9 Windows/11 exe/AMD64

Em seguida, execute o comando configure para definir suas credenciais:

aws configure

Você será solicitado a inserir:

  1. ID da chave de acesso da AWS
  2. Chave secreta de acesso da AWS
  3. Nome da região padrão (por exemplo, us-east-1)
  4. Formato de saída padrão (opcional, por exemplo, json)

Preencha os três primeiros campos, pois eles são necessários para o desenvolvimento e a implantação do CDK. Se você não souber onde obter essas informações:

  1. Acesse a AWS e faça login.
  2. No canto superior direito, clique no nome da sua conta para abrir o menu da conta e selecione a opção “Credenciais de segurança”.
  3. Na seção “Chaves de acesso”, crie uma nova chave. Salve a “ID da chave de acesso” e a “Chave de acesso secreta” em um local seguro.

Pronto! Sua máquina pode se conectar à sua conta AWS por meio da CLI. Você está pronto para prosseguir com o desenvolvimento do AWS CDK.

Etapa 2: instale o AWS CDK

Instale o AWS CDK globalmente em seu sistema usando o pacote npm aws-cdk:

npm install -g aws-cdk

Em seguida, verifique a versão instalada executando:

cdk --version

Você deverá ver um resultado semelhante a:

2.1031.2 (build 779352d)

Observação: a versão 2.174.3 ou posterior é necessária para o desenvolvimento e a implantação de agentes de IA usando o AWS CDK com Python.

Ótimo! Agora você tem o AWS CDK CLI instalado localmente.

Etapa 3: Configure seu projeto AWS CDK Python

Comece criando uma nova pasta de projeto para seu agente de IA AWS CDK + Bright Data API SERP.
Por exemplo, você pode nomeá-la aws-cdk-bright-data-web-search-agent:

mkdir aws-cdk-bright-data-web-search-agent

Navegue até a pasta:

cd aws-cdk-bright-data-web-search-agent

Em seguida, inicialize um novo aplicativo AWS CDK baseado em Python por meio do comando init:

cdk init app --language python

Isso pode demorar um pouco, então seja paciente enquanto a CLI do CDK configura a estrutura do seu projeto.

Depois de inicializada, sua pasta de projeto deve ficar assim:

aws-cdk-bright-data-web-search-agent
├── .git/
├── venv/
├── aws_cdk_bright_data_web_search_agent/
│   ├── __init__.py
│   └── aws_cdk_bright_data_web_search_agent_stack.py
├── tests/
│   ├── __init__.py
│   └── unit/
│       ├── __init__.py
│       └── test_aws_cdk_bright_data_web_search_agent_stack.py
├── .gitignore
├── app.py
├── cdk.json
├── README.md
├── requirements.txt
├── requirements-dev.txt
└── source.bat

Você precisa se concentrar nestes dois arquivos:

  • app.py: contém a definição de nível superior do aplicativo AWS CDK.
  • aws_cdk_bright_data_web_search_agent/aws_cdk_bright_data_web_search_agent_stack.py: define a pilha para o agente de pesquisa na web (é aqui que você implementará a lógica do seu agente de IA).

Para obter mais detalhes, consulte o guia oficial da AWS sobre como trabalhar com CDK em Python.

Agora, carregue seu projeto em seu IDE Python favorito, como PyCharm ou Visual Studio Code com a extensão Python.

Observe que o comando cdk init cria automaticamente um ambiente virtual Python no projeto. No Linux ou macOS, ative-o com:

source .venv/bin/activate

Ou, de forma equivalente, no Windows, execute:

.venvScriptsactivate

Em seguida, dentro do ambiente virtual ativado, instale todas as dependências necessárias:

python -m pip install -r requirements.txt

Ótimo! Agora você tem um ambiente Python AWS CDK configurado para o desenvolvimento de agentes de IA.

Etapa 4: execute o AWS CDK Bootstrapping

Bootstrapping é o processo de preparar seu ambiente AWS para uso com o AWS Cloud Development Kit. Antes de implantar uma pilha CDK, seu ambiente deve ser inicializado.

Em termos mais simples, esse processo configura os seguintes recursos em sua conta AWS:

  • Um bucket Amazon S3: armazena seus arquivos de projeto CDK, como código de função AWS Lambda e outros ativos.
  • Um repositório Amazon ECR: armazena imagens Docker.
  • Funções do AWS IAM: concedem as permissões necessárias para que o AWS CDK execute implantações. (Para obter mais detalhes, consulte a documentação da AWS sobre funções do IAM criadas durante o bootstrapping.)

Para iniciar o processo de inicialização do CDK, execute o seguinte comando na pasta do seu projeto:

cdk bootstrap

No serviço AWS CloudFormation, esse comando cria uma pilha chamada “CDKToolkit” que contém todos os recursos necessários para implantar aplicativos CDK.

Verifique isso acessando o console do CloudFormation e verificando a página “Stacks”:
Note the “CDKToolkit” stack in CloudFormation

Você verá uma pilha “CDKToolkit”. Siga o link e você verá algo como:
The “CDKToolkit” stack generated by the bootstrapping process
Para obter mais informações sobre como funciona o processo de inicialização, por que ele é necessário e o que acontece nos bastidores, consulte a documentação oficial do AWS CDK.

Etapa 5: Prepare-se com a API SERP da Bright Data

Agora que seu ambiente AWS CDK está configurado para desenvolvimento e implantação, conclua as etapas preliminares preparando sua conta Bright Data e configurando o serviço API SERP. Você pode seguir a documentação oficial da Bright Data ou seguir as etapas abaixo.

Se você ainda não tem uma conta, crie uma conta Bright Data. Como alternativa, basta fazer login. Na sua conta Bright Data, acesse a página “Proxy & Scraping”. Na seção “My Zones”, verifique se há uma linha “API SERP” na tabela:
Note the “serp_api” row in the table
Se você não vir uma linha com a etiqueta “API SERP”, isso significa que você ainda não configurou uma zona. Role para baixo até a seção “API SERP” e clique em “Create zone” (Criar zona) para adicionar uma:
Configuring the SERP API zone
Crie uma zona API SERP e dê a ela um nome como serp_api (ou qualquer nome de sua preferência). Lembre-se do nome da zona que você escolheu, pois você precisará dele para acessar o serviço via API.

Na página do produto API SERP, alterne a opção “Ativar” para habilitar a zona:
Activating the SERP API zone
Por último, siga o guia oficial para gerar sua chave API Bright Data. Guarde-a em um local seguro, pois você precisará dela em breve.

Ótimo! Agora você tem tudo configurado para usar a API SERP da Bright Data em seu agente AWS Bedrock IA desenvolvido com AWS CDK.

Etapa 6: armazene os segredos do seu aplicativo CDK no AWS Secrets Manager

Você acabou de obter informações confidenciais (por exemplo, sua chave API da Bright Data e o nome da zona da API SERP). Em vez de codificar esses valores no código da sua função Lambda, você deve lê-los com segurança no AWS Secrets Manager.

Execute o seguinte comando Bash para criar um segredo chamado BRIGHT_DATA contendo sua chave API Bright Data e zona API SERP:

aws secretsmanager create-secret --name "BRIGHT_DATA" --description "Credenciais da API para integração da API SERP da Bright Data" --secret-string '{
    "BRIGHT_DATA_API_KEY": "<SUA_CHAVE_API_BRIGHT_DATA>",
    "BRIGHT_DATA_SERP_API_ZONE": "<SUA_ZONA_API_BRIGHT_DATA_SERP>"
  }'

Ou, de forma equivalente, no PowerShell:

aws secretsmanager create-secret `
  --name "BRIGHT_DATA" `
  --description "Credenciais da API para integração com a API SERP da Bright Data" `
  --secret-string '{"BRIGHT_DATA_API_KEY":"<SUA_CHAVE_DE_API_BRIGHT_DATA>","BRIGHT_DATA_SERP_API_ZONE":"<SUA_ZONA_DE_API_SERP_BRIGHT_DATA>"}'

Certifique-se de substituir <SUA_CHAVE_DE_API_BRIGHT_DATA> e <SUA_ZONA_DE_API_SERP_BRIGHT_DATA> pelos valores reais que você recuperou anteriormente.

Esse comando configurará o segredo BRIGHT_DATA, como você pode confirmar no console do AWS Secrets Manager na página “Segredos”:
Note the “BRIGHT_DATA” secret in AWS Secrets Manager

Se você clicar no botão “Recuperar valor secreto”, deverá ver os segredos BRIGHT_DATA_API_KEY e BRIGHT_DATA_SERP_API_ZONE:
Note the "BRIGHT_DATA_API_KEY” and “BRIGHT_DATA_SERP_API_ZONE” secrets
Incrível! Esses segredos serão usados para autenticar solicitações à API SERP em uma função Lambda que você definirá em breve.

Etapa 7: Implemente sua pilha AWS CDK

Agora que você configurou tudo o que é necessário para criar seu agente de IA, a próxima etapa é implementar a pilha AWS CDK em Python. Primeiro, é importante entender o que é uma pilha AWS CDK.

Uma pilha é a menor unidade implantável no CDK. Ela representa uma coleção de recursos da AWS definidos usando construções CDK. Quando você implanta um aplicativo CDK, todos os recursos da pilha são implantados juntos como uma única pilha CloudFormation.

O arquivo de pilha padrão está localizado em:

aws_cdk_bright_data_web_search_agent/aws_cdk_bright_data_web_search_agent_stack.py

Inspecione-o no Visual Studio Code:
The CDK stack script in Visual Studio Code
Ele contém um modelo de pilha genérico onde você definirá sua lógica. Sua tarefa é implementar a pilha AWS CDK completa para construir o agente de IA com integração da API SERP da Bright Data, incluindo funções Lambda, funções IAM, grupos de ação e o agente Bedrock AI.

Faça tudo isso com:

import aws_cdk.aws_iam as iam
from aws_cdk import (
  Aws,
  CfnOutput,
  Duration,
  Stack)

from aws_cdk import aws_bedrock as bedrock
from aws_cdk import aws_lambda as _lambda
from constructs import Construct

# Defina as constantes necessárias
AI_MODEL_ID = "amazon.nova-lite-v1:0" # O nome do LLM usado para alimentar o agente
ACTION_GROUP_NAME = "action_group_web_search"
LAMBDA_FUNCTION_NAME = "serp_api_lambda"
AGENT_NAME = "web_search_agent"

# Defina a pilha CDK para implantar o agente de pesquisa na web com tecnologia Bright Data
class AwsCdkBrightDataWebSearchAgentStack(Stack):

    def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)

        # Concede permissões Lambda para registrar e ler segredos
        lambda_policy = iam.Policy(
            self,
            "LambdaPolicy",
            statements=[
                # Permissão para criar grupos de log do CloudWatch
                iam.PolicyStatement(
                    sid="CreateLogGroup",
                    efeito=iam.Effect.ALLOW,
                    ações=["logs:CreateLogGroup"],
                    recursos=[f"arn:aws:logs:{Aws.REGION}:{Aws.ACCOUNT_ID}:*"],
                ),
                # Permissão para criar fluxos de log e inserir eventos de log
                iam.PolicyStatement(
                    sid="CreateLogStreamAndPutLogEvents",
                    efeito=iam.Effect.ALLOW,
                    ações=["logs:CreateLogStream", "logs:PutLogEvents"],
                    recursos=[
                        f"arn:aws:logs:{Aws.REGION}:{Aws.ACCOUNT_ID}:log-group:/aws/lambda/{LAMBDA_FUNCTION_NAME}",
                        f"arn:aws:logs:{Aws.REGION}:{Aws.ACCOUNT_ID}:log-group:/aws/lambda/{LAMBDA_FUNCTION_NAME}:log-stream:*",
                    ],
                ),
                # Permissão para ler segredos BRIGHT_DATA do Secrets Manager
                iam.PolicyStatement(
                    sid="GetSecretsManagerSecret",
                    effect=iam.Effect.ALLOW,
                    actions=["secretsmanager:GetSecretValue"],
                    resources=[
                        f"arn:aws:secretsmanager:{Aws.REGION}:{Aws.ACCOUNT_ID}:secret:BRIGHT_DATA*",
                    ],),

],
)

        # Defina a função IAM para as funções Lambda
        lambda_role = iam.Role(
            self,
            "LambdaRole",
            role_name=f"{LAMBDA_FUNCTION_NAME}_role",
            assumed_by=iam.ServicePrincipal("lambda.amazonaws.com"),
        )

        # Anexe a política à função Lambda
        lambda_role.attach_inline_policy(lambda_policy)

        # Definição da função Lambda
        lambda_function = _lambda.Function(
            self,
            LAMBDA_FUNCTION_NAME,
            function_name=LAMBDA_FUNCTION_NAME,
            runtime=_lambda.Runtime.PYTHON_3_12,  # Tempo de execução Python
            architecture=_lambda.Architecture.ARM_64,
            code=_lambda.Code.from_asset("lambda"),  # Ler o código Lambda da pasta "lambda/"
            handler=f"{LAMBDA_FUNCTION_NAME}.lambda_handler",
timeout=Duration.seconds(120),
role=lambda_role,  # Anexar função IAM
            environment={"LOG_LEVEL": "DEBUG", "ACTION_GROUP": f"{ACTION_GROUP_NAME}"},
        )

        # Permita que o serviço Bedrock invoque funções Lambda
        bedrock_account_principal = iam.PrincipalWithConditions(
            iam.ServicePrincipal("bedrock.amazonaws.com"),
            conditions={
                "StringEquals": {"aws:SourceAccount": f"{Aws.ACCOUNT_ID}"},
            },
        )
        lambda_function.add_permission(
            id="LambdaResourcePolicyAgentsInvokeFunction",
            principal=bedrock_account_principal,
            action="lambda:invokeFunction",
        )

        # Defina a política IAM para o agente Bedrock
        agent_policy = iam.Policy(
            self,
            "AgentPolicy",
            statements=[
                iam.PolicyStatement(
                    sid="AmazonBedrockAgentBedrockFoundationModelPolicy",
                    effect=iam.Effect.ALLOW,
                    actions=["bedrock:InvokeModel"],  # Dê a ele permissão para chamar o modelo básico
                    resources=[f"arn:aws:bedrock:{Aws.REGION}::foundation-model/{AI_MODEL_ID}"],
                ),
            ],
        )

        # Relação de confiança para a função do agente para permitir que o Bedrock a assuma
        agent_role_trust = iam.PrincipalWithConditions(
            iam.ServicePrincipal("bedrock.amazonaws.com"),
            conditions={
                "StringLike": {"aws:SourceAccount": f"{Aws.ACCOUNT_ID}"},
                "ArnLike": {"aws:SourceArn": f"arn:aws:bedrock:{Aws.REGION}:{Aws.ACCOUNT_ID}:agent/*"},
            },
        )

        # Defina a função IAM para o agente Bedrock
        agent_role = iam.Role(
            self,
            "AmazonBedrockExecutionRoleForAgents",
            role_name=f"AmazonBedrockExecutionRoleForAgents_{AGENT_NAME}",
            assumed_by=agent_role_trust,
        )
        agent_role.attach_inline_policy(agent_policy)

        # Definir o grupo de ações para o agente de IA
        action_group = bedrock.CfnAgent.AgentActionGroupProperty(
            action_group_name=ACTION_GROUP_NAME,
            description="Chamar a API SERP da Bright Data para realizar pesquisas na web e recuperar informações atualizadas dos mecanismos de pesquisa.",
            action_group_executor=bedrock.CfnAgent.ActionGroupExecutorProperty(lambda_=lambda_function.function_arn),
            function_schema=bedrock.CfnAgent.FunctionSchemaProperty(
                functions=[
                    bedrock.CfnAgent.FunctionProperty(
                        name=LAMBDA_FUNCTION_NAME,
                        description="Integra-se com a API SERP da Bright Data para realizar pesquisas na web.",
                        parameters={
                            "search_query": bedrock.CfnAgent.ParameterDetailProperty(
                                type="string",
                                description="A consulta de pesquisa para a pesquisa na web do Google.",
                                required=True,
                            )
                        },
                    ),
                ]
            ),
        )

        # Crie e especifique o agente Bedrock AI
        agent_description = """
            Um agente de IA que pode se conectar à API SERP da Bright Data para recuperar o contexto de pesquisa recente na web dos mecanismos de pesquisa.
        """

        agent_instruction = """
            Você é um agente projetado para lidar com casos de uso que exigem a recuperação e o processamento de informações atualizadas.
            Você pode acessar dados atuais, incluindo notícias e resultados de mecanismos de pesquisa, por meio de pesquisas na web alimentadas pela API SERP da Bright Data.
        """

        agente = bedrock.CfnAgent(
            self,
            AGENT_NAME,
            description=agent_description,
            agent_name=AGENT_NAME,
            foundation_model=AI_MODEL_ID,
            action_groups=[action_group],
            auto_prepare=True,
            instruction=agent_instruction,
            agent_resource_role_arn=agent_role.role_arn,
        )

        # Exportar as principais saídas para implantação
        CfnOutput(self, "agent_id", value=agent.attr_agent_id)
        CfnOutput(self, "agent_version", value=agent.attr_agent_version)

O código acima é uma versão modificada da implementação oficial da pilha AWS CDK para um agente de IA de pesquisa na web.

O que acontece nessas mais de 150 linhas de código reflete as etapas descritas anteriormente no guia: Etapa nº 1, Etapa nº 2 e Etapa nº 3 do nosso artigo“Como integrar a API SERP da Bright Data com os agentes de IA do AWS Bedrock”.

Para entender melhor o que está acontecendo nesse arquivo, vamos dividir o código em cinco blocos funcionais:

  1. Política e função IAM do Lambda: configura as permissões para a função Lambda. O Lambda requer acesso aos logs do CloudWatch para registrar detalhes de execução e ao AWS Secrets Manager para ler com segurança a chave e a zona da API da Bright Data. Uma função IAM é criada para o Lambda e a política apropriada é anexada, garantindo que ele opere com segurança, apenas com as permissões necessárias.
  2. Definição da função Lambda: aqui, a própria função Lambda é definida e configurada. Ela especifica o tempo de execução e a arquitetura do Python, aponta para a pasta que contém o código Lambda (que será implementado na próxima etapa) e configura variáveis de ambiente, como nível de log e nome do grupo de ação. As permissões são concedidas para que o AWS Bedrock possa invocar o Lambda, permitindo que o agente de IA acione pesquisas na web por meio da API SERP da Bright Data.
  3. Função IAM do agente Bedrock: cria a função de execução para o agente de IA Bedrock. O agente precisa de permissões para invocar o modelo de IA básico selecionado entre os suportados (amazon.nova-lite-v1:0, neste caso). Uma relação de confiança é definida para que apenas o Bedrock possa assumir a função dentro da sua conta. Uma política é anexada concedendo acesso ao modelo.
  4. Definição do grupo de ações: um grupo de ações define as ações específicas que o agente de IA pode realizar. Ele vincula o agente à função Lambda que permite que ele execute pesquisas na web por meio da API SERP da Bright Data. O grupo de ações também inclui metadados para parâmetros de entrada, para que o agente entenda como interagir com a função e quais informações são necessárias para cada pesquisa.
  5. Definição do agente IA Bedrock: define o próprio agente IA. Ele vincula o agente ao grupo de ações e à função de execução e fornece uma descrição clara e instruções para seu uso.

Após implantar a pilha CDK, um agente de IA aparecerá no seu console AWS. Esse agente pode realizar pesquisas na web de forma autônoma e recuperar informações atualizadas, aproveitando a integração da API SERP da Bright Data na função Lambda. Fantástico!

Etapa 8: Implemente o Lambda para integração com a API SERP

Dê uma olhada neste trecho do código anterior:

lambda_function = _lambda.Function(
    self,
    LAMBDA_FUNCTION_NAME,
    function_name=LAMBDA_FUNCTION_NAME,
    runtime=_lambda.Runtime.PYTHON_3_12,  # Python runtime
    architecture=_lambda.Architecture.ARM_64,
    code=_lambda.Code.from_asset("lambda"),  # Leia o código Lambda da pasta "lambda/"
    handler=f"{LAMBDA_FUNCTION_NAME}.lambda_handler",
    timeout=Duration.seconds(120),
    role=lambda_role,  # Anexar função IAM
    environment={"LOG_LEVEL": "DEBUG", "ACTION_GROUP": f"{ACTION_GROUP_NAME}"},
)

A linha code=_lambda.Code.from_asset("lambda") especifica que o código da função Lambda será carregado da pasta lambda/. Portanto, crie uma pasta lambda/ em seu projeto e adicione um arquivo chamado serp_api_lambda.py dentro dela:
The serp_api_lambda.py file inside the lambda/ folder
O arquivo serp_api_lambda.py precisa conter a implementação da função Lambda usada pelo agente de IA definido anteriormente. Implemente esta função para lidar com a integração com a API SERP da Bright Data da seguinte maneira:

import json
import logging
import os
import urllib.parse
import urllib.request

import boto3

# ----------------------------
# Configuração de registro
# ----------------------------
log_level = os.environ.get("LOG_LEVEL", "INFO").strip().upper()
logging.basicConfig(
    format="[%(asctime)s] p%(process)s {%(filename)s:%(lineno)d} %(levelname)s - %(message)s"
)
logger = logging.getLogger(__name__)
logger.setLevel(log_level)

# ----------------------------
# Região AWS do ambiente
# ----------------------------
AWS_REGION = os.environ.get("AWS_REGION")
if not AWS_REGION:
    logger.warning("Variável de ambiente AWS_REGION não definida; boto3 usará a região padrão")

# ----------------------------
# Recuperar o objeto secreto do AWS Secrets Manager
# ----------------------------
def get_secret_object(key: str) -> str:
    """
    Obter um valor secreto do AWS Secrets Manager.
    """
    session = boto3.session.Session()
    client = session.client(
        service_name='secretsmanager',
        region_name=AWS_REGION
    )

    try:
        get_secret_value_response = client.get_secret_value(
            SecretId=key
        )
    except Exception as e:
        logger.error(f"Não foi possível obter o segredo '{key}' do Secrets Manager: {e}")
        raise e

    secret = json.loads(get_secret_value_response["SecretString"])

    return secret


# Recuperar credenciais do Bright Data
bright_data_secret = get_secret_object("BRIGHT_DATA")
BRIGHT_DATA_API_KEY = bright_data_secret["BRIGHT_DATA_API_KEY"]
BRIGHT_DATA_SERP_API_ZONE = bright_data_secret["BRIGHT_DATA_SERP_API_ZONE"]

# ----------------------------
# Pesquisa na Web da API SERP
# ----------------------------
def serp_api_web_search(search_query: str) -> str:
    """
    Chama a API SERP da Bright Data para recuperar os resultados da pesquisa do Google.
    """
    logger.info(f"Executando pesquisa da API SERP da Bright Data para search_query='{search_query}'")

    # Codifica a consulta para URL
    encoded_query = urllib.parse.quote(search_query)
    # Cria a URL do Google para extrair o SERP de
    search_engine_url = f"https://www.google.com/search?q={encoded_query}"

    # Solicitação da API Bright Data (documentação: https://docs.brightdata.com/scraping-automation/serp-api/send-your-first-request)
    url = "https://api.brightdata.com/request"
    headers = {
        "Content-Type": "application/json",
        "Authorization": f"Bearer {BRIGHT_DATA_API_KEY}"
    }
    data = {
        "zone": BRIGHT_DATA_SERP_API_ZONE,
        "url": search_engine_url,
        "format": "raw",
        "data_format": "markdown" # Para obter o SERP como um documento Markdown pronto para IA
    }

    payload = json.dumps(data).encode("utf-8")
    request = urllib.request.Request(url, data=payload, headers=headers)

    try:
        response = urllib.request.urlopen(request)
        response_data: str = response.read().decode("utf-8")
        logger.debug(f"Resposta da API SERP: {response_data}")
        return response_data
    except urllib.error.HTTPError as e:
        logger.error(f"Falha ao chamar a API SERP da Bright Data. Erro HTTP {e.code}: {e.reason}")
    exceto urllib.error.URLError como e:
        logger.error(f"Falha ao chamar a API SERP da Bright Data. Erro de URL: {e.reason}")

    retornar ""


# ----------------------------
# Manipulador Lambda
# ----------------------------
def lambda_handler(event, _):
    """
    Manipulador AWS Lambda.
    Espera evento com actionGroup, função e parâmetros opcionais (incluindo search_query).
    """
    logger.debug(f"lambda_handler chamado com evento: {event}")

    action_group = event.get("actionGroup")
    function = event.get("function")
    parameters = event.get("parameters", [])

    # Extrair search_query dos parâmetros
    search_query = next(
        (param["value"] for param in parameters if param.get("name") == "search_query"),
        None,
    )
    logger.debug(f"Entrada da consulta de pesquisa: {search_query}")

    serp_page = serp_api_web_search(search_query) se search_query for diferente de ""
    logger.debug(f"Resultados da consulta de pesquisa: {serp_page}")

    # Prepare a resposta Lambda
    function_response_body = {"TEXT": {"body": serp_page}}

    action_response = {
        "actionGroup": action_group,
        "function": function,
        "functionResponse": {"responseBody": function_response_body},
    }

    response = {"response": action_response, "messageVersion": event.get("messageVersion")}

    logger.debug(f"resposta do lambda_handler: {response}")

    return response

Esta função Lambda lida com três tarefas principais:

  1. Recupera credenciais de API com segurança: busca a chave da API Bright Data e a zona da API SERP no AWS Secrets Manager, para que informações confidenciais nunca sejam codificadas.
  2. Realizar pesquisas na web por meio da API SERP: codifica a consulta de pesquisa, constrói a URL de pesquisa do Google e envia uma solicitação para a API SERP da Bright Data. A API retorna os resultados da pesquisa formatados como Markdown, que é um formato de dados ideal para consumo de IA.
  3. Responder ao AWS Bedrock: retorna os resultados em uma resposta estruturada que o agente de IA pode usar.

Pronto! Sua função AWS Lambda para se conectar à API SERP da Bright Data foi definida com sucesso.

Etapa 9: Implante sua aplicação AWS CDK

Agora que sua pilha CDK e sua função Lambda relacionada foram implementadas, a etapa final é implantar sua pilha na AWS. Para fazer isso, na pasta do seu projeto, execute o comando de implantação:

cdk deploy

Quando solicitado a dar permissão para criar a função IAM, digite y para aprovar.

Após alguns instantes, se tudo funcionar conforme o esperado, você deverá ver uma saída como esta:
The output of the “deploy” command

Em seguida, acesse o console Amazon Bedrock. Na página “Agentes”, você verá uma entrada chamada “web_search_agent”:
Note the “web_search_agent” entry

Abra o agente e você verá os detalhes do agente implantado:
The details page for the “web_search_agent”
Inspecione-o pressionando o botão “Editar e criador de agente” e você verá exatamente o mesmo agente de IA implementado em“Como integrar a API SERP da Bright Data com o AWS Bedrock”.

Por fim, observe que você pode testar o agente diretamente usando a interface de bate-papo no canto direito. É isso que você fará na próxima e última etapa!

Etapa 10: Teste o agente de IA

Para testar os recursos de pesquisa na web e recuperação de dados em tempo real do seu agente de IA, tente um prompt como:

“Mostre-me as três últimas notícias sobre a paralisação do governo dos EUA”

(Observação: este é apenas um exemplo. Portanto, você pode testar qualquer prompt que exija resultados de pesquisa na web).

Essa é uma solicitação ideal, pois pede informações atualizadas que o modelo básico por si só não conhece. O agente chamará a função Lambda integrada à API SERP, recuperará os resultados e processará os dados para gerar uma resposta coerente.

Execute esta solicitação na seção “Testar agente” do seu agente e você deverá ver um resultado semelhante a este:
Running the prompt in the AWS Amazon Bedrock console
Nos bastidores, o agente invoca a função Lambda da API SERP, recupera os resultados de pesquisa mais recentes do Google para a consulta “paralisação do governo dos EUA” e extrai os artigos mais relevantes (junto com suas URLs). Isso é algo que um LLM padrão, como o Nova Lite configurado, não pode fazer sozinho.

Em detalhes, esta é a resposta gerada pelo agente:

The agent’s response
Os artigos de notícias selecionados (e seus URLs) correspondem ao que você encontraria manualmente no Google para a consulta “paralisação do governo dos EUA” (pelo menos na data em que o agente foi testado):
The SERP for the “US government shutdown” search query
Agora, qualquer pessoa que já tentou extrair resultados de pesquisa do Google sabe como isso pode ser desafiador devido à detecção de bots, proibições de IP, renderização de JavaScript e outros desafios. A API SERP da Bright Data lida com todas essas questões para você, retornando SERPs extraídos no formato Markdown (ou HTML, JSON, etc.) otimizado por IA.

Para confirmar que seu agente realmente chamou a função Lambda da API SERP, clique no botão “Mostrar rastreamento” na caixa de resposta. Na seção “Rastreamento etapa 1”, role para baixo até o log de invocação do grupo para inspecionar a saída da chamada Lambda:
The output of the SERP API Lambda function
Isso verifica se a função Lambda foi executada com sucesso e se o agente interagiu com a API SERP conforme o esperado. Você também pode verificar os logs do AWS CloudWatch para sua função Lambda para confirmar a execução.

É hora de levar seu agente adiante! Teste prompts relacionados à verificação de fatos, monitoramento de marcas, análise de tendências de mercado ou outros cenários para ver como ele se sai em diferentes casos de uso de agentes e RAG.

Et voilà! Você criou com sucesso um agente AWS Bedrock integrado à API SERP da Bright Data usando Python e a biblioteca AWS CDK. Este agente de IA é capaz de recuperar dados de pesquisa na web atualizados, confiáveis e contextuais sob demanda.

Conclusão

Nesta postagem do blog, você aprendeu como integrar a API SERP da Bright Data a um agente de IA AWS Bedrock usando um projeto AWS CDK Python. Esse fluxo de trabalho é perfeito para desenvolvedores que desejam criar agentes de IA mais sensíveis ao contexto na AWS.

Para criar agentes de IA ainda mais sofisticados, explore a infraestrutura da Bright Data para IA. Ela oferece um conjunto de ferramentas para recuperar, validar e transformar dados da web em tempo real.

Crie uma conta Bright Data hoje gratuitamente e comece a experimentar nossas soluções de dados da web prontas para IA!

AI

Dê aos agentes do AWS Bedrock a capacidade de pesquisar na Web por meio da API SERP da Bright Data

Aprenda a turbinar os agentes do AWS Bedrock integrando a API SERP da Bright Data, permitindo a pesquisa na Web em tempo real e respostas mais precisas e atualizadas.
19 min de leitura
AWS Bedrock Agents with SERP API blog image

Neste tutorial, você aprenderá:

  • O que é um agente de IA do AWS Bedrock e o que ele pode fazer.
  • Por que dar aos agentes acesso aos resultados de pesquisa na Web por meio de uma ferramenta pronta para IA, como a API SERP da Bright Data, melhora a precisão e o contexto.
  • Como criar um agente do AWS Bedrock integrado à API SERP, passo a passo, no console do AWS.
  • Como é possível fazer o mesmo usando código com o AWS CDK.

Vamos nos aprofundar!

O que é um agente IA do AWS Bedrock?

No AWS Bedrock, um agente de IA é um serviço que usa LLMs para automatizar tarefas de várias etapas, dividindo-as em etapas lógicas. Mais detalhadamente, um agente de IA do Amazon Bedrock é um sistema que aproveita os modelos de base, as APIs e os dados para entender as solicitações do usuário, reunir informações relevantes e concluir tarefas automaticamente.

Os agentes do AWS Bedrock oferecem suporte à memória para continuidade de tarefas, segurança integrada por meio do Bedrock Guardrails e podem colaborar com outros agentes para fluxos de trabalho complexos. Graças à infraestrutura da AWS, eles são gerenciados, dimensionáveis e sem servidor, simplificando o processo de criação e implantação de aplicativos com IA.

Por que os agentes de IA no Amazon Bedrock se beneficiam do contexto de pesquisa dinâmica na Web

Os LLMs são treinados em grandes Conjuntos de dados que representam o conhecimento disponível até um ponto específico no tempo. Isso significa que, quando um LLM é lançado, ele só sabe o que foi incluído em seus dados de treinamento, que rapidamente se tornam desatualizados.

É por isso que os modelos de IA não têm conhecimento em tempo real dos eventos atuais e do conhecimento emergente. Como resultado, eles podem produzir respostas desatualizadas, incorretas ou até mesmo alucinadas, o que é um grande problema em agentes de IA.

Essa limitação pode ser superada dando ao seu agente de IA a capacidade de buscar informações novas e confiáveis em uma configuração RAG (Retrieval-Augmented Generation). A ideia é equipar seu agente com uma ferramenta confiável que possa realizar pesquisas na Web e recuperar dados verificáveis para apoiar seu raciocínio, expandir seu conhecimento e, por fim, fornecer resultados mais precisos.

Uma opção seria criar uma função personalizada do AWS Lambda que extraia SERPs (Search Engine Results Pages) e prepare os dados para a ingestão do LLM. No entanto, essa abordagem é tecnicamente complexa. Ela exige a manipulação de renderização de JavaScript, Resolução de CAPTCHA e estruturas de sites em constante mudança. Além disso, não é facilmente dimensionável, pois mecanismos de pesquisa como o Google podem bloquear rapidamente seus IPs após algumas solicitações automatizadas.

Uma solução muito melhor é usar uma API SERP e de pesquisa na Web com a melhor classificação, como a API SERP da Bright Data. Esse serviço retorna dados de mecanismos de pesquisa enquanto gerencia automaticamente proxies, desbloqueio, análise de dados e todos os outros desafios.

Ao integrar a API SERP da Bright Data ao AWS Bedrock por meio de uma função Lambda, seu agente de IA obtém acesso às informações de pesquisa na Web, sem nenhum ônus operacional. Vamos ver como!

Como integrar a API SERP da Bright Data em seu agente de IA do AWS Bedrock para casos de uso contextualizados de pesquisa

Nesta seção passo a passo, você aprenderá como dar ao seu agente de IA do AWS Bedrock a capacidade de buscar dados em tempo real dos mecanismos de busca usando a API SERP da Bright Data.

Essa integração permite que seu agente forneça respostas mais contextuais e atualizadas, incluindo links relevantes para leitura adicional. A configuração será feita visualmente no console do AWS Bedrock, com apenas uma pequena quantidade de código necessária.

Siga as etapas abaixo para criar um agente de IA do AWS Bedrock superalimentado pela API SERP!

Pré-requisitos

Para acompanhar este tutorial, você precisa de:

Não se preocupe se você ainda não tiver criado uma conta da Bright Data. Você será orientado sobre esse processo mais adiante neste guia.

Etapa 1: criar um agente do AWS Bedrock

Para criar um agente do AWS Bedrock IA, faça login na sua conta do AWS e abra o console do Amazon Bedrock pesquisando o serviço na barra de pesquisa:

Reaching the Amazon Bedrock console

Em seguida, no console do Bedrock, selecione “Agents” (Agentes) no menu à esquerda e clique no botão “Create agent” (Criar agente):

Pressing the “Create agent” button

Dê ao seu agente um nome e uma descrição, por exemplo:

  • Nome: web_search_agent
  • Descrição: “Um agente de IA que pode se conectar à API SERP da Bright Data para recuperar o contexto de pesquisa na Web recente dos mecanismos de pesquisa.”

Importante: se você planeja usar LLMs da Amazon, deve usar sublinhados (_) em vez de hífens (-) no nome do agente, nas funções etc. O uso de hifens pode causar uma “Dependency resource: received model timeout/error exception from Bedrock. Se isso acontecer, tente fazer a solicitação novamente.“.

Filling out the “Create agent” modal

Clique em “Create” (Criar) para finalizar seu agente de IA. Agora você deve ser redirecionado para a página “Agent builder” (Criador de agentes):

Reaching the “Agent builder” page

Ótimo! Você criou com sucesso um agente de IA no AWS Bedrock.

Etapa 2: configurar o agente de IA

Agora que você criou um agente, precisa concluir sua configuração, definindo algumas opções.

Para a informação “Agent resource role” (Função de recurso do agente), deixe a opção padrão “Create and use a new service role” (Criar e usar uma nova função de serviço). Isso cria automaticamente uma função do AWS Identity and Access Management (IAM) que o agente assumirá:

Configuring the “Agent resource role” option

Em seguida, clique em “Select model” (Selecionar modelo) e escolha o modelo do LLM para alimentar seu agente. Neste exemplo, usaremos o modelo “Nova Lite” da Amazon (mas qualquer outro modelo serve):

Selecting the “Nova Lite” model

Após selecionar o modelo, clique em “Apply” (Aplicar) para confirmar.

Na seção “Instructions for the Agent” (Instruções para o agente), forneça instruções claras e específicas que digam ao agente o que ele deve fazer. Para esse agente de pesquisa na Web, você pode inserir algo como:

Você é um agente projetado para lidar com casos de uso que exigem a recuperação e o processamento de informações atualizadas. Você pode acessar dados atuais, inclusive notícias e resultados de mecanismos de pesquisa, por meio de pesquisas na Web com a API SERP da Bright Data.

Depois de concluir as instruções, a seção final de detalhes do agente deverá ter a seguinte aparência:

Editing the agent details

Conclua a configuração dos detalhes do agente clicando em “Save” (Salvar) na barra superior para salvar todos os detalhes do agente.

Observação: o AWS Bedrock oferece muitas outras opções de configuração. Explore-as para adaptar seus agentes aos seus casos de uso específicos.

Etapa 3: adicionar o grupo de ação da API SERP

Os grupos de ação permitem que os agentes interajam com sistemas externos ou APIs para coletar informações ou realizar ações. Você precisará definir um para se integrar à API SERP da Bright Data.

Na página “Agent builder” (Criador de agentes), role para baixo até a seção “Action groups” (Grupos de ações) e clique em “Add” (Adicionar):

Pressing the “Add” button in “Action groups”

Isso abrirá um formulário para definir o grupo de ações. Preencha-o da seguinte forma:

  • Digite o nome do grupo de ações: action_group_web_search (novamente, use sublinhados _, não hífens -)
  • Descrição: “Chame a API SERP da Bright Data para realizar pesquisas na Web e recuperar informações atualizadas dos mecanismos de pesquisa.”
  • Tipo de grupo de ação: Selecione a opção “Definir com detalhes da função”.
  • Invocação do grupo de ações: Selecione a opção “Quick create a new Lambda function” (Criar rapidamente uma nova função Lambda ), que configura uma função Lambda básica que o agente pode chamar. Nesse caso, a função lidará com a lógica para chamar a API SERP da Bright Data.
Filling out the action group form

Observação: Com a opção “Quick create a new Lambda function” (Criar rapidamente uma nova função Lambda), o Amazon Bedrock gera um modelo de função Lambda para seu agente. Posteriormente, você pode modificar essa função no console do Lambda (faremos isso em uma etapa posterior).

Agora, configure a função no grupo. Role para baixo até a seção “Action group function 1: serp_api” e preencha da seguinte forma:

  • Nome: serp_api (novamente, prefira sublinhados).
  • Descrição: “Integra-se com a API SERP da Bright Data para realizar pesquisas na Web.”
  • Parâmetros: Adicione um parâmetro chamado search_query do tipo string e marque-o como obrigatório. Esse parâmetro será passado para a função Lambda e representa a entrada para a API SERP da Bright Data para recuperar o contexto da pesquisa na Web.
Filling out the “Action group function“ form

Por fim, clique em “Create” (Criar) para concluir a configuração do grupo de ações:

Pressing the “Create” button to add the action group

Por fim, clique em “Save” (Salvar) para salvar a configuração do agente. Muito bem!

Etapa 4: Configure sua conta da Bright Data

Agora, é hora de configurar sua conta da Bright Data e configurar o serviço API SERP. Observe que você pode seguir a documentação oficial da Bright Data ou as etapas abaixo.

Se você ainda não tiver uma conta, inscreva-se na Bright Data. Caso contrário, faça login na sua conta existente. Uma vez conectado, acesse a seção “My Zones” (Minhas zonas) na página “Proxies & Scraping” (Proxies e raspagem) e verifique se há uma linha “API SERP” na tabela:

Note the “serp_api” row in the table

Se não vir uma linha para a API SERP, isso significa que você ainda não configurou uma zona. Role para baixo e clique em “Create zone” (Criar zona) na seção “API SERP”:

Configuring the SERP API zone

Crie uma zona de API SERP, nomeando-a como serp_api (ou qualquer outro nome de sua preferência). Mantenha o controle do nome da zona da API SERP, pois você precisará dele para se conectar via API.

Na página do produto, ative o botão “Activate” (Ativar) para ativar a Zona:

Activating the SERP API zone

Por fim, siga o guia oficial para gerar sua chave de API da Bright Data. Guarde-a em um local seguro, pois você precisará dela em breve.

É isso aí! Agora você tem tudo o que precisa para usar a API SERP da Bright Data em seu agente AWS Bedrock IA.

Etapa 5: armazenar segredos no AWS

Na etapa anterior, você obteve informações confidenciais, como a chave da API da Bright Data e o nome da zona da API SERP. Em vez de codificar esses valores em seu código de função Lambda, armazene-os com segurança no AWS Secrets Manager.

Procure por “Secrets Manager” na barra de pesquisa do AWS e abra o serviço:

Pressing the “Store a new secret” button

Clique no botão “Store a new secret” (Armazenar um novo segredo) e selecione a opção “Other type of secret” (Outro tipo de segredo). Na seção “Key/value pairs” (Pares de chave/valor), adicione os seguintes pares de chave-valor:

  • BRIGHT_DATA_API_KEY: digite sua chave da API da Bright Data obtida anteriormente.
  • BRIGHT_DATA_SERP_API_ZONE: Digite o nome de sua Zona da API SERP da Bright Data (por exemplo, serp_api).
Giving the secret the name

Em seguida, clique em “Next” (Avançar) e forneça um nome secreto. Por exemplo, chame-o de BRIGHT_DATA:

Giving the secret the name

Esse segredo armazenará um objeto JSON contendo os campos BRIGHT_DATA_API_KEY e BRIGHT_DATA_SERP_API_ZONE.

Conclua a criação dos segredos seguindo os prompts restantes para concluir o armazenamento do segredo. Após a conclusão, seu segredo terá a seguinte aparência:

The BRIGHT_DATA secret

Legal! Você acessará esses segredos em sua função Python Lambda para se conectar com segurança à API SERP da Bright Data, que será configurada na próxima etapa.

Etapa 6: criar a função Lambda para chamar a API SERP

Você tem todos os blocos de construção para definir a função Lambda associada ao grupo de ação criado na Etapa 3. Essa função conterá o código Python para a API SERP da Bright Data e recuperará os dados de pesquisa na Web.

Para criar o Lambda, pesquise “Lambda” na barra de pesquisa do AWS e abra o console do Amazon Lambda. Você perceberá que uma função já foi criada automaticamente na Etapa 3 pelo AWS Bedrock:

The “action/_gorup_serp_api_web_serach_XXXX” function

Clique na função chamada action_group_serp_api_web_search_XXXX para abrir sua página de visão geral:

The Lambda function overview page

Nessa página, role para baixo até a guia Code (Código), onde você encontrará um editor integrado do Visual Studio Code para editar sua lógica Lambda:

The online IDE to edit the Lambda logic

Substitua o conteúdo do arquivo dummy_lambda.py pelo código a seguir:

import json
import logging
import os
importar urllib.parsing
importar urllib.request

importar boto3

# ----------------------------
# Configuração de registro
# ----------------------------
log_level = os.environ.get("LOG_LEVEL", "INFO").strip().upper()
logging.basicConfig(
    format="[%(asctime)s] p%(process)s {%(filename)s:%(lineno)d} %(levelname)s - %(message)s"
)
logger = logging.getLogger(__name__)
logger.setLevel(log_level)

# ----------------------------
# Região AWS do ambiente
# ----------------------------
AWS_REGION = os.environ.get("AWS_REGION")
se não for AWS_REGION:
    logger.warning("A variável de ambiente AWS_REGION não está definida; o boto3 usará a região padrão")

# ----------------------------
# Recuperar o objeto secreto do AWS Secrets Manager
# ----------------------------
def get_secret_object(key: str) -> str:
    """
    Obter um valor secreto do AWS Secrets Manager.
    """
    sessão = boto3.session.Session()
    cliente = session.client(
        nome_do_serviço='secretsmanager',
        nome_da_região=AWS_REGION
    )

    try:
        get_secret_value_response = client.get_secret_value(
            SecretId=key
        )
    exceto Exception as e:
        logger.error(f "Não foi possível obter o segredo '{key}' do Gerenciador de segredos: {e}")
        raise e

    secret = json.loads(get_secret_value_response["SecretString"])

    return secret


# Recuperar credenciais de dados brilhantes
bright_data_secret = get_secret_object("BRIGHT_DATA")
BRIGHT_DATA_API_KEY = bright_data_secret["BRIGHT_DATA_API_KEY"]
BRIGHT_DATA_SERP_API_ZONE = bright_data_secret["BRIGHT_DATA_SERP_API_ZONE"]

# ----------------------------
# Pesquisa na Web da API SERP
# ----------------------------
def serp_api_web_search(search_query: str) -> str:
    """
    Chama a API SERP da Bright Data para recuperar os resultados de pesquisa do Google.
    """
    logger.info(f "Executando a pesquisa da API SERP da Bright Data para search_query='{search_query}'")

    # Codificar a consulta para o URL
    consulta codificada = urllib.parse.quote(search_query)
    # Crie o URL do Google para extrair o SERP
    search_engine_url = f "https://www.google.com/search?q={encoded_query}"

    # Solicitação da API SERP de dados brilhantes (docs: https://docs.brightdata.com/scraping-automation/serp-api/send-your-first-request)
    url = "https://api.brightdata.com/request"
    headers = {
        "Content-Type": "application/json",
        "Authorization": f "Bearer {BRIGHT_DATA_API_KEY}"
    }
    dados = {
        "Zona": BRIGHT_DATA_SERP_API_ZONE,
        "url": search_engine_url,
        "format" (formato): "raw",
        "data_format": "markdown" # Para obter o SERP como um documento Markdown pronto para IA
    }

    payload = json.dumps(data).encode("utf-8")
    request = urllib.request.Request(url, data=payload, headers=headers)

    try:
        response = urllib.request.urlopen(request)
        response_data: str = response.read().decode("utf-8")
        logger.debug(f "Resposta da API SERP: {response_data}")
        return response_data
    except urllib.error.HTTPError as e:
        logger.error(f "Falha ao chamar a API SERP da Bright Data. Erro HTTP {e.code}: {e.reason}")
    except urllib.error.URLError as e:
        logger.error(f "Falha ao chamar a API SERP da Bright Data. Erro de URL: {e.reason}")

    return ""


# ----------------------------
# Manipulador Lambda
# ----------------------------
def lambda_handler(event, _):
    """
    Manipulador do AWS Lambda.
    Espera um evento com actionGroup, função e parâmetros opcionais, incluindo search_query.
    """
    logger.debug(f "lambda_handler chamado com evento: {event}")

    action_group = event.get("actionGroup")
    function = event.get("function")
    parameters = event.get("parameters", [])

    # Extrair search_query dos parâmetros
    search_query = next(
        (param["value"] for param in parameters if param.get("name") == "search_query"),
        None,
    )
    logger.debug(f "Consulta de pesquisa de entrada: {search_query}")

    serp_page = serp_api_web_search(search_query) if search_query else ""
    logger.debug(f "Resultados da consulta de pesquisa: {serp_page}")

    # Preparar a resposta do Lambda
    function_response_body = {"TEXT": {"body": serp_page}}

    action_response = {
        "actionGroup": action_group,
        "function": função,
        "functionResponse": {"responseBody": function_response_body},
    }

    response = {"response": action_response, "messageVersion": event.get("messageVersion")}

    logger.debug(f "lambda_handler response: {response}")

    return response

Esse snippet recupera as credenciais da API Bright Data do AWS Secrets Manager, chama a API SERP com uma consulta de pesquisa do Google e retorna os resultados da pesquisa como texto Markdown. Para obter mais informações sobre como chamar a API SERP, consulte a documentação.

Cole o código acima no IDE on-line:

Updating the Lambda's code

Em seguida, pressione “Deploy” (Implantar) para atualizar a função Lambda:

Clicking the “Deploy” button to update the Lambda code

Se tudo correr como esperado, você receberá uma mensagem como “Successfully updated the function action_group_serp_api_web_search_XXXX.”

Observação: a função Lambda é configurada automaticamente com uma política baseada em recursos que permite que o Amazon Bedrock a invoque. Como isso foi tratado pela opção “Quick create a new Lambda function” anteriormente, não há necessidade de modificar manualmente a função IAM.

Perfeito! Sua função AWS Lambda para conexão com a API SERP da Bright Data está concluída.

Etapa 7: Configurar as permissões do Lambda

Embora sua função Lambda não exija permissões personalizadas de IAM para ser invocada, ela precisa de acesso às chaves de API armazenadas no AWS Secrets Manager.

Para configurar isso, na página de detalhes da função Lambda, vá para a guia “Configuration” (Configuração) e selecione a opção “Permissions” (Permissões):

Reaching the AWS Lambda “Permissions” page

Na seção “Função de execução”, clique no link “Nome da função” para abrir o console do IAM:

Clicking the role name

Na página da função, localize e selecione a política de permissão anexada:

Selecting the permission policy

Abra a exibição “JSON” e clique em “Edit” (Editar) para se preparar para atualizar a política de permissão:

Accessing the JSON view of the permission policy

Certifique-se de que a matriz Statement inclua o seguinte bloco:

{
  "Action" (Ação): "secretsmanager:GetSecretValue",
  "Recurso": [
    "arn:aws:secretsmanager:<YOUR_AWS_REGION>:<YOUR_AWS_ACCOUNT_ID>:secret:BRIGHT_DATA*"
  ],
  "Effect" (Efeito): "Allow" (Permitir),
  "Sid": "GetSecretsManagerSecret"
}

Substitua <YOUR_AWS_REGION> e <YOUR_AWS_ACCOUNT_ID> pelos valores corretos de sua configuração. Esse bloco de código JSON dará à função Lambda a capacidade de acessar o segredo BRIGHT_DATA do Secrets Manager.

Em seguida, clique no botão “Next” (Avançar) e, por fim, em “Save changes” (Salvar alterações). Como resultado, você verá que sua função Lambda também tem permissões de acesso ao Secrets Manager:

Note the “Secrets Manager” option

Fantástico! Sua função Lambda agora está configurada corretamente e pode ser invocada pelo agente de IA do AWS Bedrock com acesso às credenciais do Bright Data armazenadas no Secrets Manager.

Etapa 8: finalizar seu agente de IA

Volte para a seção “Agent builder” (Criador de agente) e clique em “Save” (Salvar) uma última vez para aplicar todas as alterações feitas anteriormente:

Saving the changes in your agent

Em seguida, clique em “Prepare” (Preparar) para preparar seu agente para testes com a configuração mais recente.

Pressing the “Prepare” button

Você deve receber uma mensagem de confirmação como “Agent: web_search_agent was successfully prepared“.

Missão concluída! Seu agente de IA alimentado pela API SERP da Bright Data está agora totalmente implementado e pronto para ser usado.

Etapa 9: testar seu IA Agent

Seu agente de IA do AWS Bedrock tem acesso à função de grupo serp_api, implementada pela função lambda_handler Lambda que você definiu na Etapa 6. Em termos mais simples, seu agente pode realizar pesquisas na Web em tempo real no Google (e potencialmente em outros mecanismos de pesquisa) por meio da API SERP da Bright Data, recuperando e processando dinamicamente conteúdo on-line novo.

Para testar esse recurso, vamos supor que você queira buscar as últimas notícias sobre o furacão Melissa. Tente solicitar ao seu agente:

"Give me the top 3 latest news articles on Hurricane Melissa"

(Lembre-se: Esse é apenas um exemplo, e você pode testar qualquer outro prompt que envolva resultados de pesquisa na Web em tempo real).

Execute esse prompt na seção “Test Agent” do seu agente e você verá um resultado semelhante a este:

The agent execution on the given prompt

Nos bastidores, o agente invoca a API SERP Lambda, recupera os resultados mais recentes da Pesquisa do Google para “Hurricane Melissa” e extrai os principais itens de notícias relevantes com seus URLs. Isso é algo que qualquer LLM básico, incluindo o Nova Lite, não consegue fazer sozinho!

Esta é a resposta de texto específica gerada pelo agente (com os URLs omitidos):

Aqui estão os três principais artigos de notícias mais recentes sobre o furacão Melissa:
1. Jamaica se prepara para o furacão Melissa, a tempestade mais forte de 2025 - BBC, 6 horas atrás
2. Furacão Melissa: atualizações ao vivo, rastreador - Jamaica enfrenta impacto "catastrófico" - Newsweek, 7 horas atrás
3. O furacão Melissa se aproxima da Jamaica e ameaça ser a tempestade mais forte já registrada na ilha - AP News, 10 horas atrás
Acesse as fontes originais para ver os artigos completos.

Esses resultados não são alucinações! Pelo contrário, eles correspondem ao que você encontraria no Google ao pesquisar manualmente por “Hurricane Melissa” (na data em que o agente foi testado):

The SERP for “melissa hurricane news"

Agora, se você já tentou extrair os resultados de pesquisa do Google, sabe como isso pode ser difícil devido à detecção de bots, proibições de IP, renderização de JavaScript e muitos outros desafios.

A API SERP da Bright Data resolve tudo isso de forma eficiente, além de sua capacidade de retornar SERPs raspadas em formato Markdown otimizado para IA(o que é especialmente valioso para a ingestão de LLM).

Para confirmar que seu agente realmente chamou o Lambda da API SERP, clique em “Show trace” (Mostrar rastreamento):

Following the “Show trace” link

Na seção “Trace step 1”, role para baixo até a seção de registro de invocação de grupo para ver a saída da chamada de função:

The output of the SERP API Lambda function

Isso confirma que a função Lambda foi executada com êxito e que o agente interagiu com a API SERP conforme pretendido. Da mesma forma, verifique isso verificando os logs do AWS CloudWatch para o seu Lambda.

Agora, leve seu agente mais longe! Experimente prompts relacionados à verificação de fatos, monitoramento de marcas, análise de tendências de mercado ou outros cenários. Veja o desempenho do seu agente em diferentes casos de uso.

E pronto! Você acabou de criar um AWS Bedrock IA Agent integrado à API SERP da Bright Data, capaz de recuperar dados de pesquisa na Web atualizados, confiáveis e contextuais sob demanda.

[Extra] Crie um agente do Amazon Bedrock com pesquisa na Web usando o AWS CDK

Na seção anterior, você aprendeu a definir e implementar um agente de IA que se integra à API SERP diretamente por meio do console do Amazon Bedrock.

Se preferir uma abordagem que prioriza o código, você pode obter o mesmo resultado usando o AWS Cloud Development Kit (AWS CDK). Esse método segue as mesmas etapas gerais, mas gerencia tudo localmente em um projeto do AWS CDK.

Para obter orientações detalhadas, consulte o guia oficial do AWS. Você também deve dar uma olhada no repositório do GitHub que dá suporte a esse tutorial. Essa base de código pode ser facilmente adaptada para funcionar com a API SERP da Bright Data.

Conclusão

Nesta postagem do blog, você viu como integrar a API SERP da Bright Data em um agente de IA do AWS Bedrock. Esse fluxo de trabalho é ideal para quem deseja criar agentes de IA mais poderosos e com reconhecimento de contexto na AWS.

Para criar fluxos de trabalho de IA ainda mais avançados, explore a infraestrutura da Bright Data para IA. Você encontrará um conjunto de ferramentas para recuperar, validar e transformar dados da Web ao vivo.

Inscreva-se hoje mesmo em uma conta gratuita da Bright Data e comece a experimentar nossas soluções de dados da Web prontas para IA!