মডেল আর্মার সহ এজেন্ট রানটাইমে এজেন্ট গেটওয়ের প্রবেশ

১. ভূমিকা

এই কোডল্যাবটি এজেন্ট রানটাইমে হোস্ট করা এআই এজেন্টদের জন্য এজেন্ট গেটওয়ে ইনগ্রেস গভর্নেন্স নিয়ে আলোচনা করে।

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

আপনি যা তৈরি করেন

  • ইনগ্রেস ( ক্লায়েন্ট-টু-এজেন্ট ) মোডে এজেন্ট গেটওয়ে
  • মডেল আর্মার অনুমোদন সম্প্রসারণ
  • এজেন্ট পরিচয় সহ এজেন্ট রানটাইম ADK এজেন্ট
  • এজেন্ট কর্তৃক MCP ব্যবহার করে ক্লাউড স্টোরেজ ফাইলের ডেটা কোয়েরি করা হয়েছে।
  • এলএলএম প্রশ্ন ও উত্তর বাছাইয়ের জন্য মডেল আর্মার টেমপ্লেট
  • সংবেদনশীল ডেটা সুরক্ষার জন্য ডেটার পরিচয় গোপন করার টেমপ্লেট

চিত্র ১

চিত্র ১. কোডল্যাব আর্কিটেকচার

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

  • এজেন্টের আগত ট্র্যাফিক স্ক্রিনিং করার জন্য কীভাবে এজেন্ট গেটওয়ে স্থাপন করবেন
  • মডেল আর্মার অনুমোদন এক্সটেনশন এবং ডেলিগেশন কীভাবে কনফিগার করবেন
  • কাস্টম মডেল আর্মার টেমপ্লেট কীভাবে তৈরি এবং স্থাপন করবেন
  • কাস্টম সংবেদনশীল ডেটা সুরক্ষা টেমপ্লেট কীভাবে তৈরি এবং স্থাপন করবেন
  • এলএলএম স্ক্রিনিং নীতিগুলি কীভাবে পরীক্ষা ও যাচাই করা যায়

আপনার যা প্রয়োজন

  • বিলিং সক্ষম একটি গুগল ক্লাউড প্রজেক্ট
  • নেটওয়ার্কিং পরিষেবা, BigQuery ডেটাসেট এবং এজেন্ট প্ল্যাটফর্ম রিসোর্স সরবরাহ করার জন্য IAM অনুমতি
  • Google Cloud CLI ( gcloud কম্পোনেন্ট) ইনস্টল করা একটি POSIX-সামঞ্জস্যপূর্ণ শেল ( bash বা zsh )।
  • কমান্ড-লাইন টুলস: git , curl , jq (JSON প্রসেসর), Python 3, এবং uv (Python প্যাকেজ ম্যানেজার)

২. ধারণা

ট্র্যাফিক দিকনির্দেশনা এবং গেটওয়ে ভূমিকা

এজেন্ট গেটওয়ে একটি এজেন্ট-সচেতন নেটওয়ার্ক প্রক্সি হিসেবে কাজ করে, কিন্তু ট্র্যাফিকের দিকের ওপর নির্ভর করে এর পরিচালনগত ভূমিকা পরিবর্তিত হয়:

  • এজেন্ট-টু-এনিহোয়্যার (ইগ্রেস) মোড: এটি একটি আউটবাউন্ড প্রক্সি হিসেবে কাজ করে। যখন কোনো এজেন্ট বাহ্যিক ডাটাবেস টুল, তৃতীয় পক্ষের এমসিপি সার্ভার বা এপিআই কল করে, তখন ইগ্রেস গেটওয়ে সার্ভিস ডিসকভারি, রাউটিং, মিউচুয়াল টিএলএস ( mTLS ), OAuth ক্রেডেনশিয়ালের ডায়নামিক ইনজেকশন এবং এন্ডপয়েন্টগুলোতে অ্যাক্সেস কন্ট্রোল পরিচালনা করে।
  • ক্লায়েন্ট-টু-এজেন্ট (ইনগ্রেস) মোড: এটি একটি ফ্রন্টএন্ড নিরাপত্তা গেটওয়ে হিসেবে কাজ করে। এর প্রাথমিক উদ্দেশ্য হলো এজেন্টিক কোড বা এআই মডেলে পৌঁছানোর আগেই আগত স্বাভাবিক ভাষার প্রম্পটগুলোকে আটক ও পরিমার্জন করে এজেন্ট এক্সিকিউশন রানটাইমের প্রবেশপথকে সুরক্ষিত করা।

এজেন্ট রানটাইমে প্রবেশের পথ

এজেন্ট রানটাইমে হোস্ট করা কোনো এজেন্টকে লক্ষ্য করে পাঠানো ক্লায়েন্টের অনুরোধগুলো aiplatform.googleapis.com এপিআই এন্ডপয়েন্টের উদ্দেশ্যে প্রেরিত হয়।

POST https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}:query

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

এই গুগল-পরিচালিত ইনগ্রেস পাথ সুরক্ষিত করতে, এজেন্ট গেটওয়ে এপিআই সার্ভিং ইনফ্রাস্ট্রাকচার লেয়ারে সরাসরি গুগল ফ্রন্ট এন্ড ( GFE ) -এর সাথে ইন্টিগ্রেট করে। এজেন্ট রানটাইমে একটি ম্যানেজড এজেন্ট ডেপ্লয় করার সময়, গুগল নেটওয়ার্ক এজে আগত ক্লায়েন্ট রিকোয়েস্টের সাথে ইনগ্রেস গেটওয়ে অথরাইজেশন পলিসিকে নেটিভভাবে বাইন্ড করে।

চিত্র ২

চিত্র ২. এজেন্ট গেটওয়ে থেকে এজেন্ট রানটাইম পর্যন্ত ইনগ্রেস গভর্নেন্স

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

মডেল আর্মার দিয়ে ইনলাইন থ্রেট স্যানিটাইজেশন

