Utwórz aplikację do wyszukiwania patentów za pomocą AlloyDB, wyszukiwania wektorowego i Vertex AI

Utwórz aplikację do wyszukiwania patentów za pomocą AlloyDB, wyszukiwania wektorowego i Vertex AI.

Informacje o tym ćwiczeniu (w Codelabs)

subjectOstatnia aktualizacja: lip 13, 2025
account_circleAutorzy: Author: Abirami Sukumaran,

1. Przegląd

W różnych branżach badania patentowe są kluczowym narzędziem do poznawania konkurencji, identyfikowania potencjalnych możliwości licencjonowania lub przejęcia oraz unikania naruszania istniejących patentów.

Badania patentowe są rozległe i złożone. Przeszukiwanie niezliczonych streszczeń technicznych w celu znalezienia odpowiednich innowacji jest trudnym zadaniem. Tradycyjne wyszukiwanie oparte na słowach kluczowych jest często niedokładne i czasochłonne. Streszczenia są długie i techniczne, co utrudnia szybkie zrozumienie głównej idei. Może to spowodować, że badacze pominą kluczowe patenty lub będą tracić czas na nieistotne wyniki.

Tajemnica tej rewolucji tkwi w wyszukiwaniu wektorowym. Zamiast polegać na prostym dopasowywaniu słów kluczowych, wyszukiwanie wektorowe przekształca tekst w reprezentacje numeryczne (wektory dystrybucyjne). Dzięki temu możemy wyszukiwać na podstawie znaczenia zapytania, a nie tylko konkretnych użytych słów. W świecie wyszukiwania literatury to przełom. Wyobraź sobie, że znajdujesz patent na „monitor pracy serca do noszenia”, nawet jeśli w dokumencie nie użyto dokładnie tego wyrażenia.

Cel

W tym laboratorium kodowania pokażemy, jak przyspieszyć, usprawnić i zwiększyć precyzję wyszukiwania patentów dzięki wykorzystaniu AlloyDB, rozszerzenia pgvector oraz wbudowanych funkcji Gemini 1.5 Pro, Embeddings i wyszukiwania wektorowego.

Co utworzysz

W tym module:

  1. Tworzenie instancji AlloyDB i wczytywanie danych z publicznego zbioru danych Patents
  2. Włączanie rozszerzeń pgvector i modeli generatywnej AI w AlloyDB
  3. Generowanie wektorów dystrybucyjnych na podstawie obserwacji
  4. Przeprowadzanie w czasie rzeczywistym wyszukiwania podobieństwa kosinusowego dla tekstu wyszukiwanego przez użytkownika
  5. Wdrażanie rozwiązania w bezserwerowych funkcjach Cloud Functions

Poniższy diagram przedstawia przepływ danych i etapy wdrażania.

8b73c40a0d12e194.png

 High level diagram representing the flow of the Patent Search Application with AlloyDB

Wymagania

  • przeglądarka, np. Chrome lub Firefox;
  • Projekt Google Cloud z włączonymi płatnościami.

2. Zanim zaczniesz

Utwórz projekt

  1. W konsoli Google Cloud na stronie selektora projektów 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 włączone są płatności .
  3. 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.

Obraz przycisku Aktywuj Cloud Shell

  1. Po połączeniu z Cloud Shell sprawdź, czy jesteś już uwierzytelniony i czy projekt jest ustawiony na Twój identyfikator projektu, używając tego polecenia:
gcloud auth list
  1. Aby potwierdzić, że polecenie gcloud zna Twój projekt, uruchom w Cloud Shell to polecenie:
gcloud config list project
  1. Jeśli projekt nie jest ustawiony, użyj tego polecenia, aby go ustawić:
gcloud config set project <YOUR_PROJECT_ID>
  1. Włącz wymagane interfejsy API. Możesz użyć polecenia gcloud w terminalu Cloud Shell:
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 wyszukanie poszczególnych usług w konsoli lub skorzystanie z tego linku.

Informacje o poleceniach gcloud i ich użyciu znajdziesz w dokumentacji.

3. Przygotowywanie bazy danych AlloyDB

Utwórzmy klaster, instancję i tabelę AlloyDB, do których zostanie załadowany zbiór danych patentów.

Tworzenie obiektów AlloyDB

