MCP এবং Cloud Run-এর সাথে একটি এন্টারপ্রাইজ গভর্নেন্স-সচেতন এজেন্ট স্থাপন করুন

১. ভূমিকা

এই কোডল্যাবটি একটি দুই-পর্বের সিরিজের অংশ, যেখানে একটি গভর্নেন্স-অ্যাওয়্যার জেনএআই এজেন্ট কীভাবে তৈরি করা যায় তা অন্বেষণ করা হয়েছে।

(আপনি এই সিরিজের প্রথম পর্বটি পড়তে পারেন, যেখানে BigQuery টেবিলগুলিতে Dataplex Aspects প্রয়োগ করে কীভাবে ডেটার ভিত্তি স্থাপন করতে হয় এবং Gemini CLI-এর মাধ্যমে স্থানীয়ভাবে নিয়মগুলি পরীক্ষা করতে হয়, তা আলোচনা করা হয়েছে। 👉 পর্ব ১ পড়ুন )

তবে, স্থানীয় CLI-তে পরীক্ষা করাটা কেবল শুরু। আপনার পুরো কোম্পানিতে এটি চালু করতে হলে, আপনার প্রয়োজন কেন্দ্রীভূত নিরাপত্তা, মানসম্মত AI টুল সংযোগ এবং এজেন্টের লজিক পরিচালনা ও একটি পরিচিত চ্যাট ইন্টারফেস প্রদানের জন্য একটি যথাযথ অ্যাপ্লিকেশন ফ্রেমওয়ার্ক।

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

be15d5f41f0d716c.png

পূর্বশর্ত

  • বিলিং সক্ষম একটি গুগল ক্লাউড প্রজেক্ট।
  • ক্লাউড রান, আইএএম সার্ভিস অ্যাকাউন্ট এবং পাইথন সম্পর্কে প্রাথমিক ধারণা।
  • প্রথম পর্বে তৈরি করা BigQuery ডেটাসেট এবং Dataplex Aspects। (আপনি যদি এগুলো মুছে ফেলে থাকেন তবে চিন্তা করবেন না; এগুলো পুনরায় তৈরি করার জন্য আমরা নিচে একটি দ্রুত স্ক্রিপ্ট দিয়েছি!)

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

  • এআই এজেন্টরা গুগল ক্লাউড ডেটার সাথে যেভাবে যোগাযোগ করে, তার মান নির্ধারণ করতে মডেল কনটেক্সট প্রোটোকল (MCP) কীভাবে ব্যবহার করবেন।
  • ক্লাউড রানে কীভাবে একটি সুরক্ষিত এমসিপি সার্ভার স্থাপন করবেন।
  • এজেন্ট ডেভেলপমেন্ট কিট (ADK) ব্যবহার করে কীভাবে একটি এআই এজেন্ট তৈরি করবেন এবং সেটিকে আপনার এমসিপি ব্যাকএন্ডের সাথে সংযুক্ত করবেন।
  • আপনার নিয়ন্ত্রিত এজেন্টের সাথে যোগাযোগ করার জন্য ADK-এর অন্তর্নির্মিত ডেভেলপার UI কীভাবে চালাবেন।

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

  • গুগল ক্লাউড শেলে অ্যাক্সেস

মূল ধারণা

  • মডেল কনটেক্সট প্রোটোকল (MCP): MCP-কে AI এজেন্টদের জন্য একটি 'সার্বজনীন USB-C কেবল' হিসেবে ভাবা যেতে পারে। প্রতিটি AI মডেলের জন্য আলাদা করে কাস্টম API ইন্টিগ্রেশন কোড লেখার পরিবর্তে, MCP AI-কে আপনার এন্টারপ্রাইজ ডেটা টুলগুলোর (যেমন Dataplex এবং BigQuery) সাথে নিরাপদে সংযোগ করার একটি আদর্শ উপায় প্রদান করে।
  • এজেন্ট ডেভেলপমেন্ট কিট (ADK): গুগলের তৈরি একটি নমনীয়, ওপেন-সোর্স ফ্রেমওয়ার্ক, যা এআই এজেন্টের শুরু থেকে শেষ পর্যন্ত উন্নয়ন প্রক্রিয়াকে সহজ করার জন্য ডিজাইন করা হয়েছে। এটি এজেন্ট তৈরিতে সফটওয়্যার ইঞ্জিনিয়ারিং নীতি প্রয়োগ করে, যার ফলে আপনি জটিল টুলগুলো পরিচালনা করতে, স্টেট ম্যানেজ করতে এবং টেস্টিং ও ডেপ্লয়মেন্টের জন্য সহজেই একটি বিল্ট-ইন ডেভেলপার UI চালু করতে পারেন।