কলারের ক্রেডেনশিয়াল মূল্যায়ন করা এবং IAM অ্যাক্সেস কন্ট্রোল ( roles/aiplatform.user ) প্রয়োগ করার কাজটি aiplatform API হোস্টিং টিয়ার দ্বারা স্বাভাবিকভাবেই পরিচালিত হয়। ইনগ্রেস গেটওয়ে নিজে আইডেন্টিটি অথরাইজেশন করে না, বরং এটি CONTENT_AUTHZ প্রোফাইল দিয়ে কনফিগার করা অথরাইজেশন এক্সটেনশন ব্যবহার করে কন্টেন্ট সুরক্ষার উপর মনোযোগ দেয়। গেটওয়েটি একটি ইনলাইন পলিসি এনফোর্সমেন্ট পয়েন্ট হিসেবে কাজ করে, যা AI এজেন্ট রিজনিং লুপ বা অন্তর্নিহিত LLM-এ পৌঁছানোর আগেই স্বাভাবিক ভাষার প্রম্পটগুলোকে ট্রানজিটে থাকাকালীন ইন্টারসেপ্ট করে।

যখন ফ্রন্টএন্ড সার্ভিসে কোনো ইনকামিং ইউজার প্রম্পট আসে, তখন গেটওয়ে আঞ্চলিক মডেল আর্মার অথরাইজেশন এক্সটেনশন সার্ভিসে একটি ext_proc (এক্সটার্নাল প্রসেসিং) কলআউট শুরু করে, যা কলটিকে মডেল আর্মার ডেটাপ্লেনে স্ট্রিম করে। মডেল আর্মার একটি ন্যাচারাল-ল্যাঙ্গুয়েজ ফায়ারওয়াল হিসেবে কাজ করে, যা নিরাপত্তা ও সুরক্ষার ঝুঁকি স্ক্যান করার জন্য সক্রিয় টেমপ্লেটগুলোর সাথে টেক্সটটি মূল্যায়ন করে।

  • পরোক্ষ প্রম্পট ইনজেকশন এবং জেলব্রেকের প্রচেষ্টা
  • ক্ষতিকর ইউআরএল, আপত্তিকর ভাষা, বা অনিরাপদ বিষয়বস্তু
  • ব্যক্তিগত শনাক্তকরণ তথ্য ( PII ) এবং সংবেদনশীল ডেটা ফাঁস

টেমপ্লেটে সেনসিটিভ ডেটা প্রোটেকশন ( SDP ) ফিল্টার অন্তর্ভুক্ত থাকলে, মডেল আর্মার ক্লাউড এসডিপি সার্ভিসে একটি অতিরিক্ত gRPC কল করে। ক্লাউড এসডিপি নির্দিষ্ট টেমপ্লেট ব্যবহার করে পেলোডটি পরীক্ষা করে, অনুরোধ অনুযায়ী পরিচয় গোপন বা গোপন করার কাজ সম্পন্ন করে এবং পরিমার্জিত ফলাফলটি নিরাপদে ফরোয়ার্ড করার জন্য ঊর্ধ্বতন কর্তৃপক্ষের কাছে ফেরত পাঠায়।

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

এর মাধ্যমেই ধারণা পর্ব শেষ হলো... এরপর সেটআপ অংশে যাওয়া যাক।

৩. সেটআপ

প্রয়োজনীয় IAM ভূমিকা

এই কোডল্যাবে রিসোর্সগুলো তৈরি করার জন্য নিম্নলিখিত ভূমিকাগুলো প্রয়োজন:

বিভাগ

প্রয়োজনীয় IAM ভূমিকা (ID)

বর্ণনা

এপিআই ব্যবস্থাপনা

roles/serviceusage.serviceUsageAdmin

গুগল ক্লাউড এপিআই পরিষেবাগুলি সক্রিয় করুন

নেটওয়ার্কিং এবং গেটওয়ে

roles/networkservices.admin

প্রোভিশন এজেন্ট গেটওয়ে

পরিষেবা সম্প্রসারণ

roles/serviceextensions.admin

রাউটিং এক্সটেনশন কনফিগার করুন

নেটওয়ার্ক নিরাপত্তা

roles/networksecurity.admin

অনুমোদন নীতিগুলি স্থাপন করুন

সংবেদনশীল তথ্য সুরক্ষা

roles/dlp.admin

এসডিপি পরিদর্শন পরিচালনা করুন এবং টেমপ্লেটগুলি পরিচয়হীন করুন

মডেল আর্মার

roles/modelarmor.admin

নিরাপত্তা টেমপ্লেট তৈরি এবং পরিচালনা করুন

এজেন্ট প্ল্যাটফর্ম

roles/aiplatform.admin

এজেন্ট রানটাইম ওয়ার্কলোড স্থাপন করুন

ক্লাউড স্টোরেজ

roles/storage.admin

ডেপ্লয়মেন্ট এবং গ্রাহক ডেটা বাকেটগুলি পরিচালনা করুন

আইএএম প্রশাসন

roles/resourcemanager.projectIamAdmin

এজেন্ট আইডেন্টিটির জন্য প্রজেক্ট-স্তরের অনুমতি সংযুক্ত করুন

লগ এবং নিরীক্ষা

roles/logging.viewer

ট্রেস এবং অডিট লগ পরিদর্শন করুন

বিকল্পভাবে, roles/admin মতো একটি ব্যাপক মৌলিক রোল অথবা roles/owner মতো লিগ্যাসি রোল ব্যবহার করুন।

আপনার প্রজেক্ট অ্যাক্সেস করুন

এই কোডল্যাবটিতে একটিমাত্র গুগল ক্লাউড প্রজেক্ট ব্যবহার করা হয়েছে। কনফিগারেশন ধাপগুলোতে gcloud CLI এবং লিনাক্স শেল কমান্ড ব্যবহার করা হয়।

আপনার গুগল ক্লাউড প্রজেক্টের কমান্ড লাইন অ্যাক্সেস করে শুরু করুন:

আপনার প্রজেক্ট আইডি সেট করুন

gcloud config set project SET_YOUR_PROJECT_ID_HERE

সেশন প্রমাণীকরণ করুন

# login to gcloud cli
gcloud auth login
# login for gcloud api
gcloud auth application-default login

শেল এনভায়রনমেন্ট ভেরিয়েবল সেট করুন

