১. ভূমিকা

আপনি এজেন্ট ভ্যালিতে এসে পৌঁছেছেন। একটি এলাকা খোলা আছে: সামনিং গ্রোভ। এই ল্যাবের শেষে সেখানে আপনার নিজের নকশা করা একটি প্রাণী বাস করবে, এবং আপনি সঠিকভাবে জানতে পারবেন যন্ত্রটির কোন অংশ দিয়ে এটিকে তৈরি করা হয়েছে।

এই হলো মোচি। চারটি শব্দ দিয়ে এর জন্ম — "আরামদায়ক কিছু একটা যা বৃষ্টি ভালোবাসে।"
একজন এজেন্ট হলো কয়েকটি ছোট ছোট অংশ এবং তাদের মধ্যকার সংযোগ। এখানকার প্রতিটি অধ্যায় একটি করে অংশ যোগ করে এবং তারপর আপনাকে সেই সংযোগটি দেখায়।
অধ্যায় | যে অংশটি আপনি যোগ করেন | তার |
১ | নির্দেশনাসহ একটি মডেল | এখনো কিছু হয়নি — এটি শুধু কথা বলতে পারে |
২ | একটি সরঞ্জাম | মডেল → টুল |
৪ | একটি দ্বিতীয় সরঞ্জাম | টুল → এজেন্ট · একটি শেয়ার করা অভিধান |
৫ | একটি কলব্যাক | তুমি → তারটি · ভেতরে হাত ঢুকিয়ে বদলে দাও |
যেকোনো এজেন্ট ফ্রেমওয়ার্কের কঠিন অংশটি "এজেন্ট কী" তা নয়। বরং কঠিন হলো ডেটা কোথায় থাকে এবং কীভাবে তা পরবর্তী ধাপে পৌঁছায়। এই ল্যাবটি এই প্রশ্নটি তিনবার করে এবং তিনবারই এর উত্তর দেয়।
অধ্যায় ৩ ইচ্ছাকৃতভাবেই ওই টেবিলে রাখা হয়নি। আপনার প্রথম টুলটি কাজ করা শুরু করলেই, আপনি কোডটি রেখে দিয়ে পাঁচ মিনিটের জন্য ফিনিশড ভ্যালিতে গিয়ে সময় কাটাবেন। আপনি দুটি প্রশ্ন নিয়ে ফিরে আসবেন, এবং অধ্যায় ৪ ও ৫ হলো সেগুলোর উত্তর।
আপনাকে দুটি সম্পাদনা করতে হবে। দুটিই এক লাইনের। এই ল্যাবে শুধু এটুকুই টাইপ করতে হবে — বাকি সবকিছু আপনাকে পড়তে, চালাতে এবং দেখতে হবে।
এখানকার সবকিছুই ADK 2 ।
আপনার যা প্রয়োজন: বিলিং সুবিধাসহ একটি গুগল অ্যাকাউন্ট এবং একটি ব্রাউজার। আপনার আগে থেকে কোনো গুগল ক্লাউড প্রজেক্টের প্রয়োজন নেই — সেটআপ নিজেই একটি তৈরি করে দেয়। সবকিছু ক্লাউড শেলে চলে — সেখানে পাইথন, uv এবং gcloud আগে থেকেই ইনস্টল করা থাকে, এবং আপনার নিজস্ব ক্রেডেনশিয়াল ব্যবহার করে ভার্টেক্স এআই-এর মাধ্যমে জেমিনিতে প্রবেশ করা যায়। এই ল্যাবে কোথাও কোনো এপিআই কী নেই।
২. সেটআপ
এই ল্যাবের সবকিছু ক্লাউড শেল- এ চলে — সেখানে পাইথন, uv এবং gcloud আগে থেকেই ইনস্টল করা আছে, এবং আপনার নিজের ক্রেডেনশিয়াল ব্যবহার করে ভার্টেক্স এআই-এর মাধ্যমে জেমিনিতে প্রবেশ করা যায়। এই ল্যাবে কোথাও কোনো এপিআই কী নেই, এবং আপনার ল্যাপটপেও কিছু ইনস্টল করার প্রয়োজন নেই।
এই ল্যাব আপনাকে একটি জিনিস দিতে পারবে না: বিলিং সহ একটি গুগল ক্লাউড প্রজেক্ট। ধাপ ১ আপনাকে এমন একটি অ্যাকাউন্ট দেবে যা দিয়ে এর জন্য অর্থ প্রদান করা যায়; ধাপ ৪ সেই অ্যাকাউন্টটিকে একটি প্রজেক্টে পরিণত করে। এই ধাপগুলো সেই ক্রমেই করুন — ধাপ ৪-এর পরের প্রতিটি ধাপ, ধাপ ৪ দ্বারা তৈরি করা প্রজেক্টটিকেই পড়ে।
১ · বিলিং সহ একটি অ্যাকাউন্ট তৈরি করুন (~১ মিনিট)
🌐 অন্য কিছু করার আগে এটি করুন। বিলিং চালু আছে এমন একটি গুগল অ্যাকাউন্ট দিয়ে সাইন ইন করুন। এই ধরনের যেকোনো অ্যাকাউন্টই চলবে। যদি আপনার অ্যাকাউন্টে তা না থাকে, তাহলে একটি ফ্রি ট্রায়াল শুরু করুন; এটি আপনাকে একটি বিলিং অ্যাকাউন্ট দেবে, যা ধাপ ৪-এর জন্য প্রয়োজন।
২ · ক্লাউড শেল খুলুন (~১ মিনিট)
🌐 গুগল ক্লাউড কনসোলের উপরে থাকা ‘Activate Cloud Shell’- এ ক্লিক করুন — এটি হেডারে থাকা টার্মিনালের মতো দেখতে আইকনটি।

🌐 ওপেন এডিটর (পেন্সিল চিহ্নসহ ফোল্ডার খোলার আইকন)-এ ক্লিক করুন। এটি ক্লাউড শেল এডিটরটি খুলে দেবে, যার বাম দিকে একটি ফাইল এক্সপ্লোরার থাকবে — যখনই কোনো ধাপ ✏️ চিহ্ন দিয়ে চিহ্নিত করা থাকবে, সেখানেই আপনাকে কাজ করতে হবে।

🌐 আজ যেকোনো সময়ে আপনাকে অনুমোদন করতে বলা হলে, চালিয়ে যাওয়ার জন্য 'অনুমোদন করুন' (Authorize) বোতামে ক্লিক করুন।
🌐 এডিটরের ভিতরে একটি টার্মিনাল খুলুন — সেটি হলো ট্যাব ১ , যেখানে প্রতিটি 💻 ধাপ চলে। যদি এটি আগে থেকেই স্ক্রিনের নীচে না থাকে, তাহলে View → Terminal দিয়ে এটি খুলুন:

