LLM tylko dla SQL z BigQuery ML przy użyciu interfejsu Vertex AI PaLM API

1. Wprowadzenie

W ramach tego ćwiczenia w Codelabs znajdziesz listę czynności, które pozwalają wykonać streszczenie kodu źródłowego z repozytoriów GitHub i identyfikację języka programowania w repozytorium przy użyciu dużego modelu językowego Vertex AI do generowania tekstu ( text-bison) jako hostowanej funkcji zdalnej w BigQuery. Dzięki projektowi Archive Project GitHub mamy teraz pełny zrzut ponad 2, 8 mln repozytoriów open source GitHub w publicznych zbiorach danych Google BigQuery. Lista wykorzystywanych usług:

  1. BigQuery ML
  2. Interfejs Vertex AI PaLM API

Co utworzysz

Tworzenie:

  • Zbiór danych BigQuery, który ma zawierać model
  • Model BigQuery, który hostuje interfejs Vertex AI PaLM API jako funkcję zdalną
  • Połączenie zewnętrzne w celu nawiązania połączenia między BigQuery a Vertex AI

2. Wymagania

  • przeglądarki, na przykład Chrome lub Firefox;
  • Projekt Google Cloud z włączonymi płatnościami

3. Zanim zaczniesz

  1. Na stronie selektora projektów w konsoli Google Cloud wybierz lub utwórz projekt Google Cloud.
  2. Sprawdź, czy w projekcie Cloud włączone są płatności. Dowiedz się, jak sprawdzić, czy w projekcie są włączone płatności.
  3. Upewnij się, że wszystkie niezbędne interfejsy API (BigQuery API, Vertex AI API i BigQuery Connection API) są włączone
  4. Użyjesz Cloud Shell – środowiska wiersza poleceń działającego w Google Cloud, które ma wstępnie zainstalowane narzędzie bq. Więcej informacji o poleceniach i korzystaniu z gcloud znajdziesz w dokumentacji

W prawym górnym rogu konsoli Cloud kliknij Aktywuj Cloud Shell:

51622c00acec2fa.png

Jeśli Twój projekt nie jest skonfigurowany, ustaw go za pomocą tego polecenia:

gcloud config set project <YOUR_PROJECT_ID>
  1. Przejdź bezpośrednio do konsoli BigQuery, wpisując w przeglądarce ten URL: https://console.cloud.google.com/bigquery

4. Przygotowywanie danych

W tym przypadku używamy treści kodu źródłowego ze zbioru danych github_repos w publicznych zbiorach danych Google BigQuery. Aby go użyć, w konsoli BigQuery wyszukaj „github_repos”. i naciśnij Enter. Kliknij gwiazdkę obok zbioru danych wymienionego jako wynik wyszukiwania. Potem kliknij „POKAŻ TYLKO Z GWIAZDKĄ”. aby wyświetlić ten zbiór danych tylko z publicznych zbiorów danych.

dc6bf1e2fa6bba8a.png

Rozwiń tabele w zbiorze danych, aby wyświetlić schemat i podgląd danych. Użyjemy parametru sample_contents, który zawiera tylko próbkę (10%) pełnych danych w tabeli zawartości. Oto podgląd danych:

e021c689c56abf22.png

5. Tworzę zbiór danych BigQuery

Zbiór danych BigQuery to zbiór tabel. Wszystkie tabele w zbiorze danych są przechowywane w tej samej lokalizacji danych. Możesz też dołączyć niestandardowe kontrole dostępu, aby ograniczyć dostęp do zbioru danych i jego tabel.

Tworzenie zbioru danych w regionie „USA” (lub dowolny nasz region) o nazwie bq_llm

c67e9f929629739a.png

Ten zbiór danych będzie zawierać model ML, który utworzymy w kolejnych krokach. Zwykle dane używane w aplikacji ML przechowujemy też w tabeli w samym zbiorze danych, ale w naszym przypadku danych, które znajdują się już w publicznym zbiorze danych BigQuery, w razie potrzeby będziemy odwoływać się do nich bezpośrednio z nowo utworzonego zbioru danych. Jeśli chcesz zrealizować ten projekt na własnym zbiorze danych, który znajduje się w pliku CSV (lub dowolnym innym), możesz wczytać dane do zbioru danych BigQuery w tabeli, uruchamiając poniższe polecenie w terminalu Cloud Shell:

bq load --source_format=CSV --skip_leading_rows=1 bq_llm.table_to_hold_your_data \
./your_file.csv \ text:string,label:string

6. Tworzę połączenie zewnętrzne

Utwórz połączenie zewnętrzne (włącz interfejs BQ Connection API, jeśli jeszcze nie zostało to zrobione) i zapisz identyfikator konta usługi ze szczegółów konfiguracji połączenia:

  1. W panelu Eksplorator BigQuery (po lewej stronie konsoli BigQuery) kliknij przycisk +DODAJ, a potem kliknij „Połączenie z zewnętrznymi źródłami danych”. na liście popularnych źródeł
  2. Jako typ połączenia wybierz „BigLake i funkcje zdalne” i wpisz „llm-conn” jako identyfikator połączenia