# set custom var for slug (eg, "foo") and region preference
export SLUG="foo"
export REGION="us-central1"
echo ${SLUG}
echo ${REGION}
# create project vars (automatic)
export PROJ_ID=$(gcloud config list --format="value(core.project)")
export PROJ_NO=$(gcloud projects describe ${PROJ_ID} --format="value(projectNumber)")
export ORG_ID=$(gcloud projects get-ancestors ${PROJ_ID} --format="value(id)" | tail -n 1)
export USER_IDENTITY=$(gcloud config get-value account)
echo ${PROJ_ID}
echo ${PROJ_NO}
echo ${ORG_ID}
echo ${USER_IDENTITY}
# create resource vars (automatic)
export AGW_NAME="agw-${SLUG}-${REGION}-cta"
export AGW_URI="projects/${PROJ_ID}/locations/${REGION}/agentGateways/${AGW_NAME}"
export RE_AGENT_NAME="agent-crm"
export RE_AGENT_ID_SET="principalSet://agents.global.org-${ORG_ID}.system.id.goog/attribute.platformContainer/aiplatform/projects/${PROJ_NO}"
export STAGING_BUCKET="agent-staging-${PROJ_NO}"
export DATA_BUCKET="customer-data-${PROJ_NO}"
export MCP_URL="https://storage.mtls.googleapis.com/storage/mcp"
echo ${AGW_NAME}
echo ${AGW_URI}
echo ${RE_AGENT_NAME}
echo ${RE_AGENT_ID_SET}
echo ${STAGING_BUCKET}
echo ${DATA_BUCKET}
echo ${MCP_URL}
# create local dir for config files
mkdir -p cfg

যদি গুগল ক্লাউড এসডিকে-র একটি সেলফ-ম্যানেজড ইনস্টল (অর্থাৎ, ক্লাউড শেল-এর বাইরে) চালান, তাহলে কম্পোনেন্টগুলিকে সর্বশেষ সংস্করণে আপডেট করুন।

# update gcloud cli
gcloud components update

এপিআই পরিষেবাগুলি সক্ষম করুন

# enable google apis (agent platform bundle, part 1)
gcloud services enable \
  agentregistry.googleapis.com \
  aiplatform.googleapis.com \
  apphub.googleapis.com \
  apptopology.googleapis.com \
  cloudapiregistry.googleapis.com \
  cloudtrace.googleapis.com \
  compute.googleapis.com \
  dataform.googleapis.com \
  iam.googleapis.com \
  iamconnectors.googleapis.com \
  iap.googleapis.com \
  logging.googleapis.com \
  modelarmor.googleapis.com \
  monitoring.googleapis.com \
  networksecurity.googleapis.com \
  networkservices.googleapis.com \
  notebooks.googleapis.com \
  observability.googleapis.com
# enable google apis (agent platform bundle, part 2)
gcloud services enable \
  securitycenter.googleapis.com \
  saasservicemgmt.googleapis.com \
  storage.googleapis.com \
  telemetry.googleapis.com \
  texttospeech.googleapis.com
# enable google apis (all the rest)
gcloud services enable \
  dlp.googleapis.com

এর মাধ্যমেই সেটআপ পর্ব শেষ হলো... এরপর গেটওয়ে অংশে যাওয়া যাক।

৪. গেটওয়ে

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

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

গেটওয়ে তৈরি করুন

# create agent gateway config file
cat > cfg/${AGW_NAME}.yaml <<EOF
name: ${AGW_NAME}
protocols:
  - MCP
googleManaged:
  governedAccessPath: CLIENT_TO_AGENT
EOF
# import agent gateway config file (create gateway)
gcloud network-services agent-gateways import ${AGW_NAME} \
  --source="cfg/${AGW_NAME}.yaml" \
  --location=${REGION}

গেটওয়ে যাচাই করুন

# list agent gateways (in region)
gcloud network-services agent-gateways list --location=${REGION}
# show agent gateway details (verify deployment state)
gcloud network-services agent-gateways describe ${AGW_NAME} --location=${REGION}

এর মাধ্যমেই প্রবেশদ্বার পর্ব শেষ হলো... এরপর মডেল আর্মার বিভাগে যাওয়া যাক।

৫. মডেল বর্ম

এসডিপি টেমপ্লেট

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

পরিদর্শন টেমপ্লেট তৈরি করুন

পরিদর্শন টেমপ্লেটটি ডেটার মধ্যে থাকা সংবেদনশীল তথ্য ( US_SOCIAL_SECURITY_NUMBER ) শনাক্ত করে।

# create inspect template
curl -fsS -X POST "https://dlp.googleapis.com/v2/projects/${PROJ_ID}/locations/${REGION}/inspectTemplates" \
  -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
  -H "Content-Type: application/json" -H "x-goog-user-project: ${PROJ_ID}" \
  -d @- << EOF
{
  "templateId": "agw-ssn-inspect-template",
  "inspectTemplate": {
    "displayName": "ssn inspect template",
    "inspectConfig": {
      "infoTypes": [
        { "name": "US_SOCIAL_SECURITY_NUMBER" }
      ],
      "minLikelihood": "POSSIBLE"
    }
  }
}
EOF

পরিচয় গোপন করার টেমপ্লেট তৈরি করুন

ডি-আইডেন্টিফাই টেমপ্লেটটি ইন্সপেক্ট টেমপ্লেট দ্বারা প্রাপ্ত SSN-গুলোর উপর যে রূপান্তর প্রয়োগ করা হবে তা নির্দিষ্ট করে। এক্ষেত্রে, রূপান্তরটি হলো SSN-কে ইনফো টাইপ দ্বারা প্রতিস্থাপন করা।

# create de-identify template
curl -fsS -X POST "https://dlp.googleapis.com/v2/projects/${PROJ_ID}/locations/${REGION}/deidentifyTemplates" \
  -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
  -H "Content-Type: application/json" -H "x-goog-user-project: ${PROJ_ID}" \
  -d @- << EOF
{
  "templateId": "agw-ssn-redaction-template",
  "deidentifyTemplate": {
    "displayName": "SSN Redaction Template",
    "deidentifyConfig": {
      "infoTypeTransformations": {
        "transformations": [{
          "primitiveTransformation": { "replaceWithInfoTypeConfig": {} }
        }]
      }
    }
  }
}
EOF

এসডিপি টেমপ্লেট যাচাই করুন

