একটি ক্লাউড রান পরিষেবা থেকে ক্লাউড স্টোরেজে পিডিএফগুলিতে (অসংগঠিত ডেটা) ভার্টেক্স এআই অনুসন্ধান ব্যবহার করুন

১. ভূমিকা

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

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

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

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

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

  • ক্লাউড স্টোরেজ বাকেট থেকে গৃহীত পিডিএফ-এর মতো অসংগঠিত ডেটার জন্য কীভাবে একটি ভার্টেক্স এআই সার্চ অ্যাপ তৈরি করবেন
  • ক্লাউড রানে সোর্স-ভিত্তিক ডেপ্লয়মেন্ট ব্যবহার করে কীভাবে একটি HTTP এন্ডপয়েন্ট তৈরি করবেন
  • Vertex AI Search অ্যাপে কোয়েরি করার জন্য Cloud Run সার্ভিসের জন্য ন্যূনতম বিশেষাধিকারের নীতি অনুসরণ করে কীভাবে একটি সার্ভিস অ্যাকাউন্ট তৈরি করবেন
  • Vertex AI Search অ্যাপে কোয়েরি করার জন্য Cloud Run সার্ভিসটি কীভাবে চালু করবেন

২. সেটআপ এবং প্রয়োজনীয়তা

পূর্বশর্ত

ক্লাউড শেল সক্রিয় করুন

  1. ক্লাউড কনসোল থেকে, অ্যাক্টিভেট ক্লাউড শেল-এ ক্লিক করুন। d1264ca30785e435.png .

cb81e7c8e34bc8d.png

আপনি যদি প্রথমবারের মতো ক্লাউড শেল চালু করেন, তাহলে এটি কী তা বর্ণনা করে একটি মধ্যবর্তী স্ক্রিন আপনার সামনে আসবে। যদি একটি মধ্যবর্তী স্ক্রিন আসে, তাহলে 'চালিয়ে যান' (Continue) এ ক্লিক করুন।

d95252b003979716.png

ক্লাউড শেল প্রস্তুত করতে এবং এর সাথে সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগা উচিত।

7833d5e1c5d18f54.png

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

ক্লাউড শেলে সংযুক্ত হওয়ার পর, আপনি দেখতে পাবেন যে আপনাকে প্রমাণীকৃত করা হয়েছে এবং প্রজেক্টটি আপনার প্রজেক্ট আইডিতে সেট করা আছে।

  1. আপনি প্রমাণীকৃত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud auth list

কমান্ড আউটপুট

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. gcloud কমান্ডটি আপনার প্রজেক্ট সম্পর্কে জানে কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud config list project

কমান্ড আউটপুট

[core]
project = <PROJECT_ID>

যদি তা না থাকে, তবে আপনি এই কমান্ডটি দিয়ে এটি সেট করতে পারেন:

gcloud config set project <PROJECT_ID>

কমান্ড আউটপুট

Updated property [core/project].

৩. এপিআই সক্রিয় করুন

Vertex AI Search ব্যবহার শুরু করার আগে, আপনাকে বেশ কিছু API সক্রিয় করতে হবে।

প্রথমত, এই কোডল্যাবটি ব্যবহার করার জন্য Vertex AI Search and Conversation, BigQuery, Cloud Storage API-গুলো ব্যবহার করতে হবে। আপনি এখান থেকে সেই API-গুলো সক্রিয় করতে পারেন।

দ্বিতীয়ত, Vertex AI Search and Conversation API সক্রিয় করতে এই ধাপগুলো অনুসরণ করুন:

  1. Google Cloud কনসোলে, Vertex AI Search and Conversation কনসোলে যান।
  2. পরিষেবার শর্তাবলী পড়ুন এবং তাতে সম্মত হন, তারপর 'চালিয়ে যান'-এ ক্লিক করুন এবং এপিআই (API) সক্রিয় করুন।