💻 ক্লাউড শেল কোন অ্যাকাউন্ট দিয়ে সাইন ইন করা আছে তা যাচাই করুন:
gcloud auth list
👀 আপনার নিজের অ্যাকাউন্টটি একটি * চিহ্ন দিয়ে চিহ্নিত করা থাকবে , এবং এটি অবশ্যই সেই একই অ্যাকাউন্ট হতে হবে যা দিয়ে আপনি ধাপ ১-এ সাইন ইন করেছিলেন ।
৩ · ল্যাবটি খুলুন (~১ মিনিট)
💻 রিপোটি ক্লোন করুন:
cd ~
git clone https://github.com/cuppibla/agent-valley-lab.git
cd ~/agent-valley-lab
৪ · আপনার প্রজেক্ট তৈরি করুন (~২ মিনিট)
💻 একটি স্ক্রিপ্ট আপনার বিলিং অ্যাকাউন্ট খুঁজে বের করে, সেটিতে একটি প্রজেক্ট তৈরি করে এবং ক্লাউড শেলকে সেই প্রজেক্টটির দিকে নির্দেশ করে:
cd ~/agent-valley-lab
./setup_project.sh
👀 আশা করুন, এটি যে বিলিং অ্যাকাউন্টটি বেছে নিয়েছে তার জন্য একটি ✓ চিহ্ন, এটি যে প্রজেক্টটি তৈরি করেছে তার জন্য একটি ✓ এবং শেষে এইরকম কিছু থাকবে:
Project ready: agent-valley-4271 Next: ./setup_codelab.sh
agent-valley-4271 হলো আপনার প্রজেক্ট আইডি — আপনারটির সংখ্যাগুলো ভিন্ন হবে। সেখানে চারটি কাজ হয়:
বিলিং | আপনার যদি নতুনতম | |
প্রকল্প | | |
নির্বাচন করে | এটি আইডিটি | |
অপেক্ষা | একেবারে নতুন প্রকল্পটি চালু হওয়ার অনুমতি না পাওয়া পর্যন্ত, সর্বোচ্চ দুই মিনিটের জন্য ভোটগ্রহণ চলবে। | |
🌐 সেই একই প্রজেক্টটি এখন কনসোলে রয়েছে — এর আইডিটি ড্যাশবোর্ডের প্রজেক্ট ইনফো কার্ডে দেখা যাচ্ছে:

৫ · ভার্টেক্স এআই ইনস্টল করুন এবং সেটির দিকে নির্দেশ করুন (~৩ মিনিট)
💻 uv ইনস্টল করুন, ADK থেকে Vertex AI-তে ডেটা পাঠানোর জন্য তিনটি ভেরিয়েবল এক্সপোর্ট করুন, এবং setup চালান:
cd ~/agent-valley-lab
curl -LsSf https://astral.sh/uv/install.sh | sh
source ~/.local/bin/env
export GOOGLE_GENAI_USE_VERTEXAI=True
export GOOGLE_CLOUD_PROJECT=$(gcloud config get project)
export GOOGLE_CLOUD_LOCATION=global
./setup_codelab.sh
$(gcloud config get project) এর রিটার্ন করার মতো কিছু আছে, কারণ ধাপ ৪ তা সেট করেছে। ধাপ ৪ প্রথমে আসার এটাই মূল কারণ।
setup_codelab.sh হলো আইডম্পোটেন্ট — অর্থাৎ এটি যতবার খুশি নিরাপদে পুনরায় চালানো যায়। এটি ক্রমানুসারে চারটি কাজ করে:
এপিআই | প্রকল্পের ধাপ ৪ নির্বাচিত হয়েছে কিনা তা পড়ে এবং এতে Vertex AI API সক্রিয় করে। | |
ইউভি এনভি | | |
.env | ল্যাব যে তিনটি ভেরিয়েবল পড়ে, সেগুলো লিখে রাখে — কোথাও কোনো এপিআই কী নেই। | |
মডেল চেক | জেমিনিকে একবারই আসল কল করা হয়, তাই একটি খারাপ প্রজেক্ট এখানেই, সেটআপের সময়েই ব্যর্থ হয়, পরে কোনো অধ্যায়ের ভেতরে নয়। | |
৬ · এটি যে সবুজ তা প্রমাণ করুন (~১ মিনিট)
💻 প্রিফ্লাইট চালান — প্রতিটি টিক একটি প্রকৃত অনুসন্ধান, কোনো অনুমান নয়:
cd ~/agent-valley-lab
uv run python scripts/preflight.py
👀 আশা করা যায় প্রতিটি লাইনই ঠিকঠাক কাজ করবে — Vertex AI · project সহ। Vertex AI · project — শেষে PREFLIGHT GREEN । একটি লাইনে লেখা থাকবে grove · 0 tools ← no edits yet ; যা সঠিক। ওই অনুপস্থিত টুলটিই হলো দ্বিতীয় অধ্যায়ের মূল বিষয়।
আরও পড়ুন (ঐচ্ছিক)
৩. ১ · আপনার প্রথম এজেন্ট
যন্ত্রাংশটি: নির্দেশনাসহ একটি মডেল। তারটি: এখনো নেই — আর ঠিক এটাই মূল বিষয়।
- কী — অস্তিত্বে থাকা ক্ষুদ্রতম এজেন্টের সাথে পরিচিত হোন, এবং এর সবকিছু পড়ুন।
- কেন — এই ল্যাবে পরবর্তীতে যা কিছু আছে, তা হলো এই ফাইলটি এবং এর সাথে আরও একটি জিনিস।
- কীভাবে — একটি কমান্ড, একটি ফাইল, টাইপ করা দুটি বাক্য।
👉💻 ট্যাব ১- এ, ADK-এর ডেভ UI চালু করুন:
cd ~/agent-valley-lab
uv run adk web . --allow_origins="*"
👉🔬 ওয়েব প্রিভিউ-এর মাধ্যমে ডেভ UI খুলুন → পোর্ট পরিবর্তন করুন → 8000। 'Select an app'-এ ক্লিক করুন। দুটি তালিকা আসবে: grove এবং grove_locked । grove বেছে নিন। লক করা অ্যাপটি হলো তৈরি হয়ে যাওয়া এজেন্ট — আপনি অধ্যায় ৫-এ এটির বিরুদ্ধে একই অনুরোধ চালাবেন।
পুরো এজেন্টকে পড়ুন
👉📖 grove/agent.py খুলুন। কমেন্টগুলো উপেক্ষা করুন — চারটি লাইন গুরুত্বপূর্ণ :
cloudshell edit ~/agent-valley-lab/grove/agent.py
root_agent = LlmAgent(
name="grove",
model="gemini-3-flash-preview",
instruction=INSTRUCTION,
)
ওটা একজন এজেন্ট। পুরোটাই।
-
name— ডেভ UI-তে এটিকে যেভাবে দেখানো হয়। -
model— কোন মস্তিষ্ক। এই যে, জেমিনি ৩ ফ্ল্যাশ। -
instruction— এর স্থায়ী সংক্ষিপ্ত বিবরণ। 👉📖 উপরে স্ক্রল করেINSTRUCTIONপড়ুন: সাতটি সহজ বাক্য যা একে বলছে যে, এর একটি কামারশালা আছে, কোনো ভ্রমণকারী যা-ই বর্ণনা করুক না কেন, তা সবসময় একটি সুন্দর প্রাণীতে পরিণত হয়, এবং কামারশালাটি শুধুমাত্র আহ্বানই করতে পারে।
👀 কোনো সরঞ্জাম নেই। কোনো স্মৃতিশক্তি নেই। আছে শুধু একটি মডেল আর কাজের বিবরণ।
এর সাথে কথা বলুন
👉🔬 এটি টাইপ করুন:
Summon a fox familiar for me.
আপনি চমৎকার কিছু দেখবেন । এই নির্দিষ্ট এজেন্টের কাছ থেকে পাওয়া একটি আসল উত্তর নিচে দেওয়া হলো:
কামারশালাটি এক নরম, কুয়াশাচ্ছন্ন নীল আভায় উদ্ভাসিত, এমন সময় ছোট্ট একটি কেবল-নিট সোয়েটার পরা গোলগাল শ্যাওলা-ধরা ব্যাঙ বেরিয়ে আসে, কোলে ধোঁয়া ওঠা এক ওকফলের টুপি ভর্তি চা নিয়ে।

