ইভেন্ট ব্যবহার করে এজেন্টিক এআই অ্যাপ্লিকেশনের অ্যাসিঙ্ক্রোনাস আমন্ত্রণ

১. ভূমিকা

সংক্ষিপ্ত বিবরণ

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

আপনি যা করবেন

এই ল্যাবে আপনি একটি ZooKeeper এজেন্টিক অ্যাপ্লিকেশন তৈরি করবেন, যেটিতে একটি এআই এজেন্ট থাকবে এবং এটি কাল্পনিক চিড়িয়াখানার প্রাণীদের সম্পর্কে তথ্য প্রদানের জন্য কয়েকটি টুল ব্যবহার করবে।

চিড়িয়াখানার রক্ষকের চিত্র

আপনি ZooKeeper অ্যাপ্লিকেশনটিকে একটি সার্ভিস হিসেবে Cloud Run-এ ডেপ্লয় করবেন, যা হলো একটি সম্পূর্ণ পরিচালিত, সার্ভারবিহীন কম্পিউট প্ল্যাটফর্ম এবং এটি গুগলের পরিকাঠামোতে স্টেটলেস কন্টেইনার চালায়। এরপর আপনি একটি Eventarc ট্রিগার সেট আপ করবেন যা একটি Pub/Sub টপিকে প্রকাশিত মেসেজগুলো অ্যাসিঙ্ক্রোনাসভাবে হ্যান্ডেল করার জন্য সার্ভিস এন্ডপয়েন্টকে কল করবে। আপনি নিশ্চিত করবেন যে ডেপ্লয়মেন্টটি সেরা অনুশীলনগুলো অনুসরণ করে, যার মধ্যে রয়েছে নির্দিষ্ট IAM সার্ভিস অ্যাকাউন্ট ব্যবহার করা, সর্বনিম্ন সুবিধাপ্রাপ্ত অ্যাক্সেস প্রদান করা এবং শুধুমাত্র Eventarc-এর কাছে ZooKeeper অ্যাপ্লিকেশনের এন্ডপয়েন্ট উন্মুক্ত করে সম্ভাব্য আক্রমণের ঝুঁকি কমানো। আপনি এটি Cloud Shell এবং Cloud console-এর সাহায্যে করবেন। আপনি Python-এর জন্য ADK এবং Cloud SDK লাইব্রেরি ব্যবহার করবেন। এর আচরণ পরীক্ষা করার জন্য আপনি gcloud CLI ব্যবহার করবেন।

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

  • আপনার ADK এজেন্টটি Google Cloud Run-এ স্থাপন করুন।
  • Google Cloud Run-এ চলমান ADK এজেন্টের সাথে Eventarc ট্রিগারকে সংযুক্ত করুন।
  • Google Cloud IAM-এর সাহায্যে সর্বনিম্ন বিশেষাধিকার অ্যাক্সেস নীতি ব্যবহার করে Eventarc-এর সাথে আপনার ডেপ্লয়মেন্ট এবং ইন্টিগ্রেশন সুরক্ষিত করুন।
  • পাব/সাব-এ বার্তা প্রকাশ ও গ্রহণ করুন।
  • Google Cloud Run-এ ডেপ্লয় করা আপনার অ্যাপ্লিকেশনটির প্রকাশ্য উপস্থিতি সীমিত করুন।

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

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

অন্যান্য ব্রাউজার ব্যবহারের অভিজ্ঞতা পরীক্ষাগারে বর্ণিত অভিজ্ঞতা থেকে ভিন্ন হতে পারে।

কর্পোরেট বা স্কুল অ্যাকাউন্ট ব্যবহার করে ল্যাবে বর্ণিত কিছু কার্যক্রম সম্পাদনে সীমাবদ্ধতা থাকতে পারে।

২. পরিবেশ সেটআপ

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

আপনার যদি গুগল অ্যাকাউন্ট না থাকে, তাহলে একটি গুগল অ্যাকাউন্ট তৈরি করুন

