Cloud Run सेवा से, Cloud Storage में मौजूद PDF (अनस्ट्रक्चर्ड डेटा) पर Vertex AI Search का इस्तेमाल करना

1. परिचय

खास जानकारी

Vertex AI Search and Conversation (इसे पहले जनरेटिव एआई ऐप्लिकेशन बिल्डर के नाम से जाना जाता था) की मदद से डेवलपर, एंटरप्राइज़-ग्रेड के जनरेटिव एआई ऐप्लिकेशन बनाने के लिए Google के बुनियादी मॉडल, खोज से जुड़ी विशेषज्ञता, और बातचीत वाले एआई टेक्नोलॉजी का इस्तेमाल कर सकते हैं. यह कोडलैब, Vertex AI Search का इस्तेमाल करने पर फ़ोकस करता है. इसमें अपने डेटा का इस्तेमाल करके, Google का क्वालिटी सर्च ऐप्लिकेशन बनाया जा सकता है. साथ ही, अपने वेब पेजों या ऐप्लिकेशन में खोज बार को एम्बेड किया जा सकता है.

Cloud Run एक मैनेज किया गया कंप्यूट प्लैटफ़ॉर्म है जिसकी मदद से, कंटेनर को सीधे Google के स्केलेबल इन्फ़्रास्ट्रक्चर के ऊपर चलाया जा सकता है. सोर्स पर आधारित डिप्लॉयमेंट विकल्प का इस्तेमाल करके, Cloud Run पर किसी भी प्रोग्रामिंग भाषा में लिखे गए कोड को डिप्लॉय किया जा सकता है. इस कोड को कंटेनर में रखा जा सकता है.

इस कोडलैब में, सोर्स के आधार पर डिप्लॉयमेंट का इस्तेमाल करके, Cloud Run सेवा बनाई जा सकती है. इससे Cloud Storage बकेट में, PDF फ़ाइलों में स्ट्रक्चर नहीं किए गए कॉन्टेंट के खोज के नतीजे वापस आते हैं. बिना स्ट्रक्चर वाला कॉन्टेंट डालने के बारे में ज़्यादा जानने के लिए, यहां जाएं.

आपको इनके बारे में जानकारी मिलेगी

  • Cloud Storage बकेट से डेटा डाले गए PDF के तौर पर, बिना स्ट्रक्चर्ड डेटा के Vertex AI Search ऐप्लिकेशन बनाने का तरीका
  • Cloud Run में सोर्स-आधारित डिप्लॉयमेंट का इस्तेमाल करके एचटीटीपी एंडपॉइंट बनाने का तरीका
  • Vertex AI Search ऐप्लिकेशन से क्वेरी करने के लिए, Cloud Run सेवा के लिए कम से कम अधिकारों के सिद्धांत को ध्यान में रखते हुए सेवा खाता बनाने का तरीका
  • Vertex AI Search ऐप्लिकेशन से क्वेरी करने के लिए, Cloud Run सेवा शुरू करने का तरीका

2. सेटअप और ज़रूरी शर्तें

ज़रूरी शर्तें

Cloud Shell चालू करें

  1. Cloud Console में, Cloud Shell चालू करें d1264ca30785e435.png पर क्लिक करें.

cb81e7c8e34bc8d.png

अगर आपने Cloud Shell का इस्तेमाल पहली बार किया है, तो आपको बीच में आने वाली स्क्रीन दिखेगी. इसमें यह बताया जाएगा कि यह क्या है. अगर आपको बीच के लेवल पर मिलने वाली स्क्रीन दिखती है, तो जारी रखें पर क्लिक करें.

d95252b003979716.png

प्रावधान करने और Cloud Shell से कनेक्ट होने में कुछ ही समय लगेगा.

7833d5e1c5d18f54.png

इस वर्चुअल मशीन में डेवलपमेंट के सभी ज़रूरी टूल मौजूद हैं. इसमें लगातार पांच जीबी की होम डायरेक्ट्री मिलती है और यह Google Cloud में काम करती है. यह नेटवर्क की परफ़ॉर्मेंस और ऑथेंटिकेशन को बेहतर बनाने में मदद करती है. अगर सभी नहीं, तो इस कोडलैब में आपका बहुत सारा काम ब्राउज़र से किया जा सकता है.