👉🔬 এর পরের স্বাভাবিক প্রশ্নটি করুন:
Show me it.
আপনার আরও সুন্দর শব্দ দেখা উচিত — আর এটাই সব। কোনো ছবি নেই। কোনো ফাইল নেই। কোনো ব্যাঙ নেই।
👉🔬 স্টেট ট্যাবে ক্লিক করুন। এটি খালি।
👀 এটা কোনো বাগ নয়, মডেলটিও খারাপ নয়। একটি মডেলের একমাত্র আউটপুট চ্যানেল হলো টেক্সট। তাই, অভিনয় সংক্রান্ত কোনো দাবি এবং একটি প্রকৃত কাজ—দুটিই এর থেকে দেখতে একই রকম লাগে।
সরঞ্জামবিহীন একজন এজেন্ট বিষয়ক আলোচনাটি খুবই সংক্ষিপ্ত।
আরও পড়ুন (ঐচ্ছিক)
৪. ২ · আপনার প্রথম টুল
অংশটি: একটি কার্যকারিতা। তারটি: মডেল → সরঞ্জাম।
- কী —এজেন্টকে একটি ফাংশন দিন, তারপর সেটি ব্যবহার করলে কী ঘটে তা পর্যবেক্ষণ করুন।
- কেন —ব্যাঙের বর্ণনা দেওয়া আর ব্যাঙ তৈরি করার মধ্যে এটাই হলো পার্থক্য।
- কীভাবে করবেন — দুটি অক্ষর মুছে দিন, রিস্টার্ট করুন এবং ট্রেইলটি পড়ুন।
সম্পাদনা এক
👉📖 grove/agent.py ফাইলটি আবার খুলুন। টুলগুলো ইতিমধ্যেই একদম উপরে ইম্পোর্ট করা আছে — ওগুলো এতক্ষণ সেখানেই ছিল। এজেন্টটি শুধু কোনো একটি টুল ধরে রাখছিল না।
cloudshell edit ~/agent-valley-lab/grove/agent.py
👉✏️ প্রথম ধাপ — tools= লাইনের শুরুতে থাকা # চিহ্নটি মুছে দিন, তারপর সেভ করুন:
root_agent = LlmAgent(
name="grove",
model="gemini-3-flash-preview",
instruction=INSTRUCTION,
# 👉 EDIT ONE — delete the "# " at the start of the next line, then save.
tools=[cast_candidates],
)
একটি সরঞ্জাম। একটি নাম, একটি কাজ যা এই এজেন্ট এখন করতে পারে। চতুর্থ অধ্যায়ে দ্বিতীয়টি যুক্ত হয়, আর তা হলো সম্পূর্ণ ল্যাব।
👉💻 ডেভ UI চালু হওয়ার সময় এজেন্টটি লোড করে ফেলেছিল, তাই এটিকে নতুন এজেন্টটি দিন। ট্যাব ১- এ, Ctrl+C চাপুন, তারপর এটি আবার চালু করুন:
cd ~/agent-valley-lab
uv run adk web . --allow_origins="*"
👉🔬 grove নতুন সেশন শুরু হয়েছে। আগে যা জিজ্ঞাসা করেছিলেন, এবারও তাই জিজ্ঞাসা করুন:
something cozy that likes rain and drinks tea
আপনার দেখা উচিত এটি কীভাবে কথা বলা বন্ধ করে কাজ শুরু করে: একটি cast_candidates চিপ, প্রায় বারো সেকেন্ডের একটি বিরতি, তারপর এমন একটি প্রাণীর আসল প্রতিকৃতি যা আপনি এন্টার চাপার সময় অস্তিত্বে ছিল না।

টুল কল কী
👉🔬 cast_candidates চিপটি খুলতে ক্লিক করুন।

👀 চারটি বার্তা। দ্বিতীয় ধাপটি লক্ষ্য করুন: মডেলের আউটপুট এখনও শুধু একটি বার্তা। এটি আপনার ফাংশনের নাম দিয়েছে এবং আর্গুমেন্টটি লিখেছে — আপনি বলেছিলেন "আরামদায়ক, বৃষ্টি, চা" এবং এটি আপনার হয়ে একটি সম্পূর্ণ ভিজ্যুয়াল বর্ণনা তৈরি করেছে — কিন্তু এটি নিজে কিছুই রান করেনি। রানটাইমই তা করেছে।
চুক্তিটি
👉📖 forge/agent/tools.py খুলুন এবং cast_candidates খুঁজুন :
cloudshell edit ~/agent-valley-lab/forge/agent/tools.py
async def cast_candidates(description: str, tool_context: ToolContext) -> dict:
"""Draw the familiar a traveler described.
Args:
description: What the creature looks like — species, colours, mood, era.
"""
👀 নাম, সিগনেচার এবং ওই ডকস্ট্রিং-ই হলো এই ফাংশনটির সম্পূর্ণ বিবরণ যা মডেলটি দেখতে পাবে। একারণেই এটি সহজ ইংরেজিতে লেখা হয়। এটি পাঠকের জন্য লিখুন, কম্পাইলারের জন্য নয়।
ছবিটি আসলে কোথা থেকে এসেছে
এখন পুরো শৃঙ্খলটি অনুসরণ করুন। বেশিরভাগ টিউটোরিয়াল এই অংশটি এড়িয়ে যায়।