সেটআপ নির্দেশাবলী

  1. আপনার গুগল অ্যাকাউন্ট ব্যবহার করে গুগল ক্লাউড কনসোলে সাইন-ইন করুন।
  2. 👉 উপরের নেভিগেশন বারে থাকা প্রজেক্ট পিকারটি খুলুন (সেখানে "Select a project" লেখা থাকতে পারে অথবা কোনো বিদ্যমান প্রজেক্টের নাম দেখানো হতে পারে) অথবা Ctrl + O কিবোর্ড শর্টকাট ব্যবহার করে একটি বিদ্যমান প্রজেক্ট বেছে নিন বা একটি নতুন প্রজেক্ট তৈরি করুন। একটি নতুন প্রজেক্ট তৈরি হতে কয়েক সেকেন্ড সময় লাগবে। এটি তৈরি হওয়া পর্যন্ত অপেক্ষা করুন এবং প্রজেক্ট পিকার ব্যবহার করে সেটি বেছে নিন।
  1. 👉 গুগল ক্লাউড কনসোলের উপরে থাকা ক্লাউড শেল আইকনটিতে ক্লিক করুন। (লাল আয়তক্ষেত্র দিয়ে চিহ্নিত): ক্লাউড শেল বোতাম
    জিজ্ঞাসা করা হলে, ক্লাউড শেলকে আপনার অ্যাকাউন্টের ক্রেডেনশিয়াল ব্যবহার করার অনুমোদন দিতে পপ-আপ ডায়ালগ বক্সে **Authorize**-এ ক্লিক করুন।
    অনুমোদন ডায়ালগ
  2. 👉💻 নিশ্চিত করুন যে gcloud CLI আপনার নির্বাচিত (বা তৈরি করা) প্রজেক্টটি ব্যবহার করার জন্য কনফিগার করা আছে। কনফিগার করা প্রজেক্ট আইডি পরীক্ষা করতে নিম্নলিখিত কমান্ডটি চালান:
    gcloud config get-value project
    
    আপনি নিম্নলিখিতের অনুরূপ একটি আউটপুট দেখতে পাবেন বলে আশা করা হচ্ছে:
    Your active configuration is: [cloudshell-19597]
    [PROJECT_ID]
    
    যেখানে [PROJECT_ID] হবে আপনার নির্বাচিত বা তৈরি করা প্রজেক্টের আইডি। 👉💻 যদি আপনি অন্য কোনো মান দেখতে পান, তাহলে gcloud CLI কমান্ডের জন্য আপনার প্রজেক্ট আইডিকে ডিফল্ট প্রজেক্ট আইডি হিসেবে কনফিগার করতে নিম্নলিখিত কমান্ডটি চালান:
    gcloud config set project [YOUR_PROJECT_ID]
    
    উদাহরণস্বরূপ, যদি আপনার প্রজেক্ট আইডি lab-project-id-example-123 হয়, তাহলে কমান্ডটি হবে:
    gcloud config set project lab-project-id-example-123
    
    🤔💻 আপনি যদি আপনার প্রজেক্ট আইডি মনে করতে না পারেন, তাহলে সবচেয়ে সাম্প্রতিকটি থেকে শুরু করে আপনার অ্যাক্সেস থাকা সমস্ত প্রজেক্ট আইডির তালিকা দেখতে নিচের কমান্ডটি ব্যবহার করুন:
    gcloud projects list \
        --format='value(projectId)' \
        --sort-by='~createTime'
    
  1. 👉💻 এনভায়রনমেন্ট ভেরিয়েবলে রিসোর্স প্রোভিশনিং-এর লোকেশন এবং আপনার প্রোজেক্টের আইডি ও নম্বর সেট করুন:
    export LOCATION="us-central1"
    export PROJECT_ID=$(gcloud config get-value project)
    export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
    
  2. 👉💻 এই ল্যাবের জন্য প্রয়োজনীয় গুগল এপিআই (Google APIs) সক্রিয় করুন।
    gcloud services enable \
        aiplatform.googleapis.com \
        eventarc.googleapis.com \
        run.googleapis.com \
        artifactregistry.googleapis.com \
        cloudbuild.googleapis.com \
        pubsub.googleapis.com
    
    ধৈর্য ধরুন, এই কমান্ডটি সম্পন্ন হতে কয়েক মিনিট সময় লাগতে পারে। কমান্ডটি সফলভাবে সম্পন্ন হলে, আপনি এই ধরনের একটি বার্তা দেখতে পাবেন:
    Operation "operations/ab12345c-6e7f-8ghi-jkl9-m0e1d23456f7" finished successfully.
    