Utwórz klaster i instancję o identyfikatorze klastra „patent-cluster”, haśle „alloydb”, zgodne z PostgreSQL 15, w regionie „us-central1” i z siecią ustawioną na „default”. Ustaw identyfikator instancji na „patent-instance”. Kliknij UTWÓRZ KLASTER. Szczegółowe informacje o tworzeniu klastra znajdziesz pod tym linkiem: https://cloud.google.com/alloydb/docs/cluster-create.

Tworzenie tabeli

Tabelę możesz utworzyć za pomocą instrukcji DDL poniżej w AlloyDB Studio:

CREATE TABLE patents_data ( id VARCHAR(25), type VARCHAR(25), number VARCHAR(20), country VARCHAR(2), date VARCHAR(20), abstract VARCHAR(300000), title VARCHAR(100000), kind VARCHAR(5), num_claims BIGINT, filename VARCHAR(100), withdrawn BIGINT) ;

Włącz rozszerzenia

Do utworzenia aplikacji do wyszukiwania patentów 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 możesz używać do uzyskiwania dostępu do punktów końcowych prognozowania Vertex AI w celu uzyskiwania prognoz w SQL. Włącz te rozszerzenia, uruchamiając te DDL:

CREATE EXTENSION vector;
CREATE EXTENSION google_ml_integration
;

Przyznaj uprawnienia

Aby przyznać uprawnienia do wykonywania funkcji „embedding”, uruchom to polecenie:

GRANT EXECUTE ON FUNCTION embedding TO postgres;

Przyznawanie roli Użytkownik Vertex AI kontu usługi AlloyDB

W konsoli Google Cloud IAM przyznaj kontu usługi AlloyDB (które wygląda tak: service-<<PROJECT_NUMBER>>@gcp-sa-alloydb.iam.gserviceaccount.com) dostęp do roli „Użytkownik Vertex AI”. Zmienna PROJECT_NUMBER będzie zawierać numer Twojego projektu.

Możesz też przyznać dostęp za pomocą polecenia gcloud:

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"

Zmień tabelę, aby dodać kolumnę wektorową do przechowywania dystrybucji.

Uruchom poniższy kod DDL, aby dodać pole abstract_embeddings do utworzonej właśnie tabeli. Ta kolumna będzie przechowywać wartości wektorowe tekstu:

ALTER TABLE patents_data ADD column abstract_embeddings vector(3072);

4. Wczytywanie danych patentowych do bazy danych

Jako zbioru danych użyjemy publicznych zbiorów danych Google Patents w BigQuery. Do uruchamiania zapytań będziemy używać AlloyDB Studio. Repozytorium alloydb-pgvector zawiera skrypt insert_into_patents_data.sql, który uruchomimy, aby załadować dane patentowe.

  1. W konsoli Google Cloud otwórz stronę AlloyDB.
  2. Wybierz nowo utworzony klaster i kliknij instancję.
  3. W menu nawigacyjnym AlloyDB kliknij AlloyDB Studio. Zaloguj się za pomocą swoich danych logowania.
  4. Otwórz nową kartę, klikając ikonę Nowa karta po prawej stronie.
  5. Skopiuj do edytora instrukcję zapytania insert ze wspomnianego wyżej insert_into_patents_data.sql skryptu. Możesz skopiować 50–100 instrukcji wstawiania, aby szybko zademonstrować ten przypadek użycia.
  6. Kliknij Wykonaj. Wyniki zapytania pojawią się w tabeli Wyniki.

5. Tworzenie wektorów dystrybucyjnych na podstawie danych patentowych

Najpierw przetestujmy funkcję osadzania, uruchamiając to przykładowe zapytanie:

SELECT embedding( 'gemini-embedding-001', 'AlloyDB is a managed, cloud-hosted SQL database service.');

Powinien on zwrócić wektor osadzania, który wygląda jak tablica liczb zmiennoprzecinkowych, dla przykładowego tekstu w zapytaniu. Wygląda to tak:

25a1d7ef0e49e91e.png

Zaktualizuj pole wektora abstract_embeddings

Uruchom poniższy język DML, aby zaktualizować streszczenia patentów w tabeli o odpowiednie osadzanie:

UPDATE patents_data set abstract_embeddings = embedding( 'gemini-embedding-001', abstract);

6. Wykonywanie wyszukiwania wektorowego