Cloud Shell से कनेक्ट करने के बाद, आपको दिखेगा कि आपकी पुष्टि हो चुकी है और प्रोजेक्ट आपके प्रोजेक्ट आईडी पर सेट है.

  1. यह पुष्टि करने के लिए Cloud Shell में नीचे दिया गया कमांड चलाएं कि आपकी पुष्टि हो गई है:
gcloud auth list

कमांड आउटपुट

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

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Cloud Shell में यह कमांड चलाएं, ताकि यह पुष्टि की जा सके कि gcloud के लिए कमांड को आपके प्रोजेक्ट के बारे में जानकारी है:
gcloud config list project

कमांड आउटपुट

[core]
project = <PROJECT_ID>

अगर ऐसा नहीं है, तो आप इसे इस निर्देश की मदद से सेट कर सकते हैं:

gcloud config set project <PROJECT_ID>

कमांड आउटपुट

Updated property [core/project].

3. एपीआई चालू करें

Vertex AI Search का इस्तेमाल शुरू करने से पहले, आपको कई एपीआई चालू करने होंगे.

सबसे पहले, इस कोडलैब के लिए Vertex AI Search and Conversation, BigQuery, Cloud Storage API का इस्तेमाल करना ज़रूरी है. उन एपीआई को यहां चालू किया जा सकता है.

इसके बाद, Vertex AI Search and Conversation API को चालू करने के लिए, यह तरीका अपनाएं:

  1. Google Cloud Console में, Vertex AI Search और बातचीत कंसोल पर जाएं.
  2. सेवा की शर्तें पढ़ें और अपनी सहमति दें. इसके बाद, 'जारी रखें' पर क्लिक करके एपीआई को चालू करें.

4. Cloud Storage से अनस्ट्रक्चर्ड डेटा खोजने के लिए ऐप्लिकेशन बनाना

  1. Google Cloud Console में, Search & बातचीत वाला पेज. नया ऐप्लिकेशन पर क्लिक करें.
  2. ऐप्लिकेशन का टाइप चुनें पैनल में, खोजें को चुनें.
  3. पक्का करें कि आपके दस्तावेज़ों से मिले-जुले जवाबों के जवाब पाने के लिए, Enterprise सुविधाएं चालू हों.
  4. पक्का करें कि खोज से जुड़ी खास जानकारी पाने के लिए, एलएलएम की बेहतर सुविधाओं का विकल्प चालू हो.
  5. ऐप्लिकेशन का नाम फ़ील्ड में, अपने ऐप्लिकेशन का नाम डालें. ऐप्लिकेशन के नाम के नीचे, आपका ऐप्लिकेशन आईडी दिखेगा.
  6. अपने ऐप्लिकेशन की जगह के तौर पर ग्लोबल (ग्लोबल) चुनें. इसके बाद, जारी रखें पर क्लिक करें.
  7. डेटा स्टोर पैनल में, नया डेटा स्टोर बनाएं पर क्लिक करें.
  8. डेटा सोर्स चुनें पैनल में, Cloud Storage चुनें.
  9. पक्का करें कि GCS से डेटा इंपोर्ट करें पैनल में, फ़ोल्डर चुना गया हो.
  10. gs:// फ़ील्ड में यह वैल्यू डालें: cloud-samples-data/gen-app-builder/search/stanford-cs-224 इस Cloud Storage बकेट में टेस्ट के लिए, सार्वजनिक तौर पर उपलब्ध Cloud Storage फ़ोल्डर की PDF फ़ाइलें शामिल होती हैं.
  11. बिना स्ट्रक्चर वाले दस्तावेज़ चुनें. इसके बाद, जारी रखें पर क्लिक करें.
  12. अपना डेटा स्टोर कॉन्फ़िगर करें पैनल में, अपने डेटा स्टोर की जगह के तौर पर ग्लोबल (ग्लोबल) चुनें.
  13. अपने डेटा स्टोर के लिए, कोई नाम डालें. अपनी Cloud Run सेवा को डिप्लॉय करते समय, आपको बाद में इस कोडलैब में इस नाम का इस्तेमाल करना होगा. बनाएं पर क्लिक करें.
  14. डेटा स्टोर पैनल में, अपना नया डेटा स्टोर चुनें और बनाएं पर क्लिक करें.
  15. अपने डेटा स्टोर के डेटा पेज पर, गतिविधि टैब पर क्लिक करके अपने डेटा जोड़े जाने की स्थिति देखें. इंपोर्ट की प्रोसेस पूरी होने के बाद, स्थिति कॉलम में इंपोर्ट हो गया दिखेगा.
  16. इंपोर्ट किए गए दस्तावेज़ों की संख्या देखने के लिए, दस्तावेज़ टैब पर क्लिक करें.
  17. नेविगेशन मेन्यू में, सर्च ऐप्लिकेशन की जांच करने के लिए झलक देखें पर क्लिक करें.
  18. अपने नतीजे देखने के लिए, खोज बार में final lab due date डालें और फिर Enter दबाएं.