২. সেটআপ এবং প্রয়োজনীয়তা

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

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

গুগল ক্লাউড কনসোল থেকে, উপরের ডানদিকের টুলবারে থাকা ক্লাউড শেল আইকনটিতে ক্লিক করুন:

ক্লাউড শেল সক্রিয় করুন

পরিবেশটি প্রস্তুত করতে এবং এর সাথে সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগবে। এটি শেষ হলে, আপনি এইরকম কিছু দেখতে পাবেন:

গুগল ক্লাউড শেল টার্মিনালের স্ক্রিনশট, যা দেখাচ্ছে যে পরিবেশটি সংযুক্ত হয়েছে।

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

পরিবেশ প্রারম্ভিক করুন

ক্লাউড শেল খুলুন এবং আপনার প্রোজেক্ট ভেরিয়েবলগুলো সেট করুন, যাতে সমস্ত কমান্ড সঠিক ইনফ্রাস্ট্রাকচারকে টার্গেট করে।

export PROJECT_ID=$(gcloud config get-value project)
gcloud config set project $PROJECT_ID
export REGION="us-central1"

চেকপয়েন্ট: পুনরায় শুরু করবেন নাকি পুনর্গঠন করবেন?

যেহেতু এটি পর্ব ২, আপনার এজেন্টের কাজ করার জন্য পর্ব ১-এর নিয়ন্ত্রিত ডেটা প্রয়োজন। অনুগ্রহ করে আপনার পথ বেছে নিন:

পথ A: আমি এইমাত্র প্রথম পর্ব শেষ করেছি এবং আমার রিসোর্সগুলো এখনও চালু আছে।

চমৎকার! ওয়ার্কিং ডিরেক্টরিতে যান এবং আপনি এগিয়ে যাওয়ার জন্য প্রস্তুত।

cd ~/devrel-demos/data-analytics/governance-context

পথ B: আমি প্রথম পর্বটি বাদ দিয়েছি অথবা আমার রিসোর্সগুলো মুছে ফেলেছি (পরিষ্কার করেছি)।

কোনো সমস্যা নেই! আমরা নিচে একটি "ফাস্ট-ট্র্যাক" কমান্ড ব্লক দিয়েছি। এটি স্বয়ংক্রিয়ভাবে BigQuery ডেটা লেক পুনর্নির্মাণ করবে এবং Dataplex গভর্নেন্স মেটাডেটা প্রয়োগ করবে, ঠিক যেমনটি আমরা প্রথম পর্বে করেছিলাম।

# 1. Clone the repo and navigate to the working directory
git clone --depth 1 --filter=blob:none --sparse https://github.com/GoogleCloudPlatform/devrel-demos.git
cd devrel-demos
git sparse-checkout set data-analytics/governance-context
cd data-analytics/governance-context

# 2. Rebuild the messy data lake with Terraform
cd terraform
terraform init
terraform apply -var="project_id=${PROJECT_ID}" -var="region=${REGION}" -auto-approve

# 3. Generate and apply Dataplex Aspects (Governance rules)
cd ..
chmod +x ./generate_payloads.sh ./apply_governance.sh
./generate_payloads.sh
./apply_governance.sh

৩. এমসিপি-র সাহায্যে স্কেল করা: ডেটা কন্ট্রোল প্লেন তৈরি করা

এখন পর্যন্ত, আপনি জেমিনি সিএলআই ব্যবহার করে আপনার গভর্নেন্স লজিক সফলভাবে পরীক্ষা করেছেন। এটি দ্রুত প্রোটোটাইপিংয়ের জন্য চমৎকার, কিন্তু এটি আপনার ব্যক্তিগত ব্যবহারকারীর পরিচয়পত্র ব্যবহার করে স্থানীয়ভাবে চলে।

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

ক্লাউড রানে আমাদের এমসিপি সার্ভার হিসেবে এই টুলবক্সটি স্থাপন করার মাধ্যমে আমরা যা অর্জন করি:

  1. কেন্দ্রীভূত পরিচয়: এজেন্টটি আপনার ব্যক্তিগত ব্যবহারকারী অ্যাকাউন্ট হিসেবে নয়, বরং একটি সীমাবদ্ধ পরিষেবা অ্যাকাউন্ট হিসেবে চলে।
  2. মানসম্মতকরণ: যেকোনো ক্লায়েন্ট (ADK, Gemini, কাস্টম অ্যাপ) স্ট্যান্ডার্ড MCP প্রোটোকল ব্যবহার করে এই সার্ভারে "প্লাগ ইন" করতে পারে।
  3. নিয়ন্ত্রিত পরিধি (সর্বনিম্ন বিশেষাধিকার): আমরা LLM-কে BigQuery-তে অবাধ অ্যাক্সেস দিই না। আমরা এটিকে প্রথমে Dataplex মেটাডেটা ক্যাটালগের মধ্যে দিয়ে যেতে বাধ্য করি।