# get (describe) inspect template
curl -fsS -X GET "https://dlp.googleapis.com/v2/projects/${PROJ_ID}/locations/${REGION}/inspectTemplates" \
  -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
  -H "Content-Type: application/json" -H "x-goog-user-project: ${PROJ_ID}" | jq
# get (describe) de-identify template
curl -fsS -X GET "https://dlp.googleapis.com/v2/projects/${PROJ_ID}/locations/${REGION}/deidentifyTemplates" \
  -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
  -H "Content-Type: application/json" -H "x-goog-user-project: ${PROJ_ID}" | jq

মডেল আর্মার টেমপ্লেট

মডেল আর্মার এপিআই-এর ডিফল্ট এন্ডপয়েন্ট হলো গ্লোবাল ( modelarmor.googleapis.com )। তবে, টেমপ্লেট এবং ইভ্যালুয়েশন ইঞ্জিনের জন্য মডেল আর্মার রিসোর্সগুলো নির্দিষ্ট ভৌগোলিক অঞ্চলের জন্য স্থানীয়করণ করা হয়েছে। মডেল আর্মারের জন্য গুগল ক্লাউড রিজিওনাল এন্ডপয়েন্ট প্রক্সি (REP), বা আঞ্চলিক এপিআই এন্ডপয়েন্ট হলো https://modelarmor.${LOCATION}.rep.googleapis.com/ ।

ডিফল্টরূপে, gcloud model-armor ... চালানোর সময়, CLI স্ট্যান্ডার্ড গ্লোবাল এন্ডপয়েন্টে ( https://modelarmor.googleapis.com/ ) API অনুরোধ পাঠানোর চেষ্টা করে। Model Armor-এর জন্য সমস্ত SDK/CLI HTTP অনুরোধ সরাসরি আঞ্চলিক rep.googleapis.com API টিয়ারে পুনঃনির্দেশিত করতে একটি API এন্ডপয়েন্ট ওভাররাইড ব্যবহার করা হয়, যেখানে সেই অবস্থান-ভিত্তিক টেমপ্লেটগুলি আসলে তৈরি, সংরক্ষণ এবং কোয়েরি করা হয়।

এপিআই ওভাররাইড সেট করুন

# set api endpoint override per location
gcloud config set api_endpoint_overrides/modelarmor "https://modelarmor.${REGION}.rep.googleapis.com/"

এপিআই ওভাররাইড যাচাই করুন

# view api overrides on active gcloud config
gcloud config list api_endpoint_overrides/

অনুরোধ ফিল্টার টেমপ্লেট তৈরি করুন

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

# create model armor template (request)
gcloud beta model-armor templates create ${AGW_NAME}-modar-req-template \
  --project=${PROJ_ID} \
  --location=${REGION} \
  --rai-settings-filters='[
    { "filterType": "HATE_SPEECH", "confidenceLevel": "MEDIUM_AND_ABOVE" },
    { "filterType": "HARASSMENT", "confidenceLevel": "MEDIUM_AND_ABOVE" },
    { "filterType": "SEXUALLY_EXPLICIT", "confidenceLevel": "MEDIUM_AND_ABOVE" }
  ]' \
  --pi-and-jailbreak-filter-settings-enforcement=enabled \
  --pi-and-jailbreak-filter-settings-confidence-level=medium-and-above \
  --template-metadata-enforcement-type=INSPECT_AND_BLOCK \
  --malicious-uri-filter-settings-enforcement=enabled \
  --template-metadata-custom-llm-response-safety-error-code=798 \
  --template-metadata-custom-llm-response-safety-error-message="ahoy! model response blocked by content filter :(" \
  --template-metadata-custom-prompt-safety-error-code=799 \
  --template-metadata-custom-prompt-safety-error-message="ahoy! the request was blocked by ye content filter... so rephrase the prompt and try again!" \
  --template-metadata-ignore-partial-invocation-failures \
  --template-metadata-log-operations \
  --template-metadata-log-sanitize-operations

প্রতিক্রিয়া ফিল্টার টেমপ্লেট তৈরি করুন

রিকোয়েস্ট ফিল্টার টেমপ্লেটের মতো একই কন্টেন্ট ব্লক করার জন্য একটি রেসপন্স ফিল্টার টেমপ্লেট তৈরি করুন। এজেন্ট থেকে ক্লায়েন্টের কাছে ফিরে আসা মেসেজগুলোর জন্য SSN-কে ডি-আইডেন্টিফাই করতে রেসপন্স লেগে DLP কনফিগার করা থাকে।

# create model armor template (response)
gcloud beta model-armor templates create ${AGW_NAME}-modar-resp-template \
  --project=${PROJ_ID} \
  --location=${REGION} \
  --rai-settings-filters='[
      { "filterType": "HATE_SPEECH", "confidenceLevel": "MEDIUM_AND_ABOVE" },
      { "filterType": "HARASSMENT", "confidenceLevel": "MEDIUM_AND_ABOVE" },
      { "filterType": "SEXUALLY_EXPLICIT", "confidenceLevel": "MEDIUM_AND_ABOVE" }
  ]' \
  --malicious-uri-filter-settings-enforcement=enabled \
  --advanced-config-inspect-template=projects/${PROJ_ID}/locations/${REGION}/inspectTemplates/agw-ssn-inspect-template \
  --advanced-config-deidentify-template=projects/${PROJ_ID}/locations/${REGION}/deidentifyTemplates/agw-ssn-redaction-template \
  --template-metadata-enforcement-type=INSPECT_AND_BLOCK \
  --template-metadata-custom-llm-response-safety-error-code=798 \
  --template-metadata-custom-llm-response-safety-error-message="ahoy! model response blocked by content filter :(" \
  --template-metadata-custom-prompt-safety-error-code=799 \
  --template-metadata-custom-prompt-safety-error-message="ahoy! the request was blocked by ye content filter... so rephrase the prompt and try again!" \
  --template-metadata-ignore-partial-invocation-failures \
  --template-metadata-log-operations \
  --template-metadata-log-sanitize-operations

মডেল আর্মার টেমপ্লেট যাচাই করুন

