Vertex AI Arama'yı bir Cloud Run hizmetinden alınan Cloud Storage'daki PDF'lerde (yapılandırılmamış veri) kullanma

1. Giriş

Genel Bakış

Vertex AI Arama ve Sohbet (eski adıyla Üretken Yapay Zeka Uygulama Oluşturucu), geliştiricilerin kurumsal düzeyde üretken yapay zeka uygulamaları oluşturmak için Google'ın temel modellerinin, arama uzmanlığının ve etkileşimli yapay zeka teknolojilerinin gücünden yararlanmasını sağlar. Bu codelab, kendi verilerinizde Google kalitesinde bir arama uygulaması oluşturabileceğiniz ve web sayfalarınıza veya uygulamanıza bir arama çubuğu yerleştirebileceğiniz Vertex AI Search'ü kullanmaya odaklanmaktadır.

Cloud Run, container'ları doğrudan Google'ın ölçeklenebilir altyapısı üzerinde çalıştırmanıza olanak tanıyan yönetilen bir işlem platformudur. Kaynak tabanlı dağıtım seçeneğini kullanarak Cloud Run'da herhangi bir programlama dilinde yazılmış (kapsayıcıya yerleştirilebilen) kodu dağıtabilirsiniz.

Bu codelab'de, Cloud Storage paketindeki PDF dosyalarındaki yapılandırılmamış içerik için arama sonuçlarını almak üzere kaynak tabanlı dağıtımı kullanarak bir Cloud Run hizmeti oluşturacaksınız. Yapılandırılmamış içeriklerin alınması hakkında daha fazla bilgiyi burada bulabilirsiniz.

Neler öğreneceksiniz?

  • Cloud Storage paketinden alınan PDF'ler olarak yapılandırılmamış veriler için Vertex AI Search uygulaması oluşturma
  • Cloud Run'da kaynağa dayalı dağıtımı kullanarak HTTP uç noktası oluşturma
  • Cloud Run hizmetinin Vertex AI Search uygulamasını sorgulamak için kullanacağı, en az ayrıcalık ilkesine uygun bir hizmet hesabı oluşturma
  • Vertex AI Search uygulamasına sorgu göndermek için Cloud Run hizmetini çağırma

2. Kurulum ve Gereksinimler

Ön koşullar

Cloud Shell'i etkinleştirme

  1. Cloud Console'da Cloud Shell'i etkinleştir 'i d1264ca30785e435.png tıklayın.

cb81e7c8e34bc8d.png

Cloud Shell'i ilk kez başlatıyorsanız ne olduğunu açıklayan bir ara ekran gösterilir. Ara ekran gösterildiyse Devam'ı tıklayın.

d95252b003979716.png

Cloud Shell'in temel hazırlığı ve bağlanması yalnızca birkaç dakikanızı alır.

7833d5e1c5d18f54.png

Bu sanal makineye, ihtiyaç duyacağınız tüm geliştirme araçları yüklenmiştir. 5 GB boyutunda kalıcı bir ana dizin bulunur ve Google Cloud'da çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu codelab'deki çalışmalarınızın neredeyse tamamını tarayıcıyla yapabilirsiniz.

Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin, proje kimliğinize ayarlandığını görürsünüz.

  1. Kimliğinizin doğrulandığını onaylamak için Cloud Shell'de şu komutu çalıştırın:
gcloud auth list

Komut çıkışı

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

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. gcloud komutunun projeniz hakkında bilgi sahibi olduğunu onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud config list project

Komut çıkışı

[core]
project = <PROJECT_ID>

Değilse şu komutla ayarlayabilirsiniz:

gcloud config set project <PROJECT_ID>

Komut çıkışı

Updated property [core/project].

3. API'leri etkinleştir

Vertex AI Search'ü kullanmaya başlamadan önce etkinleştirmeniz gereken birkaç API vardır.

Öncelikle bu codelab'de Vertex AI Arama ve Sohbet, BigQuery ve Cloud Storage API'lerinin kullanılması gerekir. Bu API'leri buradan etkinleştirebilirsiniz.

İkinci olarak, Vertex AI Arama ve Sohbet API'sini etkinleştirmek için aşağıdaki adımları uygulayın:

  1. Google Cloud Console'da Vertex AI Arama ve Sohbet Konsolu'na gidin.
  2. Hizmet Şartları'nı okuyup kabul edin, ardından Devam'ı tıklayın ve API'yi etkinleştirin.

