নেক্সট '২৬ ডেভেলপার কিনোট: মেমরির সাহায্যে এজেন্টদের উন্নতকরণ

১. ভূমিকা

এই কোডল্যাবে, আপনি স্থায়ী এবং বিশেষায়িত জ্ঞান যোগ করে আপনার ADK এজেন্টদের পরবর্তী স্তরে নিয়ে যাবেন। আপনি শিখবেন কীভাবে এজেন্ট প্ল্যাটফর্ম সেশন ব্যবহার করে কথোপকথনের অবস্থা পরিচালনা করতে হয়, মেমরি ব্যাংকের মাধ্যমে দীর্ঘমেয়াদী শিখন সক্ষম করতে হয়, এবং RAG (রিট্রিভাল-অগমেন্টেড জেনারেশন)-এর জন্য স্পার্ক ও অ্যালয়ডিবি ব্যবহার করে জটিল শহরের নিয়মের ডেটা একীভূত করতে হয়।

আপনি যা করবেন

  • কথোপকথনের স্থায়িত্বের জন্য এজেন্ট প্ল্যাটফর্ম সেশন কনফিগার করুন।
  • এজেন্টদের পূর্ববর্তী মিথস্ক্রিয়া থেকে শেখার সুযোগ দিতে একটি মেমরি ব্যাংক বাস্তবায়ন করুন।
  • শহরের নিয়মাবলীর নথিপত্র গ্রহণ ও প্রক্রিয়াকরণ করতে স্পার্ক লাইটনিং ইঞ্জিন ব্যবহার করুন।
  • AlloyDB এবং ভেক্টর সার্চ ব্যবহার করে একটি RAG সিস্টেম তৈরি করুন।
  • উন্নত এজেন্টটি এজেন্ট প্ল্যাটফর্মে স্থাপন করুন।

আপনার যা যা লাগবে

  • ক্রোমের মতো একটি ওয়েব ব্রাউজার
  • বিলিং সক্ষম একটি গুগল ক্লাউড প্রজেক্ট
  • পাইথন এবং SQL সম্পর্কে প্রাথমিক ধারণা।

আনুমানিক সময়কাল: ৬০ মিনিট

এই কোডল্যাবে তৈরি রিসোর্সগুলোর খরচ ৫ ডলারের কম হওয়া উচিত।

২. শুরু করার আগে

একটি গুগল ক্লাউড প্রজেক্ট তৈরি করুন

  1. গুগল ক্লাউড কনসোলের প্রজেক্ট সিলেক্টর পেজে, একটি গুগল ক্লাউড প্রজেক্ট নির্বাচন করুন বা তৈরি করুন
  2. আপনার ক্লাউড প্রোজেক্টের জন্য বিলিং চালু আছে কিনা তা নিশ্চিত করুন। কোনো প্রোজেক্টে বিলিং চালু আছে কিনা তা কীভাবে পরীক্ষা করবেন, তা জেনে নিন।

ক্লাউড শেল শুরু করুন

ক্লাউড শেল হলো গুগল ক্লাউডে চালিত একটি কমান্ড-লাইন পরিবেশ, যা প্রয়োজনীয় টুলস সহ আগে থেকেই লোড করা থাকে।

  1. Google Cloud কনসোলের শীর্ষে থাকা Activate Cloud Shell-এ ক্লিক করুন।
  2. ক্লাউড শেলে সংযুক্ত হওয়ার পর, আপনার প্রমাণীকরণ যাচাই করুন:
    gcloud auth list
    
  3. আপনার প্রজেক্টটি কনফিগার করা হয়েছে কিনা তা নিশ্চিত করুন:
    gcloud config get project
    
  4. আপনার প্রজেক্টটি প্রত্যাশা অনুযায়ী সেট করা না থাকলে, এটি সেট করুন:
    export PROJECT_ID=<YOUR_PROJECT_ID>
    gcloud config set project $PROJECT_ID
    