৪. ক্লাউড স্টোরেজ থেকে অসংগঠিত ডেটার জন্য একটি সার্চ অ্যাপ তৈরি করুন।

  1. গুগল ক্লাউড কনসোলে, সার্চ অ্যান্ড কনভারসেশন পেজে যান। নিউ অ্যাপ-এ ক্লিক করুন।
  2. অ্যাপের ধরন নির্বাচন করুন প্যানে, অনুসন্ধান নির্বাচন করুন।
  3. আপনার ডকুমেন্ট থেকে হুবহু নেওয়া উত্তরগুলো পেতে এন্টারপ্রাইজ ফিচার চালু আছে কিনা তা নিশ্চিত করুন।
  4. সার্চ সামারাইজেশন পেতে অ্যাডভান্সড এলএলএম ফিচারস অপশনটি চালু আছে কিনা তা নিশ্চিত করুন।
  5. অ্যাপের নামের ফিল্ডে আপনার অ্যাপের জন্য একটি নাম লিখুন। অ্যাপের নামের নিচে আপনার অ্যাপ আইডি দেখা যাবে।
  6. আপনার অ্যাপের অবস্থান হিসেবে গ্লোবাল (Global) নির্বাচন করুন এবং তারপরে চালিয়ে যান (Continue ) ক্লিক করুন।
  7. ডেটা স্টোর প্যানে, নতুন ডেটা স্টোর তৈরি করুন- এ ক্লিক করুন।
  8. 'ডেটা উৎস নির্বাচন করুন ' প্যানে, 'ক্লাউড স্টোরেজ' নির্বাচন করুন।
  9. GCS থেকে ডেটা ইম্পোর্ট করার প্যানে, ফোল্ডার সিলেক্ট করা আছে কিনা তা নিশ্চিত করুন।
  10. gs:// ফিল্ডে নিম্নলিখিত মানটি লিখুন: cloud-samples-data/gen-app-builder/search/stanford-cs-224 এই ক্লাউড স্টোরেজ বাকেটটিতে পরীক্ষার উদ্দেশ্যে একটি সর্বজনীনভাবে উপলব্ধ ক্লাউড স্টোরেজ ফোল্ডার থেকে পিডিএফ ফাইল রয়েছে।
  11. অসংগঠিত নথি নির্বাচন করুন, এবং তারপর চালিয়ে যান-এ ক্লিক করুন।
  12. আপনার ডেটা স্টোর কনফিগার করুন প্যানে, আপনার ডেটা স্টোরের অবস্থান হিসেবে গ্লোবাল (Global) নির্বাচন করুন।
  13. আপনার ডেটা স্টোরের জন্য একটি নাম লিখুন। এই কোডল্যাবে পরে আপনার ক্লাউড রান পরিষেবা স্থাপন করার সময় আপনি এই নামটি ব্যবহার করবেন। তৈরি করুন- এ ক্লিক করুন।
  14. ডেটা স্টোর প্যানে, আপনার নতুন ডেটা স্টোরটি নির্বাচন করুন এবং তৈরি করুন- এ ক্লিক করুন।
  15. আপনার ডেটা স্টোরের ডেটা পেজে, ডেটা ইনজেশনের অবস্থা দেখতে অ্যাক্টিভিটি ট্যাবে ক্লিক করুন। ইম্পোর্ট প্রক্রিয়া সম্পন্ন হলে স্ট্যাটাস কলামে ' ইম্পোর্ট কমপ্লিটেড' প্রদর্শিত হয়।
  16. আমদানি করা নথির সংখ্যা দেখতে ডকুমেন্টস ট্যাবে ক্লিক করুন।
  17. নেভিগেশন মেনুতে, সার্চ অ্যাপটি পরীক্ষা করার জন্য প্রিভিউ-তে ক্লিক করুন।
  18. সার্চ বারে final lab due date লিখুন এবং তারপর আপনার ফলাফল দেখার জন্য এন্টার চাপুন।

৫. ক্লাউড রান পরিষেবাটি তৈরি করুন

এই অংশে, আপনি একটি ক্লাউড রান সার্ভিস তৈরি করবেন যা আপনার সার্চ টার্মগুলোর জন্য একটি কোয়েরি স্ট্রিং গ্রহণ করবে। এই সার্ভিসটি ডিসকভারি ইঞ্জিন এপিআই (Discovery Engine API)-এর জন্য পাইথন ক্লায়েন্ট লাইব্রেরিগুলো ব্যবহার করবে। অন্যান্য সমর্থিত রানটাইমগুলোর তালিকা আপনি এখানে দেখতে পারেন।

ফাংশনটির জন্য সোর্স কোড তৈরি করুন।

প্রথমে, একটি ডিরেক্টরি তৈরি করুন এবং সেই ডিরেক্টরিতে প্রবেশ করুন।

mkdir docs-search-service-python && cd $_

এরপর, নিম্নলিখিত বিষয়বস্তু সহ একটি requirements.txt ফাইল তৈরি করুন:

blinker==1.6.3
cachetools==5.3.1
certifi==2023.7.22
charset-normalizer==3.3.0
click==8.1.7
Flask==3.0.0
google-api-core==2.12.0
google-auth==2.23.3
google-cloud-discoveryengine==0.11.2
googleapis-common-protos==1.61.0
grpcio==1.59.0
grpcio-status==1.59.0
idna==3.4
importlib-metadata==6.8.0
itsdangerous==2.1.2
Jinja2==3.1.2
MarkupSafe==2.1.3
numpy==1.26.1
proto-plus==1.22.3
protobuf==4.24.4
pyasn1==0.5.0
pyasn1-modules==0.3.0
requests==2.31.0
rsa==4.9
urllib3==2.0.7
Werkzeug==3.0.1
zipp==3.17.0

এরপরে, নিম্নলিখিত বিষয়বস্তু সহ একটি main.py সোর্স ফাইল তৈরি করুন:

from typing import List
import json
import os
from flask import Flask
from flask import request

app = Flask(__name__)

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

project_id = os.environ.get('PROJECT_ID')
location = "global"  # Values: "global", "us", "eu"
data_store_id = os.environ.get('SEARCH_ENGINE_ID')

print(project_id)
print(data_store_id)

@app.route("/")
def search_storage():

    search_query = request.args.get("searchQuery")

    result = search_sample(project_id, location, data_store_id, search_query)
    return result

def search_sample(
    project_id: str,
    location: str,
    data_store_id: str,
    search_query: str,
) -> str:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.SearchServiceClient(client_options=client_options)

    # The full resource name of the search engine serving config
    # e.g. projects/{project_id}/locations/{location}/dataStores/{data_store_id}/servingConfigs/{serving_config_id}
    serving_config = client.serving_config_path(
        project=project_id,
        location=location,
        data_store=data_store_id,
        serving_config="default_config",
    )

    # Optional: Configuration options for search
    # Refer to the `ContentSearchSpec` reference for all supported fields:
    # https://cloud.google.com/python/docs/reference/discoveryengine/latest/google.cloud.discoveryengine_v1.types.SearchRequest.ContentSearchSpec
    content_search_spec = discoveryengine.SearchRequest.ContentSearchSpec(
        # For information about snippets, refer to:
        # https://cloud.google.com/generative-ai-app-builder/docs/snippets
        snippet_spec=discoveryengine.SearchRequest.ContentSearchSpec.SnippetSpec(
            return_snippet=True
        ),
        # For information about search summaries, refer to:
        # https://cloud.google.com/generative-ai-app-builder/docs/get-search-summaries
        summary_spec=discoveryengine.SearchRequest.ContentSearchSpec.SummarySpec(
            summary_result_count=5,
            include_citations=True,
            ignore_adversarial_query=True,
            ignore_non_summary_seeking_query=True,
        ),
    )


    # Refer to the `SearchRequest` reference for all supported fields:
    # https://cloud.google.com/python/docs/reference/discoveryengine/latest/google.cloud.discoveryengine_v1.types.SearchRequest
    request = discoveryengine.SearchRequest(
        serving_config=serving_config,
        query=search_query,
        page_size=10,
        content_search_spec=content_search_spec,
        query_expansion_spec=discoveryengine.SearchRequest.QueryExpansionSpec(
            condition=discoveryengine.SearchRequest.QueryExpansionSpec.Condition.AUTO,
        ),
        spell_correction_spec=discoveryengine.SearchRequest.SpellCorrectionSpec(
            mode=discoveryengine.SearchRequest.SpellCorrectionSpec.Mode.AUTO
        ),
    )

    response = client.search(request)

    return response.summary.summary_text

if __name__ == "__main__":
    app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))

পরিবেশ ভেরিয়েবল সেটআপ করুন

এই কোডল্যাবে ব্যবহৃত gcloud কমান্ডগুলোর পাঠযোগ্যতা উন্নত করার জন্য, এই কোডে আপনি কয়েকটি এনভায়রনমেন্ট ভেরিয়েবল তৈরি করবেন।

PROJECT_ID=$(gcloud config get-value project)

SERVICE_NAME="search-storage-pdfs-python"
SERVICE_REGION="us-central1"

# update with your data store name
SEARCH_ENGINE_ID=<your-data-store-name>

একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন

এই কোডল্যাবটি আপনাকে দেখাবে কিভাবে ক্লাউড রান সার্ভিসের জন্য একটি সার্ভিস অ্যাকাউন্ট তৈরি করতে হয়, যা ব্যবহার করে ভার্টেক্স এআই সার্চ এপিআই (Vertex AI Search API) অ্যাক্সেস করা যাবে।

SERVICE_ACCOUNT="cloud-run-vertex-ai-search"
SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

gcloud iam service-accounts create $SERVICE_ACCOUNT \
  --display-name="Cloud Run Vertex AI Search service account"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
  --role='roles/discoveryengine.editor'