৩. ZooKeeper ডেমো অ্যাপ্লিকেশনটি স্থাপন করুন

নিম্নলিখিত ধাপগুলোতে এজেন্টিক এআই অ্যাপ্লিকেশন স্থাপন সহ রিসোর্সসমূহের সংস্থান ও কনফিগার করা হয়।

পাব/সাব রিসোর্স সেট আপ করা

আপনি দুটি পাব/সাব টপিক তৈরি করবেন। একটি থার্ড-পার্টি সার্ভিস আপনার এজেন্টিক এআই অ্যাপ্লিকেশনে ইভেন্ট পাঠানোর জন্য ব্যবহার করবে। অন্যটি অ্যাপ্লিকেশনটি ইভেন্ট প্রসেসিংয়ের ফলাফল প্রকাশ করার জন্য ব্যবহার করবে।

  1. 👉💻 এজেন্টিক এআই অ্যাপ্লিকেশনটি চালু করার জন্য একটি পাব/সাব টপিক তৈরি করুন:
    gcloud pubsub topics create invoke_agent
    export INVOKE_TOPIC_ID=$(gcloud pubsub topics describe invoke_agent --format="value(name)")
    
  2. 👉💻 একটি পাব/সাব টপিক তৈরি করুন যেখানে অ্যাপ্লিকেশনটি তার প্রতিক্রিয়া পোস্ট করতে পারবে:
    gcloud pubsub topics create agent_responses
    export RESPONSE_TOPIC_ID=$(gcloud pubsub topics describe agent_responses --format="value(name)")
    gcloud pubsub subscriptions create agent_responses \
        --topic=agent_responses
    
    এই কমান্ডগুলো তৈরি করা পাব/সাব টপিকের জন্য একটি সাবস্ক্রিপশনও তৈরি করে। ডেমো চালানোর সময় ফলাফল দেখার জন্য এই সাবস্ক্রিপশনটি ব্যবহৃত হবে।

সার্ভিস অ্যাকাউন্ট এবং প্রজেক্ট-স্তরের IAM পলিসি সেট আপ করা

