1. Pengantar
Dalam codelab ini, Anda akan meningkatkan kualitas agen ADK dengan menambahkan pengetahuan persisten dan khusus. Anda akan mempelajari cara mengelola status percakapan dengan Sesi Platform Agen, mengaktifkan pembelajaran jangka panjang dengan Memory Bank, dan mengintegrasikan data aturan kota yang kompleks menggunakan Spark dan AlloyDB untuk RAG (Retrieval-Augmented Generation).
Yang akan Anda lakukan
- Konfigurasi Sesi Platform Agen untuk persistensi percakapan.
- Terapkan Bank Memori agar agen dapat belajar dari interaksi sebelumnya.
- Gunakan Spark Lightning Engine untuk menyerap dan memproses dokumentasi aturan kota.
- Bangun sistem RAG menggunakan AlloyDB dan penelusuran vektor.
- Men-deploy agen yang ditingkatkan ke Agent Platform.
Yang Anda butuhkan
- Browser web seperti Chrome
- Project Google Cloud dengan penagihan diaktifkan
- Pemahaman dasar tentang Python dan SQL
Perkiraan durasi: 60 menit
Resource yang dibuat dalam codelab ini seharusnya berbiaya kurang dari $5.
2. Sebelum memulai
Buat Project Google Cloud
- Di Konsol Google Cloud, di halaman pemilih project, pilih atau buat project Google Cloud.
- Pastikan penagihan diaktifkan untuk project Cloud Anda. Pelajari cara memeriksa apakah penagihan telah diaktifkan pada suatu project.
Mulai Cloud Shell
Cloud Shell adalah lingkungan command line yang berjalan di Google Cloud yang telah dilengkapi dengan alat yang diperlukan.
- Klik Activate Cloud Shell di bagian atas konsol Google Cloud.
- Setelah terhubung ke Cloud Shell, verifikasi autentikasi Anda:
gcloud auth list - Pastikan project Anda dikonfigurasi:
gcloud config get project - Jika project Anda tidak ditetapkan seperti yang diharapkan, tetapkan project:
export PROJECT_ID=<YOUR_PROJECT_ID> gcloud config set project $PROJECT_ID
Verifikasi autentikasi:
gcloud auth list
Konfirmasi project Anda:
gcloud config get project
Tetapkan jika perlu:
export PROJECT_ID=<YOUR_PROJECT_ID> gcloud config set project $PROJECT_ID
Mengaktifkan API
Jalankan perintah ini untuk mengaktifkan semua API yang diperlukan untuk pengelolaan sesi, pemrosesan Spark, dan AlloyDB:
gcloud services enable \ aiplatform.googleapis.com \ run.googleapis.com \ alloydb.googleapis.com \ dataproc.googleapis.com \ documentai.googleapis.com \ storage.googleapis.com \ secretmanager.googleapis.com
3. Menyiapkan lingkungan Anda
Untuk codelab ini, Anda akan menggunakan lingkungan yang telah dikonfigurasi sebelumnya di repositori keynote.
- Clone repositori dan buka folder project:
git clone https://github.com/GoogleCloudPlatform/next-26-keynotes cd next-26-keynotes/devkey/enhancing-agents-with-memory
- Siapkan lingkungan virtual Python dan instal paket ADK yang diperlukan:
uv venv source .venv/bin/activate uv sync
Mengonfigurasi Variabel Lingkungan
Agen memerlukan konfigurasi khusus untuk terhubung ke Platform Agen dan AlloyDB.
- Salin file lingkungan contoh:
cp .env.example .env
- Buka
.envdan perbarui kolom berikut:GOOGLE_CLOUD_PROJECT: Project ID Anda.GOOGLE_CLOUD_LOCATION:us-central1.ALLOYDB_CLUSTER_ID:rules-db.
GOOGLE_CLOUD_PROJECT=<YOUR_PROJECT_ID> GOOGLE_CLOUD_LOCATION=global GOOGLE_GENAI_USE_VERTEXAI=TRUE GOOGLE_CLOUD_REGION=us-central1 ALLOYDB_CLUSTER_ID=rules-db
- Jalankan skrip helper berikut untuk membuat instance Agent Engine yang akan digunakan untuk sesi percakapan dan memori jangka panjang. Tindakan ini akan otomatis mengisi
AGENT_ENGINE_IDdalam file.envAnda:
uv run utils/setup_agent_engine.py
Setelah berhasil, Anda akan melihat:
Creating Agent Engine instance...
Successfully created Agent Engine. ID: 1234567890
Updated .env with AGENT_ENGINE_ID=1234567890
4. Membuat agen dengan Pengelolaan Sesi
Pada langkah ini, Anda akan menginisialisasi Marathon Planner Agent yang dapat mempertahankan histori percakapan di beberapa giliran. Hal ini dicapai menggunakan class App ADK dan Sesi Platform Agen.
Menginisialisasi Layanan Agen dan Sesi
Buka planner_agent/agent.py. Anda akan melihat cara menambahkan class ADK untuk mengintegrasikan Sesi Platform Agen. Hal ini memungkinkan kita membuat agen kita memiliki status dari waktu ke waktu, dan mengubah konteks sesuai kebutuhan.
from google.adk.agents import LlmAgent
from google.adk.sessions import VertexAiSessionService
from vertexai.agent_engines import AdkApp
PROJECT_ID = os.environ.get("GOOGLE_CLOUD_PROJECT")
REGION = os.environ.get("GOOGLE_CLOUD_REGION", "us-central1")
# Initialize Vertex AI for regional services
if PROJECT_ID:
vertexai.init(project=PROJECT_ID, location=REGION)
# Define the agent logic
root_agent = LlmAgent(
name="planner_agent",
model="gemini-3-flash-preview",
instruction="You are a helpful marathon planning assistant...",
tools=[] # We will add tools in the next steps
)
def session_service_builder():
"""Builder for Agent Platform Sessions."""
return VertexAiSessionService(project=PROJECT_ID, location=REGION)
# Wrap the agent in an AdkApp to manage stateful context
app = AdkApp(
agent=root_agent,
session_service_builder=session_service_builder
)
5. Mengaktifkan Pembelajaran Jangka Panjang dengan Memory Bank
Meskipun pengelolaan sesi melacak setiap percakapan, Anda dapat melakukan hal yang sama untuk memori jangka panjang. Pada langkah ini, Anda akan melampirkan agen ke Bank Memori Platform Agen, layanan memori yang siap digunakan perusahaan dan terkelola sepenuhnya.
Melakukan inisialisasi Layanan Memory Bank
Memory Bank memungkinkan agen mengingat konteks di berbagai sesi. Perbarui planner_agent/agent.py untuk menyertakan layanan memori:
from google.adk.memory import VertexAiMemoryBankService
def memory_service_builder():
"""Builder for Agent Platform Memory Bank."""
return VertexAiMemoryBankService(
project=PROJECT_ID,
location=REGION,
agent_engine_id=AGENT_ENGINE_ID
)
Menerapkan Penyerapan Memori Otomatis
Untuk memastikan agen belajar dari setiap giliran, kita menambahkan after_agent_callback. Fungsi ini dipicu setelah agen menyelesaikan respons, sehingga agen dapat "mencerna" sesi dan menyimpan memori yang relevan ke bank.
- Tentukan fungsi callback:
async def auto_save_memories(callback_context):
"""Callback to ingest the session into the memory bank after the turn."""
# In AdkApp, the memory service is available via the invocation context
if hasattr(callback_context._invocation_context, 'memory_service') and callback_context._invocation_context.memory_service:
await callback_context._invocation_context.memory_service.add_session_to_memory(
callback_context._invocation_context.session
)
- Lampirkan callback ke
LlmAgent:
root_agent = LlmAgent(
# ... other params
after_agent_callback=[auto_save_memories],
)
6. Menyiapkan AlloyDB untuk RAG
Sebelum dapat menyerap data aturan kota, kita memerlukan database berperforma tinggi untuk menyimpannya. Pada langkah ini, Anda akan membuat cluster AlloyDB dan melakukan inisialisasi skema database untuk penelusuran vektor.
1. Buat Cluster dan Instance Utama AlloyDB
Jalankan perintah ini di Cloud Shell untuk membuat cluster dan instance utamanya:
# Create the cluster gcloud alloydb clusters create rules-db \ --password=postgres \ --region=us-central1 # Create the primary instance with IAM authentication enabled gcloud alloydb instances create rules-db-primary \ --instance-type=PRIMARY \ --cpu-count=2 \ --region=us-central1 \ --cluster=rules-db \ --database-flags=alloydb.iam_authentication=on
2. Memberikan Peran IAM yang Diperlukan
Untuk menggunakan server MCP AlloyDB terkelola, identitas Anda memerlukan izin tertentu. Jalankan perintah berikut untuk memberikan peran yang diperlukan:
export USER_EMAIL=$(gcloud config get-value account) # Role to use MCP tools gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="user:$USER_EMAIL" \ --role="roles/mcp.toolUser" # Role to execute SQL in AlloyDB gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="user:$USER_EMAIL" \ --role="roles/alloydb.admin" # Role for IAM database authentication gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="user:$USER_EMAIL" \ --role="roles/alloydb.databaseUser" # Create the IAM-based database user gcloud alloydb users create "$USER_EMAIL" \ --cluster=rules-db \ --region=us-central1 \ --type=IAM_BASED
3. Membuat Database dan Tabel melalui AlloyDB Studio
Karena database dan tabel AlloyDB dikelola melalui SQL, kita akan menggunakan AlloyDB Studio di Konsol Google Cloud untuk menyelesaikan skema.
- Buka AlloyDB > Clusters, lalu klik
rules-db. - Di menu navigasi sebelah kiri, klik AlloyDB Studio.
- Login menggunakan pengguna postgres dan sandi yang Anda tetapkan (
postgres). - Jalankan SQL berikut untuk membuat database:
CREATE DATABASE city_rules; - Alihkan koneksi database Anda ke
city_rulesdi AlloyDB Studio, lalu jalankan SQL berikut untuk menginstal ekstensi dan membuat tabelrules:-- Install extensions for vector search and ML CREATE EXTENSION IF NOT EXISTS vector; CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE; -- Create the rules table CREATE TABLE IF NOT EXISTS rules ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), text TEXT NOT NULL, city TEXT NOT NULL, embedding vector(3072) DEFAULT NULL ); -- Grant your IAM user access to the table (replace with your email) GRANT ALL PRIVILEGES ON TABLE rules TO "YOUR_EMAIL_ADDRESS";
7. Menyerap Data Aturan Kota dengan Spark Lightning Engine
Untuk memberikan perencanaan yang benar-benar akurat, agen memerlukan lebih dari sekadar perintah yang dibuat dengan baik; agen memerlukan perujukan dalam data dan konteks organisasi. Pada langkah ini, Anda akan menggunakan Spark Lightning Engine di Dataproc Serverless untuk memproses PDF aturan kota yang besar dan menyerapnya ke AlloyDB.
Mengapa Spark Lightning Engine?
Mendasarkan agen dalam skala besar memerlukan pemrosesan data tidak terstruktur dalam jumlah besar. Spark Lightning Engine adalah mesin eksekusi berperforma tinggi untuk Spark yang secara signifikan mempercepat workload ini. Kita menggunakannya di sini untuk melakukan pengelompokan semantik pada dokumen menggunakan Document AI Google.
Mempelajari Pipeline Spark
Logika penyerapan ditentukan dalam spark-setup/spark_alloydb_processor.py. Pipeline mengikuti langkah-langkah berikut:
- Mencantumkan PDF: Mengambil URI dokumen dari bucket Google Cloud Storage.
- Ekstraksi Semantik: Menggunakan UDF (User Defined Function) untuk memanggil Document AI API.
- Menulis ke AlloyDB: Menyimpan potongan teks yang diekstrak ke dalam tabel AlloyDB bernama
rules.
# Extract from spark_alloydb_processor.py
def process_document(gcs_uri: str):
# ... calls Document AI to parse PDF ...
return chunks
# Parallel processing with Spark Lightning Engine
process_udf = udf(process_document, chunk_schema)
chunked_df = uri_df.withColumn("chunks", process_udf(col("gcs_uri"))) \
.select(explode(col("chunks")).alias("chunk")) \
.select("chunk.*")
# Save to AlloyDB for Vector Search
chunked_df.write.format("jdbc") \
.option("url", jdbc_url) \
.option("dbtable", "rules") \
.mode("append") \
.save()
Menjalankan Tugas Penyerapan
Picu proses penyerapan menggunakan skrip yang disediakan:
./spark-setup/run_dataproc.sh
8. RAG dengan AlloyDB
Setelah data aturan kota berada di AlloyDB, agen dapat menggunakannya untuk melakukan Retrieval-Augmented Generation (RAG). Hal ini memastikan rencana maraton mematuhi kode kota tertentu.
Kemampuan AlloyDB untuk RAG
AlloyDB unggul dalam penelusuran vektor, sehingga memungkinkan kita menyimpan data terstruktur dan embedding vektor di tempat yang sama. Agen dapat menggunakan fungsi embedding bawaan di AlloyDB untuk menemukan informasi aturan yang paling relevan.
Pencarian Hibrida dengan Vector Search
Untuk memberi agen akses ke data ini, kami menyediakan alat yang membuat kueri AlloyDB menggunakan kemiripan vektor. Anda dapat melihat logika ini di hybrid_recall.sql, yang menunjukkan cara menghitung jarak antara kueri dan aturan tersimpan kami:
SELECT
text,
(embedding <=>
embedding('gemini-embedding-001',
'Restrictions for running a race on the Las Vegas strip')::vector)
as distance
FROM
rules
WHERE city = 'Las Vegas'
ORDER BY
distance ASC
LIMIT 5;
Menyematkan Agen dalam Aturan Lokal dengan Alat RAG
Agar alat tersedia untuk agen, Anda harus menentukannya di planner_agent/tools.py, lalu mendaftarkannya di planner_agent/agent.py. Kita akan menggunakan server MCP AlloyDB jarak jauh terkelola dari Google Cloud untuk terhubung ke database kita.
- Tentukan alat di
planner_agent/tools.pymenggunakan pola "Hybrid Recall". Kita akan menggunakan protokolstreamable_httpuntuk terhubung ke server MCP AlloyDB terkelola:
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
async def get_local_and_traffic_rules(query: str) -> str:
"""Uses vector search in AlloyDB via managed MCP server."""
# Vector search query using built-in AlloyDB embedding functions
sql = f"SELECT text FROM rules WHERE city = 'Las Vegas' ORDER BY embedding <=> google_ml.embedding('gemini-embedding-001', '{query}')::vector ASC LIMIT 5;"
# Establish a streamable HTTP connection to the MCP server
async with streamablehttp_client(url, headers=get_auth_headers()) as (read_stream, write_stream, _):
async with ClientSession(read_stream, write_stream) as session:
await session.initialize()
result = await session.call_tool(
"execute_sql",
arguments={
"instance": full_instance_name,
"database": "city_rules",
"sqlStatement": sql
}
)
return "\n".join([c.text for c in result.content if hasattr(c, 'text')])
- Daftarkan alat dan selesaikan
planner_agent/agent.py:
# ... imports ...
# Assemble the Agent
root_agent = LlmAgent(
name="planner_agent",
model="gemini-3-flash-preview",
instruction="You are a helpful marathon planning assistant...",
tools=[
get_local_and_traffic_rules,
],
after_agent_callback=[auto_save_memories],
)
# 2. Wrap the agent in an AdkApp to manage the stateful lifecycle
app = AdkApp(
agent=root_agent,
session_service_builder=session_service_builder,
memory_service_builder=memory_service_builder
)
9. Panduan Pakar dengan Keterampilan Agen
Keterampilan Agen adalah modul mandiri yang memberikan petunjuk, panduan, dan sumber daya khusus untuk membantu agen melakukan tugas secara lebih efektif. Daripada membuat perintah sistem Anda berantakan dengan petunjuk yang rumit untuk setiap alat, Anda dapat merangkum keahlian tersebut ke dalam Keterampilan yang dimuat hanya saat diperlukan.
Google menyediakan keterampilan bawaan untuk produk Google (seperti AlloyDB dan BigQuery) guna memastikan agen Anda mengikuti praktik terbaik industri untuk membuat kueri data dan mengelola resource. Anda dapat menjelajahi pola khusus ini dan pola lainnya di Google Skills Depot. Anda akan menemukan keterampilan dasar AlloyDB di sini.
1. Mempelajari File Keterampilan
Buka file skill yang telah dikonfigurasi sebelumnya di planner_agent/skills/get-local-and-traffic-rules/SKILL.md. Berikut tampilannya:
---
name: get-local-and-traffic-rules
description: Retrieve local rules and traffic information for a specific jurisdiction.
---
# get_local_and_traffic_rules Skill
This skill provides guidelines on how to effectively use the `get_local_and_traffic_rules` tool.
## Overview
The `get_local_and_traffic_rules` tool interfaces with an AlloyDB database to perform vector similarity searches on a corpus of rules and traffic information using a provided natural language query.
## Usage Guidelines
1. **Query Specificity**: When calling the tool, provide specific details in the `query` argument. For example, instead of querying "food rules", use "rules regarding food vendors during public events".
2. **Contextual Use**: Use the tool when planning events or activities that require adherence to local municipal or state rules (e.g., street closures, noise ordinances, environmental rules).
3. **Handling Results**: The tool returns a string containing the text of the top 5 most relevant rules. If no error occurs, parse the returned string to inform your planning tasks.
4. **Error Handling**: If an error string is returned (e.g., "Error querying rules: ..."), you must report this failure or attempt an alternative approach if applicable.
## Underlying Mechanism
- The tool uses `google_ml.embedding` to convert the query into a vector representation.
- It calculates distance (`<=>`) against the `embedding` column in the `rules` table on an AlloyDB instance.
- Results are fetched in descending order of similarity, limited to 5 results.
2. Cara Mendaftarkan Keterampilan
Di planner_agent/agent.py, keahlian dimuat dari direktori dan ditambahkan ke alat agen. Berikut tampilan kodenya:
import pathlib
from google.adk.skills import load_skill_from_dir
from google.adk.tools import skill_toolset
# Load the AlloyDB skill from its directory
alloydb_skill = load_skill_from_dir(pathlib.Path(__file__).parent / "skills" / "get-local-and-traffic-rules")
# Assemble the Agent with the Skill Toolset
root_agent = LlmAgent(
name="planner_agent",
model="gemini-3-flash-preview",
instruction="You are a helpful marathon planning assistant...",
tools=[
get_local_and_traffic_rules,
skill_toolset.SkillToolset(skills=[alloydb_skill])
],
after_agent_callback=[auto_save_memories],
)
10. Menguji Agen
- Mulai agen secara lokal:
uv run adk run planner_agent
- Ajukan pertanyaan tentang peraturan kota:
[user]: What are the rules for running a race on the Las Vegas strip?
Agen akan memanggil alat get_local_and_traffic_rules, melakukan penelusuran vektor di AlloyDB, dan menampilkan jawaban berdasarkan potongan aturan resmi yang diproses oleh Spark.
11. Men-deploy Agen
Men-deploy ke Platform Agen
uv run adk deploy agent_engine \ --env_file .env \ planner_agent
12. Pembersihan
Untuk menghindari tagihan berkelanjutan, hapus resource yang dibuat selama codelab ini.
Menghapus Cluster AlloyDB
# Delete the AlloyDB Cluster gcloud alloydb clusters delete rules-db --region=us-central1 --force
Menghapus Aplikasi Runtime Agen
Anda dapat menghapus instance Reasoning Engine melalui konsol atau menggunakan perintah gcloud (jika Anda memiliki nama resource). Untuk mempermudah, gunakan konsol:
- Buka halaman Agent Runtime.
- Pilih
planner_agent–> klik tombol tiga titik di sisi kanan. - Klik Hapus.
13. Selamat
Selamat! Anda telah berhasil meningkatkan kualitas agen ADK dengan kemampuan perujukan data dan memori tingkat lanjut.
Yang telah Anda pelajari
- Agen Stateful: Mengintegrasikan Sesi Platform Agen untuk mempertahankan konteks percakapan.
- Pembelajaran Jangka Panjang: Melampirkan Bank Memori Platform Agen agar agen dapat belajar dari interaksi pengguna.
- Penyerapan Data: Menggunakan Spark Lightning Engine dan Document AI untuk memproses dokumen tidak terstruktur.
- RAG: Membangun sistem penelusuran vektor di AlloyDB untuk mendasarkan agen pada aturan dunia nyata.
Langkah Berikutnya
- Baca dokumentasi Platform Agen untuk mempelajari lebih lanjut deployment terkelola.
- Pelajari Penelusuran Vektor AlloyDB secara mendalam untuk pola RAG lanjutan.
- Menskalakan pipeline penyerapan data dengan Dataproc Serverless.