👀 তিনটি বিষয় যার জন্য থামা যেতে পারে:
- আপনার এজেন্ট কখনোই কিছু আঁকেনি।
groveএকটি টেক্সট মডেল — এতে শুধু টেক্সট প্রবেশ করে এবং টেক্সটই বের হয়। ছবিটি এসেছে দ্বিতীয় একটি মডেল ,gemini-2.5-flash-imageথেকে, যেটিকে আপনার ফাংশনের ভেতর থেকে কল করা হয়েছিল। - আর্ট স্টাইলটি ছবি আকারে দেওয়া হয়। 👉📖
forge/agent/backends.pyখুলুন এবং_style_refs()খুঁজুন। প্রতিটি রিকোয়েস্টের সাথে চারটি উদাহরণ ছবি যুক্ত হয়। এটি এমন একটি আর্ট ডিরেকশন যা আপনি প্রম্পট হিসেবে লিখতে পারতেন না।cloudshell edit ~/agent-valley-lab/forge/agent/backends.py - মডেলটি ছবিটি কখনোই দেখে না। পিক্সেলগুলো
save_artifact()মাধ্যমে সংরক্ষণ করা হয়। মডেলের কাছে যা ফেরত আসে তা হলো"candidate_0.png"স্ট্রিংটি — যা একটি প্রম্পটে এঁটে যাওয়ার মতো যথেষ্ট ছোট।
আপনার এজেন্ট মাল্টিমোডাল হয়ে ওঠেনি। আপনি এটিকে এমন কিছুর দরজা খুলে দিয়েছেন যা আগে থেকেই ছিল।
আপনি এক হাতে এটা দিয়েছেন। দ্বিতীয় হাতের আগে—গিয়ে দেখুন শেষ জিনিসটা কেমন লাগে।
আরও পড়ুন (ঐচ্ছিক)
৫. ৩ · উপত্যকা
এই অধ্যায়ে কোনো সম্পাদনা নেই। কোনো নতুন ধারণা নেই। আপনি ডেভেলপার টুলে একটি ছবি তৈরি করেছেন — এখন যান এবং চূড়ান্ত জিনিসটি পাঁচ মিনিটের জন্য ব্যবহার করুন।
👉💻 adk web চালু রাখুন। টার্মিনাল প্যানেলের টুলবারে থাকা + চিহ্নটি ব্যবহার করে একটি দ্বিতীয় টার্মিনাল ট্যাব (ট্যাব ২) খুলুন:
cd ~/agent-valley-lab
bash valley.sh
👉🔬 ওয়েব প্রিভিউ-এর মাধ্যমে ভ্যালিটি খুলুন → পোর্ট পরিবর্তন করুন → ৩২০০ , ▶ স্টার্ট চাপুন, তারপর দ্য সামনিং গ্রোভ ।

👉🔬 একটি ধরন বেছে নিন, একটি টুইস্ট টাইপ করুন, এবং ডেকে আনুন। এর নাম দিন। এটিকে নিজের করে নিন।
👉🔬 এরপর এটিকে সাজান: একটি সোনালী মুকুটের মতো কোনো সাজেশনে ট্যাপ করুন এবং দেখুন সেটি একটি বাক্য হিসেবে রিকোয়েস্ট বক্সে চলে আসছে। ইচ্ছে হলে শব্দগুলো পরিবর্তন করুন। ✦ সেন্ড চাপুন। এমনটা তিন-চারবার করুন। সময় নিন; ল্যাবের এই অংশটা বেশ মজার।

খেলার সময় তিনটি জিনিস
- আপনি এর পেছনের কোডটি ইতিমধ্যেই পড়েছেন। আপনার বাক্যটি একটি এজেন্টের কাছে যায়, এজেন্টটি
cast_candidatesবাgenerate_lookফাংশনগুলোকে কল করে — সেই একই ফাংশনগুলো, যেগুলোর ডকস্ট্রিং আপনি পাঁচ মিনিট আগেই পড়েছেন। - একটি সাজেশন শব্দ লেখে, এটি কোনো বাটন চাপে না। এটা ইচ্ছাকৃতভাবেই করা হয়। একটি বাটনের কোনো উদ্দেশ্য থাকে না, তাই মডেলের পড়ার মতো কিছুই থাকে না। একটি বাক্যের উদ্দেশ্য থাকে — আর এটাই একমাত্র কারণ যার জন্য একজন এজেন্ট এই লুপের মধ্যে থাকতে পারে।
- এখানে আপনার সম্পাদনার কোনো প্রয়োজন ছিল না। ভ্যালিটি তার নিজস্ব এজেন্ট চালায় (
forge/agent/lanes.py)। আপনি কিছু স্পর্শ করার আগেও এটি ঠিকঠাক কাজ করছিল।
দুটি জিনিস যা আপনি এখনও ব্যাখ্যা করতে পারেননি
দুটোই বাস্তব। দুটোরই উত্তর আছে। কিন্তু কোনো উত্তরই এই অধ্যায়ে নেই।
👉🔬 অনুরোধ পাঠানোর সময় ডানদিকের প্যানেলটি দেখতে থাকুন।

before_model inject character_sheet after_model guard: pass before_tool identity lock → candidate_0.png after_tool + a golden crown · outfit: a golden crown
👀 এক বাক্যে ছয় লাইন। কোথাও কিছু একটা লেখা হচ্ছে, এবং কেউ আপনার হয়ে একটি ছবি বেছে নিচ্ছে । কী ছবি, আর সেটা কোথায় যায়?
👉🔬 এবার 'এই ছবি থেকে কাজ করুন' এর নিচের স্ট্রিপটি দেখুন এবং পঞ্চম একটি জিনিস যোগ করুন। এবং ষষ্ঠটিও।

