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

1. ভূমিকা

ওভারভিউ

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

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

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

আপনি কি শিখবেন

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

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

পূর্বশর্ত

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

  1. ক্লাউড কনসোল থেকে, ক্লাউড শেল সক্রিয় করুন ক্লিক করুন d1264ca30785e435.png .

cb81e7c8e34bc8d.png

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

d95252b003979716.png

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

7833d5e1c5d18f54.png

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

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

  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].

3. API সক্রিয় করুন৷

আপনি Vertex AI অনুসন্ধান ব্যবহার শুরু করার আগে, আপনাকে সক্ষম করতে হবে এমন বেশ কয়েকটি API আছে।

প্রথমত, এই কোডল্যাবের জন্য Vertex AI সার্চ এবং কথোপকথন, BigQuery, ক্লাউড স্টোরেজ API ব্যবহার করতে হবে। আপনি এখানে সেই API গুলি সক্ষম করতে পারেন।

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

  1. Google ক্লাউড কনসোলে, Vertex AI অনুসন্ধান এবং কথোপকথন কনসোলে নেভিগেট করুন।
  2. পরিষেবার শর্তাবলী পড়ুন এবং সম্মত হন, তারপরে অবিরত ক্লিক করুন এবং API সক্রিয় করুন৷

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

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

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

এই বিভাগে, আপনি একটি ক্লাউড রান পরিষেবা তৈরি করবেন যা আপনার অনুসন্ধান পদগুলির জন্য একটি ক্যোয়ারী স্ট্রিং গ্রহণ করে৷ এই পরিষেবাটি ডিসকভারি ইঞ্জিন 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 অনুসন্ধান 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)')"

6. ক্লাউড রান পরিষেবাতে কল করুন৷

আপনি এখন আপনার ক্লাউড রান পরিষেবাকে একটি ক্যোয়ারী স্ট্রিং সহ কল ​​করতে পারেন যে 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].

7. অভিনন্দন!

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

আমরা Vertex AI অনুসন্ধান এবং ক্লাউড রানের ডকুমেন্টেশন পর্যালোচনা করার পরামর্শ দিই।

আমরা কভার করেছি কি

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

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

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

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

আপনি যদি সম্পূর্ণ প্রকল্প মুছে ফেলার সিদ্ধান্ত নেন, আপনি https://console.cloud.google.com/cloud-resource-manager- এ যেতে পারেন, ধাপ 2-এ আপনার তৈরি করা প্রকল্পটি নির্বাচন করুন এবং মুছুন নির্বাচন করুন৷ আপনি যদি প্রকল্পটি মুছে ফেলেন, তাহলে আপনাকে আপনার ক্লাউড SDK-এ প্রকল্পগুলি পরিবর্তন করতে হবে৷ আপনি gcloud projects list চালিয়ে সমস্ত উপলব্ধ প্রকল্পের তালিকা দেখতে পারেন।