সর্বনিম্ন বিশেষাধিকার অ্যাক্সেস নীতি অনুসরণ করে ক্লাউড রান পরিষেবা এবং ইভেন্টআর্ক ট্রিগারের অ্যাক্সেসের পরিধি ন্যূনতম পর্যায়ে সীমাবদ্ধ করতে আপনি দুটি পরিষেবা অ্যাকাউন্ট তৈরি করবেন। ক্লাউড রান পরিষেবার লগ এবং ট্রেস লেখার, গুগল ভার্টেক্স এআই-তে জেমিনি এলএলএম কল করার এবং একটি পাব/সাব টপিকে ফলাফল পোস্ট করার অনুমতি প্রয়োজন। ইভেন্টআর্ক ট্রিগারের ন্যূনতম অ্যাক্সেসের জন্য ক্লাউড রান জু-কিপার পরিষেবা কল করার এবং পোস্ট করা ইভেন্টগুলি পড়ার জন্য পাব/সাব অ্যাক্সেস করার অনুমতি প্রয়োজন। এই নির্দেশাবলী আপনাকে পাব/সাব সিস্টেম পরিষেবা অনুকরণ করার জন্য প্রয়োজনীয় অনুমতিসহ ট্রিগারের পরিষেবা অ্যাকাউন্টকে গাইড করবে। ইভেন্টআর্ক ট্রিগার রিসোর্স তৈরি করার পরে, আপনি সেই কমান্ডটি চালাবেন যা ট্রিগারের পরিষেবা অ্যাকাউন্টকে ক্লাউড রান পরিষেবা কল করতে সক্ষম করার জন্য roles/run.invoker রোলটি প্রদান করে।

  1. 👉💻 ক্লাউড রান পরিষেবার জন্য একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন:
    gcloud iam service-accounts create zookeeper-cloudrun-sa
    export ZOOKEEPER_SA="zookeeper-cloudrun-sa@${PROJECT_ID}.iam.gserviceaccount.com"
    
  2. 👉💻 সার্ভিস অ্যাকাউন্টটিকে Vertex AI-তে লগ ও ট্রেস লেখার এবং Gemini মডেল ব্যবহার করার অনুমতি দিন:
    gcloud projects add-iam-policy-binding "${PROJECT_ID}" \
         --member="serviceAccount:${ZOOKEEPER_SA}" \
         --role="roles/logging.logWriter" \
         --condition=None
    gcloud projects add-iam-policy-binding "${PROJECT_ID}" \
        --member="serviceAccount:${ZOOKEEPER_SA}" \
        --role="roles/cloudtrace.agent" \
        --condition=None
    gcloud projects add-iam-policy-binding "${PROJECT_ID}" \
        --member="serviceAccount:${ZOOKEEPER_SA}" \
        --role="roles/aiplatform.user" \
        --condition=None
    
  3. 👉💻 সার্ভিস অ্যাকাউন্টটিকে 'agent_responses' টপিকে মেসেজ পোস্ট করার অনুমতি দিন:
    gcloud pubsub topics add-iam-policy-binding agent_responses \
        --member="serviceAccount:${ZOOKEEPER_SA}" \
        --role="roles/pubsub.publisher"
    
  4. 👉💻 ইভেন্টআর্ক ট্রিগারের জন্য একটি সার্ভিস অ্যাকাউন্ট তৈরি করুন:
    gcloud iam service-accounts create zookeeper-trigger-sa
    export TRIGGER_SA="zookeeper-trigger-sa@${PROJECT_ID}.iam.gserviceaccount.com"
    
  5. 👉💻 প্রমাণীকৃত পুশ অনুরোধ পাঠানোর জন্য পাব/সাব সিস্টেম সার্ভিস অ্যাকাউন্টকে অনুমতি দিন:
    gcloud iam service-accounts add-iam-policy-binding "${TRIGGER_SA}" \
           --member="serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com" \
        --role="roles/iam.serviceAccountTokenCreator"
    
    ৮ই এপ্রিল, ২০২১-এর পরে কোনো প্রজেক্ট তৈরি করা হলে এই কমান্ডটি ঐচ্ছিক

ZooKeeper অ্যাপটি Cloud Run-এ স্থাপন করা হচ্ছে

আপনি গিটহাব থেকে ডেমো অ্যাপ্লিকেশনটির কোড ডাউনলোড করবেন এবং ক্লাউড রান-এ কোডটি ডেপ্লয় করবেন।

  1. 👉💻 এজেন্টিক এআই অ্যাপ্লিকেশনটি ডাউনলোড করুন:
    mkdir zoo-keeper-lab && cd zoo-keeper-lab
    git init
    git remote add origin https://github.com/GoogleCloudPlatform/devrel-demos
    git config set core.sparseCheckout true
    echo "ai-ml/agent-labs/adk_invoke_with_pubsub/" >> .git/info/sparse-checkout
    git pull origin main --depth 1
    cd ai-ml/agent-labs/adk_invoke_with_pubsub/
    
    এই কমান্ডগুলো ডাউনলোডের সময় কমাতে ডেমো অ্যাপ থাকা ফোল্ডারটির গিট স্পার্স চেকআউট ব্যবহার করে।
  2. 👉💻 ক্লাউড রান-এ এজেন্টিক এআই অ্যাপ্লিকেশনটি ডেপ্লয় করুন:
    gcloud run deploy zookeeper-agent \
        --region="${LOCATION}" \
        --source="." \
        --no-allow-unauthenticated \
        --quiet \
        --service-account="${ZOOKEEPER_SA}" \
        --set-env-vars="REPLY_TOPIC_ID=${RESPONSE_TOPIC_ID}"
    

ইভেন্টআর্ক ট্রিগার কনফিগার করুন