টুলের সংজ্ঞা ( tools.yaml ) কনফিগার করুন।

GenAI টুলবক্সের জন্য tools.yaml একটি ডিক্লারেটিভ কনফিগারেশন ফাইল প্রয়োজন। এই ফাইলটি sources (কোথায় সংযোগ করতে হবে) এবং tools (এআই কী করতে পারবে) নির্ধারণ করে।

  1. সার্ভার ডিরেক্টরিতে যান এবং কনফিগারেশন ফাইলে আপনার প্রজেক্ট আইডিটি যুক্ত করুন:
cd ~/devrel-demos/data-analytics/governance-context/mcp_server
envsubst < tools.yaml > tools.tmp && mv tools.tmp tools.yaml
cat tools.yaml

এটি দেখতে নিচের কোড স্নিপেটটির মতো হুবহু হওয়া উচিত। যাচাই করুন যে 'project' ফিল্ডটি এখন আপনার আসল Google Cloud Project ID-এর সাথে মিলে যাচ্ছে।

sources:
  dataplex:
    kind: dataplex
    project: YOUR-PROJECT-ID

tools:
  search_entries:
    kind: dataplex-search-entries
    source: dataplex
    description: Search for entries in Dataplex Catalog.

  lookup_entry:
    kind: dataplex-lookup-entry
    source: dataplex
    description: Retrieve a specific entry from Dataplex Catalog.

  search_aspect_types:
    kind: dataplex-search-aspect-types
    source: dataplex
    description: Find aspect types relevant to a query.

toolsets:
  dataplex-toolset:
    - search_entries
    - lookup_entry
    - search_aspect_types

এই তিনটি টুল সংজ্ঞায়িত করার মাধ্যমে, আমরা এআই-কে 'শুধুমাত্র পঠনযোগ্য' এবং 'শাসন-কেন্দ্রিক' হতে বাধ্য করতে পারি।

কনফিগারেশন সুরক্ষিত করুন (গোপন ব্যবস্থাপক)

এন্টারপ্রাইজ আর্কিটেকচারে, কনফিগারেশন ফাইলগুলো সরাসরি কন্টেইনার ইমেজে অন্তর্ভুক্ত করা উচিত নয়। আমরা tools.yaml Google Cloud Secret Manager- এ নিরাপদে সংরক্ষণ করব।

gcloud services enable secretmanager.googleapis.com
gcloud secrets create dataplex-tools-config --data-file=tools.yaml

ন্যূনতম বিশেষাধিকার বাস্তবায়ন (IAM)

এরপরে, আমরা GenAI টুলবক্স MCP সার্ভারের জন্য একটি ডেডিকেটেড সার্ভিস অ্যাকাউন্ট তৈরি করব। এই আইডেন্টিটির কাছে শুধুমাত্র ডেটাপ্লেক্স ক্যাটালগ পড়া এবং বিগকোয়েরি ডেটা অ্যাক্সেস করার জন্য প্রয়োজনীয় সুনির্দিষ্ট অনুমতি থাকবে।

export MCP_SA=mcp-sa
gcloud iam service-accounts create ${MCP_SA} \
    --display-name="Service Account for Dataplex MCP"
export MCP_SERVICE_ACCOUNT="${MCP_SA}@${PROJECT_ID}.iam.gserviceaccount.com"

# Allow the server to read its own config from Secret Manager
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$MCP_SERVICE_ACCOUNT" \
  --role="roles/secretmanager.secretAccessor"

# Allow the server to read Dataplex Metadata and BigQuery Data
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$MCP_SERVICE_ACCOUNT" \
  --role="roles/dataplex.catalogViewer"
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$MCP_SERVICE_ACCOUNT" \
  --role="roles/bigquery.dataViewer"

ক্লাউড রানে এমসিপি সার্ভার স্থাপন করুন

এখন, আমরা GenAI টুলবক্সটি ডেপ্লয় করব। আমরা গুগলের প্রি-বিল্ট কন্টেইনার ইমেজ ( database-toolbox/toolbox ) ব্যবহার করি এবং রানটাইমে সিক্রেট ম্যানেজার ( --set-secrets ) থেকে আমাদের কনফিগারেশন মাউন্ট করি।

export IMAGE=us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:latest

gcloud run deploy governance-mcp \
    --image=$IMAGE \
    --service-account $MCP_SERVICE_ACCOUNT \
    --region=$REGION \
    --no-allow-unauthenticated \
    --set-secrets="/app/tools.yaml=dataplex-tools-config:latest" \
    --args="--tools-file=/app/tools.yaml","--address=0.0.0.0","--port=8080"