প্রমাণীকরণ যাচাই করুন:

gcloud auth list

আপনার প্রকল্পটি নিশ্চিত করুন:

gcloud config get project

প্রয়োজনে সেট করুন:

export PROJECT_ID=<YOUR_PROJECT_ID>
gcloud config set project $PROJECT_ID

এপিআই সক্ষম করুন

সেশন ম্যানেজমেন্ট, স্পার্ক প্রসেসিং এবং অ্যালয়ডিবি-র জন্য প্রয়োজনীয় সমস্ত এপিআই সক্রিয় করতে এই কমান্ডটি চালান:

gcloud services enable \
  aiplatform.googleapis.com \
  run.googleapis.com \
  alloydb.googleapis.com \
  dataproc.googleapis.com \
  documentai.googleapis.com \
  storage.googleapis.com \
  secretmanager.googleapis.com

৩. আপনার পরিবেশ প্রস্তুত করুন

এই কোডল্যাবের জন্য, আপনি কিনোট রিপোজিটরিতে আগে থেকে কনফিগার করা এনভায়রনমেন্টটি ব্যবহার করবেন।

  1. রিপোজিটরিটি ক্লোন করুন এবং প্রজেক্ট ফোল্ডারে যান:
git clone https://github.com/GoogleCloudPlatform/next-26-keynotes
cd next-26-keynotes/devkey/enhancing-agents-with-memory
  1. একটি পাইথন ভার্চুয়াল এনভায়রনমেন্ট তৈরি করুন এবং প্রয়োজনীয় ADK প্যাকেজগুলো ইনস্টল করুন:
uv venv
source .venv/bin/activate
uv sync

পরিবেশ ভেরিয়েবল কনফিগার করুন

এজেন্ট প্ল্যাটফর্ম এবং অ্যালয়ডিবি-র সাথে সংযোগ করার জন্য এজেন্টের নির্দিষ্ট কনফিগারেশন প্রয়োজন।

  1. নমুনা পরিবেশ ফাইলটি কপি করুন:
cp .env.example .env
  1. .env খুলুন এবং নিম্নলিখিত ফিল্ডগুলি আপডেট করুন:
    • GOOGLE_CLOUD_PROJECT : আপনার প্রজেক্ট আইডি।
    • 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
  1. কথোপকথন সেশন এবং দীর্ঘমেয়াদী মেমরির জন্য ব্যবহৃত একটি এজেন্ট ইঞ্জিন ইনস্ট্যান্স তৈরি করতে নিম্নলিখিত সহায়ক স্ক্রিপ্টটি চালান। এটি স্বয়ংক্রিয়ভাবে আপনার .env ফাইলে AGENT_ENGINE_ID যুক্ত করবে:
uv run utils/setup_agent_engine.py

সফল হলে আপনি দেখতে পাবেন:

Creating Agent Engine instance...
Successfully created Agent Engine. ID: 1234567890
Updated .env with AGENT_ENGINE_ID=1234567890

৪. সেশন ম্যানেজমেন্ট ব্যবহার করে একজন এজেন্ট তৈরি করুন

এই ধাপে, আপনি একটি ম্যারাথন প্ল্যানার এজেন্ট চালু করবেন যা একাধিক টার্ন জুড়ে কথোপকথনের ইতিহাস বজায় রাখতে পারে। এটি ADK App ক্লাস এবং Agent Platform Sessions ব্যবহার করে সম্পন্ন করা হয়।

এজেন্ট এবং সেশন পরিষেবা শুরু করুন

planner_agent/agent.py ফাইলটি খুলুন। আপনি দেখতে পাবেন, আমরা কীভাবে এজেন্ট প্ল্যাটফর্ম সেশন (Agent Platform Sessions) সংহত করার জন্য একটি ADK ক্লাস যুক্ত করছি। এটি আমাদের এজেন্টদের সময়ের সাথে সাথে স্টেটফুল (stateful) করে তোলার এবং প্রয়োজন অনুযায়ী কনটেক্সট (context) পরিবর্তন করার ক্ষমতা দেয়।

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
)

