1. Wprowadzenie
Ogromne zbiory danych zawierają cenne informacje, ale wyciągnięcie z nich przydatnych wniosków może być trudne. Tradycyjne narzędzia analityczne często nie dostarczają szczegółowych, przypominających ludzkie wyjaśnień, które pomagają nam w pełni zrozumieć historię kryjącą się w danych. Hurtownie danych zawierają coraz więcej danych nieustrukturyzowanych, ale nie zawsze są one dostępne do uzyskiwania statystyk. Nieustrukturyzowane teksty, obrazy i filmy zawierają cenne informacje, które mogą pomóc w rozwoju Twojej firmy. Modele LLM oferują nowy, skuteczny sposób analizowania danych, dostarczając wyjaśnień, analizy nastawienia, wykrywania obiektów i innych informacji. Wraz z pojawieniem się modeli multimodalnych (i możliwości przechowywania w BigQuery danych obiektów, takich jak obrazy i filmy, za pomocą tabel obiektów) integracja zaawansowanych modeli LLM, takich jak Gemini 1.0 Pro (do analizy tekstu) 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 tym samouczku przyjrzymy się 2 metodom wyciągania wniosków z danych przedsiębiorstwa za pomocą LLM i skalowania tych wniosków do tysięcy wierszy w BigQuery:
Metoda 1. Zdalne wywoływanie modelu
- Wywołaj Gemini 1.0 Pro z poziomu BigQuery, używając
ML.GENERATE_TEXTw zapytaniuSELECT. - Użyj tego podejścia, gdy model jest już dostępny jako model zdalny w BigQuery i chcesz go używać od razu. Sprawdź stan modelu, którego chcesz użyć, w dokumentacji BigQuery.
Metoda 2. Wdrożenie funkcji zdalnych
- Wywołaj funkcję Cloud Function, która implementuje wywołanie Gemini 1.0 Pro Vision, udostępnioną jako funkcja zdalna w BigQuery.
- Skorzystaj z tej metody, jeśli model, którego chcesz użyć, nie jest dostępny od razu jako model zdalny lub jeśli w swoim przypadku użycia potrzebujesz większej elastyczności i możliwości dostosowania.
Co utworzysz
- W przypadku metody wywoływania modelu zdalnego utworzysz narzędzie do podsumowywania lokalizacji dla zbioru danych książek z archiwum internetowego (dostępnego publicznie w BigQuery), wywołując model zdalny dla Gemini 1.0 Pro w konstrukcji ML.GENERATE_TEXT w BigQuery.

- W przypadku metody Remote Function Implementation (Implementacja funkcji zdalnej) utworzysz walidator obrazów, który będzie sprawdzać obrazy testowe na podstawie obrazu odniesienia. W tym celu utworzysz zbiór danych zawierający zrzuty ekranu z obrazami testowymi w tabeli zewnętrznej i poprosisz Gemini 1.0 Pro Vision o sprawdzenie ich poprawności na podstawie obrazu bazowego. Następnie utworzysz funkcję w Cloud Functions w Javie, która implementuje wywołanie Gemini Pro Vision, i wywołasz ją jako funkcję zdalną w BigQuery.

Uwaga:
W BigQuery może być dostępnych więcej modeli generatywnej AI w Vertex AI jako modeli zdalnych. Oznacza to, że możesz uzyskać dostęp do tych modeli za pomocą konstrukcji ML.GENERATE_TEXT w BigQuery. Nawet w przypadku dostępności modelu zdalnego zawsze możesz tworzyć zaawansowane dostosowania do swojego przypadku użycia za pomocą Cloud Functions, a następnie uzyskiwać dostęp do tych modeli jako funkcji zdalnych z BigQuery.
Dlaczego warto korzystać z BigQuery?
BigQuery to bezserwerowa, wielochmurowa hurtownia danych, która może skalować się od bajtów do petabajtów przy minimalnych kosztach operacyjnych, dzięki czemu jest doskonałym wyborem do przechowywania danych treningowych ML. Korzystając z wbudowanych funkcji uczenia maszynowego w BigQuery (BQML) i analitycznych BigQuery, możesz tworzyć prognozy bez użycia kodu, używając tylko zapytań SQL. Możesz też uzyskiwać dostęp do danych ze źródeł zewnętrznych za pomocą zapytań federacyjnych, co eliminuje potrzebę stosowania skomplikowanych potoków ETL.
BigQuery to w pełni zarządzana hurtownia danych w chmurze, która pomaga użytkownikom analizować dane uporządkowane, częściowo uporządkowane i nieuporządkowane.
2. Wymagania
3. Zanim zaczniesz
- W konsoli Google Cloud na stronie wyboru projektu 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 .
- Będziesz używać Cloud Shell, czyli środowiska wiersza poleceń działającego w Google Cloud, które jest wstępnie załadowane narzędziem bq. U góry konsoli Google Cloud kliknij Aktywuj Cloud Shell.