6b75042881eaec5f.png

  1. Po utworzeniu połączenia zanotuj konto usługi wygenerowane na podstawie szczegółów konfiguracji połączenia

7. Przyznaj uprawnienia

W tym kroku przyznamy kontu usługi uprawnienia dostępu do usługi Vertex AI:

Otwórz Uprawnienia i dodaj konto usługi skopiowane po utworzeniu połączenia zewnętrznego jako podmiot zabezpieczeń i wybierz „Użytkownik Vertex AI” Rola

ff8e1d730879f972.png

8. Tworzenie zdalnego modelu ML

Utwórz model zdalny, który reprezentuje hostowany duży model językowy Vertex AI:

CREATE OR REPLACE MODEL bq_llm.llm_model
  REMOTE WITH CONNECTION `us.llm-conn`
  OPTIONS (remote_service_type = 'CLOUD_AI_LARGE_LANGUAGE_MODEL_V1');

W zbiorze danych bq_llm tworzy model o nazwie llm_model, który wykorzystuje interfejs CLOUD_AI_LARGE_LANGUAGE_MODEL_V1 API Vertex AI jako funkcję zdalną. Wykonanie polecenia może potrwać kilka sekund.

9. Generowanie tekstu za pomocą modelu ML

Po utworzeniu modelu możesz go używać do generowania, podsumowywania lub kategoryzowania tekstu.

SELECT
  ml_generate_text_result['predictions'][0]['content'] AS generated_text,
  ml_generate_text_result['predictions'][0]['safetyAttributes']
    AS safety_attributes,
  * EXCEPT (ml_generate_text_result)
FROM
  ML.GENERATE_TEXT(
    MODEL `bq_llm.llm_model`,
    (
  SELECT
        CONCAT('Can you read the code in the following text and generate a summary for what the code is doing and what language it is written in:', content)
        AS prompt from `bigquery-public-data.github_repos.sample_contents`
          limit 5
    ),
    STRUCT(
      0.2 AS temperature,
      100 AS max_output_tokens));

**Wyjaśnienie:

ml_generate_text_result** to odpowiedź z modelu generowania tekstu w formacie JSON, która zawiera zarówno atrybuty treści, jak i atrybuty bezpieczeństwa: a. Treść reprezentuje wygenerowany wynik tekstowy. b. Atrybuty bezpieczeństwa reprezentują wbudowany filtr treści z regulowanym progiem, który jest włączony w Vertex AI Palm API, aby uniknąć niezamierzonych lub nieprzewidzianych odpowiedzi z dużego modelu językowego – odpowiedź jest blokowana, jeśli narusza próg bezpieczeństwa

ML.GENERATE_TEXT to konstrukcja, której używasz w BigQuery, aby uzyskać dostęp do modelu LLM Vertex AI i wykonywać zadania generowania tekstu.

Funkcja CONCAT dodaje instrukcję PROMPT i rekord bazy danych

github_repos to nazwa zbioru danych, a sample_contents to nazwa tabeli, w której znajdują się dane, których użyjemy w projektowaniu promptów.

Temperatura to parametr promptu służący do kontrolowania losowości odpowiedzi – im mniej, tym lepiej pod względem trafności.

Parametr Max_output_tokens określa liczbę słów, które mają pojawić się w odpowiedzi.

Odpowiedź na zapytanie wygląda tak:

1156f6eecb548cd5.png

10. Spłaszcz wynik zapytania

Spłaszczmy wynik, aby nie trzeba było jawnie dekodować kodu JSON w zapytaniu:

SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `bq_llm.llm_model`,
    (
  SELECT
        CONCAT('Can you read the code in the following text and generate a summary for what the code is doing and what language it is written in:', content)
        AS prompt from `bigquery-public-data.github_repos.sample_contents`
          limit 5
        ),
    STRUCT(
      0.2 AS temperature,
      100 AS max_output_tokens,
      TRUE AS flatten_json_output));

**Wyjaśnienie:

Flatten_json_output** przedstawia wartość logiczną. Jeśli ma wartość prawda, zwracany jest płaski, zrozumiały tekst wyodrębniony z odpowiedzi JSON.

Odpowiedź na zapytanie wygląda tak:

3b662ef7d3ba9263.png

11. Czyszczenie danych

Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby zużyte w tym poście, wykonaj te czynności:

  1. W konsoli Google Cloud otwórz stronę Zarządzanie zasobami.
  2. Na liście projektów wybierz projekt do usunięcia, a potem kliknij Usuń
  3. W oknie wpisz identyfikator projektu i kliknij Wyłącz, aby usunąć projekt.

12. Gratulacje

Gratulacje! Udało Ci się automatycznie użyć modelu LLM do generowania tekstu w Vertex AI do przeprowadzania analizy tekstu na danych tylko przy użyciu zapytań SQL. Więcej informacji o dostępnych modelach znajdziesz w dokumentacji usługi Vertex AI LLM.