5. Cloud Run सेवा बनाना

इस सेक्शन में, आपको एक Cloud Run सेवा बनानी होगी, जो खोज के लिए इस्तेमाल किए गए आपके शब्दों के लिए क्वेरी स्ट्रिंग स्वीकार करती हो. यह सेवा Discovery Engine API के लिए Python क्लाइंट लाइब्रेरी का इस्तेमाल करेगी. अन्य रनटाइम के लिए, सूची यहां देखें.

फ़ंक्शन के लिए सोर्स कोड बनाएं

सबसे पहले, एक डायरेक्ट्री बनाएं और उस डायरेक्ट्री में cd डालें.

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>

सेवा खाता बनाना

इस कोडलैब से आपको Cloud Run सेवा के लिए सेवा खाता बनाने का तरीका पता चलता है, ताकि इसे 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'

क्लाउड रन सेवा को डिप्लॉय करें

अब सोर्स के हिसाब से डिप्लॉयमेंट का इस्तेमाल किया जा सकता है, ताकि Cloud Run सेवा को अपने-आप कंटेनर बनाया जा सके.

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

इसके बाद, Cloud Run यूआरएल को एनवायरमेंट वैरिएबल के तौर पर सेव किया जा सकता है, ताकि उसे बाद में इस्तेमाल किया जा सके.

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

6. Cloud Run सेवा को कॉल करें

अब आप What is the final lab due date? से पूछने के लिए, क्वेरी स्ट्रिंग का इस्तेमाल करके Cloud Run सेवा को कॉल कर सकते हैं.

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 Search और Cloud Run से जुड़े दस्तावेज़ पढ़ें.

इसमें हमने इन विषयों के बारे में बताया

  • Cloud Storage बकेट से डेटा डाले गए PDF के तौर पर, बिना स्ट्रक्चर्ड डेटा के Vertex AI Search ऐप्लिकेशन बनाने का तरीका
  • Cloud Run में सोर्स-आधारित डिप्लॉयमेंट का इस्तेमाल करके एचटीटीपी एंडपॉइंट बनाने का तरीका
  • Vertex AI Search ऐप्लिकेशन से क्वेरी करने के लिए, Cloud Run सेवा के लिए कम से कम अधिकारों के सिद्धांत का पालन करते हुए सेवा खाता बनाने का तरीका.
  • Vertex AI Search ऐप्लिकेशन से क्वेरी करने के लिए, Cloud Run सेवा शुरू करने का तरीका

8. व्यवस्थित करें

अनजाने में लगने वाले शुल्क से बचने के लिए, (उदाहरण के लिए, अगर इस Cloud Function को फ़्री टियर में हर महीने दिए जाने वाले Cloud फ़ंक्शन के लिए असाइन किए गए शुल्क से ज़्यादा बार इस्तेमाल किया गया है), तो आप या तो Cloud फ़ंक्शन को मिटा सकते हैं या दूसरे चरण में बनाए गए प्रोजेक्ट को मिटा सकते हैं.

क्लाउड फ़ंक्शन को मिटाने के लिए, https://console.cloud.google.com/functions/ पर 'क्लाउड फ़ंक्शन' Cloud कंसोल पर जाएं और imagen_vqa फ़ंक्शन को मिटाएं (या किसी दूसरे नाम का इस्तेमाल करने पर $Function_NAME).

अगर आपको पूरा प्रोजेक्ट मिटाना है, तो https://console.cloud.google.com/cloud-resource-manager पर जाएं और दूसरे चरण में बनाया गया प्रोजेक्ट चुनें. इसके बाद, 'मिटाएं' चुनें. अगर प्रोजेक्ट मिटाया जाता है, तो आपको Cloud SDK में प्रोजेक्ट बदलने होंगे. gcloud projects list चलाकर, सभी उपलब्ध प्रोजेक्ट की सूची देखी जा सकती है.