৫. স্মৃতি ব্যাংকের মাধ্যমে দীর্ঘমেয়াদী শিক্ষা সক্ষম করুন

সেশন ম্যানেজমেন্ট যেমন স্বতন্ত্র কথোপকথন ট্র্যাক করে, আপনি দীর্ঘমেয়াদী স্মৃতির জন্যও একই কাজ করতে পারেন। এই ধাপে, আপনি এজেন্টটিকে এজেন্ট প্ল্যাটফর্মের মেমোরি ব্যাংকের সাথে সংযুক্ত করবেন, যা একটি এন্টারপ্রাইজ-রেডি এবং সম্পূর্ণরূপে পরিচালিত মেমোরি পরিষেবা।

মেমরি ব্যাংক পরিষেবা শুরু করুন

মেমোরি ব্যাংক এজেন্টকে বিভিন্ন সেশন জুড়ে কনটেক্সট মনে রাখতে সাহায্য করে। মেমোরি সার্ভিস অন্তর্ভুক্ত করতে planner_agent/agent.py ফাইলটি আপডেট করুন:

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
    )

স্বয়ংক্রিয় মেমরি ইনজেশন বাস্তবায়ন করুন

এজেন্ট যাতে প্রতিটি পালা থেকে শিখতে পারে, তা নিশ্চিত করার জন্য আমরা একটি after_agent_callback যোগ করি। এজেন্ট একটি প্রতিক্রিয়া সম্পন্ন করার পর এই ফাংশনটি ট্রিগার হয়, যা তাকে সেশনটি "বিশ্লেষণ" করতে এবং প্রাসঙ্গিক স্মৃতিগুলো ব্যাংকে সংরক্ষণ করতে সাহায্য করে।

  1. কলব্যাক ফাংশনটি সংজ্ঞায়িত করুন:
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
        )
  1. LlmAgent এর সাথে কলব্যাকটি সংযুক্ত করুন:
root_agent = LlmAgent(
    # ... other params
    after_agent_callback=[auto_save_memories],
)

৬. RAG-এর জন্য AlloyDB সেট আপ করা

শহরের নিয়মাবলীর ডেটা গ্রহণ করার আগে, তা সংরক্ষণের জন্য আমাদের একটি উচ্চ-ক্ষমতাসম্পন্ন ডেটাবেস প্রয়োজন। এই ধাপে, আপনি একটি AlloyDB ক্লাস্টার তৈরি করবেন এবং ভেক্টর সার্চের জন্য ডেটাবেস স্কিমাটি ইনিশিয়ালাইজ করবেন।

১. অ্যালয়ডিবি ক্লাস্টার এবং প্রাইমারি ইনস্ট্যান্স তৈরি করুন

আপনার ক্লাস্টার এবং এর প্রাইমারি ইনস্ট্যান্স তৈরি করতে ক্লাউড শেলে এই কমান্ডগুলো চালান:

# 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

২. অনুদানের জন্য প্রয়োজনীয় আইএএম ভূমিকা

ম্যানেজড অ্যালয়ডিবি এমসিপি সার্ভার ব্যবহার করার জন্য আপনার আইডেন্টিটির নির্দিষ্ট পারমিশন প্রয়োজন। প্রয়োজনীয় রোলগুলো মঞ্জুর করতে এই কমান্ডগুলো চালান:

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

৩. AlloyDB Studio-এর মাধ্যমে ডেটাবেস এবং টেবিল তৈরি করুন