Gdy tabela, dane i wektory są gotowe, możemy przeprowadzić wyszukiwanie wektorowe w czasie rzeczywistym dla tekstu wyszukiwanego przez użytkownika. Możesz to sprawdzić, uruchamiając to zapytanie:

SELECT id || ' - ' || title as literature FROM patents_data ORDER BY abstract_embeddings <=> embedding('gemini-embedding-001', 'A new Natural Language Processing related Machine Learning Model')::vector LIMIT 10;

W tym zapytaniu

  1. Tekst wyszukiwania użytkownika to: „A new Natural Language Processing related Machine Learning Model” (Nowy model uczenia maszynowego związany z przetwarzaniem języka naturalnego).
  2. Przekształcamy go w wektory dystrybucyjne za pomocą metody embedding() i modelu gemini-embedding-001.
  3. „<=>” oznacza użycie metody odległości COSINE SIMILARITY.
  4. Wynik metody osadzania przekształcamy w typ wektora, aby był zgodny z wektorami przechowywanymi w bazie danych.
  5. LIMIT 10 oznacza, że wybieramy 10 najbliższych dopasowań tekstu wyszukiwania.

Oto wynik:

8e77af965fc787ae.png

Jak widać w wynikach, dopasowania są dość zbliżone do tekstu wyszukiwania.

7. Przenoszenie aplikacji do internetu

Chcesz udostępnić tę aplikację w internecie? Wykonaj te czynności:

  1. Otwórz edytor Cloud Shell i w lewym dolnym rogu (na pasku stanu) kliknij ikonę „Cloud Code – zaloguj się”. Wybierz bieżący projekt Google Cloud, w którym włączone są płatności, i sprawdź, czy jesteś zalogowany w tym samym projekcie w Gemini (w prawym rogu paska stanu).
  2. Kliknij ikonę Cloud Code i poczekaj, aż pojawi się okno Cloud Code. Kliknij Nowa aplikacja, a w wyskakującym okienku Utwórz nową aplikację wybierz Aplikacja Cloud Functions:

a800ee1eb6cb8a5b.png

Na stronie 2/2 okna Utwórz nową aplikację wybierz Java: Hello World i wpisz nazwę projektu „alloydb-pgvector” w wybranej lokalizacji, a następnie kliknij OK:

5b09446ecf7d4f8d.png

  1. W strukturze projektu wyszukaj plik pom.xml i zastąp go zawartością pliku z repozytorium. Oprócz kilku innych zależności powinna ona mieć te zależności:

2b3a3cdd75a57711.png

  1. Zastąp plik HelloWorld.java zawartością pliku z repo.

Pamiętaj, że musisz zastąpić poniższe wartości rzeczywistymi:

String ALLOYDB_DB = "postgres";
String ALLOYDB_USER = "postgres";
String ALLOYDB_PASS = "*****";
String ALLOYDB_INSTANCE_NAME = "projects/<<YOUR_PROJECT_ID>>/locations/us-central1/clusters/<<YOUR_CLUSTER>>/instances/<<YOUR_INSTANCE>>";
//Replace YOUR_PROJECT_ID, YOUR_CLUSTER, YOUR_INSTANCE with your actual values

Pamiętaj, że funkcja oczekuje tekstu wyszukiwania jako parametru wejściowego z kluczem „search”. W tej implementacji zwracamy tylko jedno najbliższe dopasowanie z bazy danych:

// Get the request body as a JSON object.
JsonObject requestJson = new Gson().fromJson(request.getReader(), JsonObject.class);
String searchText = requestJson.get("search").getAsString();

//Sample searchText: "A new Natural Language Processing related Machine Learning Model";
BufferedWriter writer = response.getWriter();
String result = "";
HikariDataSource dataSource = AlloyDbJdbcConnector();

try (Connection connection = dataSource.getConnection()) {
   //Retrieve Vector Search by text (converted to embeddings) using "Cosine Similarity" method
   try (PreparedStatement statement = connection.prepareStatement("SELECT id || ' - ' || title as literature FROM patents_data ORDER BY abstract_embeddings <=> embedding('tgemini-embedding-001', '" + searchText + "' )::vector LIMIT 1")) {
     ResultSet resultSet = statement.executeQuery();
     resultSet.next();
     String lit = resultSet.getString("literature");
     result = result + lit + "\n";
     System.out.println("Matching Literature: " + lit);
 }
writer.write("Here is the closest match: " + result);
}
  1. Aby wdrożyć utworzoną funkcję w Cloud Functions, uruchom w terminalu Cloud Shell to polecenie. Pamiętaj, aby najpierw przejść do odpowiedniego folderu projektu za pomocą tego polecenia:
cd alloydb-pgvector

Następnie uruchom to polecenie:

gcloud functions deploy patent-search --gen2 --region=us-central1 --runtime=java11 --source=. --entry-point=cloudcode.helloworld.HelloWorld --trigger-http

WAŻNY KROK:

Po rozpoczęciu wdrażania funkcje powinny być widoczne w konsoli Cloud Run Functions w Google. Wyszukaj nowo utworzoną funkcję i otwórz ją, edytuj konfiguracje i zmień te ustawienia:

  1. Otwórz Ustawienia środowiska wykonawczego, kompilacji, połączeń i zabezpieczeń
  2. Zwiększ czas oczekiwania do 180 sekund.
  3. Otwórz kartę POŁĄCZENIA:

4e83ec8a339cda08.png

  1. W ustawieniach ruchu przychodzącego upewnij się, że wybrana jest opcja „Zezwalaj na cały ruch”.
  2. W sekcji Ustawienia wyjścia kliknij menu Sieć i wybierz opcję „Dodaj nowy łącznik VPC”, a następnie postępuj zgodnie z instrukcjami w wyświetlonym oknie:

8126ec78c343f199.png

  1. Podaj nazwę oprogramowania sprzęgającego VPC i upewnij się, że region jest taki sam jak w przypadku instancji. Pozostaw domyślną wartość Sieć i ustaw Podsieć jako Niestandardowy zakres adresów IP z zakresem adresów IP 10.8.0.0 lub podobnym, który jest dostępny.
  2. Rozwiń POKAŻ USTAWIENIA SKALOWANIA i upewnij się, że konfiguracja jest dokładnie taka:

7baf980463a86a5c.png

  1. Kliknij UTWÓRZ. Ten łącznik powinien być teraz widoczny w ustawieniach ruchu wychodzącego.
  2. Wybierz nowo utworzony łącznik.
  3. Wybierz opcję kierowania całego ruchu przez to oprogramowanie sprzęgające z dostępem do VPC.

8. Testowanie aplikacji

Po wdrożeniu punkt końcowy powinien być widoczny w tym formacie:

https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/patent-search

Możesz to sprawdzić w terminalu Cloud Shell, uruchamiając to polecenie:

gcloud functions call patent-search --region=us-central1 --gen2 --data '{"search": "A new Natural Language Processing related Machine Learning Model"}'

Efekt:

da3dcfac7d024031.png

Możesz też przetestować ją na liście Cloud Functions. Wybierz wdrożoną funkcję i otwórz kartę „TESTOWANIE”. W polu tekstowym sekcji Skonfiguruj zdarzenie aktywujące dla żądania JSON wpisz:

{"search": "A new Natural Language Processing related Machine Learning Model"}

Kliknij przycisk TEST THE FUNCTION (PRZETESTUJ FUNKCJĘ), a wynik zobaczysz po prawej stronie:

e21f806d661996ff.png

Znakomicie. Wykonywanie wyszukiwania wektorowego na podstawie podobieństwa za pomocą modelu wektorów dystrybucyjnych na danych AlloyDB jest bardzo proste.

9. Czyszczenie danych

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

  1. W konsoli Google Cloud otwórz Zarządzaj .
  2. stronie resources (materiały).
  3. Na liście projektów wybierz projekt, który chcesz usunąć, a potem kliknij Usuń.
  4. W oknie wpisz identyfikator projektu i kliknij Wyłącz, aby usunąć projekt.

10. Gratulacje

Gratulacje! Udało Ci się przeprowadzić wyszukiwanie podobieństw za pomocą AlloyDB, pgvector i wyszukiwarki wektorowej. Łącząc możliwości AlloyDB, Vertex AIwyszukiwania wektorowego, zrobiliśmy ogromny krok naprzód w kierunku udostępnienia wyszukiwania literatury w sposób przystępny, wydajny i naprawdę oparty na znaczeniu.