# list model armor templates
gcloud model-armor templates list --location=${REGION}
# show request filter template details
gcloud model-armor templates describe ${AGW_NAME}-modar-req-template --location=${REGION}
# show response filter template details
gcloud model-armor templates describe ${AGW_NAME}-modar-resp-template --location=${REGION}

IAM অনুমতি

মডেল আর্মার সেনসিটিভ ডেটা প্রোটেকশন ( SDP ) সার্ভিসটি চালু করার জন্য এপিআই কল করে। এসডিপি ব্যবহার করে টেমপ্লেট পরিদর্শন এবং ডি-আইডেন্টিফাই করার জন্য মডেল আর্মার সার্ভিস আইডেন্টিটিকে আইএএম পারমিশন দিন।

সংবেদনশীল ডেটা সুরক্ষার জন্য IAM নীতি সংযুক্ত করুন

# grant dlp (sdp) user role to the model armor service identity
gcloud projects add-iam-policy-binding ${PROJ_ID} \
  --member="serviceAccount:service-${PROJ_NO}@gcp-sa-modelarmor.iam.gserviceaccount.com" \
  --role="roles/dlp.user"

IAM অনুমতি যাচাই করুন

# show iam policy for all dlp (sdp) roles on project
gcloud projects get-iam-policy ${PROJ_ID} \
  --flatten="bindings[].members" \
  --filter="bindings.role:roles/dlp" \
  --format="table(bindings.role:label=ROLE, bindings.members:label=PRINCIPAL_IDENTITY)"

এর মাধ্যমেই মডেল আর্মার পর্ব শেষ হলো... এরপর অনুমোদন অংশে যাওয়া যাক।

৬. অনুমোদন

IAM অনুমতি

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

  • roles/modelarmor.calloutUser & roles/serviceusage.serviceUsageConsumer : ইনলাইন ইন্সপেকশন কলআউটের অনুমতি দেওয়ার জন্য গেটওয়ে প্রোজেক্টে এটি মঞ্জুর করা হয়েছে।
  • roles/modelarmor.user : মডেল আর্মার টেমপ্লেটগুলো অ্যাক্সেস এবং মূল্যায়ন করার অনুমতি দেওয়ার জন্য টেমপ্লেট প্রকল্পে এই অনুমোদনটি দেওয়া হয়েছে।

মডেল আর্মারের জন্য IAM নীতি সংযুক্ত করুন

# grant model armor callout user role to dep (service extension) service agent
gcloud projects add-iam-policy-binding ${PROJ_ID} \
  --member="serviceAccount:service-${PROJ_NO}@gcp-sa-dep.iam.gserviceaccount.com" \
  --role="roles/modelarmor.calloutUser"

# grant service usage consumer role to dep (service extension) service agent
gcloud projects add-iam-policy-binding ${PROJ_ID} \
  --member="serviceAccount:service-${PROJ_NO}@gcp-sa-dep.iam.gserviceaccount.com" \
  --role="roles/serviceusage.serviceUsageConsumer"

# grant model armor user role to dep (service extension) service agent
gcloud projects add-iam-policy-binding ${PROJ_ID} \
  --member="serviceAccount:service-${PROJ_NO}@gcp-sa-dep.iam.gserviceaccount.com" \
  --role="roles/modelarmor.user"

IAM অনুমতি যাচাই করুন

# show iam policy on project for dep (service extension) service agent
gcloud projects get-iam-policy ${PROJ_ID} \
  --flatten="bindings[].members" \
  --filter="bindings.members:serviceAccount:service-${PROJ_NO}@gcp-sa-dep.iam.gserviceaccount.com" \
  --format="table(bindings.members:label=PRINCIPAL_IDENTITY, bindings.role:label=ROLE)"

অনুমোদন সম্প্রসারণ

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

অনুমোদন এক্সটেনশন তৈরি করুন

# create authz extension config file (enforced mode)
cat > cfg/${AGW_NAME}-svc-ext-authz-modar.yaml <<EOF
name: ${AGW_NAME}-svc-ext-authz-modar
service: modelarmor.${REGION}.rep.googleapis.com
metadata:
  model_armor_settings: '[
    {
      "request_template_id": "projects/${PROJ_ID}/locations/${REGION}/templates/${AGW_NAME}-modar-req-template",
      "response_template_id": "projects/${PROJ_ID}/locations/${REGION}/templates/${AGW_NAME}-modar-resp-template"
    }
  ]'
failOpen: true
timeout: 5s
EOF

প্রমাণীকরণ এক্সটেনশন আমদানি করুন

# import authz extension file
gcloud service-extensions authz-extensions import ${AGW_NAME}-svc-ext-authz-modar \
  --source=cfg/${AGW_NAME}-svc-ext-authz-modar.yaml \
  --location=${REGION}

প্রমাণীকরণ এক্সটেনশন যাচাই করুন

# list authz extensions
gcloud service-extensions authz-extensions list --location=${REGION}
# show authz extension details
gcloud service-extensions authz-extensions describe ${AGW_NAME}-svc-ext-authz-modar \
  --location=${REGION}

অনুমোদন নীতি

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

অনুমোদন নীতি তৈরি করুন

# create authz policy config file (attach dry-run authz extension)
cat > cfg/${AGW_NAME}-authz-policy-modar.yaml <<EOF
name: ${AGW_NAME}-authz-policy-modar
target:
  resources:
    - "projects/${PROJ_ID}/locations/${REGION}/agentGateways/${AGW_NAME}"
policyProfile: CONTENT_AUTHZ
action: CUSTOM
customProvider:
  authzExtension:
    resources:
      - "projects/${PROJ_ID}/locations/${REGION}/authzExtensions/${AGW_NAME}-svc-ext-authz-modar"
EOF

আমদানি অনুমোদন নীতি

# import authz policy config file (enable authz policy)
gcloud beta network-security authz-policies import ${AGW_NAME}-authz-policy-modar \
  --source=cfg/${AGW_NAME}-authz-policy-modar.yaml \
  --location=${REGION}

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

# list authz policies
gcloud beta network-security authz-policies list --location=${REGION}
# show authz policy details
gcloud beta network-security authz-policies describe ${AGW_NAME}-authz-policy-modar \
  --location=${REGION}

এর মাধ্যমেই অনুমোদন পর্ব শেষ হলো... এরপর কোডবেস অংশে যাওয়া যাক।