যেহেতু AlloyDB ডেটাবেস এবং টেবিলগুলো SQL-এর মাধ্যমে পরিচালিত হয়, তাই আমরা স্কিমাটি চূড়ান্ত করার জন্য Google Cloud Console-এ AlloyDB Studio ব্যবহার করব।

  1. AlloyDB > Clusters- এ যান এবং rules-db তে ক্লিক করুন।
  2. বাম দিকের নেভিগেশন মেনুতে, AlloyDB Studio-তে ক্লিক করুন।
  3. আপনার সেট করা postgres ব্যবহারকারী এবং পাসওয়ার্ড ব্যবহার করে লগইন করুন ( postgres )।
  4. ডাটাবেস তৈরি করতে নিম্নলিখিত SQL চালান:
    CREATE DATABASE city_rules;
    
  5. AlloyDB Studio-তে আপনার ডাটাবেস সংযোগ city_rules এ পরিবর্তন করুন এবং এক্সটেনশন ইনস্টল করতে ও rules টেবিল তৈরি করতে নিম্নলিখিত SQL চালান:
    -- 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";
    

৭. স্পার্ক লাইটনিং ইঞ্জিনের সাহায্যে শহরের নিয়মাবলীর ডেটা গ্রহণ করা

সত্যিকারের নির্ভুল পরিকল্পনা প্রদানের জন্য, একজন এজেন্টের শুধু একটি সুচিন্তিত নির্দেশনার চেয়েও বেশি কিছু প্রয়োজন; এর জন্য ডেটা এবং সাংগঠনিক প্রেক্ষাপটের উপর ভিত্তি থাকা দরকার। এই ধাপে, আপনি ডেটাপ্রক সার্ভারলেস-এ স্পার্ক লাইটনিং ইঞ্জিন ব্যবহার করে বড় শহরের নিয়মাবলীর পিডিএফগুলো প্রসেস করবেন এবং সেগুলোকে অ্যালয়ডিবি-তে অন্তর্ভুক্ত করবেন।

স্পার্ক লাইটনিং ইঞ্জিন কেন?

বৃহৎ পরিসরে এজেন্টদের গ্রাউন্ডিং করার জন্য বিপুল পরিমাণ অসংগঠিত ডেটা প্রসেস করার প্রয়োজন হয়। স্পার্ক লাইটনিং ইঞ্জিন হলো স্পার্কের একটি উচ্চ-ক্ষমতাসম্পন্ন এক্সিকিউশন ইঞ্জিন যা এই ধরনের ওয়ার্কলোডকে উল্লেখযোগ্যভাবে ত্বরান্বিত করে। আমরা এখানে গুগলের ডকুমেন্ট এআই ব্যবহার করে ডকুমেন্টের উপর সিমান্টিক চাংকিং সম্পাদন করতে এটি ব্যবহার করি।

স্পার্ক পাইপলাইন অন্বেষণ করুন

ইনজেশন লজিকটি spark-setup/spark_alloydb_processor.py ফাইলে সংজ্ঞায়িত করা আছে। পাইপলাইনটি নিম্নলিখিত ধাপগুলো অনুসরণ করে:

  1. পিডিএফ তালিকা : গুগল ক্লাউড স্টোরেজ বাকেট থেকে ডকুমেন্টের ইউআরআই পুনরুদ্ধার করে।
  2. শব্দার্থিক নিষ্কাশন : ডকুমেন্ট এআই এপিআই (Document AI API)-কে কল করার জন্য একটি ইউডিএফ (ব্যবহারকারী-সংজ্ঞায়িত ফাংশন) ব্যবহার করে।
  3. AlloyDB-তে লিখুন : নিষ্কাশিত পাঠ্যাংশগুলিকে AlloyDB-এর 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()

ইনজেশন জবটি চালান

প্রদত্ত স্ক্রিপ্ট ব্যবহার করে গ্রহণ প্রক্রিয়াটি চালু করুন:

./spark-setup/run_dataproc.sh

৮. RAG with AlloyDB

এখন যেহেতু শহরের নিয়মকানুনের ডেটা AlloyDB-তে রয়েছে, এজেন্ট এটি ব্যবহার করে রিট্রিভাল-অগমেন্টেড জেনারেশন (RAG) সম্পাদন করতে পারে। এটি নিশ্চিত করে যে ম্যারাথন পরিকল্পনাটি শহরের নির্দিষ্ট বিধিমালা মেনে চলে।