4. Cloud Storage'daki yapılandırılmamış veriler için arama uygulaması oluşturma

  1. Google Cloud Console'da Arama ve Sohbet sayfasına gidin. Yeni uygulama'yı tıklayın.
  2. Uygulama türünü seçin bölmesinde Arama'yı seçin.
  3. Belgelerinizden kelimesi kelimesine alıntılanan yanıtlar almak için Enterprise özelliklerinin etkinleştirildiğinden emin olun.
  4. Arama özetleri almak için Gelişmiş LLM özellikleri seçeneğinin etkinleştirildiğinden emin olun.
  5. Uygulama adı alanına uygulamanız için bir ad girin. Uygulama kimliğiniz, uygulama adının altında görünür.
  6. Uygulamanızın konumu olarak global (Global)'ı seçin ve Devam'ı tıklayın.
  7. Veri depoları bölmesinde Yeni veri deposu oluştur'u tıklayın.
  8. Veri kaynağı seçin bölmesinde Cloud Storage'ı seçin.
  9. GCS'den veri içe aktar bölmesinde Klasör'ün seçili olduğundan emin olun.
  10. gs:// alanına şu değeri girin: cloud-samples-data/gen-app-builder/search/stanford-cs-224 Bu Cloud Storage paketinde, test amacıyla herkese açık bir Cloud Storage klasöründeki PDF dosyaları yer alıyor.
  11. Yapılandırılmamış belgeler'i seçip Devam'ı tıklayın.
  12. Veri deponuzu yapılandırın bölmesinde, veri deponuzun konumu olarak global (Global) seçeneğini belirleyin.
  13. Veri deponuz için bir ad girin. Bu adı, Cloud Run hizmetinizi dağıtırken bu codelab'in ilerleyen bölümlerinde kullanacaksınız. Oluştur'u tıklayın.
  14. Veri depoları bölmesinde yeni veri deponuzu seçin ve Oluştur'u tıklayın.
  15. Veri deponuzun Veri sayfasında, veri kullanımınızın durumunu görmek için Etkinlik sekmesini tıklayın. İçe aktarma işlemi tamamlandığında Durum sütununda İçe aktarma tamamlandı ifadesi gösterilir.
  16. İçe aktarılan belge sayısını görmek için Belgeler sekmesini tıklayın.
  17. Arama uygulamasını test etmek için gezinme menüsünde Önizleme'yi tıklayın.
  18. Arama çubuğuna final lab due date girin ve sonuçlarınızı görüntülemek için Enter tuşuna basın.

5. Cloud Run hizmetini oluşturma

Bu bölümde, arama terimleriniz için bir sorgu dizesini kabul eden bir Cloud Run hizmeti oluşturacaksınız. Bu hizmet, Discovery Engine API için Python istemci kitaplıklarını kullanır. Desteklenen diğer çalışma zamanları için listeyi buradan görüntüleyebilirsiniz.

İşlevin kaynak kodunu oluşturma

Öncelikle bir dizin oluşturun ve bu dizine gidin.

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

Ardından, aşağıdaki içeriğe sahip bir requirements.txt dosyası oluşturun:

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

Ardından, aşağıdaki içeriğe sahip bir main.py kaynak dosyası oluşturun:

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)))

Ortam değişkenlerini ayarlama

Bu kodda, bu codelab'de kullanılan gcloud komutlarının okunabilirliğini artırmak için birkaç ortam değişkeni oluşturacaksınız.

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>

Hizmet hesabı oluşturma

Bu codelab'de, Cloud Run hizmeti için Vertex AI Search API'ye erişmek üzere kullanılacak bir hizmet hesabının nasıl oluşturulacağı gösterilmektedir.

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 hizmetini dağıtma

Artık Cloud Run hizmetinizi otomatik olarak kapsüllemek için kaynak tabanlı dağıtım kullanabilirsiniz.

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

Ardından, Cloud Run URL'sini daha sonra kullanmak üzere ortam değişkeni olarak kaydedebilirsiniz.

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

6. Cloud Run hizmetini çağırma

Artık Cloud Run hizmetinizi bir sorgu dizesiyle çağırarak What is the final lab due date? sorusunu sorabilirsiniz.

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

Sonuçlarınız, aşağıdaki örnek çıkışa benzer şekilde görünmelidir:

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

7. Tebrikler!

Tebrikler, codelab'i tamamladınız.

Vertex AI Search ve Cloud Run ile ilgili dokümanları incelemenizi öneririz.

İşlediğimiz konular

  • Cloud Storage paketinden alınan PDF'ler olarak yapılandırılmamış veriler için Vertex AI Search uygulaması oluşturma
  • Cloud Run'da kaynağa dayalı dağıtımı kullanarak HTTP uç noktası oluşturma
  • Cloud Run hizmetinin Vertex AI Search uygulamasına sorgu göndermek için kullanacağı, en az ayrıcalık ilkesine uygun bir hizmet hesabı oluşturma
  • Vertex AI Search uygulamasına sorgu göndermek için Cloud Run hizmetini çağırma

8. Temizleme

Yanlışlıkla ücretlendirilmemek için (örneğin, bu Cloud Functions işlevi ücretsiz katmandaki aylık Cloud Functions işlevi çağırma tahsisinizden daha fazla sayıda çağrılırsa) Cloud Functions işlevini veya 2. adımda oluşturduğunuz projeyi silebilirsiniz.

Cloud Functions işlevini silmek için https://console.cloud.google.com/functions/ adresindeki Cloud Functions Cloud Console'a gidin ve imagen_vqa işlevini (veya farklı bir ad kullandıysanız $FUNCTION_NAME) silin.

Projenin tamamını silmeyi tercih ederseniz https://console.cloud.google.com/cloud-resource-manager adresine gidebilir, 2. adımda oluşturduğunuz projeyi seçip Sil'i tıklayabilirsiniz. Projeyi silerseniz Cloud SDK'nızda projeleri değiştirmeniz gerekir. gcloud projects list komutunu çalıştırarak kullanılabilir tüm projelerin listesini görüntüleyebilirsiniz.