আপনি এখন একটি নিয়ন্ত্রিত এপিআই (API) স্থাপন করেছেন! আপনার GenAI ফ্রন্টএন্ডকে সরাসরি ডেটাবেস অ্যাক্সেস দেওয়ার পরিবর্তে, এটি এই ক্লাউড রান ইউআরএল (Cloud Run URL)-এর সাথে সংযুক্ত হবে। এজেন্ট শুধুমাত্র ততটুকুই দেখতে পারবে, যতটুকু এই টুলবক্স তাকে দেখার অনুমতি দেয়।

৪. ADK দিয়ে এজেন্ট ব্যাকএন্ড তৈরি করুন।

আপনি ক্লাউড রান-এ একটি সুরক্ষিত ও নিয়ন্ত্রিত ডেটা কন্ট্রোল প্লেন (MCP) স্থাপন করেছেন। এখন আপনার এআই এজেন্টের তার লজিক পরিচালনা করার জন্য একটি ফ্রেমওয়ার্ক প্রয়োজন, যেমন—ব্যবহারকারীর ইনপুট প্রসেস করা, কখন MCP সার্ভারকে কল করতে হবে সেই সিদ্ধান্ত নেওয়া এবং আউটপুট ফরম্যাট করা।

প্রথম থেকে এই সমস্ত গতানুগতিক কোড লেখার পরিবর্তে, আমরা গুগলের এজেন্ট ডেভেলপমেন্ট কিট (ADK) ব্যবহার করব। ADK হলো একটি কোড-ফার্স্ট ফ্রেমওয়ার্ক যা স্বয়ংক্রিয়ভাবে আপনার এজেন্টের লজিককে একটি FastAPI ব্যাকএন্ডে মুড়ে দেয়। এছাড়াও, এটিতে একটি বিল্ট-ইন ডেভেলপার UI রয়েছে, যা আপনাকে প্রথমে কোনো কাস্টম ফ্রন্টএন্ড তৈরি না করেই এজেন্টের যুক্তি প্রক্রিয়া এবং টুল কলগুলো তাৎক্ষণিকভাবে দেখতে দেয়।

এজেন্ট লজিক (agent.py) পরিদর্শন করুন

পরিকাঠামো কনফিগার করার আগে, চলুন এই অ্যাপ্লিকেশনটির মূল অংশটি দেখে নেওয়া যাক।

ডিরেক্টরিতে যান এবং agent.py ফাইলের বিষয়বস্তু আউটপুট করুন। এই ফাইলটি আপনার ADK ডেপ্লয়মেন্টের 'মস্তিষ্ক'।

cd ~/devrel-demos/data-analytics/governance-context/mcp_server
cat agent.py

কোডের গঠনটি দেখুন। এটি ন্যূনতম বয়লারপ্লেট কোড ব্যবহার করে তিনটি গুরুত্বপূর্ণ কাজ সম্পাদন করে:

  1. MCPToolset ইন্টিগ্রেশন: আপনার Dataplex টুলগুলির সাথে ইন্টারঅ্যাক্ট করার জন্য কাস্টম HTTP ক্লায়েন্ট লেখার পরিবর্তে, ADK MCPToolset(server_url=mcp_url) ব্যবহার করে। এটি আপনার ডেপ্লয় করা MCP সার্ভার থেকে ডায়নামিকভাবে tools.yaml ডেফিনিশন ফেচ করে এবং সেগুলিকে LLM-এর জন্য নেটিভ ফাংশন কলে অনুবাদ করে।
  2. সিস্টেম নির্দেশাবলী: instructions প্যারামিটারটিতে কঠোর গভর্নেন্স নিয়মাবলী থাকে (সেই একই লজিক যা আমরা CLI GEMINI.md তে ব্যবহার করেছি)। এটি মডেলকে স্পষ্টভাবে ফেজ ১ (মেটাডেটা লুকআপ) থেকে ফেজ ২ (ডেটা কোয়েরি) পর্যন্ত রিজনিং লুপটি কার্যকর করার নির্দেশ দেয়।
  3. এজেন্ট অর্কেস্ট্রেশন: Agent(...) ক্লাসটি জেমিনি মডেল, সিস্টেম প্রম্পট এবং এমসিপি টুলগুলোকে একসাথে সংযুক্ত করে। ডেপ্লয় করার সময়, ADK স্বয়ংক্রিয়ভাবে এই অবজেক্টটিকে একটি স্কেলেবল FastAPI এন্ডপয়েন্টে রূপান্তর করে।

