Vertex AI PaLM API ব্যবহার করে BigQuery ML সহ শুধুমাত্র SQL-LLM

১. ভূমিকা

এই কোডল্যাবে, আমি BigQuery-তে একটি হোস্টেড রিমোট ফাংশন হিসেবে টেক্সট জেনারেশনের জন্য Vertex AI Large Language Model ( text-bison ) ব্যবহার করে Github রিপো থেকে সোর্স কোডের সারসংক্ষেপ তৈরি এবং রিপোটিতে ব্যবহৃত প্রোগ্রামিংয়ের ভাষা শনাক্ত করার ধাপগুলো তালিকাভুক্ত করেছি। GitHub Archive Project- এর সৌজন্যে, Google BigQuery Public Datasets- এ এখন আমাদের কাছে ২৮ লক্ষেরও বেশি ওপেন সোর্স GitHub রিপোজিটরির একটি সম্পূর্ণ স্ন্যাপশট রয়েছে। ব্যবহৃত সার্ভিসগুলোর তালিকা হলো:

  1. বিগকোয়েরি এমএল
  2. ভার্টেক্স এআই পাম এপিআই

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

আপনি তৈরি করবেন

  • মডেলটি ধারণ করার জন্য একটি BigQuery ডেটাসেট
  • একটি BigQuery মডেল যা Vertex AI PaLM API-কে একটি রিমোট ফাংশন হিসেবে হোস্ট করে।
  • BigQuery এবং Vertex AI-এর মধ্যে সংযোগ স্থাপনের জন্য একটি বাহ্যিক সংযোগ।

২. প্রয়োজনীয়তা

৩. শুরু করার আগে

  1. গুগল ক্লাউড কনসোলের প্রজেক্ট সিলেক্টর পেজে, একটি গুগল ক্লাউড প্রজেক্ট নির্বাচন করুন বা তৈরি করুন।
  2. আপনার ক্লাউড প্রোজেক্টের জন্য বিলিং চালু আছে কিনা তা নিশ্চিত করুন। কোনো প্রোজেক্টে বিলিং চালু আছে কিনা তা কীভাবে পরীক্ষা করবেন তা জানুন।
  3. প্রয়োজনীয় সকল এপিআই (BigQuery API, Vertex AI API, BigQuery Connection API) সক্রিয় আছে কিনা তা নিশ্চিত করুন।
  4. আপনি ক্লাউড শেল ব্যবহার করবেন, যা গুগল ক্লাউডে চলমান একটি কমান্ড-লাইন পরিবেশ এবং এতে bq আগে থেকেই লোড করা থাকে। gcloud কমান্ড এবং এর ব্যবহারবিধি জানতে ডকুমেন্টেশন দেখুন।

ক্লাউড কনসোল থেকে, উপরের ডান কোণায় থাকা ‘Activate Cloud Shell’-এ ক্লিক করুন:

51622c00acec2fa.png

আপনার প্রজেক্টটি সেট করা না থাকলে, এটি সেট করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

gcloud config set project <YOUR_PROJECT_ID>
  1. আপনার ব্রাউজারে নিম্নলিখিত URL-টি লিখে সরাসরি BigQuery কনসোলে যান: https://console.cloud.google.com/bigquery

৪. ডেটা প্রস্তুত করা

এই ক্ষেত্রে আমরা গুগল বিগকোয়েরি পাবলিক ডেটাসেট- এর github_repos ডেটাসেট থেকে সোর্স কোড ব্যবহার করছি। এটি ব্যবহার করতে, বিগকোয়েরি কনসোলে 'github_repos' লিখে সার্চ করুন এবং এন্টার চাপুন। সার্চ রেজাল্ট হিসেবে তালিকাভুক্ত ডেটাসেটটির পাশে থাকা তারকা চিহ্নে ক্লিক করুন। এরপর পাবলিক ডেটাসেটগুলো থেকে শুধুমাত্র সেই ডেটাসেটটি দেখার জন্য "SHOW STARRED ONLY" অপশনটিতে ক্লিক করুন।

dc6bf1e2fa6bba8a.png

স্কিমা এবং ডেটার প্রিভিউ দেখার জন্য ডেটাসেটের টেবিলগুলো এক্সপ্যান্ড করুন। আমরা sample_contents টেবিলটি ব্যবহার করতে যাচ্ছি, যেখানে contents টেবিলের সম্পূর্ণ ডেটার শুধুমাত্র একটি নমুনা (১০%) রয়েছে। নিচে ডেটার একটি প্রিভিউ দেওয়া হলো:

e021c689c56abf22.png