👀 কোনো কিছুই কোনো কিছুকে প্রতিস্থাপন করেনি। OUTFIT · 4 , এবং ডানদিকের ট্রেসটি দেখাচ্ছে যে তালিকাটি একবারে একটি করে আইটেম বেড়ে চলেছে — a golden crown → a golden crown, a starry cape → এবং এভাবেই চলছে। প্রতিটি রেন্ডার সম্পূর্ণ তালিকাটি থেকেই তৈরি করা হয়, আর একারণেই আপনার চাওয়ার চার টার্ন পরেও মুকুটটি এখনও সেখানেই আছে।
👀 ওই শটটিতে দুটো বিষয় লক্ষণীয়। আপনি ইতিমধ্যেই যা পরে আছেন, সেই সাজেশনটিকে টিক চিহ্ন ( ✓ ) দেওয়া হয়েছে — এই চিপগুলো আসলে একই তালিকার একটি দৃশ্য মাত্র। আর প্রতিটি আইটেমের পাশে একটি ✕ চিহ্ন রয়েছে: কোনো কিছু খুলে ফেলাটা হলো একটি বোতাম , কোনো বাক্য নয়। এখানে ব্যাখ্যা করার মতো কিছু নেই, তাই মডেলেরও কিছু করার নেই — এটি উপরের "একটি সাজেশন শব্দ লেখে, বোতাম টিপে না" কথাটির হুবহু প্রতিচ্ছবি।
👀 এটা এখনও তোমারই সৃষ্টি। তুমি এর নতুন করে কোনো বর্ণনা দাওনি — শুধু একটা টুপি নিয়ে চারটি শব্দ লিখেছো। কোনো কিছু তোমার হয়ে আসল ছবিটাকে আঁকড়ে ধরে আছে। কী এমনটা করছে, আর তুমি কি সেটা বন্ধ করতে পারো?
প্রশ্ন দুটিই ধরে রাখুন। প্রথমটি হলো পরবর্তী অধ্যায়। দ্বিতীয়টি হলো শেষ অধ্যায়।
👀 উপত্যকা ছেড়ে দৌড়াতে থাকো — অধ্যায় ৫-এ এই বিষয়ে আবার ফিরে আসা হবে।
আরও পড়ুন (ঐচ্ছিক)
৬. ৪ · একটি দ্বিতীয় উপকরণ — এবং এই দুটি কীভাবে কথা বলে
উপত্যকার ডানদিকের প্যানেলে থাকা ওই লাইনটার কথা মনে আছে — after_tool · + Crown · outfit: Crown ? ওটা এখান থেকেই এসেছে।
অংশটি: আরও একটি কাজ। তারটি: যন্ত্র → প্রতিনিধি। এই অধ্যায়টি মানুষের কয়েক সপ্তাহ বাঁচিয়ে দেয়।
- কী — দ্বিতীয় একটি যন্ত্র যোগ করুন, এবং খুঁজে বের করুন সেটি কীভাবে জানে প্রথমটি কী করেছিল।
- কেন —এই দুটি ফাংশন কখনোই একে অপরকে কল করে না। অন্য কিছু ডেটা বহন করে।
- কীভাবে — আরও একটি নাম, একটি বাক্য, এবং স্টেট ট্যাব।
সম্পাদনা দুই
cloudshell edit ~/agent-valley-lab/grove/agent.py
👉✏️ দ্বিতীয় সম্পাদনা — grove/agent.py ফাইলে ফিরে গিয়ে, বন্ধনীর ভেতরে আরও একটি নাম যোগ করুন, তারপর সেভ করুন:
tools=[cast_candidates, lock_candidate],
এই ল্যাবে এটাই শেষ সম্পাদনা। একটি টুল যোগ করা আসলে একটি তালিকায় শুধু একটি নাম যোগ করার মতোই।
👉📖 আপনি এইমাত্র যা জমা দিয়েছেন তা পড়ুন — forge/agent/tools.py তে lock_candidate :
async def lock_candidate(index: int, name: str, tool_context: ToolContext) -> dict:
"""Lock one candidate as the canonical character. Spends no model — a pure state write."""
candidates = tool_context.state.get("temp:candidates", [])
ref = candidates[index]
tool_context.state["character_ref"] = ref
👀 লক্ষ্য করুন এর সিগনেচারে কী নেই : কোনো ফাইলের নাম নেই, কোনো ছবি নেই, কোনো তালিকাও নেই। মডেলটি একে শুধু একটি সংখ্যা এবং একটি নাম দিতে পারে।
👉💻 ট্যাব ১- এ ফিরে এসে, ডেভ UI রিস্টার্ট করুন যাতে এটি নতুন এজেন্টটি গ্রহণ করে — Ctrl+C চাপুন , তারপর এটি আবার চালু করুন:
cd ~/agent-valley-lab
uv run adk web . --allow_origins="*"
এক বাক্য, দুই সরঞ্জাম
👉🔬 grove নতুন সেশন শুরু হয়েছে। একসাথেই দুটো জিনিস চেয়ে নিন:
summon something cozy that likes rain, and call it Mochi
এবার আপনি ক্রমানুসারে দুটি চিপ দেখতে পাবেন — প্রথমে cast_candidates , তারপর lock_candidate — এবং তারপর আপনার নামযুক্ত ফ্যামিলিয়ারটি।

প্রশ্নটি
👉🔬 lock_candidate চিপটি খুলুন। মডেলটি এটিকে ঠিক এভাবেই ডেকেছে:
lock_candidate(index=0, name="Mochi")
👀 তাহলে — যে ফাইলটা লক করেছে, সেটা কোথা থেকে পেল?
মডেল থেকে নয়। মডেলটি একটি সংখ্যা পাঠিয়েছিল। ফাইলের নামটি এসেছে temp:candidates থেকে, যা cast_candidates কয়েক সেকেন্ড আগেই লিখেছিল।
মডেলটি এক টুল থেকে অন্য টুলে ডেটা বহন করত না। একটি ডিকশনারি তা করত।
অভিধান
👉📖 একই ফাইলের cast_candidates এর শেষ লাইনগুলো দেখুন:
tool_context.state["temp:candidates"] = filenames
tool_context.state["character_sheet"] = {"name": "", "description": description}
tool_context.state["provisional_ref"] = filenames[0]
tool_context.state["temp:provisional_ref_png"] = pngs[0][0]
👀 tool_context.state হলো একটি ডিকশনারি , যা সেশনের সবকিছু ব্যবহার করে। একটি টুল এতে লেখে, পরেরটি তা থেকে পড়ে। এদের মধ্যে কোনো মেসেজ আদান-প্রদান বা রিটার্ন চ্যানেল নেই। এটি একটি শেয়ার্ড রুম।
👀 ওই চারটি রাইটের মধ্যে প্রথমটি হলো সেই হ্যান্ডঅফ যা আপনি এইমাত্র দেখলেন — lock_candidate temp:candidates পড়ে এবং সেখান থেকে ইনডেক্স ০ বের করে নেয়। শেষের দুটি হলো একটি অস্থায়ী পিন : এখন একটি পোট্রেট তৈরি হয়ে গেছে, তাই পরবর্তী কোনো ড্রয়িংকে অ্যাঙ্কর করার জন্য ইতিমধ্যেই একটি ভিত্তি রয়েছে, যদিও কেউ এটির মালিকানা দাবি করেনি এবং এটির এখনও কোনো নাম নেই। পরবর্তী টুল কিছু না বলা পর্যন্ত কোনো কিছুই চূড়ান্ত নয়।
এবং এজেন্টও এটা পড়ে।
👉📖 এবার তৃতীয় পক্ষের পালা। forge/agent/character_forge.py খুলুন এবং এর নির্দেশাবলী দেখুন:
cloudshell edit ~/agent-valley-lab/forge/agent/character_forge.py
Character card: {character_sheet?}
👀 ওই কোঁকড়া বন্ধনীগুলো শুধু সাজানোর জন্য নয়। ADK প্রতিটি মডেল কলের আগে স্টেট থেকে এগুলো পূরণ করে। টুলটি character_sheet লিখেছে; প্রম্পটটি সেটিই আবার পড়ে নেয়। চক্রটি সম্পূর্ণ, এবং এই তিনটি ফাইলের কোনোটিই অন্য কোনো ফাইল ইম্পোর্ট করে না।

