1. Wprowadzenie
Olbrzymie zbiory danych zawierają cenne statystyki, ale wydobycie z nich rzetelnych informacji może być trudnym zadaniem. Tradycyjne narzędzia analityczne często nie dostarczają niuansów, podobnych do ludzkich wyjaśnień, które pomagają nam naprawdę zrozumieć historię w naszych danych. Hurtownie danych przechowują coraz więcej nieuporządkowanych danych, ale nie zawsze były one dostępne do wglądu. Nieuporządkowane teksty, obrazy i filmy zawierają cenne informacje, które pomagają w rozwoju Twojej firmy. LLM to nowy, zaawansowany sposób analizowania danych: dostarczający wyjaśnień, analizy nastawienia, wykrywania obiektów i nie tylko. Dzięki pojawieniu się modeli multimodalnych (oraz możliwości przechowywania danych obiektów, takich jak obrazy i filmy w BigQuery za pomocą tabel obiektów) integracja zaawansowanych modeli LLM, takich jak Gemini 1.0 Pro (do analizy tekstowej) i Gemini 1.0 Pro Vision (do analizy tekstu oraz obrazów i filmów) z BigQuery, może zmienić sposób analizowania danych.
W ramach tego ćwiczenia w programie przyjrzymy się 2 metodom rysowania statystyk LLM z danych firmowych oraz skalowania tych statystyk do tysięcy wierszy w BigQuery:
Metoda 1. Zdalne wywołanie modelu
- Wywołaj Gemini 1.0 Pro z BigQuery za pomocą polecenia
ML.GENERATE_TEXT
w zapytaniuSELECT
. - Skorzystaj z tej metody, jeśli model jest już dostępny jako model zdalny w BigQuery i chcesz go używać od razu. W dokumentacji BigQuery sprawdź stan modelu, którego chcesz używać.
Metoda 2. Implementacja funkcji zdalnej
- Wywołaj funkcję w Cloud Functions, która implementuje wywołanie Gemini 1.0 Pro Vision jako funkcję zdalną w BigQuery.
- Skorzystaj z tej metody, gdy model, którego chcesz użyć, nie jest wstępnie dostępny jako model zdalny lub jeśli potrzebujesz większej elastyczności i dostosowania do swojego przypadku użycia.
Co utworzysz
- W przypadku metody Zdalne wywoływanie modelu utworzysz streszczenie lokalizacji dla zbioru danych książek z archiwów internetowych (który jest publicznie dostępny w BigQuery), wywołując model zdalny Gemini 1.0 Pro w konstrukcji ML.GENERATE_TEXT w BigQuery.
- Metoda implementacji funkcji zdalnej przygotowuje walidator obrazów, który porównuje obrazy testowe z obrazem podstawowym. W tym celu utworzysz zbiór danych zawierający zrzuty ekranu z obrazem testowym w tabeli zewnętrznej i poproś Gemini 1.0 Pro Vision o sprawdzenie go z obrazem bazowym. Następnie utworzysz funkcję w Cloud Functions w języku Java, która implementuje wywołanie Gemini Pro Vision i wywołuje ją jako funkcję zdalną w BigQuery.
Uwaga:
Może być więcej modeli generatywnej AI Vertex AI dostępnych w BigQuery jako modele zdalne. Oznacza to, że możesz uzyskać dostęp do tych modeli za pomocą gotowego obiektu ML.GENERATE_TEXT
z BigQuery. Jednak nawet w przypadku dostępności modeli zdalnych zawsze możesz utworzyć zaawansowane modyfikacje na potrzeby swojego przypadku użycia w Cloud Functions, a następnie uzyskać dostęp do tych modeli jako funkcji zdalnych z BigQuery.
Dlaczego BigQuery?
BigQuery to bezserwerowa, wielochmurowa hurtownia danych, która może skalować się od bajtów do petabajtów przy minimalnym nakładzie operacyjnym, dlatego stanowi doskonały wybór do przechowywania danych do trenowania systemów uczących się. Korzystając z wbudowanych systemów uczących się BigQuery (BQML) i funkcji analitycznych, możesz tworzyć prognozy bez kodu za pomocą samych zapytań SQL. Dodatkowo możesz mieć dostęp do danych ze źródeł zewnętrznych za pomocą sfederowanych zapytań, dzięki czemu nie musisz używać skomplikowanych potoków ETL.
BigQuery to w pełni zarządzana hurtownia danych w chmurze, która pomaga użytkownikom analizować uporządkowane, półuporządkowane i nieuporządkowane dane.
2. Wymagania
3. Zanim zaczniesz
- W konsoli Google Cloud na stronie selektora projektów wybierz lub utwórz projekt Google Cloud.
- Sprawdź, czy w projekcie Cloud włączone są płatności. Dowiedz się, jak sprawdzić, czy w projekcie są włączone płatności .
- Użyjesz Cloud Shell – środowiska wiersza poleceń działającego w Google Cloud, które zawiera wstępnie zainstalowane narzędzie bq. Kliknij Aktywuj Cloud Shell u góry konsoli Google Cloud.
- Po nawiązaniu połączenia z Cloud Shell możesz użyć tego polecenia, aby sprawdzić, czy użytkownik jest już uwierzytelniony i czy identyfikator projektu jest ustawiony na identyfikator Twojego projektu:
gcloud auth list
- Uruchom to polecenie w Cloud Shell, aby sprawdzić, czy polecenie gcloud zna Twój projekt.
gcloud config list project
- Jeśli Twój projekt nie jest skonfigurowany, ustaw go za pomocą tego polecenia:
gcloud config set project <YOUR_PROJECT_ID>
- Przejdź do Gemini w Google Cloud Marketplace, aby włączyć interfejs API. Możesz też użyć tego polecenia w terminalu Cloud Shell:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
- Sprawdź, czy te interfejsy API są włączone:
- BigQuery
- Połączenie z BigQuery
- Funkcja w Cloud Functions
- Cloud Run
- Vertex AI
- Cloud Build
- Interfejsy API Cloud Storage
Zamiast używać polecenia gcloud, możesz użyć tego linku, korzystając z konsoli.
Więcej informacji o poleceniach i sposobie korzystania z gcloud znajdziesz w dokumentacji.
4. Tworzenie zbioru danych BigQuery i połączenia zewnętrznego
Zacznijmy od utworzenia zbioru danych i połączenia z zasobami Cloud.
Zbiór danych w BigQuery to kontener na wszystkie tabele i obiekty aplikacji.
Aby utworzyć zbiór danych:
- Otwórz stronę BigQuery w konsoli Google Cloud.
- W panelu Explorer wybierz projekt, w którym chcesz utworzyć zbiór danych.
- Rozwiń opcję Działania (ikonę wielokropka) i kliknij Utwórz zbiór danych.
- Kliknij Utwórz zbiór danych.
- W polu Identyfikator zbioru danych wpisz
gemini_bq_fn
. - Ustaw typ lokalizacji jako
Multi-region
i zaakceptuj wartość domyślną, czyliUS(multiple regions in United States.
. - Kliknij Utwórz zbiór danych.
- Sprawdź w panelu Explorer, czy zbiór danych został utworzony i wyświetlony pod identyfikatorem projektu.
Do interakcji z funkcją w Cloud Functions wymagane jest połączenie z BigQuery. Aby utworzyć funkcję zdalną, musisz utworzyć połączenie z BigQuery. W tym ćwiczeniu w Codelabs użyjemy połączenia BigLake, aby uzyskać dostęp do modelu z BigQuery za pomocą funkcji w Cloud Functions. Połączenia BigLake pomagają połączyć zewnętrzne źródło danych przy zachowaniu szczegółowej kontroli dostępu i zabezpieczeń BigQuery – w naszym przypadku jest to interfejs Vertex AI Gemini Pro API.
Aby utworzyć połączenie z BigLake, wykonaj te czynności:
- W panelu Eksplorator na stronie BigQuery kliknij Dodaj.
- Kliknij Połączenia z zewnętrznymi źródłami danych.
- W menu Typ połączenia wybierz Modele zdalne Vertex AI, funkcje zdalne oraz BigLake (zasób Cloud).
- W polu Connection ID (Identyfikator połączenia) wpisz nazwę połączenia
gemini-bq-conn
. - Ustaw typ lokalizacji jako
Multi-region
i zaakceptuj wartość domyślną, czyliUS(multiple regions in United States.
. - Kliknij Utwórz połączenie.
- Kliknij Otwórz połączenie,a następnie skopiuj identyfikator konta usługi w panelu Informacje o połączeniu.
- Otwórz Uprawnienia i Administracja i kliknij Przyznaj dostęp.
- W polu Nowe zasady wklej identyfikator konta usługi.
- Z listy ról wybierz rolę
Vertex AI user
, a następnie kliknij Zapisz.
Udało Ci się utworzyć zbiór danych i połączenie z BigQuery. Następnie wykonaj czynności wymagane do zdalnego wywoływania modelu.
5. Przypadek użycia nr 1: zdalne wywołanie modelu: konfiguracja zdalnego wywoływania modelu
Masz już zbiór danych i połączenie, utwórzmy więc w BigQuery model oparty na modelu fundacji Vertex AI Gemini Pro. Po zakończeniu tego ćwiczenia Twoja aplikacja LLM będzie działać tylko przy użyciu zapytań SQL.
Krok 1. Utwórz tabelę BigQuery zawierającą dane wejściowe dla modelu zdalnego
Utwórz w zbiorze danych tabelę o nazwie books
, która może zawierać około 50 rekordów z tabeli bigquery-public-data.gdelt_internetarchivebooks.1905
w zbiorze danych Internet Archive Books, który jest wykorzystywany publicznie przez BigQuery.
W tym celu wykonaj tę instrukcję DDL (Data Definition Language) w panelu edytora BigQuery SQL:
create or replace table gemini_bq_fn.books as (
select *
from
bigquery-public-data.gdelt_internetarchivebooks.1905 limit 50)
Krok 2. Utwórz model BigQuery
Utwórz model w zbiorze danych. W tym celu uruchom następujące DDL z panelu edytora BigQuery SQL:
CREATE MODEL `gemini_bq_fn.gemini_remote_model`
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS(ENDPOINT = 'gemini-pro');
Zaobserwuj, że model został utworzony z opcją jego wyświetlenia.
Krok 3. Przetestuj nową aplikację generatywnej AI
Użyj funkcji ML.GENERATE_TEXT
w zapytaniu SELECT
, aby wysłać żądanie do modelu zdalnego.
SELECT ml_generate_text_llm_result as Gemini_Response, prompt as Prompt
FROM ML.GENERATE_TEXT(MODEL `gemini_bq_fn.gemini_remote_model`,
(select 'You are a text summarizer and standardizer. From the following text that contains address locations, standardize and print one standardized, consolidated address. You cannot return empty because you know how to pick up sensible data from the text in this field: ' ||
substring(locations, 0, 200) as prompt
from `gemini_bq_fn.books`),
STRUCT(
TRUE AS flatten_json_output));
Powinien pojawić się następujący wynik:
Gratulacje! Udało Ci się udowodnić, jak używać modelu zdalnego (opartego na modelu gemini-pro
) za pomocą funkcji ML.GENERATE_TEXT
do analizowania danych tekstowych w tabeli BigQuery.
Teraz wypróbujmy inny model Vertex AI z użyciem funkcji zdalnych BigQuery. Załóżmy, że chcesz zwiększyć możliwości dostosowania i zwiększyć elastyczność zdalnego korzystania z modelu w BigQuery. Obsługiwane modele znajdziesz w dokumentacji BigQuery.
6. Przypadek użycia nr 2 Implementacja funkcji zdalnej: konfigurowanie wdrożenia funkcji zdalnej
W tym ćwiczeniu utworzysz funkcję w BigQuery na podstawie funkcji w Cloud Functions w języku Java, która implementuje model fundacji Gemini 1.0 Pro Vision. Najpierw utworzysz i wdrożysz funkcję w Cloud Functions w języku Java, aby porównać obrazy z wykorzystaniem modelu Gemini 1.0 Pro Vision, a potem utworzysz w BigQuery funkcję zdalną, która będzie wywoływać wdrożoną funkcję w Cloud Functions. Pamiętaj, że tę samą procedurę możesz wykonać w przypadku dowolnego zdalnego wykonywania funkcji w BigQuery.
Zaczynajmy!
Krok 1. Utwórz funkcję w Cloud Functions w języku Java
Utworzysz w Javie funkcję w Cloud Functions dla drugiej generacji do weryfikacji obrazów testowych w odniesieniu do obrazu bazowego. Obraz podstawowy jest przechowywany w zbiorze danych zawierającym zrzuty ekranu z obrazem testowym w zewnętrznej tabeli w BigQuery. Do weryfikacji obrazów będziesz używać modelu Gemini Pro Vision (pakietu SDK Java). Następnie wdrożysz w punkcie końcowym REST funkcję w Cloud Functions w języku Java.
Aby to zrobić:
- Uruchom edytor Cloud Shell.
- Jeśli używasz starszej wersji edytora, kliknij Wypróbuj nowy edytor.
- Na pasku stanu kliknij Cloud Code – Sign In (Cloud Code – logowanie).
- Jeśli pojawi się pytanie o autoryzację edytora Cloud Shell do wykonywania wywołań interfejsu Google Cloud API, kliknij Autoryzuj. Postępuj zgodnie z instrukcjami, aby zalogować się na konto Google. Masz teraz połączenie z Google Cloud.
- Jeśli nie widzisz swojego projektu na pasku stanu Cloud Code, kliknij Cloud Code – Zaloguj się > Wybierz projekt Google Cloud. Wybierz projekt Google Cloud, w którym chcesz utworzyć funkcje w Cloud Functions. Projekt zostanie wczytany i stanie się aktywnym projektem w edytorze Cloud Shell.
- Na pasku stanu Cloud Code kliknij nazwę aktywnego projektu. W wyświetlonym menu Szybki wybór wybierz Nowa aplikacja.
- W oknie Create New Application (Utwórz nową aplikację) wybierz Cloud Functions application (Aplikacja Cloud Functions).
- Gdy pojawi się prośba o wybranie szablonu, wybierz Java: Hello World.
- Wpisz
Gemini-BQ-Function
jako nazwę projektu w ścieżce projektu. Struktura projektu pojawi się w nowym widoku edytora Cloud Shell.
- Dodaj niezbędne zależności w tagu
<dependencies>... </dependencies>
lub skopiuj zależności z przykładowego pliku pom.xml. - Zmień nazwę zajęć z
HelloWorld.java
na bardziej odpowiednią. Powiedzmy:GeminiBigQueryFunction.java
. Zmień odpowiednio nazwę pakietu. - Zastąp kod obiektu zastępczego w pliku GeminiBigQueryFunction.Java przykładowym kodem z repozytorium GitHub. Pamiętaj, aby zastąpić zmienną <YOUR_PROJECT_ID>. identyfikatorem projektu w przykładowym kodzie.
- Otwórz terminal Cloud Shell. Sprawdź, czy jesteś w katalogu projektu. Jeśli nie, przejdź do katalogu projektu, wykonując to polecenie:
cd Gemini-BQ-Function
- Aby skompilować i wdrożyć funkcję w Cloud Functions, wykonaj tę instrukcję:
gcloud functions deploy gemini-bq-fn --gen2 --runtime java17 --trigger-http --entry-point cloudcode.helloworld.GeminiBigQueryFunction --allow-unauthenticated --source .
Zastąp punkt wejścia w poleceniu punktem wejścia Twojej funkcji. Dane wyjściowe to adres URL typu REST w takim formacie:
https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/gemini-bq-fn
- Przetestuj tę funkcję w Cloud Functions, uruchamiając w terminalu to polecenie:
gcloud functions call gemini-bq-fn --region=us-central1 --gen2 --data '{"calls":[["https://storage.googleapis.com/img_public_test/image_validator/baseline/1.JPG", "https://storage.googleapis.com/img_public_test/image_validator/test/2.JPG", "PROMPT_ABOUT_THE_IMAGES_TO_GEMINI"]]}'
Odpowiedź na losowy przykładowy prompt:
Świetnie! Ogólna funkcja w Cloud Functions dla implementacji modelu Gemini Pro Vision jest gotowa. Użyjmy tego punktu końcowego bezpośrednio na danych BigQuery z poziomu funkcji zdalnej BigQuery.
Krok 2. Utwórz tabelę obiektów BigQuery i funkcję zdalną
Warunek wstępny
W tej części ćwiczenia będziesz potrzebować zasobnika Cloud Storage. Aby utworzyć zasobnik Cloud Storage, wykonaj te czynności:
- Aby utworzyć zasobnik, otwórz konsolę Cloud Storage i kliknij Utwórz.
- Wpisz
demo-bq-gemini-public-image
jako nazwę zasobnika i kliknij Utwórz. - Odznacz opcję
Enforce public access prevention on this bucket
. Chociaż w tym ćwiczeniu tworzysz ten zasobnik na potrzeby dostępu publicznego, zalecamy zablokowanie dostępu publicznego i przyznanie uprawnień określonym kontom usługi zgodnie z wymaganiami Twojej firmy. - Po utworzeniu zasobnika otwórz kartę Uprawnienia, aby wyświetlić i zmienić uprawnienia.
- Aby dodać podmioty zabezpieczeń, kliknij Przyznaj dostęp. Podaj identyfikator konta usługi, aby przyznać uprawnienia konkretnemu kontu, lub podaj
allUsers
, aby przyznać publiczny dostęp do zasobnika. - Wybierz rolę
Storage Object Viewer
i kliknij Zapisz. Jeśli pojawi się taka prośba, zezwól na dostęp publiczny. - Otwórz kartę Obiekty i prześlij obrazy podstawowe oraz obrazy do porównania. Na potrzeby tego ćwiczenia w programie możesz przesłać następujące publicznie dostępne obiekty: baseline.JPG, TEST1.JPG i TEST2.JPG.
Tworzenie tabeli obiektów BigQuery
Utwórz tabelę obiektów zewnętrznych z BigQuery, aby uzyskać dostęp do nieuporządkowanych danych w zasobniku za pomocą połączenia i utworzonego wcześniej zbioru danych. W tym celu wykonaj tę instrukcję DDL (Data Definition Language) w panelu edytora zapytań BigQuery:
CREATE OR REPLACE EXTERNAL TABLE `gemini_bq_fn.image_validation`
WITH CONNECTION `us.gemini-bq-conn`
OPTIONS(object_metadata="SIMPLE", uris=["gs://demo-bq-gemini-public-image/*.JPG"]);
Sprawdź, czy w zbiorze danych została utworzona nowa tabela obiektów o nazwie image_validation.
Tworzenie funkcji zdalnej BigQuery
Utwórz w BigQuery funkcję zdalną, aby wywołać funkcję w Javie w Cloud Functions, która implementuje model Gemini Pro Vision. Utwórz go w tym samym zbiorze danych. W tym celu uruchom następujące DDL w panelu edytora SQL w konsoli BigQuery:
CREATE OR REPLACE FUNCTION `gemini_bq_fn.FN_IMAGE_VALIDATE` (baseline STRING, test STRING, prompt STRING) RETURNS STRING
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS (
endpoint = 'https://us-central1-<your project id>.cloudfunctions.net/gemini-bq-fn',
max_batching_rows = 1
);
URL punktu końcowego to URL REST, który został zwrócony wcześniej w tym ćwiczeniu. Spowoduje to utworzenie funkcji zdalnej w BigQuery. W powyższym dokumencie DDL występują 3 parametry. Pierwsze 2 parametry to adresy URL obrazów przechowywanych w tabeli obiektów utworzonej w poprzednim kroku. Ostatnim parametrem jest prompt dla modelu (Gemini Pro Vision). Możesz skorzystać z kodu Java Functions w Cloud Functions służącego do analizowania tego podpisu:
Gson().fromJson(request.getReader(), JsonObject.class);
JsonArray calls_array = requestJson.getAsJsonArray("calls");
JsonArray calls = (JsonArray) calls_array.get(0);
String baseline_url = calls.get(0).toString().replace("\"", "");
String test_url = calls.get(1).toString().replace("\"", "");
String prompt_string = calls.get(2).toString();
Wywoływanie Gemini z BigQuery
Użyj funkcji zdalnej w zapytaniu SELECT
, aby przetestować funkcję weryfikacji obrazów pod kątem promptu.
select gemini_bq_fn.FN_IMAGE_VALIDATE(
'https://storage.googleapis.com/demo-bq-gemini-public-image/Baseline.JPG',
REPLACE(uri, 'gs://', 'https://storage.googleapis.com/') ,
'You are an expert image validator who can respond with JSON result. Find 2 images here. The first one is the reference image. The second image is the test image. Compare the second image to see if the second image is similar to the first in terms of the text present in the image. Respond ONLY in JSON Format with 3 attributes namely SIMILARITY which is a \"YES\" or \"NO\", SIMILARITY_SCORE which is a percentage and DIFFERENCE_COMMENT which is a string.' ) as IMAGE_VALIDATION_RESULT
from `gemini_bq_fn.image_validation`
where uri like '%TEST1%';
Spróbuj wykonać podane wyżej zapytanie z użyciem plików obiektów TEST1 i TEST2. Zobaczysz wynik podobny do tego:
Oto grafiki:
Obraz odniesienia
Obraz testowy
Zwróć uwagę, że oba obrazy są podobne pod tym względem, że mają widok konsoli w chmurze Duet AI, ale tekst w obu z nich różni się, ponieważ model w formacie JSON różni się od tekstu.
Dzięki temu udało Ci się przetestować implementację funkcji zdalnej.
7. Korzyści i przypadki użycia
Przyjrzyjmy się niektórym korzyściom z integracji BigQuery z Gemini na potrzeby analizy uporządkowanych i nieuporządkowanych danych.
- Generatywna AI – koniec z przenoszeniem danych, ich powielaniem i zwiększaniem złożoności danych. Możesz analizować dane i generować statystyki w tym samym środowisku BigQuery.
- Ulepszona analityka: wyjaśnienia w języku naturalnym Gemini wzbogacają Twoje dane o nową warstwę rozumienia, co możesz osiągnąć za pomocą zapytań SQL.
- Skalowalność: to rozwiązanie jest łatwe w obsłudze dużych zbiorów danych i złożonych analiz, które nie wymagają pisania dużych ilości kodu.
Powodów jest bardzo wiele. Weź pod uwagę scenariusze z takich dziedzin jak finanse (analiza trendów rynkowych), handel detaliczny (nastawienie klientów), opieka zdrowotna (podsumowania raportów medycznych) itp., w których Twoje zespoły analityczne i biznesowe mogłyby wdrożyć te rozwiązania przy stosunkowo niewielkim nakładzie pracy, za pomocą odpowiednich narzędzi i znajomego języka.
8. Czyszczenie danych
Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby zużyte w tym poście, wykonaj te czynności:
- W konsoli Google Cloud otwórz stronę Zarządzanie zasobami.
- Na liście projektów wybierz projekt do usunięcia, a potem kliknij Usuń.
- W oknie wpisz identyfikator projektu i kliknij Wyłącz, aby usunąć projekt.
- Jeśli chcesz zachować projekt, pomiń powyższe kroki i usuń funkcję w Cloud Functions, przechodząc do Cloud Functions i z listy funkcji zaznacz tę, którą chcesz usunąć, i kliknij Usuń.
9. Gratulacje
Gratulacje. Dzięki integracji modeli Gemini z BigQuery nie ograniczasz już tylko analizy danych – odpowiadasz za swoją rolę w opowiadaniu historii. Możesz generować ukryte narracje w zbiorach danych i zmieniać sposób rozumienia wniosków. Zacznij eksperymentować. Zastosuj tę metodę do własnych zbiorów danych i odkrywaj zawarte w nich artykuły. BigQuery obsługuje nieuporządkowane dane w tabelach obiektów ( tabele zewnętrzne), możesz więc wypróbować Gemini Pro Vision do tworzenia statystyk generatywnych na danych graficznych. Dokładniejsze wskazówki znajdziesz w dokumentacji Vertex AI, funkcji zdalnych BigQuery i Cloud Functions. Oto repozytorium GitHub dla tego projektu. Powiedz nam, co udało Ci się osiągnąć dzięki tym szkoleniom.