৫. BigQuery ডেটাসেট তৈরি করা

BigQuery ডেটাসেট হলো কতগুলো টেবিলের সমষ্টি। একটি ডেটাসেটের সমস্ত টেবিল একই ডেটা লোকেশনে সংরক্ষিত থাকে। আপনি একটি ডেটাসেট এবং এর টেবিলগুলোতে অ্যাক্সেস সীমিত করার জন্য কাস্টম অ্যাক্সেস কন্ট্রোলও যুক্ত করতে পারেন।

"US" অঞ্চলে (অথবা আমাদের পছন্দের যেকোনো অঞ্চলে) bq_llm নামে একটি ডেটাসেট তৈরি করুন।

c67e9f929629739a.png

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

bq load --source_format=CSV --skip_leading_rows=1 bq_llm.table_to_hold_your_data \
./your_file.csv \ text:string,label:string

৬. বাহ্যিক সংযোগ তৈরি করা

একটি এক্সটার্নাল কানেকশন তৈরি করুন (যদি আগে থেকে করা না থাকে তবে BQ কানেকশন API এনাবল করুন) এবং কানেকশন কনফিগারেশন ডিটেইলস থেকে সার্ভিস অ্যাকাউন্ট আইডিটি নোট করে নিন:

  1. BigQuery কনসোলের বাম দিকে থাকা BigQuery Explorer প্যানে +ADD বোতামে ক্লিক করুন এবং তালিকাভুক্ত জনপ্রিয় উৎসগুলো থেকে 'Connection to external data sources'-এ ক্লিক করুন।
  2. সংযোগের ধরণ হিসেবে "BigLake and remote functions" নির্বাচন করুন এবং সংযোগ আইডি হিসেবে "llm-conn" প্রদান করুন।

6b75042881eaec5f.png

  1. সংযোগটি তৈরি হয়ে গেলে, সংযোগ কনফিগারেশনের বিবরণ থেকে তৈরি হওয়া সার্ভিস অ্যাকাউন্টটি লিখে রাখুন।

৭. অনুমতি প্রদান করুন

এই ধাপে আমরা সার্ভিস অ্যাকাউন্টকে ভার্টেক্স এআই সার্ভিস অ্যাক্সেস করার অনুমতি প্রদান করব:

IAM খুলুন এবং এক্সটার্নাল কানেকশন তৈরি করার পর কপি করা সার্ভিস অ্যাকাউন্টটিকে প্রিন্সিপাল হিসেবে যোগ করুন এবং "Vertex AI User" রোলটি সিলেক্ট করুন।

ff8e1d730879f972.png

৮. একটি রিমোট এমএল মডেল তৈরি করুন

হোস্ট করা ভার্টেক্স এআই লার্জ ল্যাঙ্গুয়েজ মডেলের প্রতিনিধিত্বকারী রিমোট মডেলটি তৈরি করুন:

CREATE OR REPLACE MODEL bq_llm.llm_model
  REMOTE WITH CONNECTION `us.llm-conn`
  OPTIONS (remote_service_type = 'CLOUD_AI_LARGE_LANGUAGE_MODEL_V1');

এটি bq_llm ডেটাসেটে llm_model নামের একটি মডেল তৈরি করে, যা একটি রিমোট ফাংশন হিসেবে Vertex AI-এর CLOUD_AI_LARGE_LANGUAGE_MODEL_V1 API-কে কাজে লাগায়। এটি সম্পন্ন হতে কয়েক সেকেন্ড সময় লাগবে।

৯. এমএল মডেল ব্যবহার করে টেক্সট তৈরি করুন

মডেলটি তৈরি হয়ে গেলে, টেক্সট তৈরি, সংক্ষিপ্তকরণ বা শ্রেণিবদ্ধ করার জন্য মডেলটি ব্যবহার করুন।

SELECT
  ml_generate_text_result['predictions'][0]['content'] AS generated_text,
  ml_generate_text_result['predictions'][0]['safetyAttributes']
    AS safety_attributes,
  * EXCEPT (ml_generate_text_result)
FROM
  ML.GENERATE_TEXT(
    MODEL `bq_llm.llm_model`,
    (
  SELECT
        CONCAT('Can you read the code in the following text and generate a summary for what the code is doing and what language it is written in:', content)
        AS prompt from `bigquery-public-data.github_repos.sample_contents`
          limit 5
    ),
    STRUCT(
      0.2 AS temperature,
      100 AS max_output_tokens));

ব্যাখ্যা:

**ml_generate_text_result** হলো JSON ফরম্যাটে টেক্সট জেনারেশন মডেল থেকে প্রাপ্ত রেসপন্স, যাতে কন্টেন্ট এবং সেফটি অ্যাট্রিবিউট উভয়ই থাকে: ক. কন্টেন্ট হলো জেনারেট করা টেক্সট রেজাল্ট। খ. সেফটি অ্যাট্রিবিউট হলো একটি অ্যাডজাস্টেবল থ্রেশহোল্ডসহ বিল্ট-ইন কন্টেন্ট ফিল্টার, যা বৃহৎ ল্যাঙ্গুয়েজ মডেল থেকে যেকোনো অনাকাঙ্ক্ষিত বা অপ্রত্যাশিত রেসপন্স এড়ানোর জন্য Vertex AI Palm API-তে সক্রিয় করা থাকে – যদি রেসপন্সটি সেফটি থ্রেশহোল্ড লঙ্ঘন করে, তবে তা ব্লক করে দেওয়া হয়।

টেক্সট জেনারেশনের কাজ সম্পাদন করার জন্য ভার্টেক্স এআই এলএলএম (Vertex AI LLM) অ্যাক্সেস করতে বিগকোয়েরি (BigQuery)-তে ML.GENERATE_TEXT কনস্ট্রাক্টটি ব্যবহার করা হয়।

CONCAT আপনার PROMPT স্টেটমেন্ট এবং ডাটাবেস রেকর্ড যুক্ত করে।

github_repos হলো ডেটাসেটের নাম এবং sample_contents হলো সেই টেবিলের নাম যেখানে প্রম্পট ডিজাইনে ব্যবহৃত ডেটা সংরক্ষিত থাকবে।

প্রতিক্রিয়ার এলোমেলো ভাব নিয়ন্ত্রণের জন্য তাপমাত্রা হলো একটি তাৎক্ষণিক মাপকাঠি – প্রাসঙ্গিকতার দিক থেকে এর মান যত কম হয়, ততই ভালো।

Max_output_tokens হলো উত্তরে আপনি যতগুলো শব্দ চান তার সংখ্যা।

কোয়েরির প্রতিক্রিয়াটি দেখতে এইরকম:

1156f6eecb548cd5.png

১০. কোয়েরির ফলাফলকে সমতল করুন

চলুন ফলাফলটিকে ফ্ল্যাটেন করি, যাতে কোয়েরিতে আমাদের JSON-টি স্পষ্টভাবে ডিকোড করতে না হয়:

SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `bq_llm.llm_model`,
    (
  SELECT
        CONCAT('Can you read the code in the following text and generate a summary for what the code is doing and what language it is written in:', content)
        AS prompt from `bigquery-public-data.github_repos.sample_contents`
          limit 5
        ),
    STRUCT(
      0.2 AS temperature,
      100 AS max_output_tokens,
      TRUE AS flatten_json_output));

ব্যাখ্যা:

**Flatten_json_output** হলো একটি বুলিয়ান, যা `true` সেট করা হলে JSON রেসপন্স থেকে একটি ফ্ল্যাট ও বোধগম্য টেক্সট রিটার্ন করে।

কোয়েরির প্রতিক্রিয়াটি দেখতে এইরকম:

3b662ef7d3ba9263.png

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

এই পোস্টে ব্যবহৃত রিসোর্সগুলোর জন্য আপনার গুগল ক্লাউড অ্যাকাউন্টে চার্জ হওয়া এড়াতে, এই ধাপগুলো অনুসরণ করুন:

  1. Google Cloud কনসোলে, রিসোর্স পরিচালনা (Manage resources) পৃষ্ঠায় যান।
  2. প্রজেক্ট তালিকা থেকে আপনি যে প্রজেক্টটি মুছতে চান সেটি নির্বাচন করুন এবং তারপর ডিলিট-এ ক্লিক করুন।
  3. ডায়ালগ বক্সে প্রজেক্ট আইডি টাইপ করুন, এবং তারপর প্রজেক্টটি ডিলিট করতে শাট ডাউন-এ ক্লিক করুন।

১২. অভিনন্দন

অভিনন্দন! আপনি শুধুমাত্র SQL-কোয়েরি ব্যবহার করে প্রোগ্রাম্যাটিকভাবে আপনার ডেটার উপর টেক্সট অ্যানালিটিক্স সম্পাদন করার জন্য সফলভাবে একটি Vertex AI টেক্সট জেনারেশন LLM ব্যবহার করেছেন। উপলব্ধ মডেলগুলো সম্পর্কে আরও জানতে Vertex AI LLM প্রোডাক্ট ডকুমেন্টেশন দেখুন।