দায়িত্বের বিভাজন: ফ্রন্টএন্ড আইডেন্টিটি কনফিগার করুন

এই কোডটি নিরাপদে চালানোর জন্য, আপনার MCP সার্ভারটি কোথায় অবস্থিত তা এজেন্টকে জানাতে হবে। আমরা URL-টি ডাইনামিকভাবে তৈরি করে একটি .env ফাইলে সংরক্ষণ করব, যা ADK রানটাইমে পড়বে।

আমরা এই ব্যবহারকারী-মুখী অ্যাপ্লিকেশনটির জন্য একটি পৃথক আইডেন্টিটি ( dataplex-agent-sa ) তৈরি করব। দায়িত্বের এই বিভাজন নিশ্চিত করে যে ফ্রন্টএন্ড এজেন্টের অনুমতিগুলো ব্যাকএন্ড গভর্নেন্স সার্ভারের অনুমতি থেকে ভিন্ন হবে।

পরিবেশ ও পরিচয় কনফিগার করতে নিম্নলিখিত কমান্ডগুলো চালান:

export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
export MCP_SERVER_URL=https://governance-mcp-${PROJECT_NUMBER}.${REGION}.run.app/mcp

export AGENT_SA=dataplex-agent-sa
export AGENT_SERVICE_ACCOUNT="${AGENT_SA}@${PROJECT_ID}.iam.gserviceaccount.com"

gcloud iam service-accounts create ${AGENT_SA} \
    --display-name="Service Account for Dataplex Agent "

রানটাইম ভেরিয়েবল কনফিগার করুন

ADK ফ্রেমওয়ার্ক তার প্রেক্ষাপট বোঝার জন্য এনভায়রনমেন্ট ভেরিয়েবলের উপর নির্ভর করে। আমাদের প্রজেক্ট আইডি, রিজিয়ন স্পষ্টভাবে সেট করতে হবে এবং ভার্টেক্স এআই ব্যবহার সক্ষম করতে হবে। আমরা এইগুলো একই .env ফাইলে যুক্ত করি।

echo MCP_SERVER_URL=$MCP_SERVER_URL > .env
echo GOOGLE_GENAI_USE_VERTEXAI=1 >> .env
echo GOOGLE_CLOUD_PROJECT=$PROJECT_ID >> .env
echo GOOGLE_CLOUD_LOCATION=$REGION >> .env

অনুদানের অনুমতি

যদিও এজেন্ট গভর্নেন্স চেকের দায়িত্ব এমসিপি সার্ভারকে অর্পণ করে, তবুও এটির কাজ করার জন্য মৌলিক অনুমতির প্রয়োজন হয়। আমরা ঠিক দুটি রোল প্রদান করি:

  1. ভার্টেক্স এআই ব্যবহারকারী: স্বাভাবিক ভাষার প্রতিক্রিয়া তৈরি করার জন্য জেমিনি মডেলটি চালু করতে।
  2. ক্লাউড রান ইনভোকার: আপনার এমসিপি সার্ভার এপিআই নিরাপদে কল করার জন্য। এটি সরাসরি বিগকোয়েরি বা ডেটাপ্লেক্স অ্যাক্সেস পায় না!
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$AGENT_SERVICE_ACCOUNT" \
  --role="roles/aiplatform.user"

gcloud run services add-iam-policy-binding governance-mcp \
  --region=$REGION \
  --member="serviceAccount:$AGENT_SERVICE_ACCOUNT" \
  --role="roles/run.invoker"

ক্লাউড রানে স্থাপন করুন

অবশেষে, আমরা সম্পূর্ণ স্ট্যাকটি ক্লাউড রান-এ ডেপ্লয় করি।

আমরা ম্যানুয়ালি ডিপেন্ডেন্সি ইনস্টল না করেই ADK টুলটি চালানোর জন্য uvx ব্যবহার করি। নিচের কমান্ডটি আপনার agent.py লজিককে প্যাকেজ করে, একটি কন্টেইনার ইমেজ তৈরি করে, আপনার সার্ভিস অ্যাকাউন্ট ইনজেক্ট করে এবং একটি FastAPI সার্ভার চালু করে। --with_ui ফ্ল্যাগটি যোগ করলে, এটি ডিবাগিংয়ের জন্য ADK ওয়েব প্লেগ্রাউন্ডও বান্ডল করে।

এই কমান্ডটি কন্টেইনারটি তৈরি করে এবং স্থাপন করে। এটি সম্পন্ন হতে ১-৩ মিনিট সময় লাগতে পারে।

uvx --from google-adk \
adk deploy cloud_run \
  --project=$PROJECT_ID \
  --region=$REGION \
  --service_name=dataplex-agent \
  --with_ui \
  . \
  -- \
  --service-account=$AGENT_SERVICE_ACCOUNT \
  --allow-unauthenticated

