1. Wprowadzenie
Omówienie
Usługa Vertex AI Search and Conversation (dawniej Generative AI App Builder) pozwala deweloperom korzystać z możliwości modeli podstawowych Google, doświadczenia w wyszukiwarce i technologii konwersacyjnej AI do tworzenia aplikacji wykorzystujących generatywną AI klasy korporacyjnej. To ćwiczenia w programie koncentrują się na korzystaniu z Vertex AI Search – w ramach tego narzędzia możesz stworzyć aplikację do wyszukiwania o wysokiej jakości w Google, korzystając z własnych danych, a następnie umieścić pasek wyszukiwania na swoich stronach lub w aplikacji.
Cloud Run to zarządzana platforma obliczeniowa, która umożliwia uruchamianie kontenerów bezpośrednio na skalowalnej infrastrukturze Google. Korzystając z opcji wdrożenia opartego na źródle, możesz wdrożyć w Cloud Run kod napisany w dowolnym języku programowania (który można umieścić w kontenerze).
W ramach tego ćwiczenia w programie utworzysz usługę Cloud Run za pomocą wdrożenia opartego na źródle, która będzie pobierać wyniki wyszukiwania nieuporządkowanej zawartości w plikach PDF w zasobniku Cloud Storage. Więcej informacji o przetwarzaniu nieuporządkowanych treści znajdziesz tutaj.
Czego się nauczysz
- Jak utworzyć aplikację Vertex AI Search na potrzeby nieuporządkowanych danych w postaci plików PDF pozyskanych z zasobnika Cloud Storage
- Jak utworzyć punkt końcowy HTTP za pomocą wdrożenia opartego na źródle w Cloud Run
- Jak utworzyć konto usługi zgodnie z zasadą jak najmniejszych uprawnień dla usługi Cloud Run do wysyłania zapytań do aplikacji Vertex AI Search
- Jak wywołać usługę Cloud Run w celu wysłania zapytania do aplikacji Vertex AI Search
2. Konfiguracja i wymagania
Wymagania wstępne
- Jesteś zalogowany w konsoli Google Cloud.
- Masz już wdrożoną usługę Cloud Run. Możesz na przykład zapoznać się z krótkim wprowadzeniem do wdrażania usługi sieciowej z kodu źródłowego.
Aktywowanie Cloud Shell
- W konsoli Cloud kliknij Aktywuj Cloud Shell .
Jeśli uruchamiasz Cloud Shell po raz pierwszy, zobaczysz ekran pośredni z opisem tej usługi. Jeśli wyświetlił się ekran pośredni, kliknij Dalej.
Uzyskanie dostępu do Cloud Shell i połączenie się z nim powinno zająć tylko kilka chwil.
Ta maszyna wirtualna ma wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i uwierzytelnianie. Większość zadań w ramach tego ćwiczenia z programowania można wykonać w przeglądarce.
Po nawiązaniu połączenia z Cloud Shell powinno pojawić się potwierdzenie, że użytkownik jest uwierzytelniony, a projekt jest ustawiony na identyfikator Twojego projektu.
- Uruchom to polecenie w Cloud Shell, aby potwierdzić, że jesteś uwierzytelniony:
gcloud auth list
Dane wyjściowe polecenia
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- Uruchom to polecenie w Cloud Shell, aby sprawdzić, czy polecenie gcloud zna Twój projekt:
gcloud config list project
Dane wyjściowe polecenia
[core] project = <PROJECT_ID>
Jeśli tak nie jest, możesz go ustawić za pomocą tego polecenia:
gcloud config set project <PROJECT_ID>
Dane wyjściowe polecenia
Updated property [core/project].
3. Włącz interfejsy API
Zanim zaczniesz korzystać z Vertex AI Search, musisz włączyć kilka interfejsów API.
Po pierwsze, to ćwiczenia w Codelabs wymagają użycia interfejsów Vertex AI Search and Conversation, BigQuery i Cloud Storage. Tutaj możesz włączyć te interfejsy API.
Następnie wykonaj te czynności, aby włączyć interfejs Vertex AI Search and Conversation API:
- W konsoli Google Cloud otwórz konsolę wyszukiwania i rozmów Vertex AI.
- Przeczytaj i zaakceptuj Warunki korzystania z usługi, a następnie kliknij Dalej i aktywuj interfejs API.
4. Tworzenie aplikacji do wyszukiwania nieuporządkowanych danych z Cloud Storage
- W konsoli Google Cloud otwórz sekcję Wyszukiwanie Strona wątku. Kliknij Nowa aplikacja.
- W panelu Wybierz typ aplikacji kliknij Wyszukiwanie.
- Aby otrzymywać odpowiedzi wyodrębnione z dokumentów, upewnij się, że funkcje Enterprise są włączone.
- Aby otrzymywać podsumowania wyszukiwania, upewnij się, że opcja Zaawansowane funkcje LLM jest włączona.
- W polu Nazwa aplikacji wpisz nazwę aplikacji. Identyfikator aplikacji pojawi się pod jej nazwą.
- Wybierz globalną (globalną) jako lokalizację aplikacji, a potem kliknij Dalej.
- W panelu Magazyny danych kliknij Utwórz nowy magazyn danych.
- W panelu Wybierz źródło danych kliknij Cloud Storage.
- W panelu Import data from GCS wybierz Folder.
- W polu gs:// wpisz tę wartość:
cloud-samples-data/gen-app-builder/search/stanford-cs-224
Ten zasobnik Cloud Storage zawiera pliki PDF z publicznie dostępnego folderu Cloud Storage do celów testowych. - Wybierz Dokumenty nieuporządkowane i kliknij Dalej.
- W panelu Skonfiguruj magazyn danych wybierz lokalizację globalną (globalną).
- Wpisz nazwę magazynu danych. Użyjesz tej nazwy w dalszej części tego ćwiczenia z programowania podczas wdrażania usługi Cloud Run. Kliknij Utwórz.
- W panelu Bazy danych wybierz nowy magazyn danych i kliknij Utwórz.
- Na stronie Dane w magazynie danych kliknij kartę Aktywność, aby sprawdzić stan przetwarzania danych. W kolumnie Stan pojawi się wartość Import zakończony.
- Kliknij kartę Dokumenty, aby zobaczyć liczbę zaimportowanych dokumentów.
- W menu nawigacyjnym kliknij Podgląd, aby przetestować wyszukiwarkę.
- Na pasku wyszukiwania wpisz
final lab due date
, a następnie naciśnij Enter, aby wyświetlić wyniki.
5. Tworzenie usługi Cloud Run
W tej sekcji utworzysz usługę Cloud Run, która będzie akceptować ciąg znaków zapytania. Ta usługa będzie korzystać z bibliotek klienta Pythona na potrzeby interfejsu Discovery Engine API. Listę innych obsługiwanych środowisk wykonawczych znajdziesz tutaj.
Utwórz kod źródłowy funkcji
Najpierw utwórz w nim katalog i dysk cd.
mkdir docs-search-service-python && cd $_
Następnie utwórz plik requirements.txt
z tą zawartością:
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
Następnie utwórz plik źródłowy main.py
o takiej zawartości:
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)))
Skonfiguruj zmienne środowiskowe
W tym kodzie utworzysz kilka zmiennych środowiskowych, aby poprawić czytelność poleceń gcloud
używanych w tym ćwiczeniu z programowania.
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>
Utwórz konto usługi
Z tego ćwiczenia w Codelabs dowiesz się, jak utworzyć konto usługi dla usługi Cloud Run, za pomocą którego będziesz uzyskiwać dostęp do interfejsu 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'
Wdrażanie usługi Cloud Run
Teraz możesz użyć wdrożenia opartego na źródle, aby automatycznie konteneryzować usługę 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
Potem możesz zapisać adres URL Cloud Run jako zmienną środowiskową do późniejszego użycia.
ENDPOINT_URL="$(gcloud run services describe $SERVICE_NAME --region=$SERVICE_REGION --format='value(status.url)')"
6. Wywoływanie usługi Cloud Run
Możesz teraz wywoływać usługę Cloud Run za pomocą ciągu zapytania, aby wysłać do What is the final lab due date?
żądanie.
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" "$ENDPOINT_URL?searchQuery=what+is+the+final+lab+due+date"
Twoje wyniki powinny wyglądać podobnie do tych poniżej:
The final lab is due on Tuesday, March 21 at 4:30 PM [1].
7. Gratulacje!
Gratulujemy ukończenia ćwiczeń z programowania.
Zalecamy zapoznanie się z dokumentacją dotyczącą Vertex AI Search i Cloud Run.
Omówione zagadnienia
- Jak utworzyć aplikację Vertex AI Search na potrzeby nieuporządkowanych danych w postaci plików PDF pozyskanych z zasobnika Cloud Storage
- Jak utworzyć punkt końcowy HTTP za pomocą wdrożenia opartego na źródle w Cloud Run
- Jak utworzyć konto usługi zgodnie z zasadą jak najmniejszych uprawnień, która pozwala usłudze Cloud Run wysyłać zapytania do aplikacji Vertex AI Search.
- Jak wywołać usługę Cloud Run w celu wysłania zapytania do aplikacji Vertex AI Search
8. Czyszczenie danych
Aby uniknąć niezamierzonych opłat (na przykład jeśli ta funkcja w Cloud Functions została przypadkowo wywołana więcej razy niż miesięczny przydział wywołań funkcji w Cloud Functions na poziomie bezpłatnym), możesz usunąć funkcję w Cloud Functions lub projekt utworzony w kroku 2.
Aby usunąć funkcję w Cloud Functions, otwórz konsolę Cloud Functions w Cloud Functions na https://console.cloud.google.com/functions/ i usuń funkcję imagen_vqa (lub $FUNCTION_NAME w przypadku użycia innej nazwy).
Jeśli zdecydujesz się usunąć cały projekt, możesz otworzyć stronę https://console.cloud.google.com/cloud-resource-manager, wybrać projekt utworzony w kroku 2 i kliknąć Usuń. Jeśli usuniesz projekt, musisz zmienić projekty w pakiecie SDK Cloud. Aby wyświetlić listę wszystkich dostępnych projektów, uruchom polecenie gcloud projects list
.