দেখুন
👉🔬 স্টেট ট্যাবে ক্লিক করুন। দুটি টুলই চালানো হয়েছে, তাই এই হলো সম্পূর্ণ রেকর্ড:
__session_metadata__ {...}
character_sheet {"name": "Mochi", "description": "A cozy red panda...", "style_notes": ""}
provisional_ref ""
character_ref "candidate_0.png"
look_history []
👀 __session_metadata__ হলো ডেভ UI-এর নিজস্ব হিসাবপত্র। বাকি চারটি আপনার। cast_candidates নামটি খালি রেখেই character_sheet লিখেছিল এবং এর প্রতিকৃতিকে provisional_ref হিসেবে পিন করেছিল; lock_candidate নামটি পূরণ করে character_ref লিখেছিল, এবং provisional পিনটিকে আবার খালি করে "" করে দিয়েছিল। ওই খালি লাইনটি হলো একটি অধ্যায়ের সংক্ষিপ্ত রূপ: cast_candidates পরে একটি রেফারেন্স আছে, এমন একটি ছবি যার সাথে কোনো কিছুকে অ্যাঙ্কর করা যেতে পারে। শুধুমাত্র lock_candidate এর পরেই একটি ক্যারেক্টার আছে — নামযুক্ত, ক্যানোনিকাল, character_ref । দুইবারই একই প্রতিকৃতি; lock_candidate হলো সেই ধাপ যা এই দুটির মধ্যে সংযোগ স্থাপন করে, এবং খালি স্ট্রিংটি হলো তার রসিদ। রেকর্ডে একটি অ্যাঙ্কর, দুটি নয়।
👀 দুটি টুলই বাইট লিখেছিল, এবং এই সেটগুলোর কোনোটিই এই তালিকায় নেই: temp:provisional_ref_png এবং temp:character_ref_png । অধ্যায় ৫-এ আলোচনা করা হয়েছে কেন ওই কী-গুলো বিদ্যমান, এবং পরবর্তী নিয়মটি হলো কেন আপনি সেগুলো দেখতে পারবেন না।
👀 মনে রাখার মতো দুটি নিয়ম:
- বড় জিনিস স্টেটে যায় না। ১.৩ এমবি ছবিটি আর্টিফ্যাক্টসে গেছে; যে ছোট স্ট্রিংটি এটিকে নাম দেয়, সেটি স্টেটে গেছে। প্রতিটি প্রম্পটই টেক্সট, তাই মডেলকে যা কিছু দেখতে হবে, তা এর মধ্যেই আঁটতে হবে।
- প্রিফিক্সটি আজীবনের জন্য।
temp:এক টার্ন স্থায়ী হয়। কোনো প্রিফিক্স না থাকলে পুরো কথোপকথনটি স্থায়ী হয়।user:চিরকাল স্থায়ী হয় — অর্থাৎ চতুর্থ সপ্তাহ পর্যন্ত।
একটি যন্ত্রের আসল আউটপুট হলো, সেটি পরে যে বাক্যটি বলে তা নয়। বরং সেটি যে অবস্থায় রেখে যায়, সেটাই তার আসল আউটপুট।
আরও পড়ুন (ঐচ্ছিক)
৭. ৫ · কলব্যাক — তারের গভীরে প্রবেশ করা
সেই শুরুতে তুমি তোমার পরিচিতকে চারবার পোশাক পরিয়েছিলে, কিন্তু তার মুখ কখনও বদলায়নি — যদিও তুমি একবারও তার বর্ণনা নতুন করে দাওনি। এই অধ্যায় থেকেই ব্যাপারটা আর রহস্য থাকে না।
অংশটি: আপনার কোড, একটি নির্দিষ্ট মুহূর্তে। তারটি: আপনি → তারটি।
- কী — মডেলের প্রশ্ন করা এবং আপনার টুলটি চলার মাঝে আপনার নিজের কোডটি রাখুন।
- কেন —নির্দেশনা হলো একটি অনুরোধ। এভাবেই নিয়ম তৈরি করা হয়।
- কীভাবে — পড়ার জন্য একটি ফাইল, দুজন এজেন্টের কাছে পাঠানো একটি বাক্য, এবং উপত্যকায় একটি টগল।
পাঁচটি মুহূর্ত
👉📖 forge/agent/callbacks.py খুলুন। এখানে পাঁচটি ফাংশন এবং পাঁচটি নামযুক্ত মোমেন্ট রয়েছে:
cloudshell edit ~/agent-valley-lab/forge/agent/callbacks.py