RAG-এর জন্য AlloyDB-এর শক্তি

AlloyDB ভেক্টর সার্চে অত্যন্ত পারদর্শী, যা আমাদের একই জায়গায় স্ট্রাকচার্ড ডেটা এবং ভেক্টর এমবেডিং উভয়ই সংরক্ষণ করার সুযোগ দেয়। এজেন্ট সবচেয়ে প্রাসঙ্গিক রুলস-এর তথ্য খুঁজে বের করার জন্য AlloyDB-এর বিল্ট-ইন embedding ফাংশনটি ব্যবহার করতে পারে।

এজেন্টকে এই ডেটাতে অ্যাক্সেস দেওয়ার জন্য, আমরা একটি টুল সরবরাহ করি যা ভেক্টর সিমিলারিটি ব্যবহার করে AlloyDB-তে কোয়েরি করে। আপনি এই লজিকটি hybrid_recall.sql এ দেখতে পারেন, যেখানে দেখানো হয়েছে কীভাবে একটি কোয়েরি এবং আমাদের সংরক্ষিত রুলগুলোর মধ্যে দূরত্ব গণনা করতে হয়:

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;

RAG টুলের সাহায্যে এজেন্টকে স্থানীয় নিয়মের সাথে পরিচিত করান।

এজেন্টের কাছে টুলটি উপলব্ধ করতে, আপনাকে অবশ্যই এটি planner_agent/tools.py তে সংজ্ঞায়িত করতে হবে এবং তারপর planner_agent/agent.py তে নিবন্ধন করতে হবে। আমরা আমাদের ডাটাবেসের সাথে সংযোগ করার জন্য গুগল ক্লাউডের পরিচালিত রিমোট অ্যালয়ডিবি এমসিপি সার্ভার ব্যবহার করব।

  1. planner_agent/tools.py ফাইলে 'Hybrid Recall' প্যাটার্ন ব্যবহার করে টুলটি সংজ্ঞায়িত করুন। আমরা ম্যানেজড AlloyDB MCP সার্ভারের সাথে সংযোগ করার জন্য streamable_http প্রোটোকল ব্যবহার করব:
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')])
  1. টুলটি রেজিস্টার করুন এবং 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
)

৯. এজেন্ট দক্ষতার ক্ষেত্রে বিশেষজ্ঞ নির্দেশনা

এজেন্ট স্কিল হলো স্বয়ংসম্পূর্ণ মডিউল, যা এজেন্টদের আরও কার্যকরভাবে কাজ সম্পাদনে সাহায্য করার জন্য নির্দিষ্ট নির্দেশনা, দিকনির্দেশনা এবং রিসোর্স প্রদান করে। প্রতিটি টুলের জন্য জটিল নির্দেশাবলী দিয়ে আপনার সিস্টেম প্রম্পটকে ভারাক্রান্ত করার পরিবর্তে, আপনি সেই দক্ষতাকে একটি স্কিলের মধ্যে আবদ্ধ করতে পারেন, যা শুধুমাত্র প্রয়োজনের সময় লোড হয়।

আপনার এজেন্টরা যেন ডেটা কোয়েরি করা এবং রিসোর্স ব্যবস্থাপনার ক্ষেত্রে ইন্ডাস্ট্রির সেরা অনুশীলনগুলো অনুসরণ করে, তা নিশ্চিত করার জন্য গুগল তার প্রোডাক্টগুলোর (যেমন AlloyDB এবং BigQuery) জন্য আগে থেকে তৈরি স্কিল সরবরাহ করে। আপনি Google Skills Depot- এ এই এবং অন্যান্য বিশেষায়িত প্যাটার্নগুলো খুঁজে দেখতে পারেন। AlloyDB-এর বেস স্কিলগুলো আপনি এখানে পাবেন।