সমস্ত রিসোর্স (পাব/সাব টপিক, আইএএম সার্ভিস অ্যাকাউন্ট এবং ক্লাউড রান সার্ভিস) প্রস্তুত করার পর, ইভেন্টআর্ক ট্রিগার রিসোর্স সেট আপ করার পালা। আপনি ইভেন্টআর্ক ট্রিগার রিসোর্সটি তৈরি করবেন এবং ট্রিগারের সার্ভিস অ্যাকাউন্টকে ক্লাউড রান সার্ভিস কল করার অনুমতি দেবেন।

  1. 👉💻 ইভেন্টআর্ক ট্রিগার তৈরি করুন:
    gcloud eventarc triggers create invoke-agent \
        --location="${LOCATION}" \
        --destination-run-service="zookeeper-agent" \
        --destination-run-path="/zookeeper" \
        --destination-run-region="${LOCATION}" \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
        --transport-topic="${INVOKE_TOPIC_ID}" \
        --service-account="${TRIGGER_SA}"
    
  2. 👉💻 ক্লাউড রান সার্ভিস চালু করার জন্য ট্রিগারের সার্ভিস অ্যাকাউন্টকে অনুমতি দিন:
    gcloud run services add-iam-policy-binding zookeeper-agent \
        --region="${LOCATION}" \
        --member="serviceAccount:${TRIGGER_SA}" \
        --role="roles/run.invoker"
    

৪. সমাধানটি কীভাবে কাজ করে তা পর্যালোচনা করুন।

এখন আপনি যা ডেপ্লয় করেছেন তা পর্যালোচনা করুন। নিচের ডায়াগ্রামটি সমস্ত রিসোর্স এবং তারা একে অপরের সাথে কীভাবে কাজ করে তা তুলে ধরেছে। আপনি 'invoke_agent' টপিকে একটি মেসেজ পাবলিশ করতে gcloud CLI ব্যবহার করবেন। এটি এমন একটি ইভেন্টকে সিমুলেট করবে যেখানে একটি থার্ড-পার্টি সার্ভিস এজেন্টিক এআই অ্যাপ্লিকেশনটিকে ইনভোক করার জন্য মেসেজিং সার্ভিসে লগ করে।

সমাধান চিত্র

