1. Visão geral
Neste codelab, você vai criar um agente de ciência de dados que consulta dados reais de conjuntos de dados públicos do BigQuery e se lembra das suas preferências em várias sessões. Em seguida, você vai implantar no Agent Runtime, um serviço totalmente gerenciado do Google Cloud que lida com infraestrutura, escalonamento e gerenciamento de sessão.
O agente usa três recursos principais que são ativados progressivamente:
- Conjunto de ferramentas do BigQuery: o agente explora esquemas e executa consultas SQL em conjuntos de dados reais do BigQuery. Isso funciona localmente e quando implantado.
- Memory Bank: quando implantado, o agente lembra as preferências e o contexto do usuário em sessões desconectadas.
- Observabilidade: o Cloud Trace captura as etapas de raciocínio, as chamadas de ferramentas e as latências do agente usando a instrumentação do OpenTelemetry.
O que você vai aprender
- Como criar um agente do ADK com
BigQueryToolsetpara acesso aos dados reais - Como configurar o Memory Bank para persistência entre sessões
- Como implantar seu agente no Agent Runtime com
adk deploy - Como conceder permissões do IAM à conta de serviço do agente implantado
- Como testar a persistência e a observabilidade da memória
O que é necessário
- Tenha um projeto do Google Cloud com o faturamento ativado.
- Um navegador da web, como o Chrome
- Se você executar o código na sua própria máquina em vez do Cloud Shell: o SDK do Google Cloud (CLI
gcloud), o uv (gerenciador de pacotes do Python) e o Python 3.12 ou mais recente (instalado automaticamente pelouv, se necessário).
O ADK (Kit de Desenvolvimento de Agente) é o framework do Google para criar agentes de IA. Este codelab usa o ADK para criar um agente e implantá-lo no Agent Runtime.
Este codelab é destinado a desenvolvedores intermediários que têm alguma familiaridade com Python e o Google Cloud.
Este codelab leva aproximadamente 35 minutos para ser concluído, incluindo de 5 a 10 minutos para a implantação.
Os recursos criados neste codelab custam menos de US $5.
2. Configurar o ambiente
Criar um projeto do Google Cloud
- No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto na nuvem do Google Cloud.
- Verifique se o faturamento está ativado para seu projeto do Cloud. Saiba como verificar se o faturamento está ativado em um projeto.
Definir o projeto
Abra o editor do Cloud Shell no projeto do GCP criado.
Em seguida, crie um Terminal > Novo terminal e execute o seguinte comando para definir seu projeto. Os comandos posteriores leem o ID do projeto dessa configuração.
gcloud config set project <INSERT_YOUR_GCP_PROJECT_HERE>
Ativar APIs
No terminal, execute o seguinte comando:
gcloud services enable \
aiplatform.googleapis.com \
bigquery.googleapis.com \
telemetry.googleapis.com \
--project=$(gcloud config get project)
aiplatform.googleapis.com: hospeda seu agente no Agent Runtime, incluindo sessões e Memory Bank do Gemini Enterprise, e veicula o modelo do Gemini- API BigQuery (
bigquery.googleapis.com): consultas SQL em conjuntos de dados públicos e particulares - API Telemetry (
telemetry.googleapis.com): rastreamentos do OpenTelemetry para observabilidade do agente
Instale o ADK
No terminal, execute os comandos a seguir para criar uma pasta para este codelab e instalar o ADK e as dependências dele:
mkdir -p ~/adk-deploy-scale
cd ~/adk-deploy-scale
uv init --bare
uv add google-adk google-auth google-cloud-bigquery "google-cloud-aiplatform[agent_engines]"
O uv cria um ambiente Python isolado para este codelab, então você não precisa ativar nada. Adicione o prefixo uv run aos comandos do Python.
O pacote google-adk inclui a ferramenta de linha de comando adk, que você vai usar para testar e implantar o agente. O adk deploy usa o google-cloud-aiplatform para criar seu agente no Agent Runtime, e o google-cloud-bigquery é a biblioteca de cliente por trás das ferramentas do BigQuery do ADK.
3. Criar o agente
Na pasta ~/adk-deploy-scale, crie o diretório do agente. Execute todos os comandos posteriores em ~/adk-deploy-scale (o pai de data_science_agent/):
mkdir data_science_agent
Em seguida, execute o comando a seguir para criar o data_science_agent/.env com seu projeto, a região em que você vai implantar o agente e as configurações do agente implantado. O adk deploy lê esse arquivo, então essas configurações ainda funcionam se você abrir um novo terminal.
cat > ~/adk-deploy-scale/data_science_agent/.env <<EOF
GOOGLE_CLOUD_PROJECT=$(gcloud config get project)
GOOGLE_CLOUD_LOCATION=us-central1
GOOGLE_GENAI_USE_ENTERPRISE=True
OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=true
EOF
GOOGLE_CLOUD_PROJECTeGOOGLE_CLOUD_LOCATION: o ID do projeto (preenchido com base emgcloud) e a região em que o agente é executadoGOOGLE_GENAI_USE_ENTERPRISE: fez uma chamada da ADK para o Gemini usando seu projeto na nuvem do Google Cloud.OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT: registra entradas de comandos completas e respostas do agente, o que é útil para depuração.
A estrutura de diretórios final vai ficar assim:
adk-deploy-scale/
data_science_agent/
.env
__init__.py
agent.py
requirements.txt # created in the Deploy step
Você vai criar __init__.py e agent.py agora e adicionar requirements.txt na etapa de implantação.
Crie data_science_agent/__init__.py. Esse arquivo é necessário para que o ADK possa descobrir e carregar seu agente:
from . import agent # noqa: F401 — required by `adk eval` and `adk web`
Crie data_science_agent/agent.py:
Esse agente se conecta ao BigQuery para extração de dados e mantém as sessões no Memory Bank.
A memória é ativada automaticamente quando implantada. O ambiente de execução do agente define a variável de ambiente GOOGLE_CLOUD_AGENT_ENGINE_ID, que não está presente ao executar localmente.
from __future__ import annotations
import os
from google.adk.agents import LlmAgent
from google.adk.agents.callback_context import CallbackContext
from google.adk.apps import App
from google.adk.integrations.bigquery import BigQueryCredentialsConfig
from google.adk.integrations.bigquery import BigQueryToolset
from google.adk.models import Gemini
from google.adk.tools.preload_memory_tool import PreloadMemoryTool
from google.genai import types
import google.auth
PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")
if not PROJECT_ID:
raise ValueError(
"GOOGLE_CLOUD_PROJECT environment variable is required. "
"Add it to data_science_agent/.env: GOOGLE_CLOUD_PROJECT=<your-project-id>"
)
credentials, _ = google.auth.default()
bq_toolset = BigQueryToolset(credentials_config=BigQueryCredentialsConfig(credentials=credentials))
# GOOGLE_CLOUD_AGENT_ENGINE_ID is set automatically by Agent Runtime.
agent_engine_id = os.getenv("GOOGLE_CLOUD_AGENT_ENGINE_ID")
async def _save_memory(callback_context: CallbackContext) -> None:
"""Persist the session to Memory Bank after each agent run.
Only activates on Agent Runtime, where Memory Bank is available.
"""
if agent_engine_id:
await callback_context.add_session_to_memory()
root_agent = LlmAgent(
name="data_science_agent",
model=Gemini(
model="gemini-3.8-flash",
# gemini-3.8-flash is served from the global endpoint. The agent
# itself runs in GOOGLE_CLOUD_LOCATION (us-central1).
client_kwargs={"location": "global"},
retry_options=types.HttpRetryOptions(attempts=5),
),
instruction=(
"You are an expert Data Science Agent. "
"Your goal is to query enterprise BigQuery datasets, analyze the data, "
"and summarize your findings. "
f"When executing SQL queries, use project_id `{PROJECT_ID}` as the "
"billing project unless the user specifies a different one. "
"Present results clearly with formatted numbers. "
"Remember user preferences like preferred regions, date ranges, "
"or analysis formats across conversations."
),
tools=[bq_toolset, PreloadMemoryTool()],
after_agent_callback=_save_memory,
)
app = App(
name="data_science_agent",
root_agent=root_agent,
)
Vamos analisar o que esse código faz:
- O BigQueryToolset oferece ao agente ferramentas como
execute_sql,list_table_idseget_table_info. Ele pode analisar esquemas e consultar qualquer conjunto de dados a que o usuário tenha acesso. - A PreloadMemoryTool recupera automaticamente memórias relevantes antes de cada chamada de LLM pesquisando no banco de memória conteúdo relacionado à mensagem do usuário. O callback
_save_memorymantém a sessão no Memory Bank após cada execução do agente, para que ele possa se lembrar do contexto em sessões futuras. - O App encapsula o agente raiz em um aplicativo implantável que o Agent Runtime pode disponibilizar. O
nameprecisa corresponder ao nome do diretório (data_science_agent). Oadk webusa isso para localizar e carregar o agente. - A instrução informa ao agente para usar o projeto de faturamento em consultas SQL e lembrar das preferências do usuário.
- O Gemini com
client_kwargs={"location": "global"}envia chamadas de modelo para o endpoint global, onde ogemini-3.8-flashestá disponível. O agente é executado emus-central1:adk deploydefineGOOGLE_CLOUD_LOCATIONno agente implantado para a região em que você faz a implantação. Assim, a localização do modelo é definida no código.
4. implantar no Agent Runtime
Crie um arquivo requirements.txt no diretório data_science_agent:
google-adk
google-genai
google-auth
google-cloud-bigquery
python-dotenv
opentelemetry-instrumentation-google-genai
opentelemetry-instrumentation-httpx
opentelemetry-instrumentation-grpc
google-adkegoogle-genai: ADK e o cliente do Geminigoogle-auth: autenticação do Google Cloudgoogle-cloud-bigquery: a biblioteca de cliente do BigQuery usada porBigQueryToolset. O ADK não o instala por padrão.python-dotenv: carrega o arquivo.envna inicialização- Os três pacotes
opentelemetry-instrumentation-*ativam os recursos de observabilidade que você vai conhecer mais tarde. Eles instrumentam chamadas de modelo do Gemini e comunicação interna gRPC/HTTP para que os rastreamentos apareçam na guia Rastreamentos do seu agente.
O adk deploy também lê o arquivo data_science_agent/.env criado anteriormente e define as configurações dele no agente implantado.
Implante o agente. O último argumento data_science_agent é o diretório que contém o código do agente:
uv run adk deploy agent_engine \
--project=$(gcloud config get project) \
--region=us-central1 \
--display_name="Data Science Agent" \
--otel_to_cloud \
data_science_agent
Perto do início, a saída mostra duas linhas amarelas, Ignoring GOOGLE_CLOUD_PROJECT in .env ... e Ignoring GOOGLE_CLOUD_LOCATION in .env .... Isso é esperado: as flags --project e --region têm precedência sobre os mesmos valores em .env.
Sinalização | Finalidade |
| Projeto na nuvem e região de destino do Google Cloud |
| Nome legível mostrado no console do Cloud. |
| Exporta traces e registros do OpenTelemetry para o Google Cloud e ativa a telemetria ( |
Quando implantadas no Agent Runtime, duas funcionalidades são ativadas automaticamente:
- Memory Bank: o
adk deployconecta o agente às Sessões e ao Memory Bank na instância do Agent Runtime. OPreloadMemoryToollê do Memory Bank, e o_save_memorypersiste as sessões automaticamente. - Observabilidade: o Cloud Trace captura as etapas de raciocínio, as chamadas de ferramentas e as latências do agente.
5. Conceder permissões do BigQuery
É necessário conceder ao BigQuery acesso ao agente de serviço do Agent Runtime (o agente de serviço do mecanismo de inferência da AI Platform). Quando implantado, o agente é executado como essa conta de serviço gerenciada pelo Google (não suas credenciais pessoais). Por isso, ele precisa de permissões explícitas para executar consultas SQL.
PROJECT_NUMBER=$(gcloud projects describe $(gcloud config get project) \
--format='value(projectNumber)')
SA="service-${PROJECT_NUMBER}@gcp-sa-aiplatform-re.iam.gserviceaccount.com"
# Required to execute SQL queries
gcloud projects add-iam-policy-binding $(gcloud config get project) \
--member="serviceAccount:${SA}" \
--role="roles/bigquery.jobUser"
# Required to read table metadata and data
gcloud projects add-iam-policy-binding $(gcloud config get project) \
--member="serviceAccount:${SA}" \
--role="roles/bigquery.dataViewer"
Cada comando imprime Updated IAM policy for project [...] quando é executado corretamente.
6. Testar o agente implantado
Abra a página "Implantações" no console do Google Cloud. Clique no agente implantado e na guia Playground.
Teste os recursos do BigQuery:
- "Liste as tabelas em bigquery-public-data.hacker_news"
- Esperado: o agente chama
list_table_idse retorna nomes de tabelas, incluindofull.
- Esperado: o agente chama
- "Encontre o número de postagens por ano em bigquery-public-data.hacker_news.full"
- Esperado: o agente chama
execute_sqlcom uma consulta SQL e retorna uma tabela de anos e contagens de postagens.
- Esperado: o agente chama
- "Qual foi a mudança percentual ano a ano nas postagens?"
- Esperado: o agente chama
execute_sqlcom uma consulta SQL que calcula a mudança percentual e retorna os resultados.
- Esperado: o agente chama
7. Testar a persistência da memória
Ainda no playground, ensine uma preferência ao agente:
- "Lembre-se de que meu conjunto de dados favorito é bigquery-public-data.hacker_news"
- "Quais tabelas ele tem?"
Aguarde alguns segundos para que a memória persista. O callback _save_memory é executado depois que o agente responde.
Agora, inicie uma nova sessão clicando em Nova sessão no Playground e faça a seguinte pergunta:
- "Qual é meu conjunto de dados favorito?"
O agente precisa se lembrar de bigquery-public-data.hacker_news, mesmo que seja uma sessão totalmente nova sem histórico de conversa. Isso funciona porque:
_save_memorypersiste cada sessão no Memory Bank usandocallback_context.add_session_to_memory()PreloadMemoryToolrecupera memórias relevantes antes de cada chamada de LLM- O Memory Bank faz correspondências semânticas de conteúdo, não apenas por palavra-chave
8. Conheça a observabilidade
No console do Cloud, navegue até o agente implantado e clique na guia Rastreamentos.

Uma tabela de sessões vai aparecer com as sessões das consultas de teste executadas nas etapas anteriores. A tabela mostra métricas de resumo para cada sessão: duração média, chamadas de modelo e de ferramentas, uso de tokens e erros.
Clique em uma sessão para inspecionar os detalhes do trace, incluindo:
- Um gráfico acíclico direcionado (DAG) dos intervalos, mostrando o detalhamento das etapas do raciocínio do agente, das chamadas de ferramentas (consultas do BigQuery) e das latências.
- Entradas e saídas para cada intervalo (ativado pela variável de ambiente
OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENTem.env) - Atributos de metadados, como IDs de extensão, IDs de rastreamento e tempo
Você também pode mudar para a visualização de período (alternância na parte de cima) para conferir períodos individuais em todas as sessões.
Como o rastreamento funciona
Ao implantar com --otel_to_cloud, o adk deploy cria um contêiner que executa o servidor de API do ADK com o OpenTelemetry ativado. No Agent Runtime, o servidor inicializa um pipeline do OpenTelemetry que:
- Cria um TracerProvider com um exportador OTLP que envia períodos para
telemetry.googleapis.com - Registra os próprios intervalos do ADK para execuções de agentes, chamadas de modelo e chamadas de ferramentas, além de usar os três pacotes de instrumentação do seu
requirements.txtpara adicionar intervalos de bibliotecas principais (Gemini, httpx, gRPC). - Agrupa e exporta intervalos para a API Telemetry, onde a guia "Rastreamentos" os lê.
O contêiner implantado inclui o ADK e o SDK e exportador do OpenTelemetry, mas não inclui os pacotes de instrumentação. Por isso, o requirements.txt lista os três. Sem eles, o servidor da API ADK registra um aviso e pula esses intervalos.
Solução de problemas
Se nenhum rastreamento aparecer após alguns minutos:
- Verifique se a API Telemetry está ativada: você a ativou na etapa de configuração. Verificar com:
gcloud services list --enabled --project=$(gcloud config get project) | grep telemetry - Verificar avisos no Cloud Logging: acesse Logging > Análise de registros e pesquise
"proceeding without"ou"GoogleGenAiSdkInstrumentor". Um aviso que nomeia uma instrumentação (GenAI, HTTPX ou gRPC) significa que o pacoteopentelemetry-instrumentation-*correspondente está faltando no seurequirements.txt. - Não adicione
google-cloud-aiplatformao seurequirements.txt. Oadk deployadiciona automaticamente. Declarar por conta própria pode causar conflitos de pacotes do OpenTelemetry e interromper a instrumentação sem aviso.
9. Limpeza
Para evitar cobranças contínuas, exclua os recursos criados durante este codelab.
Exclua o agente implantado na página "Implantações" no console do Cloud. Selecione seu agente e clique em Excluir.
Se você criou um projeto especificamente para este codelab, exclua o projeto inteiro:
gcloud projects delete <YOUR_PROJECT_ID>
Opcional: limpe o ambiente local:
cd ~
rm -rf ~/adk-deploy-scale
10. Parabéns
Você criou um agente de ciência de dados com estado e o implantou no Agent Runtime.
O que você aprendeu
- Como criar um agente do ADK com
BigQueryToolsetpara acesso aos dados reais - Como ativar a memória persistente com o Memory Bank usando
PreloadMemoryTooleafter_agent_callback - Como conceder permissões do IAM à conta de serviço do agente implantado
- Como implantar no Agent Runtime e ativar a observabilidade com o Cloud Trace
Próximas etapas
- Consulte seus próprios conjuntos de dados particulares do BigQuery concedendo ao agente de serviço do Agent Runtime acesso aos seus dados
- Adicione a Execução de código para executar a análise do Python em um sandbox seguro
- Configure painéis de observabilidade do Cloud Trace para monitorar seu agente em produção.
- Publicar resultados no Google Workspace usando as ferramentas do MCP