1. Giriş
Genel Bakış
Vertex AI Arama ve Sohbet (eski adıyla Generative AI App Builder), 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ına olanak tanır. Bu codelab'de, kendi verilerinizle Google kalitesinde bir arama uygulaması geliştirebileceğiniz ve web sayfalarınıza veya uygulamanıza arama çubuğu yerleştirebileceğiniz Vertex AI Arama'yı kullanmaya odaklanacağız.
Cloud Run, container'ları doğrudan Google'ın ölçeklenebilir altyapısında çalıştırmanızı sağlayan bir yönetilen bilgi işlem platformudur. Kaynak tabanlı dağıtım seçeneğini kullanarak Cloud Run'daki (bir container'a yerleştirilebilen) herhangi bir programlama dilinde yazılmış kodu dağıtabilirsiniz.
Bu codelab'de, Cloud Storage paketindeki PDF dosyalarındaki yapılandırılmamış içeriklerle ilgili arama sonuçlarını almak için kaynak tabanlı dağıtımı kullanarak bir Cloud Run hizmeti oluşturacaksınız. Yapılandırılmamış içerikleri besleme hakkında daha fazla bilgiyi burada bulabilirsiniz.
Neler öğreneceksiniz?
- Yapılandırılmamış veriler için Cloud Storage paketinden alınan PDF'ler olarak Vertex AI Arama uygulaması oluşturma
- Cloud Run'da kaynak tabanlı dağıtım kullanarak HTTP uç noktası oluşturma
- Vertex AI Arama uygulamasını sorgulamak amacıyla kullanmak üzere Cloud Run hizmetinin en az ayrıcalık ilkesine göre hizmet hesabı oluşturma
- Vertex AI Arama uygulamasını sorgulamak için Cloud Run hizmetini çağırma
2. Kurulum ve Gereksinimler
Ön koşullar
- Cloud Console'a giriş yaptınız.
- Daha önce bir Cloud Run hizmeti dağıttınız. Örneğin, başlamak için kaynak kodundan web hizmeti dağıtma başlıklı makaledeki adımları uygulayabilirsiniz.
Cloud Shell'i etkinleştirme
- Cloud Console'da, Cloud Shell'i etkinleştir simgesini tıklayın.
Cloud Shell'i ilk kez başlatıyorsanız ne olduğunu açıklayan bir ara ekran gösterilir. Ara bir ekran görüntülendiyse Devam'ı tıklayın.
Temel hazırlık ve Cloud Shell'e bağlanmak yalnızca birkaç dakika sürer.
Gereken tüm geliştirme araçları bu sanal makinede yüklüdür. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud'da çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu codelab'deki çalışmalarınızın tamamı olmasa bile büyük bir kısmı tarayıcıyla yapılabilir.
Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin proje kimliğinize ayarlandığını göreceksiniz.
- Kimlik doğrulamanızın tamamlandığını onaylamak için Cloud Shell'de aşağıdaki 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`
- gcloud komutunun projenizi bildiğini onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud config list project
Komut çıkışı
[core] project = <PROJECT_ID>
Doğru değilse aşağıdaki komutla ayarlayabilirsiniz:
gcloud config set project <PROJECT_ID>
Komut çıkışı
Updated property [core/project].
3. API'leri etkinleştir
Vertex AI Arama'yı 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.
Ardından, Vertex AI Search and Conversation API'yi etkinleştirmek için aşağıdaki adımları uygulayın:
- Google Cloud konsolunda Vertex AI Arama ve Sohbet konsoluna gidin.
- Hizmet Şartları'nı okuyup kabul edin. Ardından Devam'ı tıklayıp API'yi etkinleştirin.
4. Cloud Storage'daki yapılandırılmamış veriler için arama uygulaması oluşturma
- Google Cloud konsolunda Arama ve İleti dizisi sayfası. Yeni uygulama'yı tıklayın.
- Uygulama türü seçin bölmesinde Ara'yı seçin.
- Dokümanlarınızdan kelimesi kelimesine ayıklanan yanıtları almak için Enterprise özelliklerinin etkinleştirildiğinden emin olun.
- Arama özetini almak için Gelişmiş LLM özellikleri seçeneğinin etkinleştirildiğinden emin olun.
- Uygulama adı alanına uygulamanız için bir ad girin. Uygulama kimliğiniz uygulama adının altında görünür.
- Uygulamanızın konumu olarak genel (Global) seçeneğini belirleyin, ardından Devam'ı tıklayın.
- Veri depoları bölmesinde Yeni veri deposu oluştur'u tıklayın.
- Veri kaynağı seçin bölmesinde Cloud Storage'ı seçin.
- Import data from GCS (GCS'den verileri içe aktar) bölmesinde Klasör'ün seçili olduğundan emin olun.
- gs:// alanına şu değeri girin:
cloud-samples-data/gen-app-builder/search/stanford-cs-224
Bu Cloud Storage paketi, test amacıyla herkese açık bir Cloud Storage klasöründen PDF dosyaları içerir. - Yapılandırılmamış dokümanlar'ı seçip Devam'ı tıklayın.
- Veri deponuzu yapılandırın bölmesinde, veri deponuzun konumu olarak genel (Genel) seçeneğini belirleyin.
- Veri deponuz için bir ad girin. Bu adı, bu codelab'in ilerleyen bölümlerinde Cloud Run hizmetinizi dağıtırken kullanacaksınız. Oluştur'u tıklayın.
- Veri depoları bölmesinde yeni veri deponuzu seçin ve Oluştur'u tıklayın.
- Veri deponuzun Veri sayfasında, veri beslemenizin durumunu görmek için Etkinlik sekmesini tıklayın. İçe aktarma işlemi tamamlandığında, Durum sütununda İçe aktarma tamamlandı ifadesi görüntülenir.
- İçe aktarılan doküman sayısını görmek için Dokümanlar sekmesini tıklayın.
- Gezinme menüsünde, arama uygulamasını test etmek için Önizleme'yi tıklayın.
- Arama çubuğuna
final lab due date
yazıp Enter tuşuna basarak sonuçlarınızı görüntüleyin.
5. Cloud Run hizmetini oluşturma
Bu bölümde, arama terimleriniz için sorgu dizesini kabul eden bir Cloud Run hizmeti oluşturacaksınız. Bu hizmet, Discovery Engine API için Python istemci kitaplıklarını kullanacaktır. Desteklenen diğer çalışma zamanları için listeyi buradan inceleyebilirsiniz.
İşlev için kaynak kodunu oluşturma
İlk olarak bir dizin oluşturun ve bu dizin için cd'yi kullanın.
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
Sonra, 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 iyileştirmek 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, Vertex AI Arama API'sine erişmek amacıyla Cloud Run hizmeti için nasıl hizmet hesabı oluşturacağınız 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 container mimarisine almak için kaynak tabanlı bir 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 What is the final lab due date?
hizmetinden istemek için Cloud Run hizmetinizi bir sorgu dizesiyle çağırabilirsiniz.
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 bir görünümde olacaktır:
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 belgeleri incelemenizi öneririz.
İşlediklerimiz
- Yapılandırılmamış veriler için Cloud Storage paketinden alınan PDF'ler olarak Vertex AI Arama uygulaması oluşturma
- Cloud Run'da kaynak tabanlı dağıtım kullanarak HTTP uç noktası oluşturma
- Vertex AI Arama uygulamasını sorgulamak amacıyla kullanmak üzere Cloud Run hizmetinin en az ayrıcalık ilkesine göre hizmet hesabı oluşturma.
- Vertex AI Arama uygulamasını sorgulamak için Cloud Run hizmetini çağırma
8. Temizleme
Yanlışlıkla ücret almamak için (örneğin, bu Cloud Functions işlevi yanlışlıkla ücretsiz katmandaki aylık Cloud Functions işlevi çağırma hakkınızdan daha fazla kez çağrıldıysa) Cloud Functions işlevini silebilir veya 2. adımda oluşturduğunuz projeyi silebilirsiniz.
Cloud Functions işlevini silmek için https://console.cloud.google.com/functions/ adresinden Cloud Functions İşlevi Bulut Konsolu'na 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 gidip 2. adımda oluşturduğunuz projeyi, ardından Sil'i seçebilirsiniz. Projeyi silerseniz Cloud SDK'nızdaki projeleri değiştirmeniz gerekir. gcloud projects list
komutunu çalıştırarak mevcut tüm projelerin listesini görüntüleyebilirsiniz.