👀 একটি কলব্যাক হলো আপনার নিজেরই কোড, যা ADK আপনার জন্য একটি নির্দিষ্ট মুহূর্তে চালু করে। মডেল চাক বা না চাক, এটি চলে।
👉📖 before_tool পড়ুন। মডেলের অনুরোধের পরে এবং আপনার ফাংশনটি চলার আগে এটি চালু হয় — এটিই শেষ মুহূর্ত যখন আপনি টুলটি কী গ্রহণ করতে চলেছে তা পরিবর্তন করতে পারেন। এখানেই এটি সিদ্ধান্ত নেয় যে পরবর্তী অঙ্কনটি কোন ছবির সাথে সংযুক্ত হবে:
png = (state.get("temp:_last_output_png") if mode == "latest"
else state.get("temp:character_ref_png")
or state.get("temp:provisional_ref_png"))
if png is None: # a later turn: the temp tier is gone
png = await artifact_png(tool_context, seed)
state["temp:active_reference_png"] = png
👀 দেখুন এটি কী স্পর্শ করছে: state । অধ্যায় ৪-এর ডিকশনারিটি। একটি কলব্যাক হলো সেই জায়গা যেখানে আপনি ওই ওয়্যারের ভেতরে প্রবেশ করেন। or এটি হলো সেই ক্রম যেখানে দুটি পিন রিজলভ হয় — প্রথমে লক করা রেফারেন্সটি, এবং তার পিছনে cast_candidates থেকে আসা অস্থায়ী রেফারেন্সটি — ফলে পাঠানোর জন্য সবসময় একটি ফেস থাকে।
👉📖 এর ঠিক উপরের ফাংশনটি পড়ুন, _apply_identity_lock । ভ্যালি এই ফাংশনটিই ব্যবহার করে:
picked = state.get("requested_reference") or canon
if state.get("identity_lock", True):
return canon, canon_png, f"identity lock → overruled {picked}, anchored to {canon}"
return picked, picked_png, f"lock off → honoured {picked}"
👀 প্রথম লাইনটা আবার পড়ুন। picked হলো উপত্যকায় আপনার তোলা ছবিটি। আর পরের লাইনে বলা হয়েছে, ‘can throw it away’।
ঐ একটি লাইন আসলে কী সিদ্ধান্ত নেয়
প্রথমটির পরের প্রতিটি ড্রয়িং-এ ঠিক দুটি জিনিস থাকে: একটি ছবি এবং একটি বাক্য। উপরের ওই লাইনটি ছবিটি বেছে নেয়।
👀 ওই খামটি পূরণ করার মাত্র দুটি উপায় আছে। একই মডেল, একই প্রম্পট টেমপ্লেট, প্রতিটিতে তিনবার করে:
- ⚓ পিন করাটি প্রতি মোড়ে
P0, অর্থাৎ আপনার দাবি করা প্রতিকৃতিটি, পাঠায়। বাক্যটি এ পর্যন্ত পুরো সাজটিকে বহন করে — "এখন মুকুট, স্কার্ফ, লণ্ঠন পরিহিত" । শব্দ ছাড়া আর কিছুই জমা হয় না। - ◈ আনপিনড গত টার্নের আউটপুট পাঠায় — প্রথমে
P0, তারপরP1, তারপরP2— এবং বাক্যটিতে কেবল নতুনতম আইটেমটি থাকে। একটি ফটোকপির ফটোকপি।
👀 এই কারণেই পরিবর্তনটা স্পষ্ট না হয়ে ধীরে ধীরে হয়। দ্বিতীয় টার্নে মডেলটি আপনার ক্রিয়েচারের দিকে তাকায় না; এটি আপনার ক্রিয়েচার সম্পর্কে তার নিজের সেরা অনুমানের দিকে তাকায়। এর করা যেকোনো ছোটখাটো ভুলই এখন তৃতীয় টার্নের জন্য চূড়ান্ত সত্য হয়ে দাঁড়ায়।
এটা ধরে রাখতে দেখো
grove হলো একটি মডেল এবং দুটি টুল। grove_locked হলো সেটি, সাথে তৃতীয় টুলটি এবং আপনি এইমাত্র পড়া পাঁচটি কলব্যাক — একই ফাইল, সংযুক্ত। উভয়কে একই বাক্য পাঠান।
👉💻 এই অংশটি এখন ডেভ UI-তে আছে, ভ্যালিতে নয়। যদি ট্যাব ১ এখনও এটি সার্ভ করে, তবে এটিকে চলতে দিন; আর যদি বন্ধ করে থাকেন, তবে আবার চালু করুন:
cd ~/agent-valley-lab
uv run adk web . --allow_origins="*"
👉🔬 grove , পোশাক পরিবর্তনের জন্য অনুরোধ করুন। যদি এই সেশনে মোচি ইতিমধ্যেই অন্য কেউ নিয়ে থাকে, তবে তাকে সরাসরি পাঠিয়ে দিন; যদি সেশনটি নতুন বা খালি থাকে, তবে প্রথমে একটি ফ্যামিলিয়ার দাবি করুন: summon something cozy that likes rain, and call it Mochi । তারপর পাঠান:
give it a golden crown
আপনার মুকুট পরা একটি ভিন্ন প্রাণী দেখা উচিত । grove কোনো generate_look নেই। এর একমাত্র টুল যা ড্র করে তা হলো cast_candidates , এবং এটি প্রতিবার চলার সময় একটি নতুন ফ্যামিলিয়ার শুরু করে — তাই এটি একটি নতুনকে ডেকে আনে। আপনি মুকুটটি পান এবং মোচিকে হারান। এখানকার কোনো কিছুই কখনো ওই মুখটা ধরে রাখার জন্য তৈরি হয়নি।
👉🔬 এখন একটি অ্যাপ বেছে নিন →
grove_locked । এটি একটি নতুন অ্যাপ, তাই এটি একটি নতুন সেশন পাবে — এখানেও একটি পরিচিত সত্তাকে দাবি করুন: summon something cozy that likes rain, and call it Mochi । তারপর একই বাক্যটি পাঠান:
give it a golden crown
👀 একই চেহারা, নতুন পোশাক। চিপটি খুলুন: যে টুলটি চলেছিল সেটি হলো generate_look ।
এই হুবহু জোড়াটির একটি আসল দৌড়ের নমুনা এখানে দেওয়া হলো, যেখানে সঙ্গীটি ছিল ভিন্ন: প্রথমে একটি হলুদ রেইনকোট পরা সীল, তারপর একটি লাল স্কার্ফ পরা। সেই একই সীলটি স্কার্ফটি পরে ফিরে এসেছিল — একই মুখ, একই চোখ, একই হুড।
👉🔬 রাজ্য ট্যাবটি খুলুন:
current_look {"form": "a golden crown", "artifact": "look_0.png", "anchored_to": "canon", "identity_hue": null}
👀 anchored_to: "canon" হলো before_tool একটি রসিদ রেখে যাওয়ার মতো। মডেলের অনুরোধ করা এবং আপনার ফাংশনটি চলার মধ্যবর্তী সময়ে, এটি আপনার দাবি করা পোর্ট্রেটটি নিয়ে এসেছে এবং সেই ছবির বাইটগুলো — প্রায় এক মেগাবাইটের PNG ফাইল, ফাইলের নাম নয় — ইমেজ মডেলের সামনে রেখে দিয়েছে। মুখটি টিকে যাওয়ার এটাই একমাত্র কারণ। আপনি এটি প্রম্পটে লেখেননি, এবং মডেলেরও কোনো মতামত দেওয়ার সুযোগ ছিল না।
এখন এটা বন্ধ করুন
👉🔬 উপত্যকায় ফিরে এসে, লকটিতে চাপ দিন যাতে লেখাটি 🔓 আইডেন্টিটি লক · অফ দেখায়। আরও তিন-চারটি অনুরোধ পাঠান, এবং প্রতিবার স্ট্রিপটিকে আপনার সাথে সামনে এগোতে দিন।