৭. কোডবেস

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

দূরবর্তী নিদর্শনগুলি আনুন

# clone remote repository to temp local dir
git clone https://github.com/GoogleCloudPlatform/cloud-networking-solutions.git ./temp_agw_cuj_arun_ingress_modar
# copy agent runtime and endpoint definitions to working project dir
cp -r temp_agw_cuj_arun_ingress_modar/codelabs/agw-cuj-arun-ingress-modar/agent-crm ./agent-crm
# remove temporary directory
rm -rf temp_agw_cuj_arun_ingress_modar

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

স্টেজিংয়ের জন্য স্টোরেজ বাকেট তৈরি করুন

# create storage bucket
gcloud storage buckets create gs://${STAGING_BUCKET}   --location=${REGION}   --uniform-bucket-level-access

স্টোরেজ বাকেট যাচাই করুন

# list storage buckets
gcloud storage buckets list --format="value(storage_url)"

এর মাধ্যমেই কোডবেস পর্ব শেষ হলো... এরপর জিসিএস কাস্টমার ডেটা সেকশনে যাওয়া যাক।

গ্রাহকের ডেটা

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

গ্রাহকের ডেটার জন্য স্টোরেজ বাকেট তৈরি করুন

# create storage bucket
gcloud storage buckets create gs://${DATA_BUCKET}   --location=${REGION}   --uniform-bucket-level-access

স্টোরেজ বাকেট যাচাই করুন

# list storage buckets
gcloud storage buckets list --format="value(storage_url)"

গ্রাহকের ডেটা আপলোড করুন