- Po połączeniu z Cloud Shell sprawdź, czy uwierzytelnianie zostało już przeprowadzone, a projekt jest już ustawiony na Twój identyfikator projektu, używając tego polecenia:
gcloud auth list
- Aby potwierdzić, że polecenie gcloud zna Twój projekt, uruchom w Cloud Shell to polecenie:
gcloud config list project
- Jeśli projekt nie jest ustawiony, użyj tego polecenia, aby go ustawić:
gcloud config set project <YOUR_PROJECT_ID>
- Aby włączyć interfejs API, przejdź do Gemini for Google Cloud Marketplace. Możesz też użyć tego polecenia w terminalu Cloud Shell:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
- Upewnij się, że te interfejsy API są włączone:
- BigQuery
- Połączenie z BigQuery
- Funkcja w Cloud Functions
- Cloud Run
- Vertex AI
- Cloud Build
- Interfejsy Cloud Storage API
Alternatywą dla użycia polecenia gcloud jest przejście przez konsolę za pomocą tego linku.
Informacje o poleceniach gcloud i ich użyciu znajdziesz w dokumentacji.
4. Tworzenie zbioru danych BigQuery i połączenia zewnętrznego
Zacznijmy od utworzenia zbioru danych i połączenia z zasobem Cloud.
Zbiór danych w BigQuery to kontener wszystkich tabel i obiektów aplikacji.
Aby utworzyć zbiór danych, wykonaj te czynności:
- W konsoli Google Cloud otwórz stronę BigQuery.
- W panelu Eksplorator wybierz projekt, w którym chcesz utworzyć zbiór danych.
- Rozwiń opcję Działania (ikonę pionowego 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-regioni zaakceptuj wartość domyślną, czyliUS(multiple regions in United States.. - Kliknij Utwórz zbiór danych.
- Sprawdź, czy zbiór danych został utworzony i jest widoczny pod identyfikatorem Twojego projektu w panelu Eksplorator.
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 samouczku użyjemy połączenia BigLake, aby uzyskać dostęp do modelu z BigQuery za pomocą funkcji w Cloud Functions. Połączenia BigLake pomagają łączyć zewnętrzne źródło danych przy zachowaniu szczegółowej kontroli dostępu i bezpieczeństwa BigQuery, co w naszym przypadku oznacza interfejs Vertex AI Gemini Pro API.
Aby utworzyć połączenie 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 i BigLake (zasób Cloud).
- W polu Identyfikator połączenia wpisz nazwę połączenia w formacie
gemini-bq-conn. - Ustaw typ lokalizacji jako
Multi-regioni 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 stronę Uprawnienia i administrator i kliknij Przyznaj dostęp.
- Wklej identyfikator konta usługi w polu Nowe podmioty zabezpieczeń.
- Wybierz rolę
Vertex AI userz listy ról, a następnie kliknij Zapisz.

Zbiór danych i połączenie z BigQuery zostały utworzone. Następnie wykonaj czynności wymagane do wywoływania modelu zdalnego.
5. Przypadek użycia 1. Zdalne wywoływanie modelu: skonfiguruj zdalne wywoływanie modelu
Po utworzeniu zbioru danych i połączenia utwórzmy w BigQuery model oparty na modelu podstawowym Vertex AI Gemini Pro. Po zakończeniu tego ćwiczenia Twoja aplikacja LLM będzie działać tylko na podstawie zapytań SQL.
Krok 1. Utwórz tabelę BigQuery zawierającą dane wejściowe dla modelu zdalnego
Utwórz w swoim zbiorze danych tabelę o nazwie books, która może pomieścić około 50 rekordów z tabeli bigquery-public-data.gdelt_internetarchivebooks.1905 w zbiorze danych Internet Archive Books udostępnionym publicznie przez BigQuery.
Aby to zrobić, wykonaj w panelu edytora SQL BigQuery to polecenie DDL (język definiowania danych):
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. Aby to zrobić, uruchom w panelu edytora SQL BigQuery ten kod DDL:
CREATE MODEL `gemini_bq_fn.gemini_remote_model`
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS(ENDPOINT = 'gemini-pro');
Zauważ, że model został utworzony z opcją wyświetlenia.
Krok 3. Przetestuj nową aplikację z generatywną 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ę ten wynik:

Gratulacje! Wiesz już, jak używać modelu zdalnego (opartego na modelu gemini-pro) z funkcją ML.GENERATE_TEXT do analizowania danych tekstowych w tabeli BigQuery.
Teraz wypróbujmy inny model Vertex AI za pomocą zdalnych funkcji BigQuery. Załóżmy, że chcesz dodać więcej opcji dostosowywania i elastyczności do sposobu, w jaki możesz używać modelu zdalnie w BigQuery. Obsługiwane modele są wymienione w dokumentacji BigQuery.
6. Przypadek użycia nr 2. Wdrożenie funkcji zdalnej: skonfiguruj wdrożenie funkcji zdalnej
W tym ćwiczeniu utworzysz w BigQuery funkcję opartą na funkcji Cloud Functions w Javie, która implementuje model podstawowy Gemini 1.0 Pro Vision. Najpierw utworzysz i wdrożysz funkcję Cloud Functions w Javie, aby porównywać obrazy za pomocą modelu Gemini 1.0 Pro Vision, a następnie utworzysz w BigQuery funkcję zdalną, która wywołuje wdrożoną funkcję Cloud Functions. Pamiętaj, że tę samą procedurę można zastosować w przypadku każdego wykonania funkcji zdalnej w BigQuery.
Zaczynajmy!
Krok 1. Utwórz funkcję w Cloud Functions w Javie
Utworzysz funkcję Cloud Functions drugiej generacji w Javie, która będzie weryfikować obrazy testowe na podstawie obrazu bazowego. Obraz bazowy jest przechowywany w zbiorze danych zawierającym zrzuty ekranu obrazów testowych w zewnętrznej tabeli w BigQuery. Obrazy zweryfikujesz za pomocą modelu Gemini Pro Vision (pakiet SDK w Javie). Następnie wdrożysz funkcję Cloud Functions w Javie w punkcie końcowym REST.
Wykonaj te czynności:
- Uruchom edytor Cloud Shell.
- Jeśli korzystasz z starszej wersji edytora, kliknij Wypróbuj nowy edytor.
- Na pasku stanu kliknij Cloud Code – zaloguj się.
- Jeśli pojawi się pytanie o autoryzację edytora Cloud Shell do wykonywania wywołań interfejsu API usług Google Cloud, kliknij Autoryzuj. Postępuj zgodnie z wyświetlanymi instrukcjami, aby zalogować się na konto Google. Masz teraz połączenie z Google Cloud.
- Jeśli nie widzisz swojego projektu w chmurze na pasku stanu Cloud Code, kliknij Cloud Code – Zaloguj się > Wybierz projekt Google Cloud. Wybierz projekt Google Cloud, w którym chcesz utworzyć funkcje Cloud Functions. Projekt zostanie wczytany i stanie się aktywnym projektem w edytorze Cloud Shell.
- Na pasku stanu Cloud Code kliknij nazwę aktywnego projektu. W menu szybkiego wyboru, które się pojawi, 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, kliknij Java: Hello World.

- Wpisz
Gemini-BQ-Functionjako 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 pom.xml. - Zmień nazwę zajęć z
HelloWorld.javana bardziej odpowiednią. Załóżmy, żeGeminiBigQueryFunction.java. Odpowiednio zmień nazwę pakietu. - Zastąp kod zastępczy w pliku GeminiBigQueryFunction.Java przykładowym kodem podanym w repozytorium GitHub. W przykładowym kodzie zastąp zmienną <YOUR_PROJECT_ID> identyfikatorem projektu.
- Otwórz terminal Cloud Shell. Sprawdź, czy jesteś w katalogu projektu. Jeśli nie, otwórz katalog projektu, wykonując to polecenie:
cd Gemini-BQ-Function
- Aby skompilować i wdrożyć funkcję w Cloud Functions, wykonaj to polecenie:
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 funkcji. Dane wyjściowe to adres URL REST w tym 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 prompt dotyczący próbki losowej:

Świetnie! Ogólna implementacja funkcji w Cloud Functions dla modelu Gemini Pro Vision jest gotowa. Użyjmy tego punktu końcowego bezpośrednio w danych BigQuery w ramach funkcji zdalnej BigQuery.
Krok 2. Utwórz tabelę obiektów BigQuery i funkcję zdalną
Wymagania wstępne
W tej części ćwiczenia potrzebny będzie zasobnik 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-imagejako nazwę zasobnika i kliknij Utwórz. - Odznacz opcję
Enforce public access prevention on this bucket. Chociaż w tym ćwiczeniu tworzysz zasobnik do publicznego dostępu, zalecamy zablokowanie dostępu publicznego i przyznanie uprawnień konkretnym kontom usługi zgodnie z wymaganiami w Twoich zastosowaniach w przedsiębiorstwie. - Po utworzeniu zasobnika otwórz kartę Uprawnienia, aby wyświetlić i zmienić uprawnienia.
- Aby dodać podmioty zabezpieczeń, kliknij Przyznaj dostęp. Określ identyfikator konta usługi, aby przyznać uprawnienia konkretnemu kontu, lub wpisz
allUsers, aby przyznać publiczny dostęp do zasobnika. - Wybierz rolę
Storage Object Vieweri kliknij Zapisz. Jeśli pojawi się pytanie, zezwól na dostęp publiczny. - Otwórz kartę Obiekty i prześlij obrazy bazowe oraz obrazy testowe, aby je porównać. W tym ćwiczeniu z programowania możesz przesłać te 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 nieustrukturyzowanych danych w zasobniku za pomocą utworzonego wcześniej połączenia i zbioru danych. Aby to zrobić, wykonaj w panelu edytora zapytań BigQuery to polecenie DDL (język definiowania danych):
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 zdalną funkcję, która będzie wywoływać funkcję Cloud Function w Javie implementującą model Gemini Pro Vision. Utwórz go w tym samym zbiorze danych. Aby to zrobić, uruchom w panelu edytora SQL w konsoli BigQuery ten kod DDL:
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
);
Adres URL punktu końcowego to adres URL REST, który został zwrócony wcześniej w tym ćwiczeniu. Spowoduje to utworzenie funkcji zdalnej w BigQuery. W powyższym DDL znajdują się 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 zapoznać się z kodem Cloud Functions w języku Java, który służy 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ę sprawdzania obrazów pod kątem prompta.
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%';
Wypróbuj powyższe zapytanie z plikami obiektów TEST1 i TEST2. Zobaczysz wynik podobny do tego:

Oto obrazy referencyjne:
Obraz bazowy

Przykładowy obraz

Zwróć uwagę, że oba obrazy są podobne, ponieważ przedstawiają widok konsoli Cloud z Duet AI, ale tekst na obu obrazach jest inny, ponieważ został wygenerowany przez model w formacie JSON.
W ten sposób udało Ci się przetestować implementację funkcji zdalnej.
7. Korzyści i przypadki użycia
Przyjrzyjmy się niektórym korzyściom wynikającym z integracji BigQuery i Gemini na potrzeby analizy danych uporządkowanych i nieuporządkowanych.
- Wykorzystanie generatywnej AI w Twoich danych: koniec z przenoszeniem danych, ich duplikowaniem i dodatkową złożonością. Dane możesz analizować i generować statystyki w tym samym środowisku BigQuery.
- Ulepszona analityka: wyjaśnienia w języku naturalnym od Gemini dodają nową warstwę zrozumienia danych, co możesz osiągnąć za pomocą zapytań SQL.
- Skalowalność: to rozwiązanie z łatwością obsługuje duże zbiory danych i złożone analizy, a do jego wdrożenia nie trzeba pisać dużych ilości kodu.
Możliwości zastosowania tej technologii są liczne. Rozważ scenariusze w finansach (analiza trendów rynkowych), handlu detalicznym (nastroje klientów), opiece zdrowotnej (podsumowania raportów medycznych) itp., w których zespoły analityczne i biznesowe mogą wdrożyć te rozwiązania przy stosunkowo niewielkim nakładzie pracy i zasobów, korzystając z znanego języka i wybranego narzędzia.
8. Czyszczenie danych
Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby użyte w tym poście, wykonaj te czynności:
- W konsoli Google Cloud otwórz stronę Zarządzanie zasobami.
- Z listy 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ę Cloud Function. W tym celu otwórz Cloud Functions, na liście funkcji zaznacz tę, którą chcesz usunąć, i kliknij Usuń.
9. Gratulacje
Gratulacje. Dzięki modelom Gemini zintegrowanym z BigQuery nie tylko analizujesz dane, ale też opowiadasz o nich historie. Możesz generować ukryte narracje w zbiorach danych i zmieniać sposób interpretowania statystyk. Zacznij eksperymentować. Zastosuj tę technikę do własnych zbiorów danych i odkryj historie, które się w nich kryją. BigQuery obsługuje dane nieustrukturyzowane w tabelach obiektów ( tabele zewnętrzne), więc możesz użyć Gemini Pro Vision do tworzenia generatywnych statystyk na podstawie danych obrazów. Więcej szczegółowych wskazówek znajdziesz w dokumentacji Vertex AI, funkcji zdalnych BigQuery i Cloud Functions. Oto repozytorium GitHub tego projektu. Daj nam znać, co udało Ci się stworzyć dzięki tej wiedzy.