before_tool lock off → honoured look_3.png
👀 এখন আপনার পছন্দকে সম্মান জানানো হচ্ছে, এবং প্রতিটি রেন্ডার তার আগের রেন্ডারটিকে নকল করছে। স্ট্রিপটি বরাবর দেখুন — একটি গোলাকার চোখ, একটি ভিন্ন মুখ, একটি কান যা নড়েছে। এমন কিছুই নেই যা দেখে আপনি বলবেন "ভুল প্রাণী"। এটাই একে বিপজ্জনক করে তোলে: প্রতিটি পরিবর্তন আগেরটিকে নকল করে, ফলে ছোট ছোট পরিবর্তনগুলো জমা হতে থাকে।
👀 P0 → P1 → P2 → P3 — আগের সেই ফটোকপির ধারাটি, যা আপনার নিজের পরিচিত পথেই চলছে।
👉🔬 লকটি আবার লাগিয়ে দিন এবং আরেকবার পাঠান। এটি সশব্দে ফিরে আসে — ক্যানন কখনও হারায়নি। এটি সংরক্ষিত হয়ে আছে, অপেক্ষা করছে কেউ আবার এটির দিকে আঙুল তুলবে।
তিনটি ধাপ, দুটি নয়
👀 তুমি এখন এই জিনিসটা নিয়ন্ত্রণ করতে তিনটি উপায়ই ব্যবহার করেছ, এবং সেগুলো সমান নয়:
যে এর নিশ্চয়তা দেয় | |
একটি নির্দেশ — "সর্বদা একটি সুন্দর প্রাণী" | মডেলটি, যদি তার ইচ্ছে হয় |
আপনার পছন্দ — একটি রেফারেন্সে ক্লিক করা | কেউ না। এটা একটা অনুরোধ, এবং তা অগ্রাহ্য করা যেতে পারে। |
একটি কলব্যাক — পরিচয় লক | আপনার কোড। প্রতিবার। কোনো ব্যতিক্রম ছাড়া। |
নির্দেশনা হলো একটি অনুরোধ। কলব্যাক হলো একটি নিয়ম।
যা আপনি হারাতে পারেন না, তা প্রম্পটে থাকার কথা নয়, ক্লিকেও নয়। এর স্থান হলো কলব্যাকে।
৮. বন্ধ করুন
আরও একটি পরীক্ষা
👉🔬 অ্যাপটি হার্ড-রিলোড করুন (Cmd/Ctrl + Shift + R)।

👀 আপনার পরিচিত সত্তাটি এখনও সেখানেই আছে, এখনও তার নাম আছে, এখনও সেই পোশাকেই আছে — কিন্তু ইন্সপেক্টরের টেপটি খালি এসেছে। এক সেকেন্ড আগেও দুটোই "অ্যাপে" ছিল। একটি লেখা হয়েছিল; অন্যটি নয়। আপনার কোন ডেটাটি কোনটি, তা জানাটাই কাজের বেশিরভাগ অংশ।
👉🔬 ✨ শেষ করুন , তারপর ⤓ পাসপোর্ট সংরক্ষণ করুন ।

আপনি আসলে যা শিখেছেন
একজন এজেন্ট হলো বিভিন্ন অংশ এবং তাদের মধ্যকার সংযোগসূত্র:
অংশটি | তার |
নির্দেশনাসহ একটি মডেল | এটি কেবল কথা বলতে পারে |
একটি সরঞ্জাম | মডেলটি জিজ্ঞাসা করে, রানটাইম চলে |
একটি দ্বিতীয় সরঞ্জাম | একটি টুল স্টেট লেখে, পরেরটি তা পড়ে। |
একটি কলব্যাক | আপনার কোড, সেই তারের মধ্যে প্রবেশ করছে |
আর সব মিলিয়ে যে চক্রটি তৈরি হয় তা হলো: শোনা → সিদ্ধান্ত নেওয়া → কাজ করা → অবস্থার পরিবর্তন। তারপর আবার শোনা। ক্লড কোড এটি দিয়ে আপনার ফাইল সম্পাদনা করে। ডিপ রিসার্চ এটি দিয়ে ব্রাউজ করে। জেমিনি সিএলআই এটি দিয়ে আপনার শেল চালায়। একই চক্র — কিন্তু আড়ালে রয়েছে ভিন্ন ভিন্ন সরঞ্জাম।
একটি মডেল কেবল কথা বলতে পারে। একটি প্রোগ্রাম কেবল তার স্ক্রিপ্ট অনুসরণ করতে পারে। একটি এজেন্ট হলো সেই মেলবন্ধন — এবং টুলটি যা পরিবর্তন করে, তা-ই হলো অবস্থা।
এরপর কোথায় যাবেন
- দ্বিতীয় সপ্তাহে বিল্ডইয়ার্ড শুরু হচ্ছে। আজ রাতের সবকিছু একজন এজেন্টের অধীনে ছিল। আগামী সপ্তাহের সমস্যা হলো, একজন এজেন্ট একা পুরো একটি কাজ সামলাতে পারে না — এবং এর সমাধান হলো আরও বেশি এজেন্ট নিয়োগ করা, কাজের পরিধি বাড়ানো নয়। পাঁচটি সপ্তাহই এখানে: goo.gle/agent101
- এজেন্ট দুটির মধ্যে পার্থক্য করুন।
forge/agent/character_forge.pyহলোgrove/agent.pyএর সাথে একটি তৃতীয় টুল এবং আপনি এইমাত্র যে পাঁচটি কলব্যাক চালু হতে দেখলেন, সেগুলোর সমষ্টি। যোগ করা প্রতিটি জিনিসই হলো নিয়ন্ত্রণ। - তৃতীয় টুলটি হলো
generate_look(form), যেটি আপনি কখনোgroveসংযুক্ত করেননি — এটি কেবল একই ফেস ধরে রাখে কারণ একটি কলব্যাক এর রেফারেন্সটি পিন করে রাখে। এই কারণেই এটি কলব্যাকগুলোর সাথেই থাকে।