এই কমান্ডটি সম্পন্ন হলে, এটি একটি সার্ভিস ইউআরএল ( eg, https://dataplex-agent-xyz.run.app ) আউটপুট করবে। আপনার সম্পূর্ণরূপে নিয়ন্ত্রিত জেনএআই চ্যাট ইন্টারফেসটি খুলতে সেই লিঙ্কে ক্লিক করুন।

12a5fa4c2aaf381f.png

এন্ড-টু-এন্ড আর্কিটেকচারাল ফ্লো

আপনি এখন সিস্টেমটি সম্পূর্ণ করেছেন। যখন কোনো ব্যবহারকারী ADK UI-এর সাথে ইন্টারঅ্যাক্ট করেন, তখন নিম্নলিখিত ক্রমটি ঘটে:

  1. ব্যবহারকারী ADK এজেন্ট (ডেভ UI)- এ একটি প্রম্পট জমা দেন।
  2. ADK এজেন্ট (agent.py) ইনপুটটি প্রসেস করে এবং জেমিনি মডেলকে কল করে।
  3. জেমিনি তার প্রাসঙ্গিক তথ্য প্রয়োজন বলে মনে করে এবং ডেটাপ্লেক্স টুলগুলো কার্যকর করার জন্য এমসিপি সার্ভারকে অনুরোধ করে।
  4. এমসিপি সার্ভার ডেটাপ্লেক্স গভর্নেন্স নিয়মাবলী প্রয়োগ করে এবং মেটাডেটা ফেরত দেয়।
  5. জেমিনি মেটাডেটার উপর ভিত্তি করে নির্ভরযোগ্য উত্তরটি সংশ্লেষণ করে এবং ব্যবহারকারীকে ফেরত দেয়।

৫. এন্টারপ্রাইজ এজেন্ট পরীক্ষা করুন

এখন যেহেতু আপনার এজেন্ট লাইভ হয়েছে, চলুন CLI দিয়ে আগে পরীক্ষা করা গভর্নেন্স সিনারিওগুলো আবার খতিয়ে দেখি। লজিক একই থাকছে, কিন্তু এখন আপনি ডেপ্লয় করা ADK ওয়েব প্লেগ্রাউন্ডের সাথে ইন্টারঅ্যাক্ট করছেন, যা অভ্যন্তরীণ অবস্থা এবং টুল এক্সিকিউশনগুলো ভিজ্যুয়ালাইজ করে।

  1. সমন্বয়: ক্লাউড রানে চলমান এডিকে এজেন্ট আপনার টেক্সট গ্রহণ করে।
  2. টুল রাউটিং: জেমিনি বুঝতে পারে যে আপনার প্রশ্নের জন্য ডেটা কনটেক্সট প্রয়োজন এবং অনুরোধটি এমসিপি সার্ভারে ফরোয়ার্ড করে।
  3. গভর্নেন্স চেক: এমসিপি সার্ভার (একটি পৃথক ক্লাউড রান ইনস্ট্যান্সে চলমান) নির্দিষ্ট অ্যাসপেক্ট টাইপগুলির জন্য ডেটাপ্লেক্সকে কোয়েরি করে।
  4. সংশ্লেষণ: চূড়ান্ত উত্তর তৈরি করার জন্য প্রাসঙ্গিক মেটাডেটা জেমিনিতে ফেরত পাঠানো হয়।

গভর্নেন্স লজিক যাচাই করুন

পূর্ববর্তী ধাপে তৈরি করা সার্ভিস ইউআরএলটি ( eg, https://dataplex-agent-xyz.run.app ) আপনার ব্রাউজারে খুলুন। নিম্নলিখিত প্রম্পটটি পেস্ট করুন:

"My dashboard needs to show what's happening right now with our ad spend. I can't wait for the overnight load. What do you recommend?"

ডেভেলপার UI-তে এজেন্টের যুক্তি প্রক্রিয়াটি পর্যবেক্ষণ করুন:

  1. অভিপ্রায় শনাক্তকরণ: এজেন্ট 'এখনই' এবং 'সারারাত অপেক্ষা করতে পারব না' এই অর্থ বিশ্লেষণ করে।
  2. মেটাডেটা অনুসন্ধান: এটি MCP টুল search_aspect_types কল করে। এটি এমন ডেটা অ্যাসেটগুলি খুঁজে বের করে, যেখানে update_frequency Aspect-টি DAILY বা MONTHLY-এর পরিবর্তে REALTIME বা STREAMING-এ সেট করা আছে।
  3. নির্বাচন: এটি শনাক্ত করে যে mkt_realtime_campaign_performance টেবিলটি এই মানদণ্ডগুলো পূরণ করে, অপরপক্ষে fin_monthly_closing_internal (উচ্চ মানের হওয়া সত্ত্বেও) আপনার অনুরোধের জন্য অত্যন্ত ধীরগতির।
  4. প্রতিক্রিয়া: এজেন্ট রিয়েল-টাইম টেবিলটির সুপারিশ করে।

e0da615724199e.png

কেন এটি গুরুত্বপূর্ণ:

এই গভর্নেন্স মেটাডেটা ছাড়া, একজন এলএলএম সম্ভবত fin_monthly_closing_internal টেবিলটি সুপারিশ করতেন শুধুমাত্র এই কারণে যে এতে "ad_spend" নামের একটি কলাম আছে, এবং ডেটা যে ২৪ ঘণ্টা পুরোনো সেই বিষয়টি উপেক্ষা করতেন। আপনার মেটাডেটা কনটেক্সট একটি ব্যবসায়িক ত্রুটি প্রতিরোধ করেছে।

ডেটা প্রোডাক্ট টিয়ার অ্যাস্পেক্টের উপর ভিত্তি করে এজেন্ট কীভাবে বিভিন্ন টেবিলে পিভট করে, তা দেখতে আপনি 'বোর্ড মিটিং' প্রম্পটটিও পরীক্ষা করতে পারেন:

"We are preparing the deck for an internal Board of Directors meeting next week. I need the numbers to be absolutely finalized, trustworthy, and kept strictly confidential. Which table is safe to use?"

৬. পরিষ্কার করুন

এই কোডল্যাবে ব্যবহৃত রিসোর্সগুলোর জন্য আপনার গুগল ক্লাউড অ্যাকাউন্টে চার্জ হওয়া এড়াতে, পার্ট ১ এবং পার্ট ২-এ তৈরি করা সমস্ত ইনফ্রাস্ট্রাকচার ধ্বংস করতে এই ধাপগুলো অনুসরণ করুন।

ডেটালেক ধ্বংস করুন (টেরাফর্ম)

Terraform ব্যবহার করে BigQuery টেবিল, ডেটাসেট এবং Dataplex Aspect ডেফিনিশনগুলো ভেঙে ফেলুন।

cd ~/devrel-demos/data-analytics/governance-context/terraform
terraform destroy -var="project_id=${PROJECT_ID}" -var="region=${REGION}" -auto-approve

ক্লাউড রান পরিষেবাগুলি মুছে ফেলুন

চলমান কন্টেইনারগুলোর জন্য সক্রিয় বিলিং বন্ধ করতে কম্পিউট রিসোর্সগুলো সরিয়ে ফেলুন।

gcloud run services delete governance-mcp --region=$REGION --quiet
gcloud run services delete dataplex-agent --region=$REGION --quiet

বিল্ড আর্টিফ্যাক্ট এবং স্টেজিং স্টোরেজ পরিষ্কার করুন

যখন আপনি uvx ব্যবহার করে ADK এজেন্ট স্থাপন করেন, তখন সিস্টেমটি স্বয়ংক্রিয়ভাবে একটি কন্টেইনার ইমেজ তৈরি করে এবং আপনার সোর্স কোড একটি অস্থায়ী ক্লাউড স্টোরেজ বাকেটে আপলোড করে। ক্লাউড রান পরিষেবাটি মুছে ফেলার পরেও এই উপাদানগুলো থেকে যায় এবং এর জন্য চলমান স্টোরেজ খরচ হতে থাকবে।

আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরি এবং ক্লাউড স্টোরেজ স্টেজিং বাকেটটি মুছে ফেলুন:

# Delete the repository used for the agent build
gcloud artifacts repositories delete cloud-run-source-deploy \
    --location=$REGION \
    --quiet

# Delete the staging bucket created by Cloud Run source deploy
gcloud storage rm --recursive gs://run-sources-${PROJECT_ID}-${REGION}

পরিচয়, অনুমতি এবং গোপনীয় তথ্য মুছে ফেলুন

আপনার প্রোজেক্টের IAM পেজে 'টুম্বস্টোন' এন্ট্রি (অনাথ রেকর্ড) থেকে যাওয়া রোধ করতে প্রথমে IAM পলিসি বাইন্ডিংগুলো সরিয়ে ফেলুন। এরপর, সার্ভিস অ্যাকাউন্ট এবং কনফিগারেশন সিক্রেটগুলো ডিলিট করে দিন।

# Remove IAM roles granted to the MCP Service Account
gcloud projects remove-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$MCP_SERVICE_ACCOUNT" \
  --role="roles/secretmanager.secretAccessor" --quiet
gcloud projects remove-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$MCP_SERVICE_ACCOUNT" \
  --role="roles/dataplex.catalogViewer" --quiet
gcloud projects remove-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$MCP_SERVICE_ACCOUNT" \
  --role="roles/bigquery.dataViewer" --quiet

# Remove IAM roles granted to the Agent Service Account
gcloud projects remove-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$AGENT_SERVICE_ACCOUNT" \
  --role="roles/aiplatform.user" --quiet

# Delete the Service Accounts
gcloud iam service-accounts delete $MCP_SERVICE_ACCOUNT --quiet
gcloud iam service-accounts delete $AGENT_SERVICE_ACCOUNT --quiet

# Delete the Secret Manager entry
gcloud secrets delete dataplex-tools-config --quiet

স্থানীয় কনফিগারেশন সরান

অবশেষে, ক্লাউড শেলে স্থানীয় কনফিগারেশন ফাইল এবং এনভায়রনমেন্ট ভেরিয়েবলগুলো পরিষ্কার করুন।

# Uninstall the Gemini CLI extension (installed in Part 1)
gemini extensions uninstall dataplex

# Remove local repository files and unset variables
cd ~
rm -rf ~/devrel-demos
unset MCP_SERVER_URL
unset MCP_SERVICE_ACCOUNT
unset AGENT_SERVICE_ACCOUNT

৭. অভিনন্দন!

আপনি সফলভাবে একটি এন্ড-টু-এন্ড, গভর্নেন্স-অ্যাওয়্যার জেনএআই এজেন্ট স্থাপন করেছেন।

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

মূল বিষয়বস্তু

  • মেটাডেটার মাধ্যমে ডিটারমিনিস্টিক এআই: কলামের নামের উপর ভিত্তি করে সঠিক টেবিল অনুমান করার জন্য এলএলএম (LLM)-এর উপর নির্ভর করার পরিবর্তে, আপনি ডেটাবেসের জন্য জেনএআই টুলবক্স (GenAI Toolbox for Databases) ব্যবহার করে একটি কঠোর রিজনিং লুপ প্রয়োগ করেছেন। শুধুমাত্র তিনটি ডেটাপ্লেক্স টুল ( search_aspect_types , search_entries , lookup_entry ) স্পষ্টভাবে প্রকাশ করার মাধ্যমে, আপনি মডেলটিকে উত্তর সংশ্লেষণ করার আগে ডেটার সত্যতা যাচাই করতে বাধ্য করেছেন।
  • ডিকাপলড আর্কিটেকচার (MCP): ক্লাউড রান-এ মডেল কনটেক্সট প্রোটোকল (MCP) সার্ভার স্থাপন করার মাধ্যমে, আপনি আপনার ডেটা গভর্নেন্সের নিয়মগুলোকে একটি কেন্দ্রীভূত, প্রমিত API-তে রূপান্তর করেছেন। ফ্রন্টএন্ড এজেন্টের ডেটাবেস লজিক রাখার প্রয়োজন নেই; এটিকে শুধুমাত্র MCP স্ট্যান্ডার্ডের মাধ্যমে যোগাযোগ করতে হয়। এর মানে হলো, আপনি ভবিষ্যতের যেকোনো AI মডেল বা ক্লায়েন্টকে একই নিয়ন্ত্রিত ব্যাকএন্ডে যুক্ত করতে পারবেন।
  • দায়িত্বের বিভাজন: আপনি IAM আইডেন্টিটিগুলোকে পৃথক করে সর্বনিম্ন বিশেষাধিকারের নীতি প্রয়োগ করেছেন। ব্যবহারকারীর কাছের ADK এজেন্টটি মডেল আহ্বান এবং API রাউটিং-এর মধ্যে সীমাবদ্ধ অনুমতি নিয়ে কাজ করে, অন্যদিকে ব্যাকএন্ড MCP সার্ভারটি নিরাপদে Dataplex ক্যাটালগ কোয়েরি এবং BigQuery ডেটা পুনরুদ্ধার পরিচালনা করে।
  • কোড-ফার্স্ট এজেন্ট অর্কেস্ট্রেশন: আপনি গুগল এজেন্ট ডেভেলপমেন্ট কিট (ADK) ব্যবহার করে আপনার পাইথন এজেন্ট লজিককে তাৎক্ষণিকভাবে একটি স্কেলেবল FastAPI ব্যাকএন্ডে আবদ্ধ করেছেন এবং এর বিল্ট-ইন ডেভেলপার UI ব্যবহার করে এজেন্টের অভ্যন্তরীণ টুল এক্সিকিউশনগুলো ভিজ্যুয়ালাইজ ও ডিবাগ করেছেন।

এরপর কী?