# copy local data to bucket
gcloud storage cp -r ./agent-crm/data/* gs://${DATA_BUCKET}/

গ্রাহকের তথ্য যাচাই করুন

# list bucket objects
gcloud storage ls gs://${DATA_BUCKET}/ --long

এর মাধ্যমেই GCS গ্রাহক তথ্য পর্ব শেষ হলো... এরপর ADK এজেন্ট অংশে যাওয়া যাক।

৮. এডিকে এজেন্ট

এজেন্ট প্ল্যাটফর্মের সাথে ইন্টিগ্রেট করার জন্য, এজেন্ট রানটাইমে ডেপ্লয় করা agent-crm ADK এজেন্টটিকে ডেপ্লয়মেন্ট স্ক্রিপ্টে নিম্নলিখিত সেটিংস দিয়ে কনফিগার করা হয়েছে:

  • "identity_type": types.IdentityType.AGENT_IDENTITY এজেন্টের জন্য একটি অনন্য SPIFFE-ভিত্তিক প্রিন্সিপাল আইডেন্টিটি প্রদান করতে ব্যবহৃত হয়।
  • এজেন্টের জন্য সমস্ত ইনবাউন্ড ট্র্যাফিককে এজেন্ট গেটওয়ে পলিসি মূল্যায়ন এবং প্রয়োগ পথে নির্দেশিত করতে "client_to_agent_config": {"agent_gateway": "${AGW_URI}"} ব্যবহার করুন।

একটি সুরক্ষিত সংযোগের মাধ্যমে GCS MCP টুলটি চালু করার জন্য এজেন্টকে ক্লাউড স্টোরেজ MCP সার্ভারের mTLS MCP সার্ভার URL এবং ডেটা বাকেটের নামও পাঠানো হয়।

এজেন্ট মোতায়েন করুন

# deploy agent
uv --directory agent-crm run python3 deploy_agent.py \
  --project=${PROJ_ID} \
  --region=${REGION} \
  --src-dir=./agent \
  --staging-bucket=${STAGING_BUCKET} \
  --display-name="${RE_AGENT_NAME}" \
  --description="agent for customer data" \
  --mcp-server-url="${MCP_URL}" \
  --data-bucket=${DATA_BUCKET} \
  --enable-telemetry \
  --enable-agent-identity \
  --agent-gateway-ingress=${AGW_URI} \
  --allow-token-sharing

স্থাপন যাচাই করুন

মোতায়েনের গুরুত্বপূর্ণ তথ্য আনুন

# fetch agent runtime (reasoning engine) resource id
export RE_ENGINE_ID=$(curl -s -X GET "https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines" \
  -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
  | jq -r --arg name "${RE_AGENT_NAME}" '.reasoningEngines[] | select(.displayName==$name) | .name | split("/") | last')
echo ${RE_ENGINE_ID}
# fetch agent runtime (reasoning engine) agent identity directly from reasoning engine
export RE_AGENT_IDENTITY="principal://$(curl -s \
  -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
  "https://${REGION}-aiplatform.googleapis.com/v1beta1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}" \
  | jq -r '.spec.effectiveIdentity')"
echo ${RE_AGENT_IDENTITY}

গেটওয়ে কনফিগারেশন যাচাই করুন

# show agent runtime config details (gateway config)
curl -s -X GET "https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}" \
  -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
  | jq '{displayName: .displayName, name: .name, effectiveIdentity: .spec.effectiveIdentity, agentGatewayConfig: .spec.deploymentSpec.agentGatewayConfig}'

IAM অনুমতি

এজেন্ট পরিচয়ের জন্য IAM নীতিসমূহ সংযুক্ত করুন

# grant mcp tool user role to agent set (all agent runtime agents in project)
gcloud projects add-iam-policy-binding ${PROJ_ID} \
  --member="${RE_AGENT_ID_SET}" \
  --role="roles/mcp.toolUser"
# grant storage object viewer role to agent identity
gcloud projects add-iam-policy-binding ${PROJ_ID} \
  --member="${RE_AGENT_IDENTITY}" \
  --role="roles/storage.objectViewer"

# grant aiplatform user role to agent identity
gcloud projects add-iam-policy-binding ${PROJ_ID} \
  --member="${RE_AGENT_IDENTITY}" \
  --role="roles/aiplatform.user"

# grant cloudtrace agent role to agent identity
gcloud projects add-iam-policy-binding ${PROJ_ID} \
  --member="${RE_AGENT_IDENTITY}" \
  --role="roles/cloudtrace.agent"

# grant cloud monitoring metric writer role to agent identity
gcloud projects add-iam-policy-binding ${PROJ_ID} \
  --member="${RE_AGENT_IDENTITY}" \
  --role="roles/monitoring.metricWriter"
# grant cloud logging log writer role to agent identity
gcloud projects add-iam-policy-binding ${PROJ_ID} \
  --member="${RE_AGENT_IDENTITY}" \
  --role="roles/logging.logWriter"

# grant telemetry writer role to agent identity
gcloud projects add-iam-policy-binding ${PROJ_ID} \
  --member="${RE_AGENT_IDENTITY}" \
  --role="roles/telemetry.writer"

# grant service usage consumer role to agent identity
gcloud projects add-iam-policy-binding ${PROJ_ID} \
  --member="${RE_AGENT_IDENTITY}" \
  --role="roles/serviceusage.serviceUsageConsumer"

# grant browser role to agent identity
gcloud projects add-iam-policy-binding ${PROJ_ID} \
  --member="${RE_AGENT_IDENTITY}" \
  --role="roles/browser"

IAM অনুমতি যাচাই করুন

# show agent identity roles on project
gcloud projects get-iam-policy ${PROJ_ID} \
  --flatten="bindings[].members" \
  --filter="bindings.members:${RE_AGENT_IDENTITY}" \
  --format="table(bindings.members.sub('^.*locations/', 'principal://agents.[...]/locations/'):label=PRINCIPAL_IDENTITY, bindings.role:label=ROLE)"
# show agent set roles on project
gcloud projects get-iam-policy ${PROJ_ID} \
  --flatten="bindings[].members" \
  --filter="bindings.members:${RE_AGENT_ID_SET}" \
  --format="table(bindings.members.sub('^.*platformContainer/', 'principalSet://agents.[...]/'):label=PRINCIPAL_IDENTITY, bindings.role:label=ROLE)"

এর মাধ্যমেই ADK এজেন্ট পর্ব শেষ হলো... এরপর টেস্ট সেকশনে যাওয়া যাক।

৯. পরীক্ষা

CLI থেকে কোয়েরি জমা দিন

একটি নিরাপদ প্রম্পট পরীক্ষা করুন

# post query to agent streamQuery
curl --no-buffer -s -X POST "https://${REGION}-aiplatform.googleapis.com/v1beta1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}:streamQuery" \
  -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
  -H "Content-Type: application/json" -H "X-Goog-User-Project: ${PROJ_ID}" \
  -d @- <<EOF | jq -r --unbuffered 'if type == "array" then .[] else . end | select(.content.parts != null) | .content.parts[].text // empty'
{
  "input": {
    "message": "what are the names of our west customers?",
    "user_id": "test-user"
  }
}
EOF

এরকম একটি উত্তর পাওয়া উচিত... "আমাদের পশ্চিমের গ্রাহকরা হলেন: বব জনসন এবং অ্যালিস ব্রাউন।"

গোপনীয়তা ট্রিগার পরীক্ষা করুন

# post query to agent streamQuery
curl --no-buffer -s -X POST "https://${REGION}-aiplatform.googleapis.com/v1beta1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}:streamQuery" \
  -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
  -H "Content-Type: application/json" -H "X-Goog-User-Project: ${PROJ_ID}" \
  -d @- <<EOF | jq -r --unbuffered 'if type == "array" then .[] else . end | select(.content.parts != null) | .content.parts[].text // empty'
{
  "input": {
    "message": "what are ssn's for bob johnson and alice brown?",
    "user_id": "test-user"
  }
}
EOF

অন্য একটি নিরাপদ প্রম্পট পরীক্ষা করুন

# post query to agent streamQuery
curl --no-buffer -s -X POST "https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}:streamQuery" \
  -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
  -H "Content-Type: application/json" -H "X-Goog-User-Project: ${PROJ_ID}" \
  -d @- <<EOF | jq -r --unbuffered 'if type == "array" then .[] else . end | select(.content.parts != null) | .content.parts[].text // empty'
{
  "input": {
    "message": "what are bob johnson's and alice brown's email addresses?",
    "user_id": "test-user"
  }
}
EOF

অডিট লগ

ট্রেস লগগুলি দেখুন

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

# show agent runtime (reasoning engine) telemetry and trace logs
gcloud logging read \
  "logName:\"projects/${PROJ_ID}/logs/aiplatform.googleapis.com%2Freasoning_engine_stdout\" AND labels.managed-by=\"reasoning-engine\"" \
  --project=${PROJ_ID} \
  --limit=15 \
  --format="table(
    timestamp.date(format=\"%I:%M:%S %p\", tz=LOCAL):label=TIME,
    trace.basename().sub('^(.{8}).*$', '\\1'):label=TRACE_ID,
    labels.\"event.name\".scope(-1):label=EVENT,
    jsonPayload.content.role:label=ROLE,
    jsonPayload.content.parts[0].text:label=TEXT_CONTENT,
    jsonPayload.content.parts[0].function_call.name:label=TOOL_CALL
  )"

TRACE_ID ব্যবহারকারীর কোয়েরি, মধ্যবর্তী টুল কল এবং মডেলের সিদ্ধান্তগুলোকে একত্রিত করে একটি একক টাইমলাইনে পরিণত করে:

TIME         TRACE_ID  EVENT                  ROLE   TEXT_CONTENT                                     TOOL_CALL
HH:MM:SS PM  3070a1fd  gen_ai.choice          model  Bob Johnson's SSN is 219-45-7895.
                                                     Alice Brown's SSN is 219-45-7896.
HH:MM:SS PM  3070a1fd  gen_ai.user.message    user
HH:MM:SS PM  3070a1fd  gen_ai.user.message    model                                                   read_customer_file
HH:MM:SS PM  3070a1fd  gen_ai.user.message    user
HH:MM:SS PM  3070a1fd  gen_ai.user.message    model                                                   read_customer_file
HH:MM:SS PM  3070a1fd  gen_ai.user.message    user
HH:MM:SS PM  3070a1fd  gen_ai.user.message    model                                                   list_customer_files
HH:MM:SS PM  3070a1fd  gen_ai.user.message    user   what are ssn's for bob johnson and alice brown?
HH:MM:SS PM  3070a1fd  gen_ai.system.message
HH:MM:SS PM  3070a1fd  gen_ai.choice          model                                                   read_customer_file

মডেল আর্মার স্যানিটাইজ লগগুলি দেখুন

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

# show model armor logs
gcloud logging read \
  "logName:\"projects/${PROJ_ID}/logs/modelarmor.googleapis.com%2Fsanitize_operations\"" \
  --project=${PROJ_ID} \
  --limit=50 \
  --format="table(
    timestamp.date(format=\"%I:%M:%S %p\", tz=LOCAL):label=TIME,
    jsonPayload.sanitizationResult.sanitizationVerdict:label=VERDICT,
    jsonPayload.sanitizationInput.byteItem.byteData.decode(base64).decode(utf-8).sub('\n', ' \\\\\\\\n ').trailoff(123):label=INPUT_DATA
  )"

পরিমার্জিত এবং ব্লক করা অনুরোধটির লগ এন্ট্রিটি লক্ষ্য করুন।

TIME         VERDICT                                 INPUT_DATA
HH:MM:SS PM  MODEL_ARMOR_SANITIZATION_VERDICT_ALLOW  Bob Johnson's email address is bob.j@example.com. \n Alice Brown's email address is alice.b...
HH:MM:SS PM  MODEL_ARMOR_SANITIZATION_VERDICT_ALLOW  what are bob johnson's and alice brown's email addresses?
HH:MM:SS PM  MODEL_ARMOR_SANITIZATION_VERDICT_BLOCK  6��
HH:MM:SS PM  MODEL_ARMOR_SANITIZATION_VERDICT_ALLOW  what are ssn's for bob johnson and alice brown?
HH:MM:SS PM  MODEL_ARMOR_SANITIZATION_VERDICT_ALLOW  Our west customers are: Bob Johnson and Alice Brown.
HH:MM:SS PM  MODEL_ARMOR_SANITIZATION_VERDICT_ALLOW  what are the names of our west customers?

এর মাধ্যমেই পরীক্ষা পর্ব শেষ হলো... এরপর পরিচ্ছন্নতা পর্বে যাওয়া যাক।

১০. পরিচ্ছন্নতা

# remove agent iam bindings
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} --member="${RE_AGENT_IDENTITY}" --role="roles/storage.objectViewer"
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} --member="${RE_AGENT_IDENTITY}" --role="roles/aiplatform.user"
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} --member="${RE_AGENT_IDENTITY}" --role="roles/cloudtrace.agent"
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} --member="${RE_AGENT_IDENTITY}" --role="roles/monitoring.metricWriter"

# next
# remove more agent and agent set iam bindings
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} --member="${RE_AGENT_IDENTITY}" --role="roles/logging.logWriter"
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} --member="${RE_AGENT_IDENTITY}" --role="roles/telemetry.writer"
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} --member="${RE_AGENT_IDENTITY}" --role="roles/serviceusage.serviceUsageConsumer"
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} --member="${RE_AGENT_IDENTITY}" --role="roles/browser"

# next
# remove rest of iam bindings
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} --member="${RE_AGENT_ID_SET}" --role="roles/mcp.toolUser"
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} --member="serviceAccount:service-${PROJ_NO}@gcp-sa-modelarmor.iam.gserviceaccount.com" --role="roles/dlp.user"

# next
# delete agent runtime (reasoning engine) agent
curl -s -X DELETE "https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}?force=true" \
  -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
  -H "Content-Type: application/json"

# next
# delete storage
gcloud -q storage rm --recursive gs://${STAGING_BUCKET}
gcloud -q storage rm --recursive gs://${DATA_BUCKET}

# next
# delete authz resources
gcloud -q beta network-security authz-policies delete ${AGW_NAME}-authz-policy-modar --location=${REGION}

gcloud -q beta service-extensions authz-extensions delete ${AGW_NAME}-svc-ext-authz-modar --location=${REGION} --async

# next
# remove dep (service extensions) service agent iam bindings
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} \
  --member="serviceAccount:service-${PROJ_NO}@gcp-sa-dep.iam.gserviceaccount.com" \
  --role="roles/modelarmor.calloutUser"

gcloud -q projects remove-iam-policy-binding ${PROJ_ID} \
  --member="serviceAccount:service-${PROJ_NO}@gcp-sa-dep.iam.gserviceaccount.com" \
  --role="roles/serviceusage.serviceUsageConsumer"

gcloud -q projects remove-iam-policy-binding ${PROJ_ID} \
  --member="serviceAccount:service-${PROJ_NO}@gcp-sa-dep.iam.gserviceaccount.com" \
  --role="roles/modelarmor.user"

# next
# delete model armor templates
gcloud -q model-armor templates delete ${AGW_NAME}-modar-resp-template --location=${REGION}
gcloud -q model-armor templates delete ${AGW_NAME}-modar-req-template --location=${REGION}

# unset model armor api endpoint override
gcloud config unset api_endpoint_overrides/modelarmor

# next
# delete sdp (dlp) templates
curl -fsS -X DELETE "https://dlp.googleapis.com/v2/projects/${PROJ_ID}/locations/${REGION}/deidentifyTemplates/agw-ssn-redaction-template" \
  -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
  -H "x-goog-user-project: ${PROJ_ID}"

curl -fsS -X DELETE "https://dlp.googleapis.com/v2/projects/${PROJ_ID}/locations/${REGION}/inspectTemplates/agw-ssn-inspect-template" \
  -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
  -H "x-goog-user-project: ${PROJ_ID}"

# next
# delete agent gateway ingress
gcloud -q network-services agent-gateways delete ${AGW_NAME} --location=${REGION} --async

# end

এর মাধ্যমেই পরিষ্করণ পর্ব শেষ হলো... এরপর আমরা উপসংহার অংশে যাব।

১১. উপসংহার

অভিনন্দন! আপনি সফলভাবে এজেন্ট গেটওয়ে স্থাপন করেছেন এবং একটি এআই এজেন্টের আগত ট্র্যাফিক নিয়ন্ত্রণ করেছেন!

কসমোপাপ

কসমোপাপের মতে কোডল্যাবস খুবই উদ্যমী!

এরপর কী?

এই ফিডব্যাক ফর্মটি ব্যবহার করে যেকোনো মন্তব্য, প্রশ্ন বা সংশোধন জানাতে পারেন।

ধন্যবাদ!