ক্লাউড রান পরিষেবাটি স্থাপন করুন

এখন আপনি সোর্স-ভিত্তিক ডেপ্লয়মেন্ট ব্যবহার করে আপনার ক্লাউড রান সার্ভিসকে স্বয়ংক্রিয়ভাবে কন্টেইনারাইজ করতে পারবেন।

gcloud run deploy $SERVICE_NAME \
--region=$SERVICE_REGION \
--source=. \
--service-account $SERVICE_ACCOUNT \
--update-env-vars SEARCH_ENGINE_ID=$SEARCH_ENGINE_ID,PROJECT_ID=$PROJECT_ID \
--no-allow-unauthenticated

এবং তারপরে আপনি ক্লাউড রান ইউআরএলটি একটি এনভায়রনমেন্ট ভেরিয়েবল হিসেবে সংরক্ষণ করতে পারেন, যা পরে ব্যবহার করা যাবে।

ENDPOINT_URL="$(gcloud run services describe $SERVICE_NAME --region=$SERVICE_REGION --format='value(status.url)')"

৬. ক্লাউড রান পরিষেবাটি চালু করুন

এখন আপনি একটি কোয়েরি স্ট্রিং ব্যবহার করে আপনার ক্লাউড রান সার্ভিসকে কল করে জিজ্ঞাসা করতে পারেন, What is the final lab due date?

curl -H "Authorization: bearer $(gcloud auth print-identity-token)" "$ENDPOINT_URL?searchQuery=what+is+the+final+lab+due+date"

আপনার ফলাফল নীচের উদাহরণ আউটপুটের অনুরূপ হওয়া উচিত:

The final lab is due on Tuesday, March 21 at 4:30 PM [1].

৭. অভিনন্দন!

কোডল্যাবটি সম্পন্ন করার জন্য অভিনন্দন!

আমরা Vertex AI Search এবং Cloud Run- এর ডকুমেন্টেশন পর্যালোচনা করার পরামর্শ দিই।

আমরা যা আলোচনা করেছি

  • ক্লাউড স্টোরেজ বাকেট থেকে গৃহীত পিডিএফ-এর মতো অসংগঠিত ডেটার জন্য কীভাবে একটি ভার্টেক্স এআই সার্চ অ্যাপ তৈরি করবেন
  • ক্লাউড রানে সোর্স-ভিত্তিক ডেপ্লয়মেন্ট ব্যবহার করে কীভাবে একটি HTTP এন্ডপয়েন্ট তৈরি করবেন
  • ভার্টেক্স এআই সার্চ অ্যাপে কোয়েরি করার জন্য ক্লাউড রান সার্ভিসের জন্য ন্যূনতম বিশেষাধিকারের নীতি অনুসরণ করে কীভাবে একটি সার্ভিস অ্যাকাউন্ট তৈরি করতে হয়।
  • Vertex AI Search অ্যাপে কোয়েরি করার জন্য Cloud Run সার্ভিসটি কীভাবে চালু করবেন

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

অনিচ্ছাকৃত চার্জ এড়াতে, (উদাহরণস্বরূপ, যদি এই ক্লাউড ফাংশনটি ফ্রি টিয়ারে আপনার মাসিক ক্লাউড ফাংশন ব্যবহারের বরাদ্দের চেয়ে বেশিবার অনিচ্ছাকৃতভাবে চালু হয়), আপনি হয় ক্লাউড ফাংশনটি অথবা ধাপ ২-এ তৈরি করা প্রজেক্টটি ডিলিট করে দিতে পারেন।

ক্লাউড ফাংশনটি ডিলিট করতে, https://console.cloud.google.com/functions/ -এ অবস্থিত ক্লাউড ফাংশন ক্লাউড কনসোলে যান এবং imagen_vqa ফাংশনটি ডিলিট করুন (অথবা $FUNCTION_NAME, যদি আপনি অন্য কোনো নাম ব্যবহার করে থাকেন)।

আপনি যদি পুরো প্রজেক্টটি মুছে ফেলতে চান, তাহলে আপনি https://console.cloud.google.com/cloud-resource-manager -এ গিয়ে, ধাপ ২-এ তৈরি করা প্রজেক্টটি নির্বাচন করে 'ডিলিট' (Delete) বিকল্পটি বেছে নিতে পারেন। প্রজেক্টটি মুছে ফেললে, আপনাকে আপনার ক্লাউড এসডিকে (Cloud SDK)-তে প্রজেক্ট পরিবর্তন করতে হবে। আপনি gcloud projects list চালিয়ে সমস্ত উপলব্ধ প্রজেক্টের তালিকা দেখতে পারেন।