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 Console'a giriş yapmış olmanız gerekir.
- Daha önce bir Cloud Run hizmeti dağıtmış olmanız gerekir. Örneğin, başlamak için Kaynak koddan web hizmeti dağıtma hızlı başlangıç kılavuzunu inceleyebilirsiniz.
Cloud Shell'i etkinleştirme
- Cloud Console'da Cloud Shell'i etkinleştir 'i
tıklayın.

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.

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

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.
- 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`
- 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:
- Google Cloud Console'da Vertex AI Arama ve Sohbet Konsolu'na gidin.
- 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
- Google Cloud Console'da Arama ve Sohbet sayfasına gidin. Yeni uygulama'yı tıklayın.
- Uygulama türünü seçin bölmesinde Arama'yı seçin.
- Belgelerinizden kelimesi kelimesine alıntılanan yanıtlar almak için Enterprise özelliklerinin etkinleştirildiğinden emin olun.
- Arama özetleri 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 global (Global)'ı seçin ve 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.
- GCS'den veri 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-224Bu Cloud Storage paketinde, test amacıyla herkese açık bir Cloud Storage klasöründeki PDF dosyaları yer alıyor. - Yapılandırılmamış belgeler'i seçip Devam'ı tıklayın.
- Veri deponuzu yapılandırın bölmesinde, veri deponuzun konumu olarak global (Global) seçeneğini belirleyin.
- 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.
- Veri depoları bölmesinde yeni veri deponuzu seçin ve Oluştur'u tıklayın.
- 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.
- İçe aktarılan belge sayısını görmek için Belgeler sekmesini tıklayın.
- Arama uygulamasını test etmek için gezinme menüsünde Önizleme'yi tıklayın.
- Arama çubuğuna
final lab due dategirin 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.