১. স্কিল ফাইলটি অন্বেষণ করুন

planner_agent/skills/get-local-and-traffic-rules/SKILL.md এ থাকা আগে থেকে কনফিগার করা স্কিল ফাইলটি খুলুন। এটি দেখতে এইরকম:

---
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.

২. কীভাবে দক্ষতাটি নিবন্ধিত হয়

planner_agent/agent.py ফাইলে, ডিরেক্টরি থেকে স্কিলটি লোড করে এজেন্টের টুলসে যোগ করা হয়। কোডটি দেখতে এইরকম:

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],
)

১০. এজেন্টকে পরীক্ষা করুন

  1. স্থানীয়ভাবে এজেন্টটি চালু করুন:
uv run adk run planner_agent
  1. শহরের নিয়মকানুন সম্পর্কে প্রশ্ন করুন: [user]: What are the rules for running a race on the Las Vegas strip?

এজেন্টটি get_local_and_traffic_rules টুলটিকে কল করবে, AlloyDB-তে একটি ভেক্টর সার্চ চালাবে এবং Spark দ্বারা প্রক্রিয়াকৃত অফিসিয়াল রুলস চাঙ্কগুলোর উপর ভিত্তি করে একটি উত্তর ফেরত দেবে।

১১. এজেন্টটি স্থাপন করুন

এজেন্ট প্ল্যাটফর্মে স্থাপন করুন

uv run adk deploy agent_engine \
  --env_file .env \
  planner_agent

১২. পরিষ্কার করুন

চলমান চার্জ এড়াতে, এই কোডল্যাব চলাকালীন তৈরি করা রিসোর্সগুলো মুছে ফেলুন।

AlloyDB ক্লাস্টারটি মুছে ফেলুন

# Delete the AlloyDB Cluster
gcloud alloydb clusters delete rules-db --region=us-central1 --force

এজেন্ট রানটাইম অ্যাপটি মুছে ফেলুন

আপনি কনসোলের মাধ্যমে অথবা gcloud কমান্ড ব্যবহার করে (যদি আপনার কাছে রিসোর্সের নামটি থাকে) রিজনিং ইঞ্জিন ইনস্ট্যান্সটি ডিলিট করতে পারেন। সরলতার জন্য, কনসোল ব্যবহার করুন:

  1. এজেন্ট রানটাইম পৃষ্ঠায় যান।
  2. planner_agent নির্বাচন করুন –> ডানদিকে থাকা ট্রিপল-ডট বোতামে ক্লিক করুন।
  3. ডিলিট-এ ক্লিক করুন।

১৩. অভিনন্দন

অভিনন্দন! আপনি সফলভাবে একটি ADK এজেন্টকে উন্নত মেমরি এবং ডেটা গ্রাউন্ডিং সক্ষমতা দিয়ে সমৃদ্ধ করেছেন।

আপনি যা শিখেছেন

  • স্টেটফুল এজেন্ট : কথোপকথনের প্রেক্ষাপট বজায় রাখতে এজেন্ট প্ল্যাটফর্ম সেশন একীভূতকরণ।
  • দীর্ঘমেয়াদী শিখন : ব্যবহারকারীর মিথস্ক্রিয়া থেকে এজেন্টকে শেখার সুযোগ দেওয়ার জন্য একটি এজেন্ট প্ল্যাটফর্ম মেমরি ব্যাংক সংযুক্ত করা।
  • ডেটা ইনজেশন : অসংগঠিত নথি প্রক্রিয়াকরণে স্পার্ক লাইটনিং ইঞ্জিন এবং ডকুমেন্ট এআই ব্যবহার।
  • RAG : এজেন্টকে বাস্তব-জগতের নিয়মের সাথে সংযুক্ত করার জন্য AlloyDB- তে একটি ভেক্টর সার্চ সিস্টেম তৈরি করা।

পরবর্তী পদক্ষেপ