1. ওভারভিউ
আজকের ডেটা-সমৃদ্ধ বিশ্বে, অসংগঠিত বিষয়বস্তু, বিশেষ করে ভিডিও থেকে অর্থপূর্ণ অন্তর্দৃষ্টি বের করা একটি গুরুত্বপূর্ণ প্রয়োজন। শত শত বা হাজার হাজার ভিডিও URL বিশ্লেষণ করার, তাদের বিষয়বস্তুর সংক্ষিপ্তকরণ, মূল প্রযুক্তিগুলি বের করা এবং এমনকি শিক্ষাগত সামগ্রীর জন্য প্রশ্নোত্তর জোড়া তৈরি করার প্রয়োজন কল্পনা করুন৷ একে একে করা শুধু সময়সাপেক্ষ নয়, অদক্ষও বটে। আধুনিক ক্লাউড আর্কিটেকচারগুলি এখানেই জ্বলজ্বল করে।
এই ল্যাবে, আমরা Google ক্লাউডের শক্তিশালী পরিষেবাগুলির স্যুট ব্যবহার করে ভিডিও সামগ্রী প্রক্রিয়া করার জন্য স্কেলযোগ্য, সার্ভারহীন সমাধানের মধ্য দিয়ে হেঁটে যাব: ক্লাউড রান, বিগকুয়েরি, এবং Google এর জেনারেটিভ এআই (জেমিনি)৷ জটিল মেসেজিং সারি এবং ইন্টিগ্রেশন পরিচালনার ওভারহেড ছাড়াই আমরা একটি একক URL প্রক্রিয়াকরণ থেকে শুরু করে একটি বৃহৎ ডেটাসেট জুড়ে সমান্তরাল কার্য সম্পাদনের আমাদের যাত্রার বিস্তারিত বিবরণ দেব।
চ্যালেঞ্জ
আমাদেরকে ভিডিও সামগ্রীর একটি বড় ক্যাটালগ প্রক্রিয়াকরণের দায়িত্ব দেওয়া হয়েছিল, বিশেষত হ্যান্ড-অন ল্যাব সেশনগুলিতে ফোকাস করা। লক্ষ্য ছিল প্রতিটি ভিডিও বিশ্লেষণ করা এবং অধ্যায়ের শিরোনাম, ভূমিকা প্রসঙ্গ, ধাপে ধাপে নির্দেশাবলী, ব্যবহৃত প্রযুক্তি এবং প্রাসঙ্গিক প্রশ্নোত্তর জোড়া সহ একটি কাঠামোগত সারাংশ তৈরি করা। এই আউটপুট শিক্ষাগত উপকরণ নির্মাণে পরবর্তীতে ব্যবহারের জন্য দক্ষতার সাথে সংরক্ষণ করা প্রয়োজন।
প্রাথমিকভাবে, আমাদের একটি সাধারণ HTTP-ভিত্তিক ক্লাউড রান পরিষেবা ছিল যা একবারে একটি URL প্রক্রিয়া করতে পারে। এটি পরীক্ষা এবং অ্যাড-হক বিশ্লেষণের জন্য ভাল কাজ করেছে। যাইহোক, যখন BigQuery থেকে উৎসারিত হাজার হাজার ইউআরএলের তালিকার মুখোমুখি হয়, তখন এই একক-অনুরোধের, একক-প্রতিক্রিয়া মডেলের সীমাবদ্ধতাগুলি স্পষ্ট হয়ে ওঠে। ক্রমিক প্রক্রিয়াকরণে দিন লাগবে, সপ্তাহ না হলে।
সুযোগটি ছিল একটি ম্যানুয়াল বা ধীর ক্রমিক প্রক্রিয়াকে একটি স্বয়ংক্রিয়, সমান্তরাল ওয়ার্কফ্লোতে রূপান্তর করার। ক্লাউড ব্যবহার করে, আমরা লক্ষ্য করেছি:
- সমান্তরালভাবে ডেটা প্রক্রিয়া করুন: বড় ডেটাসেটের জন্য প্রক্রিয়াকরণের সময় উল্লেখযোগ্যভাবে হ্রাস করুন।
- বিদ্যমান AI ক্ষমতাগুলিকে কাজে লাগান: পরিশীলিত বিষয়বস্তু বিশ্লেষণের জন্য মিথুনের শক্তি ব্যবহার করুন৷
- সার্ভারহীন স্থাপত্য বজায় রাখুন: সার্ভার বা জটিল অবকাঠামো পরিচালনা এড়িয়ে চলুন।
- ডেটা সেন্ট্রালাইজ করুন: ইনপুট URL-এর জন্য সত্যের একক উৎস এবং প্রক্রিয়াকৃত ফলাফলের জন্য একটি নির্ভরযোগ্য গন্তব্য হিসাবে BigQuery ব্যবহার করুন।
- একটি শক্তিশালী পাইপলাইন তৈরি করুন: এমন একটি সিস্টেম তৈরি করুন যা ব্যর্থতার জন্য স্থিতিস্থাপক এবং সহজেই পরিচালনা এবং পর্যবেক্ষণ করা যায়।
উদ্দেশ্য
ক্লাউড রান জবের সাথে সমান্তরাল এআই প্রসেসিং অর্কেস্ট্রেটিং:
আমাদের সমাধান একটি ক্লাউড রান জবকে কেন্দ্র করে যা একজন অর্কেস্ট্রেটর হিসেবে কাজ করে। এটি বুদ্ধিমত্তার সাথে BigQuery থেকে ইউআরএলের ব্যাচ পড়ে, এই ইউআরএলগুলিকে আমাদের বিদ্যমান, নিয়োজিত ক্লাউড রান সার্ভিসে (যেটি একটি ইউআরএলের জন্য এআই প্রসেসিং পরিচালনা করে) পাঠায় এবং তারপর সেগুলিকে BigQuery-এ আবার লিখতে ফলাফলগুলিকে একত্রিত করে। এই পদ্ধতি আমাদের অনুমতি দেয়:
- প্রক্রিয়াকরণ থেকে ডিকপল অর্কেস্ট্রেশন: কাজটি ওয়ার্কফ্লো পরিচালনা করে, যখন পৃথক পরিষেবা AI টাস্কের উপর ফোকাস করে।
- লিভারেজ ক্লাউড রান কাজের সমান্তরালতা: কাজটি একই সাথে AI পরিষেবাকে কল করার জন্য একাধিক কন্টেইনার উদাহরণ স্কেল করতে পারে।
- জটিলতা হ্রাস করুন: স্থাপত্যকে সরলীকরণ করে কাজটি সরাসরি সমসাময়িক HTTP কলগুলি পরিচালনা করার মাধ্যমে আমরা সমান্তরালতা অর্জন করি।
কেস ব্যবহার করুন
কোড বিপাসনা সেশন ভিডিও থেকে AI-চালিত অন্তর্দৃষ্টি
আমাদের নির্দিষ্ট ব্যবহারের ক্ষেত্রে কোড Vipassana হ্যান্ডস-অন ল্যাবের Google ক্লাউড সেশনের ভিডিও বিশ্লেষণ করা হয়েছিল। লক্ষ্য ছিল স্বয়ংক্রিয়ভাবে কাঠামোগত ডকুমেন্টেশন তৈরি করা (বই অধ্যায়ের রূপরেখা), সহ:
- অধ্যায়ের শিরোনাম: প্রতিটি ভিডিও বিভাগের জন্য সংক্ষিপ্ত শিরোনাম
- ভূমিকা প্রসঙ্গ: বৃহত্তর শেখার পথে ভিডিওটির প্রাসঙ্গিকতা ব্যাখ্যা করা
- কী তৈরি করা হবে: সেশনের মূল কাজ বা লক্ষ্য
- ব্যবহৃত প্রযুক্তি: ক্লাউড পরিষেবার তালিকা এবং অন্যান্য প্রযুক্তি উল্লেখ করা হয়েছে
- ধাপে ধাপে নির্দেশনা: কোড স্নিপেট সহ টাস্কটি কীভাবে সম্পাদিত হয়েছিল
- সোর্স কোড/ডেমো ইউআরএল: ভিডিওতে দেওয়া লিঙ্ক
- প্রশ্নোত্তর বিভাগ: জ্ঞান পরীক্ষার জন্য প্রাসঙ্গিক প্রশ্ন এবং উত্তর তৈরি করা।
প্রবাহ
স্থাপত্যের প্রবাহ
ক্লাউড রান কি? ক্লাউড রান কাজ কি?
ক্লাউড রান
একটি সম্পূর্ণরূপে পরিচালিত সার্ভারহীন প্ল্যাটফর্ম যা আপনাকে স্টেটলেস কন্টেইনার চালানোর অনুমতি দেয়। এটি ওয়েব পরিষেবা, API এবং মাইক্রোসার্ভিসের জন্য আদর্শ যা আগত অনুরোধের উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে স্কেল করতে পারে৷ আপনি একটি কন্টেইনার ইমেজ প্রদান করেন এবং ক্লাউড রান বাকিগুলি পরিচালনা করে — স্থাপনা এবং পরিকাঠামো পরিচালনা করা পর্যন্ত। এটি সিঙ্ক্রোনাস, অনুরোধ-প্রতিক্রিয়া ওয়ার্কলোডগুলি পরিচালনা করতে পারদর্শী।
ক্লাউড রান জবস
একটি অফার যা ক্লাউড রান পরিষেবার পরিপূরক। ক্লাউড রান জবগুলি ব্যাচ প্রসেসিং কাজগুলির জন্য ডিজাইন করা হয়েছে যেগুলি সম্পূর্ণ করতে হবে এবং তারপরে থামতে হবে৷ এগুলি ডেটা প্রসেসিং, ETL, মেশিন লার্নিং ব্যাচ ইনফারেন্স, এবং লাইভ অনুরোধগুলি পরিবেশন করার পরিবর্তে ডেটাসেট প্রক্রিয়াকরণের সাথে জড়িত যে কোনও কাজের জন্য উপযুক্ত। একটি মূল বৈশিষ্ট্য হল একটি ব্যাচের কাজ প্রক্রিয়া করার জন্য একযোগে চলমান কন্টেইনার ইনস্ট্যান্সের সংখ্যা (কাজ) স্কেল করার ক্ষমতা এবং সেগুলি বিভিন্ন ইভেন্ট উত্স বা ম্যানুয়ালি দ্বারা ট্রিগার করা যেতে পারে।
কী পার্থক্য
ক্লাউড রান পরিষেবাগুলি দীর্ঘ-চলমান, অনুরোধ-চালিত অ্যাপ্লিকেশনগুলির জন্য। ক্লাউড রান জবগুলি সসীম, টাস্ক-ভিত্তিক ব্যাচ প্রক্রিয়াকরণের জন্য যা সম্পূর্ণ হওয়ার জন্য চলে।
আপনি কি নির্মাণ করবেন
একটি খুচরা অনুসন্ধান অ্যাপ্লিকেশন
এর অংশ হিসাবে, আপনি করবেন:
- একটি BigQuery ডেটাসেট, টেবিল তৈরি করুন এবং ডেটা ইনজেস্ট করুন (কোড বিপাসনা মেটাডেটা)
- জেনারেটিভ এআই কার্যকারিতা বাস্তবায়নের জন্য একটি পাইথন ক্লাউড রান ফাংশন তৈরি করুন (ভিডিওকে জেসন বইয়ের অধ্যায়ে রূপান্তর করা)
- AI পাইপলাইনে ডেটার জন্য একটি পাইথন অ্যাপ্লিকেশন তৈরি করুন - BigQuery থেকে পড়ুন এবং অন্তর্দৃষ্টির জন্য ক্লাউড রান ফাংশন এন্ডপয়েন্ট চালু করুন এবং প্রসঙ্গটি BigQuery-এ আবার লিখুন
- অ্যাপ্লিকেশনটি তৈরি করুন এবং ধারণ করুন
- এই ধারকটির সাথে একটি ক্লাউড রান জব কনফিগার করুন
- কাজ সম্পাদন এবং নিরীক্ষণ
- রিপোর্ট ফলাফল
প্রয়োজনীয়তা
- একটি ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স
- বিলিং সক্ষম সহ একটি Google ক্লাউড প্রকল্প৷
2. আপনি শুরু করার আগে
একটি প্রকল্প তৈরি করুন
- Google ক্লাউড কনসোলে , প্রকল্প নির্বাচক পৃষ্ঠায়, একটি Google ক্লাউড প্রকল্প নির্বাচন করুন বা তৈরি করুন।
- নিশ্চিত করুন যে আপনার ক্লাউড প্রকল্পের জন্য বিলিং সক্ষম করা আছে৷ একটি প্রকল্পে বিলিং সক্ষম কিনা তা পরীক্ষা করতে শিখুন।
Google ক্লাউড ক্রেডিটগুলির জন্য: আপনি যদি শুরু করতে সাহায্য করার জন্য Google ক্লাউড ক্রেডিট পেতে চান, তাহলে ক্রেডিট রিডিম করতে এই লিঙ্কটি ব্যবহার করুন৷ আপনি এটি রিডিম করতে এখানে নির্দেশাবলী অনুসরণ করতে পারেন ।
- আপনি Cloud Shell ব্যবহার করবেন, Google ক্লাউডে চলমান একটি কমান্ড-লাইন পরিবেশ। গুগল ক্লাউড কনসোলের শীর্ষে সক্রিয় ক্লাউড শেল ক্লিক করুন।
- একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি পরীক্ষা করে দেখুন যে আপনি ইতিমধ্যেই প্রমাণীকৃত হয়েছেন এবং নিম্নলিখিত কমান্ডটি ব্যবহার করে প্রকল্পটি আপনার প্রকল্প আইডিতে সেট করা আছে:
gcloud auth list
- gcloud কমান্ড আপনার প্রকল্প সম্পর্কে জানে তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান।
gcloud config list project
- যদি আপনার প্রজেক্ট সেট করা না থাকে, তাহলে এটি সেট করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
gcloud config set project <YOUR_PROJECT_ID>
- প্রয়োজনীয় API গুলি সক্রিয় করুন: লিঙ্কটি অনুসরণ করুন এবং APIগুলি সক্ষম করুন৷
বিকল্পভাবে আপনি এর জন্য gcloud কমান্ড ব্যবহার করতে পারেন। জিক্লাউড কমান্ড এবং ব্যবহারের জন্য ডকুমেন্টেশন পড়ুন।
3. ডাটাবেস/গুদাম সেটআপ
BigQuery আমাদের ডেটা পাইপলাইনের মেরুদণ্ড হিসেবে কাজ করে। এটির সার্ভারহীন, অত্যন্ত স্কেলযোগ্য প্রকৃতি এটিকে আমাদের ইনপুট ডেটা সংরক্ষণ এবং প্রক্রিয়াকৃত ফলাফল উভয়ের জন্য নিখুঁত করে তোলে।
- ডেটা স্টোরেজ: BigQuery আমাদের ডেটা গুদাম হিসেবে কাজ করেছে। এটি ভিডিও ইউআরএলের তালিকা, তাদের স্থিতি (যেমন, পেন্ডিং, প্রসেসিং, সম্পূর্ণ), এবং চূড়ান্ত উৎপন্ন প্রসঙ্গ সংরক্ষণ করে। এটি সত্যের একক উত্স যার জন্য ভিডিওগুলি প্রক্রিয়াকরণের প্রয়োজন৷
- গন্তব্য: এখানেই AI-উত্পন্ন অন্তর্দৃষ্টিগুলি টিকে থাকে, যেগুলিকে ডাউনস্ট্রিম অ্যাপ্লিকেশন বা ম্যানুয়াল পর্যালোচনার জন্য সহজেই জিজ্ঞাসাযোগ্য করে তোলে৷ আমাদের ডেটাসেটে ভিডিও সেশনের বিশদ রয়েছে, বিশেষ করে "কোড বিপাসনা সিজনস" বিষয়বস্তু থেকে, যেটিতে প্রায়শই বিস্তারিত প্রযুক্তিগত প্রদর্শন জড়িত থাকে।
- উৎস সারণী: একটি BigQuery টেবিল (যেমন, post_session_labs) যাতে রেকর্ড থাকে:
- id: প্রতিটি সেশন/সারির জন্য একটি অনন্য শনাক্তকারী।
- url: ভিডিওর URL (যেমন, একটি YouTube লিঙ্ক বা একটি অ্যাক্সেসযোগ্য ড্রাইভ লিঙ্ক)।
- স্থিতি: একটি স্ট্রিং প্রক্রিয়াকরণ অবস্থা নির্দেশ করে (যেমন, পেন্ডিং, প্রসেসিং, সম্পূর্ণ, FAILED_PROCESSING)।
- প্রসঙ্গ: AI-উত্পন্ন সারাংশ সংরক্ষণ করার জন্য একটি স্ট্রিং ক্ষেত্র।
- ডেটা ইনজেশন: এই পরিস্থিতিতে, INSERT স্ক্রিপ্ট সহ BigQuery-এ ডেটা ইনজেস্ট করা হয়েছিল৷ আমাদের পাইপলাইনের জন্য, BigQuery ছিল স্টার্টিং পয়েন্ট।
BigQuery কনসোলে যান, একটি নতুন ট্যাব খুলুন এবং নিম্নলিখিত SQL স্টেটমেন্টগুলি চালান:
--1. Create your dataset for the project
CREATE SCHEMA `<<YOUR_PROJECT_ID>>.cv_metadata`
OPTIONS(
location = 'us-central1', -- Specify the location (e.g., 'US', 'EU', 'asia-east1')
description = 'Code Vipassana Sessions Metadata' -- Optional: Add a description
);
--2. Create table
create table cv_metadata.post_session_labs(id STRING, descr STRING, url STRING, context STRING, status STRING);
4. ডেটা ইনজেশন
এখন স্টোর সম্পর্কে ডেটা সহ একটি টেবিল যুক্ত করার সময়। BigQuery স্টুডিওতে একটি ট্যাবে নেভিগেট করুন এবং নমুনা রেকর্ড ঢোকানোর জন্য নিম্নলিখিত SQL স্টেটমেন্টগুলি চালান:
--Insert sample data
insert into cv_metadata.post_session_labs(id,descr,url) values('10-1','Gen AI to Agents, where do I begin? Get started with building a single agent application on ADK Python SDK','https://youtu.be/tyqnQQXpxtI');
insert into cv_metadata.post_session_labs(id,descr,url) values('10-2','Build an E2E multi-agent kitchen renovation app on ADK in Python with AlloyDB data and multiple tools','https://youtu.be/RdrMo2lNh0o');
insert into cv_metadata.post_session_labs(id,descr,url) values('10-3','Augment your multiagent app with tools from MCP Toolbox for AlloyDB','https://youtu.be/9VVNh77Q3ZU?si=oQ4fhAX59Y3D5iWa');
insert into cv_metadata.post_session_labs(id,descr,url) values('10-4','Build an agentic MCP client application using MCP Toolbox for BigQuery','https://youtu.be/HmluMag5s20');
insert into cv_metadata.post_session_labs(id,descr,url) values('10-5','Build a travel agent using ADK & MCP Toolbox for Cloud SQL','https://youtu.be/IWg5CH6ZNs0');
insert into cv_metadata.post_session_labs(id,descr,url) values('10-6','Build an E2E Patent Analysis Agent using ADK and Advanced Vector Search with AlloyDB','https://youtu.be/yCXJ3sk3Lxc');
insert into cv_metadata.post_session_labs(id,descr,url) values('10-7','Getting Started with MCP, ADK and A2A','https://youtu.be/JcQ_DyWc0X0');
5. ভিডিও অন্তর্দৃষ্টি ফাংশন সৃষ্টি
আমাদের একটি ক্লাউড রান ফাংশন তৈরি এবং স্থাপন করতে হবে কার্যকারিতার মূলটি বাস্তবায়ন করতে যা ভিডিও URL থেকে একটি কাঠামোবদ্ধ বই অধ্যায় তৈরি করতে হবে। একটি স্বাধীন এন্ডপয়েন্ট টুলবক্স টুল হিসাবে এটি অ্যাক্সেস করতে সক্ষম হওয়ার জন্য আমরা এইমাত্র একটি ক্লাউড রান ফাংশন তৈরি এবং স্থাপন করেছি। বিকল্পভাবে আপনি ক্লাউড রান কাজের জন্য প্রকৃত পাইথন অ্যাপ্লিকেশনে একটি পৃথক ফাংশন হিসাবে এটি অন্তর্ভুক্ত করতে বেছে নিতে পারেন:
- Google ক্লাউড কনসোলে, ক্লাউড রান পৃষ্ঠাতে যান
- একটি ফাংশন লিখুন ক্লিক করুন.
- পরিষেবার নাম ক্ষেত্রে, আপনার ফাংশন বর্ণনা করতে একটি নাম লিখুন। পরিষেবার নামগুলি শুধুমাত্র একটি অক্ষর দিয়ে শুরু করতে হবে এবং অক্ষর, সংখ্যা বা হাইফেন সহ 49টি বা তার কম অক্ষর থাকতে হবে৷ পরিষেবার নামগুলি হাইফেন দিয়ে শেষ হতে পারে না এবং অঞ্চল এবং প্রকল্পের জন্য অনন্য হতে হবে৷ একটি পরিষেবার নাম পরে পরিবর্তন করা যাবে না এবং সর্বজনীনভাবে দৃশ্যমান। ( ভিডিও-অন্তর্দৃষ্টি তৈরি করুন **)**
- অঞ্চল তালিকায়, ডিফল্ট মান ব্যবহার করুন, অথবা আপনি যে অঞ্চলে আপনার ফাংশন স্থাপন করতে চান সেটি নির্বাচন করুন। (আমাদের নির্বাচন করুন-কেন্দ্রীয়1)
- রানটাইম তালিকায়, ডিফল্ট মান ব্যবহার করুন বা রানটাইম সংস্করণ নির্বাচন করুন। (পাইথন 3.11 চয়ন করুন)
- প্রমাণীকরণ বিভাগে, "পাবলিক অ্যাক্সেসের অনুমতি দিন" নির্বাচন করুন
- "তৈরি করুন" বোতামে ক্লিক করুন
- ফাংশনটি তৈরি করা হয় এবং একটি টেমপ্লেট main.py এবং requirements.txt দিয়ে লোড হয়
- এই প্রকল্পের রেপো থেকে ফাইলগুলি: main.py এবং requirements.txt দিয়ে এটি প্রতিস্থাপন করুন
গুরুত্বপূর্ণ দ্রষ্টব্য: main.py-এ, আপনার প্রজেক্ট আইডি দিয়ে <<YOUR_PROJECT_ID>> প্রতিস্থাপন করতে ভুলবেন না।
- এন্ডপয়েন্ট স্থাপন করুন এবং সংরক্ষণ করুন যাতে আপনি ক্লাউড রান কাজের জন্য আপনার উত্সে এটি ব্যবহার করতে পারেন।
আপনার এন্ডপয়েন্ট এইরকম হওয়া উচিত (বা অনুরূপ কিছু): https://generate-video-insights-<<YOUR_POJECT_NUMBER>>.us-central1.run.app
এই ক্লাউড রান ফাংশনে কি আছে?
ভিডিও প্রক্রিয়াকরণের জন্য জেমিনি 2.5 ফ্ল্যাশ
ভিডিও বিষয়বস্তু বোঝার এবং সংক্ষিপ্ত করার মূল কাজটির জন্য, আমরা Google-এর জেমিনি 2.5 ফ্ল্যাশ মডেলটি ব্যবহার করেছি। জেমিনি মডেলগুলি শক্তিশালী, মাল্টিমোডাল AI মডেলগুলি পাঠ্য এবং নির্দিষ্ট ইন্টিগ্রেশন সহ, ভিডিও সহ বিভিন্ন ধরণের ইনপুট বুঝতে এবং প্রক্রিয়া করতে সক্ষম।
আমাদের সেটআপে, আমরা সরাসরি মিথুনকে ভিডিও ফাইল ফিড করিনি। পরিবর্তে, আমরা একটি পাঠ্য প্রম্পট পাঠিয়েছি যাতে ভিডিও URL অন্তর্ভুক্ত ছিল এবং সেই URL-এ একটি ভিডিওর (অনুমানিক) বিষয়বস্তু কীভাবে বিশ্লেষণ করতে হয় সে সম্পর্কে মিথুনকে নির্দেশ দিয়েছি। যদিও জেমিনি 2.5 ফ্ল্যাশ মাল্টিমোডাল ইনপুট করতে সক্ষম, এই নির্দিষ্ট পাইপলাইনটি একটি পাঠ্য-ভিত্তিক প্রম্পট ব্যবহার করেছে যা ভিডিওর প্রকৃতি বর্ণনা করেছে (একটি হ্যান্ড-অন ল্যাব সেশন) এবং একটি কাঠামোগত JSON আউটপুট অনুরোধ করেছে৷ প্রম্পটের প্রসঙ্গের উপর ভিত্তি করে তথ্য অনুমান এবং সংশ্লেষিত করতে এটি জেমিনীর উন্নত যুক্তি এবং প্রাকৃতিক ভাষা বোঝার সুবিধা দেয়।
মিথুন প্রম্পট: এআই গাইডিং
এআই মডেলগুলির জন্য একটি ভালভাবে তৈরি প্রম্পট অত্যন্ত গুরুত্বপূর্ণ। আমাদের প্রম্পটটি খুব নির্দিষ্ট তথ্য বের করার জন্য এবং এটিকে একটি JSON ফর্ম্যাটে গঠন করার জন্য ডিজাইন করা হয়েছিল, এটি আমাদের অ্যাপ্লিকেশন দ্বারা সহজেই পার্সযোগ্য করে তোলে।
PROMPT_TEMPLATE = """
In the video at the following URL: {youtube_url}, which is a hands-on lab session:
Ignore the credits set-up part particularly the coupon code and credits link aspect should not be included in your analysis or the extaction of context. Also exclude any credentials that are explicit in the video.
Take only the first 30-40 minutes of the video without throwing any error.
Analyze the rest of the content of the video.
Extract and synthesize information to create a book chapter section with the following structure, formatted as a JSON string:
1. **chapter_title:** A concise and engaging title for the chapter.
2. **introduction_context:** Briefly explain the relevance of this video segment within a broader learning context.
3. **what_will_build:** Clearly state the specific task or goal accomplished in this video segment.
4. **technologies_and_services:** List all mentioned Google Cloud services and any other relevant technologies (e.g., programming languages, tools, frameworks).
5. **how_we_did_it:** Provide a clear, numbered step-by-step guide of the actions performed. Include any exact commands or code snippets as they appear in the video. Format code/commands using markdown backticks (e.g., `my-command`).
6. **source_code_url:** Provide a URL to the source code repository if mentioned or implied. If not available, use "N/A".
7. **demo_url:** Provide a URL to a demo if mentioned or implied. If not available, use "N/A".
8. **qa_segment:** Generate 10–15 relevant questions based on the content of this segment, along with concise answers. Ensure the questions are thought-provoking and test understanding of the material.
REMEMBER: Ignore the credits set-up part particularly the coupon code and credits link aspect should not be included in your analysis or the extaction of context. Also exclude any credentials that are explicit in the video.
Format the entire output as a JSON string. Ensure all keys and string values are enclosed in double quotes.
Example structure:
...
"""
এই প্রম্পটটি অত্যন্ত সুনির্দিষ্ট, যা মিথুনকে বিভিন্ন ধরনের শিক্ষাবিদ হিসেবে কাজ করার জন্য নির্দেশনা দেয়। একটি JSON স্ট্রিংয়ের জন্য অনুরোধ কাঠামোগত, মেশিন-পাঠযোগ্য আউটপুট নিশ্চিত করে।
ভিডিও ইনপুট বিশ্লেষণ এবং এর প্রসঙ্গ ফেরানোর জন্য এখানে কোড রয়েছে:
def process_videos_batch(video_url: str, PROMPT_TEMPLATE: str) -> str:
"""
Processes a video URL, generates chapter content using Gemini
"""
formatted_prompt = PROMPT_TEMPLATE.format(youtube_url=video_url)
try:
client = genai.Client(vertexai=True,project='<<YOUR_PROJECT_ID>>',location='us-central1',http_options=HttpOptions(api_version="v1"))
response = client.models.generate_content(
model="gemini-2.5-flash",
contents=formatted_prompt,
)
print(response.text)
except Exception as e:
print(f"An error occurred during content generation: {e}")
return f"Error processing video: {e}"
print(response.text)
return response.text
উপরের এই স্নিপেটটি ব্যবহারের ক্ষেত্রে মূল ফাংশন প্রদর্শন করে। এটি একটি ভিডিও URL পায় এবং ভিডিও বিষয়বস্তু বিশ্লেষণ করতে এবং প্রম্পট অনুযায়ী প্রাসঙ্গিক অন্তর্দৃষ্টি বের করতে Vertex AI ক্লায়েন্টের মাধ্যমে Gemini মডেল ব্যবহার করে। নিষ্কাশিত প্রসঙ্গ তারপর আরও প্রক্রিয়াকরণের জন্য ফেরত দেওয়া হয়। এটি একটি সিঙ্ক্রোনাস অপারেশন উপস্থাপন করে যেখানে ক্লাউড রান জব পরিষেবাটি সম্পূর্ণ হওয়ার জন্য অপেক্ষা করে।
6. পাইপলাইন অ্যাপ্লিকেশন ডেভেলপমেন্ট (পাইথন)
আমাদের সেন্ট্রাল পাইপলাইন লজিক অ্যাপ্লিকেশনের সোর্স কোডের মধ্যে থাকে যা একটি ক্লাউড রান জব-এ কনটেইনারাইজ করা হবে, যা সমগ্র সমান্তরাল এক্সিকিউশনকে অর্কেস্ট্রেট করে। এখানে মূল অংশগুলি দেখুন:
ওয়ার্কফ্লো পরিচালনা এবং ডেটা অখণ্ডতা নিশ্চিত করতে অর্কেস্ট্রেটরের ভূমিকা:
# ... (imports and configuration) ...
def process_batch_from_bq(request_or_trigger_data=None):
# ... (initial checks for config) ...
BATCH_SIZE = 5 # Fetch 5 URLs at a time per job instance
query = f"""
SELECT url, id
FROM `{BIGQUERY_PROJECT}.{BIGQUERY_DATASET}.{BIGQUERY_TABLE_SOURCE}`
WHERE status = 'PENDING'
LIMIT {BATCH_SIZE}
"""
try:
logging.info(f"Fetching up to {BATCH_SIZE} pending URLs from BigQuery...")
rows = bq_client.query(query).result() # job_should_wait=True is default for result()
pending_urls_data = []
for row in rows:
pending_urls_data.append({"url": row.url, "id": row.id})
if not pending_urls_data:
logging.info("No pending URLs found. Job finished.")
return "No pending URLs found. Job finished.", 200
row_ids_to_process = [item["id"] for item in pending_urls_data]
# --- Mark as PROCESSING to prevent duplicate work ---
update_status_query = f"""
UPDATE `{BIGQUERY_PROJECT}.{BIGQUERY_DATASET}.{BIGQUERY_TABLE_SOURCE}`
SET status = 'PROCESSING'
WHERE id IN UNNEST(@row_ids_to_process)
"""
status_update_job_config = bigquery.QueryJobConfig(
query_parameters=[
bigquery.ArrayQueryParameter("row_ids_to_process", "STRING", values=row_ids_to_process)
]
)
update_status_job = bq_client.query(update_status_query, job_config=status_update_job_config)
update_status_job.result()
logging.info(f"Marked {len(row_ids_to_process)} URLs as 'PROCESSING'.")
# ... (rest of the code for parallel processing and writing) ...
except Exception as e:
# ... (error handling) ...
উপরের এই স্নিপেটটি BigQuery সোর্স টেবিল থেকে 'পেন্ডিং' স্ট্যাটাস সহ ভিডিও URL-এর একটি ব্যাচ আনার মাধ্যমে শুরু হয়। এটি তখন এই URLগুলির স্ট্যাটাসকে BigQuery-এ 'প্রসেসিং'-এ আপডেট করে, ডুপ্লিকেট প্রসেসিং প্রতিরোধ করে।
ThreadPoolExecutor এর সাথে সমান্তরাল প্রক্রিয়াকরণ এবং প্রসেসর পরিষেবা কল করা:
# ... (inside process_batch_from_bq function) ...
# --- Step 3: Call the external URL Processor Service in parallel ---
processed_results = {}
futures = []
# ThreadPoolExecutor for I/O-bound tasks (HTTP requests to the processor service)
# MAX_CONCURRENT_TASKS_PER_INSTANCE controls parallelism within one job instance.
with ThreadPoolExecutor(max_workers=MAX_CONCURRENT_TASKS_PER_INSTANCE) as executor:
for item in pending_urls_data:
url = item["url"]
row_id = item["id"]
# Submit the task: call the processor service for this URL
future = executor.submit(call_url_processor_service, url)
futures.append((row_id, future))
# Collect results as they complete
for row_id, future in futures:
try:
content = future.result(timeout=URL_PROCESSOR_TIMEOUT_SECONDS)
# Check if the processor service returned an error message
if content.startswith("ERROR:"):
processed_results[row_id] = {"context": content, "status": "FAILED_PROCESSING"}
else:
processed_results[row_id] = {"context": content, "status": "COMPLETED"}
except TimeoutError:
logging.warning(f"URL processing timed out (service call for row ID {row_id}). Marking as FAILED.")
processed_results[row_id] = {"context": f"ERROR: Processing timed out for '{row_id}'.", "status": "FAILED_PROCESSING"}
except Exception as e:
logging.error(f"Exception during future result retrieval for row ID {row_id}: {e}")
processed_results[row_id] = {"context": f"ERROR: Unexpected error during result retrieval for '{row_id}'. Details: {e}", "status": "FAILED_PROCESSING"}
কোডের এই অংশটি ThreadPoolExecutor-এর সাহায্যে আনা ভিডিও URL-এর সমান্তরাল প্রক্রিয়াকরণ অর্জন করে। প্রতিটি ইউআরএলের জন্য, এটি ক্লাউড রান সার্ভিস (ইউআরএল প্রসেসর) অ্যাসিঙ্ক্রোনাসভাবে কল করার জন্য একটি টাস্ক জমা দেয়। এটি ক্লাউড রান জবকে সামগ্রিক পাইপলাইনের কার্যকারিতা উন্নত করে একযোগে একাধিক ভিডিও দক্ষতার সাথে প্রক্রিয়া করার অনুমতি দেয়। স্নিপেট প্রসেসর পরিষেবা থেকে সম্ভাব্য টাইমআউট এবং ত্রুটিগুলিও পরিচালনা করে।
BigQuery থেকে & থেকে পড়া ও লেখা
BigQuery-এর সাথে মূল ইন্টারঅ্যাকশনের মধ্যে মুলতুবি থাকা URL গুলি আনা এবং তারপরে প্রক্রিয়াকৃত ফলাফলের সাথে সেগুলি আপডেট করা জড়িত৷
# ... (inside process_batch_from_bq) ...
BATCH_SIZE = 5
query = f"""
SELECT url, id
FROM `{BIGQUERY_PROJECT}.{BIGQUERY_DATASET}.{BIGQUERY_TABLE_SOURCE}`
WHERE status = 'PENDING'
LIMIT {BATCH_SIZE}
"""
rows = bq_client.query(query).result()
pending_urls_data = []
for row in rows:
pending_urls_data.append({"url": row.url, "id": row.id})
# ... (rest of fetching and marking as PROCESSING) ...
BigQuery-এ ফলাফল লেখা:
# --- Step 4: Write results back to BigQuery ---
logging.info(f"Writing {len(processed_results)} results back to BigQuery...")
successful_updates = 0
for row_id, data in processed_results.items():
if update_bq_row(row_id, data["context"], data["status"]):
successful_updates += 1
logging.info(f"Finished processing. {successful_updates} out of {len(processed_results)} rows updated successfully.")
# ... (return statement) ...
# --- Helper to update a single row in BigQuery ---
def update_bq_row(row_id, context, status="COMPLETED"):
"""Updates a specific row in the target BigQuery table."""
# ... (checks for config) ...
update_query = f"""
UPDATE `{BIGQUERY_PROJECT}.{BIGQUERY_DATASET}.{BIGQUERY_TABLE_TARGET}`
SET
context = @context,
status = @status
WHERE id = @row_id
"""
# Correctly defining query parameters for the UPDATE statement
job_config = bigquery.QueryJobConfig(
query_parameters=[
bigquery.ScalarQueryParameter("context", "STRING", value=context),
bigquery.ScalarQueryParameter("status", "STRING", value=status),
# Assuming 'id' column is STRING. Adjust if it's INT64.
bigquery.ScalarQueryParameter("row_id", "STRING", value=row_id)
]
)
try:
update_job = bq_client.query(update_query, job_config=job_config)
update_job.result() # Wait for the job to complete
logging.info(f"Successfully updated BigQuery row ID {row_id} with status {status}.")
return True
except Exception as e:
logging.error(f"Failed to update BigQuery row ID {row_id}: {e}")
return False
উপরের স্নিপেটগুলি ক্লাউড রান জব এবং BigQuery-এর মধ্যে ডেটা ইন্টারঅ্যাকশনের উপর ফোকাস করে। এটি উৎস সারণী থেকে 'পেন্ডিং' ভিডিও URL এবং তাদের আইডিগুলির একটি ব্যাচ পুনরুদ্ধার করে৷ ইউআরএলগুলি প্রক্রিয়া করার পরে, এই স্নিপেটটি একটি আপডেট কোয়েরি ব্যবহার করে টার্গেট BigQuery টেবিলে এক্সট্র্যাক্ট করা প্রসঙ্গ এবং স্ট্যাটাস ('COMPLETED' বা 'FAILED_PROCESSING') লেখার প্রদর্শন করে। এই স্নিপেট ডেটা প্রসেসিং লুপ সম্পূর্ণ করে। এতে update_bq_row হেল্পার ফাংশনও রয়েছে যা দেখায় কিভাবে আপডেট স্টেটমেন্টের প্যারামিটার সংজ্ঞায়িত করা যায়।
অ্যাপ্লিকেশন সেটআপ
অ্যাপ্লিকেশনটি একটি একক পাইথন স্ক্রিপ্ট হিসাবে গঠন করা হয়েছে যা ধারক করা হবে। এটি Google ক্লাউড ক্লায়েন্ট লাইব্রেরি এবং ফাংশন-ফ্রেমওয়ার্ক এর এন্ট্রি পয়েন্টকে সংজ্ঞায়িত করতে সাহায্য করে।
- নির্ভরতা: google-Cloud-bigquery, অনুরোধ
- কনফিগারেশন: সমস্ত গুরুত্বপূর্ণ সেটিংস (BigQuery প্রকল্প/ডেটাসেট/টেবিল, URL প্রসেসর পরিষেবা URL) পরিবেশের ভেরিয়েবল থেকে লোড করা হয়, যা অ্যাপ্লিকেশনটিকে বহনযোগ্য এবং সুরক্ষিত করে তোলে
- মূল যুক্তি: process_batch_from_bq ফাংশন পুরো ওয়ার্কফ্লোকে অর্কেস্ট্রেট করে
- বাহ্যিক পরিষেবা ইন্টিগ্রেশন: call_url_processor_service ফাংশন পৃথক ক্লাউড রান পরিষেবার সাথে যোগাযোগ পরিচালনা করে
- BigQuery ইন্টারঅ্যাকশন: bq_client সঠিক প্যারামিটার হ্যান্ডলিং সহ ইউআরএল আনা এবং ফলাফল আপডেট করার জন্য ব্যবহার করা হয়
- সমান্তরালতা: concurrent.futures.ThreadPoolExecutor বহিরাগত পরিষেবাতে সমসাময়িক কল পরিচালনা করে
- এন্ট্রি পয়েন্ট: main.py নামের পাইথন কোডটি এন্ট্রিপয়েন্ট হিসেবে কাজ করে যা ব্যাচ প্রসেসিং শুরু করে।
এখন অ্যাপ্লিকেশন সেটআপ করা যাক:
- আপনি আপনার ক্লাউড শেল টার্মিনালে নেভিগেট করে এবং সংগ্রহস্থল ক্লোন করে শুরু করতে পারেন:
git clone https://github.com/AbiramiSukumaran/video-context-crj
- ক্লাউড শেল এডিটরে নেভিগেট করুন , যেখানে আপনি নতুন তৈরি ফোল্ডার ভিডিও-প্রসঙ্গ-crj দেখতে পাবেন
- নিম্নলিখিতগুলি মুছুন কারণ সেই পদক্ষেপগুলি ইতিমধ্যে পূর্ববর্তী বিভাগে সম্পন্ন হয়েছে:
- Cloud_Run_Function ফোল্ডারটি মুছুন
- প্রকল্প ফোল্ডারে নেভিগেট করুন video-context-crj এবং আপনার প্রকল্পের কাঠামো দেখতে হবে:
7. ডকারফাইল সেটআপ এবং কন্টেইনারাইজেশন
এই যুক্তিটিকে ক্লাউড রান জব হিসাবে স্থাপন করতে, আমাদের এটিকে কন্টেইনারাইজ করতে হবে। কনটেইনারাইজেশন হল আমাদের অ্যাপ্লিকেশন কোড, এর নির্ভরতা এবং রানটাইমকে একটি পোর্টেবল ছবিতে প্যাকেজ করার প্রক্রিয়া।
ডকারফাইলে আপনার মানগুলির সাথে স্থানধারকগুলি (গাঢ় লেখা) প্রতিস্থাপন করা নিশ্চিত করুন:
# Use an official Python runtime as a parent image
FROM python:3.12-alpine
# Set the working directory in the container
WORKDIR /app
# Copy the requirements file into the container
COPY requirements.txt .
# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt
# Copy the rest of the application code
COPY . .
# Define environment variables for configuration (these will be overridden during deployment)
ENV BIGQUERY_PROJECT="YOUR-project"
ENV BIGQUERY_DATASET="YOUR-dataset"
ENV BIGQUERY_TABLE_SOURCE="YOUR-source-table"
ENV URL_PROCESSOR_SERVICE_URL="ENDPOINT FOR VIDEO PROCESSING"
ENV BIGQUERY_TABLE_TARGET = "YOUR-destination-table"
ENTRYPOINT ["python", "main.py"]
উপরের ডকারফাইল স্নিপেটটি বেস ইমেজ সংজ্ঞায়িত করে, নির্ভরতা ইনস্টল করে, আমাদের কোড কপি করে এবং সঠিক টার্গেট ফাংশন (process_batch_from_bq) সহ ফাংশন-ফ্রেমওয়ার্ক ব্যবহার করে আমাদের অ্যাপ্লিকেশন চালানোর জন্য কমান্ড সেট করে। এই ছবিটি তারপর আর্টিফ্যাক্ট রেজিস্ট্রিতে পুশ করা হয়।
কন্টেইনারাইজ করুন
এটি কন্টেইনারাইজ করতে, ক্লাউড শেল টার্মিনালে যান এবং নিম্নলিখিত কমান্ডগুলি চালান (<<YOUR_PROJECT_ID>> স্থানধারক প্রতিস্থাপন করতে মনে রাখবেন):
export CONTAINER_IMAGE="gcr.io/<<YOUR_PROJECT_ID>>/batch-url-processor-orchestrator:latest"
gcloud builds submit --tag $CONTAINER_IMAGE .
একবার কন্টেইনার ইমেজ তৈরি হয়ে গেলে, আপনার আউটপুট দেখতে হবে:
আমাদের কন্টেইনার এখন তৈরি করা হয়েছে এবং আর্টিফ্যাক্ট রেজিস্ট্রিতে সংরক্ষিত আছে। আমরা পরবর্তী ধাপে যেতে ভাল.
8. ক্লাউড রান জবস ক্রিয়েশন
কাজ স্থাপনের মধ্যে কন্টেইনার ইমেজ তৈরি করা এবং তারপর একটি ক্লাউড রান জব রিসোর্স তৈরি করা জড়িত।
আমরা ইতিমধ্যে কন্টেইনার ইমেজ তৈরি করেছি এবং আর্টিফ্যাক্ট রেজিস্ট্রিতে এটি সংরক্ষণ করেছি। এখন কাজ তৈরি করা যাক।
- ক্লাউড রান জবস কনসোলে যান এবং কন্টেইনার স্থাপনে ক্লিক করুন:
- আমরা এইমাত্র তৈরি করা ধারক চিত্রটি নির্বাচন করুন:
- নিম্নরূপ অন্যান্য কনফিগারেশন বিবরণ লিখুন:
- নিম্নলিখিত হিসাবে টাস্ক ক্ষমতা সেট করুন:
যেহেতু আমাদের কাছে ডাটাবেস লেখা আছে এবং কোডটিতে ইতিমধ্যেই সমান্তরালকরণ (max_instances এবং টাস্ক কনকারেন্সি) পরিচালনা করা হয়েছে, তাই আমরা একযোগে কাজের সংখ্যা 1 এ সেট করব। তবে আপনার প্রয়োজন অনুসারে এটি বাড়াতে নির্দ্বিধায়। এখানে উদ্দেশ্য হল সমান্তরালে সেট করা কনকারেন্সি লেভেলের সাথে কনফিগারেশন অনুযায়ী কাজগুলি সম্পূর্ণ হবে।
- তৈরি করুন ক্লিক করুন
আপনার ক্লাউড রান জব সফলভাবে তৈরি করা হবে।
এটা কিভাবে কাজ করে
আমাদের কাজের একটি ধারক উদাহরণ শুরু হয়। এটি মুলতুবি হিসাবে চিহ্নিত URLগুলির একটি ছোট ব্যাচ (BATCH_SIZE) পেতে BigQuery জিজ্ঞাসা করে৷ এটি অবিলম্বে এইগুলি আনা ইউআরএলগুলির স্ট্যাটাসকে BigQuery-এ প্রসেসিং-এ আপডেট করে যাতে অন্য চাকরির উদাহরণগুলিকে বাছাই করা থেকে বিরত রাখে। এটি একটি ThreadPoolExecutor তৈরি করে এবং ব্যাচের প্রতিটি URL এর জন্য একটি টাস্ক জমা দেয়। প্রতিটি টাস্ক call_url_processor_service ফাংশনকে কল করে। call_url_processor_service অনুরোধগুলি সম্পূর্ণ (বা সময় শেষ/ব্যর্থ) হওয়ার সাথে সাথে তাদের ফলাফলগুলি (হয় এআই-উত্পন্ন প্রসঙ্গ বা একটি ত্রুটি বার্তা) সংগ্রহ করা হয়, মূল রো_আইডিতে আবার ম্যাপ করা হয়। ব্যাচের সমস্ত কাজ শেষ হয়ে গেলে, কাজটি সংগৃহীত ফলাফলের মাধ্যমে পুনরাবৃত্তি করে এবং BigQuery-এ প্রতিটি সংশ্লিষ্ট সারির জন্য প্রসঙ্গ এবং স্থিতি ক্ষেত্র আপডেট করে। সফল হলে, কাজের উদাহরণটি পরিষ্কারভাবে প্রস্থান করে। যদি এটি পরিচালনা না করা ত্রুটির সম্মুখীন হয়, তবে এটি একটি ব্যতিক্রম উত্থাপন করে, সম্ভাব্যভাবে ক্লাউড রান জবস (চাকরির কনফিগারেশনের উপর নির্ভর করে) দ্বারা পুনরায় চেষ্টা শুরু করে৷
কিভাবে ক্লাউড রান জবস ফিট ইন: অর্কেস্ট্রেশন
এখানেই ক্লাউড রান জবস সত্যিই উজ্জ্বল।
সার্ভারলেস ব্যাচ প্রসেসিং: আমরা পরিচালিত পরিকাঠামো পাই যা আমাদের ডেটা একযোগে প্রক্রিয়া করার জন্য প্রয়োজন অনুযায়ী (MAX_INSTANCES পর্যন্ত) কন্টেইনার ইনস্ট্যান্স স্পিন করতে পারে।
সমান্তরালতা নিয়ন্ত্রণ: আমরা সংজ্ঞায়িত করি MAX_INSTANCES (কতটি কাজ সমান্তরালভাবে চলতে পারে) এবং TASK_CONCURRENCY (প্রতিটি কাজের উদাহরণ সমান্তরালে কতগুলি কাজ করে)। এটি থ্রুপুট এবং সম্পদ ব্যবহারের উপর সূক্ষ্ম-দানাযুক্ত নিয়ন্ত্রণ প্রদান করে।
ত্রুটি সহনশীলতা: যদি কোনও কাজের উদাহরণ মাঝপথে ব্যর্থ হয়, তবে ক্লাউড রান জবগুলি সম্পূর্ণ কাজ বা নির্দিষ্ট কাজগুলি পুনরায় চেষ্টা করার জন্য কনফিগার করা যেতে পারে, যাতে ডেটা প্রক্রিয়াকরণ হারিয়ে না যায় তা নিশ্চিত করে৷
সরলীকৃত আর্কিটেকচার: কাজের মধ্যে সরাসরি HTTP কল অর্কেস্ট্রেট করে এবং রাষ্ট্র পরিচালনার জন্য BigQuery ব্যবহার করে, আমরা Pub/Sub, এর বিষয়, সদস্যতা এবং স্বীকৃতির যুক্তি সেট আপ এবং পরিচালনা করার জটিলতা এড়াই।
MAX_INSTANCES বনাম TASK_CONCURRENCY:
MAX_INSTANCES: মোট চাকরির দৃষ্টান্তের সংখ্যা যা আপনার সমগ্র কর্ম সম্পাদন জুড়ে একসাথে চলতে পারে। একসাথে অনেকগুলি URL প্রসেস করার জন্য এটি আপনার প্রধান সমান্তরাল লিভার।
TASK_CONCURRENCY: সমান্তরাল ক্রিয়াকলাপের সংখ্যা (আপনার প্রসেসর পরিষেবাতে কল) যা আপনার কাজের একটি একক উদাহরণ সম্পাদন করবে। এটি একটি উদাহরণের CPU/নেটওয়ার্ককে পরিপূর্ণ করতে সহায়তা করে।
9. ক্লাউড রান জব এক্সিকিউটিং ও মনিটরিং
ভিডিও মেটাডেটা
এক্সিকিউট ক্লিক করার আগে, আসুন ডেটার স্থিতি দেখি।
BigQuery স্টুডিওতে যান এবং নিম্নলিখিত প্রশ্নটি চালান:
Select id, descr, url, status from cv_metadata.post_session_labs where status = ‘PENDING'
আমাদের কাছে ভিডিও URL এবং পেন্ডিং স্থিতি সহ কয়েকটি নমুনা রেকর্ড রয়েছে৷ আমাদের লক্ষ্য হল ভিডিও থেকে অন্তর্দৃষ্টি সহ "প্রসঙ্গ" ক্ষেত্রটি প্রম্পটে ব্যাখ্যা করা বিন্যাসে পূরণ করা৷
কাজের ট্রিগার
চলুন এগিয়ে যাই এবং ক্লাউড রান জবস কনসোলে কাজের উপর EXECUTE বোতামে ক্লিক করে কাজটি সম্পাদন করি এবং আপনি কনসোলে কাজের অগ্রগতি এবং স্থিতি দেখতে সক্ষম হবেন:
আপনি পর্যবেক্ষণের পদক্ষেপ এবং কাজ এবং কাজ সম্পর্কে অন্যান্য বিশদ বিবরণের জন্য পর্যবেক্ষণের মধ্যে LOGS ট্যাগটি পরীক্ষা করতে পারেন।
10. ফলাফল বিশ্লেষণ
কাজটি সম্পূর্ণ হয়ে গেলে, আপনি টেবিলে আপডেট করা প্রতিটি ভিডিও URL-এর প্রসঙ্গ দেখতে সক্ষম হবেন:
আউটপুট প্রসঙ্গ (একটি রেকর্ডের জন্য)
{
"chapter_title": "Building a Travel Agent with ADK and MCP Toolbox",
"introduction_context": "This chapter section is derived from a hands-on lab session focused on building a travel agent. It details the process of integrating various Google Cloud services and tools to create an intelligent agent capable of querying a database and interacting with users.",
"what_will_build": "The goal is to build and deploy a travel agent that can answer user queries about hotels using the Agent Development Kit (ADK) and the MCP Toolbox for Databases, connecting to a PostgreSQL database.",
"technologies_and_services": [
"Google Cloud Platform",
"Cloud SQL for PostgreSQL",
"Agent Development Kit (ADK)",
"MCP Toolbox for Databases",
"Cloud Shell",
"Cloud Run",
"Python",
"Docker"
],
"how_we_did_it": [
"Provision a Cloud SQL instance for PostgreSQL with the 'hoteldb-instance'.",
"Prepare the 'hotels' database by creating a table with relevant schema and populating it with sample data.",
"Set up the MCP Toolbox for Databases by downloading and configuring the necessary components.",
"Install the Agent Development Kit (ADK) and its dependencies.",
"Create a new agent using the ADK, specifying the model (Gemini 2.0-flash) and backend (Vertex AI).",
"Modify the agent's code to connect to the PostgreSQL database via the MCP Toolbox.",
"Run the agent locally to test its functionality and ability to interact with the database.",
"Deploy the agent to Cloud Run for cloud-based access and further testing.",
"Interact with the deployed agent through a web console or command line to query hotel information."
],
"source_code_url": "N/A",
"demo_url": "N/A",
"qa_segment": [
{
"question": "What is the primary purpose of the MCP Toolbox for Databases?",
"answer": "The MCP Toolbox for Databases is an open-source MCP server designed to help users develop tools faster, more securely, and by handling complexities like connection pooling, authentication, and more."
},
{
"question": "Which Google Cloud service is used to create the database for the travel agent?",
"answer": "Cloud SQL for PostgreSQL is used to create the database."
},
{
"question": "What is the role of the Agent Development Kit (ADK)?",
"answer": "The ADK helps build Generative AI tools that allow agents to access data in a database. It enables agents to perform actions, interact with users, utilize external tools, and coordinate with other agents."
},
{
"question": "What command is used to create the initial agent application using ADK?",
"answer": "The command `adk create hotel-agent-app` is used to create the agent application."
},
....
আরও উন্নত এজেন্টিক ব্যবহারের ক্ষেত্রে আপনি এখন এই JSON কাঠামোটি ব্যবহার বৈধ করতে সক্ষম হবেন।
কেন এই পদ্ধতি?
এই স্থাপত্যটি উল্লেখযোগ্য কৌশলগত সুবিধা প্রদান করে:
- খরচ-কার্যকারিতা: সার্ভারবিহীন পরিষেবা মানে আপনি যা ব্যবহার করেন তার জন্যই আপনি অর্থ প্রদান করেন। ব্যবহার না করার সময় ক্লাউড রান জবস স্কেল শূন্যে নেমে আসে।
- পরিমাপযোগ্যতা: ক্লাউড রান জব ইনস্ট্যান্স এবং কনকারেন্সি সেটিংস সামঞ্জস্য করে হাজার হাজার ইউআরএল অনায়াসে পরিচালনা করে।
- তত্পরতা: নতুন প্রসেসিং লজিক বা এআই মডেলগুলির জন্য দ্রুত বিকাশ এবং স্থাপনা চক্র কেবল অন্তর্ভুক্ত অ্যাপ্লিকেশন এবং এর পরিষেবা আপডেট করে।
- হ্রাসকৃত অপারেশনাল ওভারহেড: প্যাচ বা পরিচালনা করার জন্য কোনও সার্ভার নেই; গুগল পরিকাঠামো পরিচালনা করে।
- AI গণতন্ত্রীকরণ: গভীর ML Ops দক্ষতা ছাড়াই ব্যাচের কাজের জন্য উন্নত AI প্রক্রিয়াকরণ অ্যাক্সেসযোগ্য করে তোলে।
11. পরিষ্কার করুন
এই পোস্টে ব্যবহৃত সংস্থানগুলির জন্য আপনার Google ক্লাউড অ্যাকাউন্টে চার্জ এড়াতে, এই পদক্ষেপগুলি অনুসরণ করুন:
- Google ক্লাউড কনসোলে, রিসোর্স ম্যানেজার পৃষ্ঠায় যান।
- প্রকল্প তালিকায়, আপনি যে প্রকল্পটি মুছতে চান সেটি নির্বাচন করুন এবং তারপরে মুছুন ক্লিক করুন।
- ডায়ালগে, প্রজেক্ট আইডি টাইপ করুন এবং তারপরে প্রোজেক্ট মুছে ফেলতে শাট ডাউন ক্লিক করুন।
12. অভিনন্দন
অভিনন্দন! ক্লাউড রান জবসের আশেপাশে আমাদের সমাধানকে আর্কিটেক্ট করে এবং ডেটা ম্যানেজমেন্টের জন্য BigQuery-এর শক্তি এবং AI প্রক্রিয়াকরণের জন্য একটি বাহ্যিক ক্লাউড রান পরিষেবা ব্যবহার করে, আপনি একটি উচ্চ মাপযোগ্য, খরচ-কার্যকর এবং রক্ষণাবেক্ষণযোগ্য সিস্টেম তৈরি করেছেন। এই প্যাটার্নটি প্রসেসিং লজিককে দ্বিগুণ করে, জটিল পরিকাঠামো ছাড়াই সমান্তরাল সম্পাদনের অনুমতি দেয় এবং উল্লেখযোগ্যভাবে সময়-থেকে-অন্তর্দৃষ্টিকে ত্বরান্বিত করে।
আমরা আপনাকে আপনার নিজস্ব ব্যাচ প্রক্রিয়াকরণের প্রয়োজনের জন্য ক্লাউড রান জবগুলি অন্বেষণ করতে উত্সাহিত করি৷ এটি AI বিশ্লেষণ স্কেলিং, ETL পাইপলাইন চালানো, বা পর্যায়ক্রমিক ডেটা কাজগুলি সম্পাদন করা হোক না কেন, এই সার্ভারহীন পদ্ধতি একটি শক্তিশালী এবং দক্ষ সমাধান প্রদান করে। আপনার নিজের থেকে শুরু করতে, এটি পরীক্ষা করে দেখুন .
আপনি যদি আপনার সমস্ত অ্যাপ সার্ভারহীন এবং এজেন্টিকভাবে তৈরি এবং স্থাপন করতে আগ্রহী হন, তাহলে কোড বিপাসনা- এর জন্য নিবন্ধন করুন যা ডেটা-চালিত জেনারেটিভ এজেন্টিক অ্যাপ্লিকেশনগুলিকে ত্বরান্বিত করার উপর দৃষ্টি নিবদ্ধ করে!