ন্যূনতম বিশেষাধিকার অ্যাক্সেস অনুসরণ করে ডেপ্লয়মেন্টটি সুরক্ষিত করা হয়েছে। ক্লাউড রান পরিষেবা প্রমাণীকরণ প্রয়োগ করে (পূর্ববর্তী বিভাগের ধাপ #৯-এ --no-allow-unauthenticated আর্গুমেন্টটি দেখুন)। শুধুমাত্র `roles/run.invoker` বা অনুরূপ অনুমতিসম্পন্ন আইডেন্টিটিগুলোই পরিষেবাটি কল করতে পারে। এবং এই রোলটি শুধুমাত্র ইভেন্টআর্ক ট্রিগারের পরিষেবা অ্যাকাউন্টকে দেওয়া হয়। একইভাবে, ইভেন্টের অননুমোদিত প্রকাশনা রোধ করতে 'invoke_agent' টপিকের অ্যাক্সেস সীমিত করা হয়েছে। পাব/সাব টপিকে পোস্টিং এড়িয়ে সরাসরি জু-কিপার এজেন্টকে কল করা এখনও সম্ভব। অ্যাপ্লিকেশনটির এন্ডপয়েন্টকে পাবলিক অ্যাক্সেস থেকে কীভাবে আড়াল করা যায় তা জানতে বিভাগ ৬ দেখুন।

ওয়ার্কফ্লোটি চালান

আপনি ZooKeeper-এ স্বাভাবিক ভাষায় একটি প্রশ্ন প্রকাশ করার মাধ্যমে একটি বাহ্যিক ঘটনা অনুকরণ করবেন।

👉💻 পাব/সাব টপিকে মেসেজ পোস্ট করতে নিচের কমান্ডটি ব্যবহার করুন:

gcloud pubsub topics publish invoke_agent \
    --message='{"user_id": "important_app", "prompt": "How many animals are in the zoo?"}'

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

আপনি যাচাই করে দেখতে পারেন যে এজেন্টটি ইভেন্টটি পেয়েছে, অনুরোধটি প্রসেস করেছে এবং 'agent_responses' টপিকে রেসপন্সটি পোস্ট করেছে। রেসপন্সটি পড়ার জন্য, আপনি 'agent_responses' সাবস্ক্রিপশনটি ব্যবহার করবেন (কোডল্যাবটিতে রেসপন্সগুলোর জন্য টপিক এবং সাবস্ক্রিপশন উভয়ের ক্ষেত্রেই একই আইডি ব্যবহার করা হয়েছে)।

👉💻 পাব/সাব সাবস্ক্রিপশন থেকে এজেন্টের প্রতিক্রিয়া পড়ার জন্য নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

gcloud pubsub subscriptions pull agent_responses --auto-ack

আউটপুটে একটি টেবিল প্রিন্ট হবে, যেখানে মেসেজের মেটাডেটা এবং পেলোড থাকবে। এই পেলোডে চিড়িয়াখানায় ৩৩টি প্রজাতি থাকার উত্তরটি উল্লেখ থাকবে। --auto-ack ফ্ল্যাগটি মেসেজটি পুল করার পর স্বয়ংক্রিয়ভাবে তার প্রাপ্তিস্বীকার করে দেয়, ফলে এটি আর পুনরায় ডেলিভার করা হবে না।

এটি কীভাবে কাজ করে

ক্লাউড শেল এডিটর খুলে ~/zoo-keeper-lab ফোল্ডারের অধীনে থাকা ফাইলগুলো দেখে এজেন্টিক এআই অ্যাপ্লিকেশনটির সোর্স কোড দেখুন। এছাড়া আপনি গিটহাবেও সোর্স কোডটি দেখতে পারেন।

  • main.py ফাইলটি একটি সাধারণ FastAPI ওয়েব অ্যাপ্লিকেশন বাস্তবায়ন করে, যেখানে Eventarc ইভেন্টগুলো প্রসেস করার জন্য একটিমাত্র হ্যান্ডলার রয়েছে।
  • processor.py ইভেন্টের মেসেজটি পার্স করে ইউজার আইডি এবং রিকোয়েস্টটি সংগ্রহ করে। এরপর এটি ADK রানারে একটি নতুন সেশন তৈরি করে এবং রিকোয়েস্টটি প্রসেস করার জন্য Zookeeper এজেন্টকে কল করে। এজেন্ট থেকে প্রাপ্ত রেসপন্সটি 'agent_responses' পাব/সাব টপিকে পোস্ট করা হয়।
  • zookeeper_agent সাবফোল্ডারটিতে ADK এজেন্টের সোর্স কোড থাকে। adk CLI ব্যবহার করে এজেন্টের সাথে যোগাযোগ করার জন্য, আপনি অ্যাপ্লিকেশনটির রুট ফোল্ডার থেকে adk run zookeeper_agent কমান্ডটি চালাতে পারেন।

কীভাবে সমস্যা সমাধান করবেন

পূর্ববর্তী কোনো কমান্ড ব্যর্থ হলে, ত্রুটির বার্তাটি মনোযোগ সহকারে পড়ুন। ক্লাউড রান-এ ডেপ্লয়মেন্ট ব্যর্থ হলে, প্রথম পদক্ষেপ হবে প্রক্রিয়াটির কোন পর্যায়ে ব্যর্থতাটি ঘটেছে তা নির্ধারণ করা।

  • যদি 'gcloud run deploy...' কমান্ডের আউটপুটে বিল্ড ব্যর্থ হওয়ার কথা জানানো হয়, তাহলে আউটপুটে থাকা বিল্ড লগস URL-টি দেখুন এবং সেটি একটি আলাদা উইন্ডোতে খুলুন।
  • যদি আউটপুটে "service failed to start" বা এই জাতীয় কিছু লেখা থাকে, তার মানে হলো সার্ভিসটি ডেপ্লয় হওয়ার পর এক্সিকিউশন হেলথচেক-এ ব্যর্থ হয়েছে। এই ক্ষেত্রে লগস এক্সপ্লোরার (Logs Explorer) খুলুন অথবা gcloud CLI কমান্ডের জন্য নিচের অনুচ্ছেদটি দেখুন। ব্যর্থতার মূল কারণ খুঁজে বের করতে লগগুলো পড়ুন।

যদি আপনি পাব/সাব-এ একটি বার্তা পোস্ট করেন কিন্তু এজেন্ট সাড়া না দেয় অথবা উত্তরটি অদ্ভুত মনে হয়, তাহলে কী হবে?

👉💻 সাম্প্রতিক এক্সিকিউশন থেকে পোস্ট করা অ্যাপ্লিকেশন লগগুলো পড়তে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

gcloud logging read \
    'resource.type = "cloud_run_revision" AND \
     resource.labels.service_name = "zookeeper-agent" AND \
     resource.labels.location = "us-central1"'

লগগুলি কার্যসম্পাদন ট্র্যাক করে এবং ভুল বা পার্স-অযোগ্য মেসেজ পেলোড, জেমিনি মডেল থেকে অবৈধ প্রতিক্রিয়া, অবৈধ এনভায়রনমেন্ট সেটিংস এবং অন্যান্য সম্ভাব্য সমস্যার মতো ত্রুটিগুলি রিপোর্ট করে।

৫. ডেপ্লয়মেন্টের নিরাপত্তা জোরদার করুন

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

👉💻 ইভেন্টআর্ক ট্রিগার সহ শুধুমাত্র সীমিত কিছু উৎস থেকে সার্ভিসে কল করা সীমাবদ্ধ করে এই আক্রমণের পথটি বন্ধ করুন:

gcloud run services update zookeeper-agent --region=${LOCATION} --ingress=internal

এখন, আপনি যদি আপনার লোকাল মেশিন থেকে সার্ভিসটির ইউআরএল কল করার চেষ্টা করেন, তাহলে আপনি একটি "404 Page not found" এরর পাবেন।

👉💻 সার্ভিস এন্ডপয়েন্টে অনুরোধ পাঠাতে curl ব্যবহার করুন:

URL=$(gcloud run services describe zookeeper-agent --region=${LOCATION} --format='value(status.url)')
curl -X POST -d '{}' "${URL}/zookeeper"

আপনি নিম্নলিখিতের অনুরূপ একটি আউটপুট দেখতে পাবেন:

<html><head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>404 Page not found</title>
</head>
<body text=#000000 bgcolor=#ffffff>
<h1>Error: Page not found</h1>
<h2>The requested URL was not found on this server.</h2>
<h2></h2>
</body></html>

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

৬. সারসংক্ষেপ

অভিনন্দন! আপনি সফলভাবে এমন একটি পরিবেশ তৈরি করেছেন যা আগত ইভেন্টের মাধ্যমে আপনার এজেন্টিক এআই অ্যাপ্লিকেশনটিকে অ্যাসিঙ্ক্রোনাসভাবে চালু করবে।

পরিষ্কার করা

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

এটি করার দুটি পদ্ধতি আছে:

পদ্ধতি ১ : প্রকল্পটি বন্ধ করা

প্রজেক্টটি বন্ধ (মুছে) করলে এর সমস্ত রিসোর্স ও ডেটা মুক্ত হয়ে যায় এবং বিলিং অ্যাকাউন্টটি বিচ্ছিন্ন হয়ে যায়। এই পদ্ধতি ব্যবহার করলে এই কোডল্যাবের জন্য ব্যবহৃত কোনো রিসোর্স বা ডেটার জন্য আর কোনো চার্জ আরোপ করা হবে না। প্রজেক্টটি বন্ধ করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

gcloud projects delete $(gcloud config get-value project) --quiet

পদ্ধতি ২ : প্রজেক্ট থেকে রিসোর্স মুছে ফেলা

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

gcloud run services delete zookeeper-agent --region=${LOCATION}

ইভেন্টার্ক ট্রিগার ডেফিনিশন এবং পাব/সাব টপিকগুলোর জন্য কোনো ম্যানেজমেন্ট খরচ লাগে না (আরও বিস্তারিত জানতে ইভেন্টার্ক প্রাইসিং এবং পাব/সাব প্রাইসিং দেখুন)।

প্রকল্পটি বন্ধ করার বিষয়ে আরও জানুন।

এরপর কী?