1. Omówienie
W obecnej dynamicznie rozwijającej się branży handlu detalicznego kluczowe znaczenie ma zapewnienie klientom wyjątkowej obsługi i spersonalizowanych wrażeń zakupowych. Przeprowadzimy Cię przez proces tworzenia aplikacji czatu opartej na wiedzy, która odpowiada na pytania klientów, pomaga w odkrywaniu produktów i dostosowuje wyniki wyszukiwania. To innowacyjne rozwiązanie łączy w sobie możliwości AlloyDB do przechowywania danych, własny mechanizm analityczny do analizy kontekstu, Gemini (duży model językowy) do weryfikacji trafności oraz narzędzie Google Agent Builder do szybkiego uruchamiania inteligentnego asystenta do prowadzenia konwersacji.
Wyzwanie: klienci oczekują błyskawicznych odpowiedzi i rekomendacji produktów dostosowanych do ich indywidualnych preferencji. Tradycyjne metody wyszukiwania często nie zapewniają takiego poziomu personalizacji.
Rozwiązanie: nasza aplikacja do czatu oparta na wiedzy pozwala rozwiązać ten problem. Korzysta ona z bogatej bazy wiedzy utworzonej na podstawie Twoich danych o sprzedaży, aby rozumieć intencje klientów, inteligentnie na nie odpowiadać i dostarczać trafnych wyników.
Co utworzysz
W ramach tego laboratorium (część 1) wykonasz te czynności:
- Tworzenie instancji AlloyDB i wczytywanie zbioru danych E-commerce
- Włączanie w AlloyDB rozszerzeń pgvector i modeli generatywnej AI
- generować zaszycia na podstawie opisu produktu;
- Przeprowadzanie w czasie rzeczywistym wyszukiwania podobieństwa według podobieństwa cosinusowego do tekstu wyszukiwanego przez użytkownika
- Wdrażanie rozwiązania w bezserwerowych funkcjach Cloud Run
Druga część tego modułu obejmuje czynności związane z Kreatorem agentów.
Wymagania
2. Architektura
Przepływ danych: przyjrzyjmy się bliżej, jak dane przemieszczają się w naszym systemie:
Przetwarzanie:
Pierwszym krokiem jest przetworzenie danych o handlu detalicznym (asortyment, opisy produktów, interakcje z klientem) na potrzeby AlloyDB.
Silnik Analytics:
Jako mechanizm analityczny użyjemy usługi AlloyDB, aby wykonać te czynności:
- Wyodrębnianie kontekstu: mechanizm analizuje dane przechowywane w AlloyDB, aby zrozumieć relacje między produktami, kategoriami, zachowaniami klientów itp.
- Tworzenie zasobów: reprezentacje właściwościowe (matematyczne reprezentacje tekstu) są generowane zarówno dla zapytania użytkownika, jak i informacji przechowywanych w AlloyDB.
- Wyszukiwanie wektorowe: wyszukiwarka wykonuje wyszukiwanie podobne, porównując wektor zapytania z wektorami w opisach produktów, opiniach i innych odpowiednich danych. W ten sposób zidentyfikujesz 25 najbardziej odpowiednich „najbliższych sąsiadów”.
Weryfikacja Gemini:
Te potencjalne odpowiedzi są wysyłane do Gemini w celu oceny. Gemini określa, czy są one naprawdę istotne i czy można je udostępnić użytkownikowi.
Generowanie odpowiedzi:
Walidowane odpowiedzi są strukturyzowane w tablicę JSON, a cały mechanizm jest pakowany w bezserwerową funkcję Cloud Run, która jest wywoływana z narzędzia Agent Builder.
Interakcja konwersacyjna:
Kreator agenta przedstawia odpowiedzi użytkownikowi w języku naturalnym, co ułatwia prowadzenie dialogu. Ten temat zostanie omówiony w kolejnym laboratorium.
3. Zanim zaczniesz
Utwórz projekt
- W konsoli Google Cloud na stronie selektora 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 .
- Użyjesz Cloud Shell, czyli środowiska wiersza poleceń działającego w Google Cloud, które jest wstępnie załadowane w bq. Kliknij Aktywuj Cloud Shell u góry konsoli Google Cloud.
- Po połączeniu z Cloud Shell sprawdź, czy jesteś już uwierzytelniony i czy projekt jest ustawiony na identyfikator Twojego projektu, używając tego polecenia:
gcloud auth list
- Aby sprawdzić, czy 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:
gcloud config set project <YOUR_PROJECT_ID>
- Włącz wymagane interfejsy API.
gcloud services enable alloydb.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
run.googleapis.com \
cloudbuild.googleapis.com \
cloudfunctions.googleapis.com \
aiplatform.googleapis.com
Alternatywą dla polecenia gcloud jest konsola, w której możesz wyszukać poszczególne usługi lub skorzystać z tego linku.
Jeśli pominiesz któryś interfejs API, możesz go włączyć w trakcie implementacji.
Więcej informacji o poleceniach i użyciu gcloud znajdziesz w dokumentacji.
4. Konfiguracja bazy danych
W tym module użyjemy bazy danych AlloyDB do przechowywania danych o sprzedaży detalicznej. Do przechowywania wszystkich zasobów, takich jak bazy danych i logi, używa klastrów. Każdy klaster ma instancję główną, która stanowi punkt dostępu do danych. W tabelach będą się znajdować rzeczywiste dane.
Utwórz klaster, instancję i tabelę AlloyDB, do której zostanie załadowany zbiór danych e-commerce.
Tworzenie klastra i instancji
- Otwórz stronę AlloyDB w konsoli Cloud. Najłatwiej znaleźć większość stron w Cloud Console jest za pomocą paska wyszukiwania w konsoli.
- Na tej stronie wybierz UTWÓRZ KLASTER:
- Zobaczysz ekran podobny do tego poniżej. Utwórz klaster i instancję z tymi wartościami:
- identyfikator klastra: „
shopping-cluster
”; - hasło: „
alloydb
” - Zgodność z PostgreSQL 15
- Region: „
us-central1
” - Networking: „
default
”
- Po wybraniu sieci domyślnej zobaczysz ekran podobny do tego poniżej. Wybierz USTAW POŁĄCZENIE.
- Następnie kliknij „Użyj automatycznie przydzielonego zakresu adresów IP” i Dalej. Po sprawdzeniu informacji wybierz UTWÓRZ POŁĄCZENIE.
- Po skonfigurowaniu sieci możesz kontynuować tworzenie klastra. Kliknij UTWÓRZ KLASTR, aby dokończyć konfigurowanie klastra, jak pokazano poniżej:
Pamiętaj, aby zmienić identyfikator instancji na „shopping-instance"
”.
Pamiętaj, że utworzenie klastra zajmie około 10 minut. Po pomyślnym zakończeniu procesu powinien wyświetlić się ekran podobny do tego:
5. Pozyskiwanie danych
Teraz dodaj tabelę z danymi o sklepie. Przejdź do AlloyDB, wybierz klaster główny, a następnie AlloyDB Studio:
Możesz musieć poczekać, aż instancja zostanie utworzona. Gdy to zrobisz, zaloguj się w AlloyDB, używając danych logowania utworzonych podczas tworzenia klastra. Do uwierzytelniania w PostgreSQL użyj tych danych:
- Nazwa użytkownika: „
postgres
” - Baza danych: „
postgres
” - Hasło: „
alloydb
”
Gdy uwierzytelnisz się w AlloyDB Studio, polecenia SQL są wpisywane w Edytorze. Możesz dodać większą liczbę okien Edytora, klikając plus po prawej stronie ostatniego okna.
Polecenia AlloyDB wpisujesz w oknach edytora, korzystając w razie potrzeby z opcji Uruchom, Formatuj i Wyczyść.
Włączanie rozszerzeń
Do tworzenia tej aplikacji użyjemy rozszerzeń pgvector
i google_ml_integration
. Rozszerzenie pgvector umożliwia przechowywanie wektorów dystrybucyjnych i wyszukiwanie ich. Rozszerzenie google_ml_integration udostępnia funkcje, których używasz do uzyskiwania dostępu do punktów końcowych prognoz Vertex AI w celu uzyskiwania prognoz w języku SQL. Włącz te rozszerzenia, uruchamiając te DDL:
CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector;
Jeśli chcesz sprawdzić rozszerzenia włączone w bazie danych, wykonaj to polecenie SQL:
select extname, extversion from pg_extension;
Tworzenie tabeli
Utwórz tabelę za pomocą poniższej instrukcji DDL:
CREATE TABLE
apparels ( id BIGINT,
category VARCHAR(100),
sub_category VARCHAR(50),
uri VARCHAR(200),
image VARCHAR(100),
content VARCHAR(2000),
pdt_desc VARCHAR(5000),
embedding vector(768) );
Po wykonaniu tego polecenia powinna się ona wyświetlić w bazie danych. Poniżej znajdziesz przykładowy zrzut ekranu:
Pozyskiwanie danych
W tym module mamy dane testowe w postaci około 200 rekordów w pliku SQL. Zawiera id, category, sub_category, uri, image
i content
. Pozostałe pola zostaną wypełnione później w ramach tego modułu.
Skopiuj 20 wierszy lub instrukcji insert, a następnie wklej je na pustą kartę edytora i kliknij URUCHOM.
Aby wyświetlić zawartość tabeli, rozwiń sekcję Eksplorator, aż zobaczysz tabelę o nazwie Odzież. Kliknij 3 kropki (⋮), aby wyświetlić opcję wysyłania zapytania do tabeli. W nowej karcie Edytor otworzy się instrukcja SELECT.
Przyznaj uprawnienia
Aby przyznać użytkownikowi postgres
uprawnienia do wykonywania funkcji embedding
, uruchom to polecenie:
GRANT EXECUTE ON FUNCTION embedding TO postgres;
Przypisz rolę Vertex AI USER do konta usługi AlloyDB
Otwórz terminal Cloud Shell i wpisz to polecenie:
PROJECT_ID=$(gcloud config get-value project)
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"
6. Kontekst
Wróć na stronę instancji AlloyDB.
Aby utworzyć kod embed, potrzebujemy context
, czyli wszystkich informacji, które chcemy uwzględnić w jednym polu. Zrobimy to, tworząc opis produktu (nazwany pdt_desc
). W naszym przypadku użyjemy wszystkich informacji o każdym produkcie, ale gdy będziesz wykorzystywać własne dane, możesz je przekształcić w dowolny sposób, który będzie dla Ciebie odpowiedni.
Wykonaj to polecenie w AlloyDB Studio w nowej instancji. Spowoduje to zaktualizowanie pola pdt_desc danymi kontekstowymi:
UPDATE
apparels
SET
pdt_desc = CONCAT('This product category is: ', category, ' and sub_category is: ', sub_category, '. The description of the product is as follows: ', content, '. The product image is stored at: ', uri)
WHERE
id IS NOT NULL;
Ten DML tworzy proste podsumowanie kontekstu, używając informacji ze wszystkich pól dostępnych w tabeli i innych zależności (jeśli występują w Twoim przypadku użycia). Aby uzyskać bardziej precyzyjny wybór informacji i tworzenie kontekstu, możesz dowolnie przekształcać dane w sposób, który uznasz za odpowiedni dla swojej firmy.
7. Tworzenie wektorów dystrybucyjnych dla kontekstu
Komputery znacznie łatwiej przetwarzają liczby niż tekst. System umieszczania konwertuje tekst w serię liczb zmiennoprzecinkowych, które powinny reprezentować tekst, niezależnie od tego, jak jest sformułowany, w jakim języku jest itd.
Możesz opisać miejsce nad morzem. Może to być „nad wodą”, „przy plaży”, „tuż przy plaży”, „sur la mer”, „на берегу океана” itp. Wszystkie te terminy wyglądają inaczej, ale ich znaczenie semantyczne lub, mówiąc językiem uczenia maszynowego, ich uczenie się powinno być bardzo podobne.
Gdy dane i kontekst będą gotowe, uruchomimy zapytanie SQL, aby dodać do tabeli w polu embedding
kody osadzania opisu produktu. Możesz użyć różnych modeli wstawiania. Używamy text-embedding-004
z Vertex AI. Pamiętaj, aby używać tego samego modelu w całym projekcie.
Uwaga: jeśli używasz istniejącego projektu Google Cloud utworzonego jakiś czas temu, być może nadal musisz używać starszych wersji modelu osadzania tekstu, np. textembedding-gecko.
UPDATE
apparels
SET
embedding = embedding( 'text-embedding-004',
pdt_desc)
WHERE
TRUE;
Aby zobaczyć niektóre wstępnie przetworzone dane, ponownie spójrz na tabelę apparels
. Aby zobaczyć zmiany, ponownie uruchom instrukcję SELECT.
SELECT
id,
category,
sub_category,
content,
embedding
FROM
apparels;
Powinien on zwrócić wektor zagęszczenia, który wygląda jak tablica liczb zmiennoprzecinkowych, dla przykładowego tekstu w zapytaniu, jak pokazano poniżej:
Uwaga: nowo utworzone projekty Google Cloud w wersji bezpłatnej mogą mieć problemy z limitem liczby żądań na potrzeby umieszczania w treści w modelu umieszczania na sekundę. Zalecamy użycie zapytania filtra dla identyfikatora, a potem wybranie 1–5 rekordów itd. podczas generowania kodu embed.
8. Wykonywanie wyszukiwania wektorowego
Teraz, gdy tabela, dane i wektory są gotowe, przeprowadźmy wyszukiwanie wektorów w czasie rzeczywistym dla tekstu wyszukiwanego przez użytkownika.
Załóżmy, że użytkownik zadaje pytanie:
„Chcę damskie bluzki, różowe, codzienne, tylko z czystej bawełny”.
Możesz znaleźć dopasowania, uruchamiając to zapytanie:
SELECT
id,
category,
sub_category,
content,
pdt_desc AS description
FROM
apparels
ORDER BY
embedding <=> embedding('text-embedding-004',
'I want womens tops, pink casual only pure cotton.')::vector
LIMIT
5;
Przyjrzyjmy się temu zapytaniu bliżej:
W tym zapytaniu
- Tekst wyszukiwania użytkownika: „Chcę damskie bluzki, różowe, codzienne, tylko z czystej bawełny”.
- Przekształcamy je w embudy w ramach metody
embedding()
, używając modelutext-embedding-004
. Ten krok powinien być Ci znajomy z ostatniego kroku, w którym zastosowaliśmy funkcję umieszczania we wszystkich elementach w tabeli. - „
<=>
” oznacza użycie metody odległości COSINY SIMILARITY. Wszystkie dostępne miary podobieństwa znajdziesz w dokumentacji pgvector. - Przekształcamy wynik metody osadzania w typ wektora, aby był zgodny z wektorami zapisanymi w bazie danych.
- LIMIT 5 oznacza, że chcemy wyodrębnić 5 najbliższych sąsiadów dla tekstu wyszukiwania.
Wynik wygląda tak:
Jak widać w wynikach, pasujące wyniki są bardzo podobne do tekstu wyszukiwania. Spróbuj zmienić kolor, aby zobaczyć, jak zmieniają się wyniki.
9. Weryfikacja dopasowania za pomocą LLM
Zanim przejdziemy do tworzenia usługi, która zwraca najlepsze dopasowania do aplikacji, użyjemy generatywnego modelu AI, aby sprawdzić, czy te potencjalne odpowiedzi są naprawdę trafne i czy można je udostępnić użytkownikowi.
Sprawdzanie, czy instancja jest skonfigurowana pod kątem Gemini
Najpierw sprawdź, czy integracja z Google ML jest już włączona w przypadku Twojego klastra i instancji. W AlloyDB Studio wpisz to polecenie:
show google_ml_integration.enable_model_support;
Jeśli wartość to „on” (wł.), możesz pominąć 2 kolejne kroki i przejść bezpośrednio do konfigurowania integracji AlloyDB i modelu Vertex AI.
- Otwórz instancję główną klastra AlloyDB i kliknij EDYTUJ INSTANSĘ GŁÓWNĄ.
- W sekcji Opcje zaawansowane przejdź do sekcji Flagi. i sprawdź, czy
google_ml_integration.enable_model_support flag
jest ustawiony na „on
”, jak pokazano poniżej:
Jeśli nie jest ustawione na „wł.”, ustaw je na „wł.”, a potem kliknij przycisk ZAKTUALIZUJ INSTANSACJĘ. Ten krok zajmie kilka minut.
Integracja AlloyDB z modelem Vertex AI
Teraz możesz połączyć się z AlloyDB Studio i uruchomić to zdanie DML, aby skonfigurować dostęp do modelu Gemini z AlloyDB, używając identyfikatora projektu w odpowiednim miejscu. Zanim uruchomisz polecenie, możesz zobaczyć ostrzeżenie o błędzie składni, ale powinno ono działać prawidłowo.
Najpierw tworzymy połączenie z modelem Gemini 1.5, jak pokazano poniżej. W poniższym poleceniu zastąp fragment $PROJECT_ID
identyfikatorem projektu Google Cloud.
CALL
google_ml.create_model( model_id => 'gemini-1.5',
model_request_url => 'https://us-central1-aiplatform.googleapis.com/v1/projects/$PROJECT_ID/locations/us-central1/publishers/google/models/gemini-1.5-pro:streamGenerateContent',
model_provider => 'google',
model_auth_type => 'alloydb_service_agent_iam');
Aby sprawdzić modele skonfigurowane pod kątem dostępu, użyj tego polecenia w AlloyDB Studio:
select model_id,model_type from google_ml.model_info_view;
Na koniec musimy przyznać użytkownikom bazy danych uprawnienia do wykonywania funkcji ml_predict_row, aby mogli przeprowadzać prognozy za pomocą modeli Google Vertex AI. Uruchom to polecenie:
GRANT EXECUTE ON FUNCTION ml_predict_row to postgres;
Uwaga: jeśli używasz istniejącego projektu Google Cloud i istniejącego klastra lub wystąpienia AlloyDB utworzonego jakiś czas temu, konieczne może być usunięcie starych odwołań do modelu gemini-1.5 i utworzenie go ponownie za pomocą powyższego polecenia CALL oraz ponowne uruchomienie grant execute na funkcji ml_predict_row, aby uniknąć problemów z przyszłymi wywołaniami gemini-1.5.
Ocenianie odpowiedzi
W następnej sekcji użyjemy dużego zapytania, aby uzyskać odpowiednie odpowiedzi, ale może być ono trudne do zrozumienia. Za kilka minut przyjrzymy się elementom i sprawdzimy, jak się łączą.
- Najpierw wysyłamy do bazy danych żądanie, aby uzyskać 5 najbardziej pasujących do zapytania użytkownika wyników. Aby uprościć ten przykład, zapytanie jest zakodowane na stałe, ale nie martw się, później je interpolujemy. Dodajemy opis produktu z tabeli
apparels
i 2 nowe pola: jedno, które łączy opis z indeksem, i drugie, które łączy opis z pierwotnym żądaniem. Wszystkie te dane są zapisywane w tabeli o nazwiexyz
(to tylko tymczasowa nazwa tabeli).
CREATE TABLE
xyz AS
SELECT
id || ' - ' || pdt_desc AS literature,
pdt_desc AS content,
'I want womens tops, pink casual only pure cotton.' AS user_text
FROM
apparels
ORDER BY
embedding <=> embedding('text-embedding-004',
'I want womens tops, pink casual only pure cotton.')::vector
LIMIT
5;
Dane wyjściowe tego zapytania to 5 najbardziej podobnych wierszy dotyczących zapytania użytkownika. Nowa tabela xyz będzie zawierać 5 wierszy, z których każdy będzie miał te kolumny:
literature
content
user_text
- Aby określić, na ile odpowiedzi są prawidłowe, użyjemy złożonego zapytania, w którym wyjaśnimy, jak je oceniać. W zapytaniu są używane kolumny
user_text
icontent
z tabelixyz
.
"Read this user search text: ', user_text,
' Compare it against the product inventory data set: ', content,
' Return a response with 3 values: 1) MATCH: if the 2 contexts are at least 85% matching or not: YES or NO 2) PERCENTAGE: percentage of match, make sure that this percentage is accurate 3) DIFFERENCE: A clear short easy description of the difference between the 2 products. Remember if the user search text says that some attribute should not be there, and the record has it, it should be a NO match."
- Następnie na podstawie tego zapytania sprawdzimy „przydatność” odpowiedzi w tabeli
xyz
.
CREATE TABLE
x AS
SELECT
json_array_elements( google_ml.predict_row( model_id => 'gemini-1.5',
request_body => CONCAT('{
"contents": [
{ "role": "user",
"parts":
[ { "text": "Read this user search text: ', user_text, ' Compare it against the product inventory data set: ', content, ' Return a response with 3 values: 1) MATCH: if the 2 contexts are at least 85% matching or not: YES or NO 2) PERCENTAGE: percentage of match, make sure that this percentage is accurate 3) DIFFERENCE: A clear short easy description of the difference between the 2 products. Remember if the user search text says that some attribute should not be there, and the record has it, it should be a NO match."
} ]
}
] }'
)::json))-> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text'
AS LLM_RESPONSE
FROM
xyz;
- Funkcja
predict_row
zwraca wynik w formacie JSON. Kod „-> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text'"
” służy do wyodrębniania rzeczywistego tekstu z tego pliku JSON. Aby zobaczyć zwrócony kod JSON, możesz usunąć ten kod. - Aby uzyskać pole LLM, wystarczy je wyodrębnić z tabeli x:
SELECT
LLM_RESPONSE
FROM
x;
- Można je połączyć w jedne zapytanie, jak pokazano poniżej.
Jeśli przed uruchomieniem tego zapytania wykonasz powyższe zapytania, aby sprawdzić wyniki pośrednie, musisz usunąć z bazy danych AlloyDB tabele xyz i x.
SELECT
LLM_RESPONSE
FROM (
SELECT
json_array_elements( google_ml.predict_row( model_id => 'gemini-1.5',
request_body => CONCAT('{
"contents": [
{ "role": "user",
"parts":
[ { "text": "Read this user search text: ', user_text, ' Compare it against the product inventory data set: ', content, ' Return a response with 3 values: 1) MATCH: if the 2 contexts are at least 85% matching or not: YES or NO 2) PERCENTAGE: percentage of match, make sure that this percentage is accurate 3) DIFFERENCE: A clear short easy description of the difference between the 2 products. Remember if the user search text says that some attribute should not be there, and the record has it, it should be a NO match."
} ]
}
] }'
)::json))-> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text'
AS LLM_RESPONSE
FROM (
SELECT
id || ' - ' || pdt_desc AS literature,
pdt_desc AS content,
'I want womens tops, pink casual only pure cotton.' user_text
FROM
apparels
ORDER BY
embedding <=> embedding('text-embedding-004',
'I want womens tops, pink casual only pure cotton.')::vector
LIMIT
5 ) AS xyz ) AS X;
Chociaż może się to wydawać przytłaczające, mam nadzieję, że uda Ci się to lepiej zrozumieć. Wyniki pokazują, czy istnieje dopasowanie, jaki jest jego odsetek i jakie jest to oznaczenie.
Zwróć uwagę, że model Gemini domyślnie ma włączone przesyłanie strumieniowe, więc rzeczywista odpowiedź jest rozłożona na kilka wierszy:
10. Przeniesienie aplikacji do sieci
Czy chcesz udostępnić tę aplikację w internecie? Aby utworzyć bezserwerowy mechanizm wyszukiwania z funkcjami Cloud Run, wykonaj te czynności:
- Aby UTWORZYĆ nową funkcję Cloud Run, otwórz Cloud Run Functions w konsoli Google Cloud lub użyj tego linku: https://console.cloud.google.com/functions/add.
- Jako środowisko wybierz „funkcja Cloud Run”. Podaj nazwę funkcji „retail-engine” i wybierz region „us-central1”. Ustaw opcję uwierzytelniania na „Zezwalaj na nieuwierzytelnione wywołania” i kliknij DALEJ. Jako środowisko uruchomieniowe wybierz Java 17, a jako edytor kodu źródłowego – Edytor wbudowany.
- Domyślnie punkt wejścia ma wartość „
gcfv2.HelloHttpFunction
”. Zastąp kod zastępczy w elementachHelloHttpFunction.java
ipom.xml
funkcji Cloud Run kodem z pliku Java lub XML. - Pamiętaj, aby zastąpić w pliku Java substytut $PROJECT_ID i dane logowania do AlloyDB swoimi wartościami. Dane logowania do AlloyDB to te, których użyliśmy na początku tego Codelab. Jeśli użyjesz innych wartości, zmień je w pliku Java.
- Kliknij Wdróż.
Po wdrożeniu, aby umożliwić funkcji Cloud Functions dostęp do instancji bazy danych AlloyDB, utworzymy oprogramowanie sprzęgające VPC.
WAŻNY KROK:
Po wdrożenie funkcji powinny być widoczne w konsoli Cloud Run Functions. Odszukaj nowo utworzoną funkcję (retail-engine
), kliknij ją, a potem kliknij EDYTUJ i zmodyfikuj te ustawienia:
- Otwórz Ustawienia środowiska wykonawczego, kompilacji, połączeń i zabezpieczeń
- Zwiększ czas oczekiwania do 180 sekund
- Otwórz kartę POŁĄCZENIA:
- W ustawieniach Ingress sprawdź, czy wybrana jest opcja „Zezwalaj na cały ruch”.
- W ustawieniach wyjścia kliknij menu Sieć i wybierz opcję „Dodaj nowy łącznik VPC” i postępuj zgodnie z instrukcjami wyświetlanymi w wyskakującym okienku:
- Podaj nazwę oprogramowania sprzęgającego VPC i upewnij się, że region jest taki sam jak w przypadku instancji. Pozostaw wartość sieci jako domyślną, a podsieć ustaw jako niestandardowy zakres adresów IP z zakresem adresów 10.8.0.0 lub podobnym, który jest dostępny.
- Rozwiń opcję POKAZ USTAWIENIA SKALOWANIA i upewnij się, że konfiguracja jest ustawiona dokładnie tak:
- Kliknij UTWÓRZ. Ten łącznik powinien teraz być widoczny w ustawieniach wychodzących.
- Wybierz nowo utworzone oprogramowanie sprzęgające
- Wybierz opcję kierowania całego ruchu przez to oprogramowanie sprzęgające VPC.
- Kliknij kolejno DALEJ i WDRÓŻ.
11. Testowanie aplikacji
Po wdrożeniu zaktualizowanej funkcji w Cloud Functions punkt końcowy powinien mieć następujący format:
https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/retail-engine
Możesz go przetestować w terminalu Cloud Shell, uruchamiając to polecenie:
gcloud functions call retail-engine --region=us-central1 --gen2 --data '{"search": "I want some kids clothes themed on Disney"}'
Funkcję Cloud Run możesz też przetestować w ten sposób:
PROJECT_ID=$(gcloud config get-value project)
curl -X POST https://us-central1-$PROJECT_ID.cloudfunctions.net/retail-engine \
-H 'Content-Type: application/json' \
-d '{"search":"I want some kids clothes themed on Disney"}' \
| jq .
Wynik:
Znakomicie. Tak łatwo można przeprowadzić wyszukiwanie wektorowe na podstawie podobieństwa za pomocą modelu wektorów dystrybucyjnych na danych AlloyDB.
Tworzenie agenta konwersacyjnego
Agent jest tworzony w części 2 tego modułu.
12. Czyszczenie danych
Jeśli planujesz ukończyć część 2 tego laboratorium, pomiń ten krok, ponieważ spowoduje on usunięcie bieżącego projektu.
Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby wykorzystane 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.
13. Gratulacje
Gratulacje! Udało Ci się przeprowadzić wyszukiwanie podobieństwa za pomocą AlloyDB, pgvector i wyszukiwarki wektorowej. Połączenie możliwości AlloyDB, Vertex AI i wyszukiwania wektorowego pozwoliło nam zrobić ogromny krok naprzód w czynieniu wyszukiwania kontekstowego i wektorowego bardziej dostępnym, wydajnym i naprawdę ukierunkowanym na znaczenie. W następnej części tego laboratorium omawiamy proces tworzenia agenta.