Создайте приложение для патентного поиска с помощью AlloyDB, Vector Search & Вертекс ИИ!

Создайте приложение для поиска патентов с помощью AlloyDB, Vector Search и Vertex AI!

О практической работе

subjectПоследнее обновление: июл. 13, 2025
account_circleАвторы: Author: Abirami Sukumaran,

1. Обзор

В различных отраслях патентные исследования являются важнейшим инструментом для понимания конкурентной среды, выявления потенциальных возможностей лицензирования или приобретения, а также предотвращения нарушения существующих патентов.

Патентные исследования — обширная и сложная сфера. Просматривать бесчисленные технические аннотации в поисках релевантных инноваций — непростая задача. Традиционные поиски по ключевым словам часто неточны и требуют много времени. Аннотации слишком длинные и технически сложные, что затрудняет быстрое понимание основной идеи. Это может привести к тому, что исследователи упустят важные патенты или потратят время на нерелевантные результаты.

Секрет этой революции кроется в векторном поиске. Вместо того чтобы полагаться на простое сопоставление ключевых слов, векторный поиск преобразует текст в числовые представления (внедрения). Это позволяет нам искать по смыслу запроса, а не только по конкретным словам. В мире поиска литературы это настоящий прорыв. Представьте, что вы нашли патент на «носимый пульсометр», даже если точная фраза в документе не используется.

Цель

В этой лабораторной работе мы постараемся сделать процесс поиска патентов более быстрым, интуитивно понятным и невероятно точным, используя AlloyDB, расширение pgvector, а также встроенную платформу Gemini 1.5 Pro, встроенные функции и векторный поиск.

Что вы построите

В рамках этой лабораторной работы вы:

  1. Создайте экземпляр AlloyDB и загрузите данные из общедоступного набора данных Patents.
  2. Включить pgvector и расширения генеративных моделей ИИ в AlloyDB
  3. Генерация вложений из идей
  4. Выполнить поиск косинусного сходства в реальном времени для текста пользовательского поиска
  5. Разверните решение в бессерверных облачных функциях

На следующей диаграмме представлен поток данных и этапы реализации.

8b73c40a0d12e194.png

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

Требования

  • Браузер, например Chrome или Firefox
  • Проект Google Cloud с включенным биллингом.

2. Прежде чем начать

Создать проект

  1. В консоли Google Cloud на странице выбора проекта выберите или создайте проект Google Cloud.
  2. Убедитесь, что для вашего облачного проекта включена функция выставления счетов. Узнайте, как проверить, включена ли функция выставления счетов для проекта .
  3. Вы будете использовать Cloud Shell — среду командной строки, работающую в Google Cloud и предустановленную вместе с bq. Нажмите «Активировать Cloud Shell» в верхней части консоли Google Cloud.

Изображение кнопки «Активировать Cloud Shell»

  1. После подключения к Cloud Shell вы проверяете, что вы уже прошли аутентификацию и что проекту присвоен ваш идентификатор проекта, с помощью следующей команды:
gcloud auth list
  1. Выполните следующую команду в Cloud Shell, чтобы подтвердить, что команда gcloud знает о вашем проекте.
gcloud config list project
  1. Если ваш проект не настроен, используйте следующую команду для его настройки:
gcloud config set project <YOUR_PROJECT_ID>
  1. Включите необходимые API. Вы можете использовать команду gcloud в терминале 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

Альтернативой команде gcloud является поиск каждого продукта через консоль или использование этой ссылки .

Информацию о командах и использовании gcloud см. в документации .

3. Подготовьте базу данных AlloyDB

Давайте создадим кластер, экземпляр и таблицу AlloyDB, куда будет загружен набор данных о патентах.

Создание объектов AlloyDB

Создайте кластер и экземпляр с идентификатором кластера « patent-cluster », паролем « alloydb », совместимым с PostgreSQL 15, регионом « us-central1 » и сетевыми настройками « default ». Установите идентификатор экземпляра « patent-instance ». Нажмите «СОЗДАТЬ КЛАСТЕР». Подробную информацию о создании кластера можно найти по этой ссылке: https://cloud.google.com/alloydb/docs/cluster-create .

Создать таблицу

Вы можете создать таблицу, используя приведенный ниже оператор DDL в 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) ;

Включить расширения

Для создания приложения «Поиск патентов» мы будем использовать расширения pgvector и google_ml_integration. Расширение pgvector позволяет хранить и искать векторные представления. Расширение google_ml_integration предоставляет функции для доступа к конечным точкам прогнозирования Vertex AI для получения прогнозов в SQL. Включите эти расширения, выполнив следующие DDL-файлы:

CREATE EXTENSION vector;
CREATE EXTENSION google_ml_integration
;

Предоставить разрешение

Выполните указанный ниже оператор, чтобы предоставить разрешение на выполнение функции «встраивания»:

GRANT EXECUTE ON FUNCTION embedding TO postgres;

Предоставьте роль пользователя Vertex AI учетной записи службы AlloyDB.

В консоли Google Cloud IAM предоставьте учётной записи сервиса AlloyDB (которая выглядит так: service-<<PROJECT_NUMBER>>@gcp-sa-alloydb.iam.gserviceaccount.com) доступ к роли «Пользователь Vertex AI». PROJECT_NUMBER будет содержать номер вашего проекта.

Кроме того, вы также можете предоставить доступ с помощью команды 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"

Измените таблицу, добавив столбец «Вектор» для хранения вложений.

Выполните следующий DDL-код, чтобы добавить поле abstract_embeddings в только что созданную таблицу. Этот столбец позволит хранить векторные значения текста:

ALTER TABLE patents_data ADD column abstract_embeddings vector(3072);

4. Загрузить патентные данные в базу данных

В качестве набора данных мы будем использовать общедоступные наборы данных Google Patents в BigQuery. Для выполнения запросов мы будем использовать AlloyDB Studio. Репозиторий alloydb-pgvector содержит скрипт insert_into_patents_data.sql , который мы запустим для загрузки патентных данных.

  1. В консоли Google Cloud откройте страницу AlloyDB .
  2. Выберите только что созданный кластер и щелкните экземпляр.
  3. В меню навигации AlloyDB выберите AlloyDB Studio . Войдите, используя свои учётные данные.
  4. Откройте новую вкладку, нажав на значок «Новая вкладка» справа.
  5. Скопируйте оператор запроса на insert из упомянутого выше скрипта insert_into_patents_data.sql в редактор. Вы можете скопировать 50–100 операторов для быстрой демонстрации этого варианта использования.
  6. Нажмите кнопку «Выполнить» . Результаты запроса появятся в таблице «Результаты» .

5. Создание вложений для патентных данных

Сначала давайте протестируем функцию встраивания, выполнив следующий пример запроса:

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

Этот метод должен вернуть вектор вложений, который выглядит как массив чисел с плавающей точкой, для образца текста в запросе. Выглядит это примерно так:

25a1d7ef0e49e91e.png

Обновите векторное поле abstract_embeddings

Запустите приведенный ниже DML-код, чтобы обновить аннотации патентов в таблице с соответствующими внедрениями:

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

6. Выполнить поиск вектора

Теперь, когда таблица, данные и встраивание готовы, давайте выполним векторный поиск в реальном времени по тексту поискового запроса пользователя. Вы можете проверить это, выполнив следующий запрос:

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;

В этом запросе,

  1. Текст поиска пользователя: «Новая модель машинного обучения, связанная с обработкой естественного языка».
  2. Мы преобразуем его в встраивание в методе embedding(), используя модель: gemini-embedding-001.
  3. «<=>» представляет собой использование метода расстояния КОСИНУСНОГО ПОДОБИЯ.
  4. Мы преобразуем результат метода встраивания в векторный тип, чтобы сделать его совместимым с векторами, хранящимися в базе данных.
  5. LIMIT 10 означает, что мы выбираем 10 наиболее близких совпадений искомого текста.

Ниже представлен результат:

8e77af965fc787ae.png

Как вы можете заметить в результатах, совпадения довольно близки к искомому тексту.

7. Перенести приложение в веб

Готовы опубликовать это приложение в интернете? Выполните следующие шаги:

  1. Откройте редактор Cloud Shell и нажмите значок «Cloud Code — Войти» в левом нижнем углу (строка состояния) редактора. Выберите текущий проект Google Cloud, в котором включена оплата, и убедитесь, что вы вошли в тот же проект через Gemini (в правом углу строки состояния).
  2. Нажмите на значок Cloud Code и дождитесь появления диалогового окна Cloud Code. Выберите «Новое приложение» и во всплывающем окне «Создать новое приложение» выберите приложение Cloud Functions:

a800ee1eb6cb8a5b.png

На странице 2/2 всплывающего окна «Создание нового приложения» выберите Java: Hello World и введите имя своего проекта «alloydb-pgvector» в предпочитаемом вами месте, затем нажмите «ОК»:

5b09446ecf7d4f8d.png

  1. В полученной структуре проекта найдите pom.xml и замените его содержимым из файла репозитория. Он должен содержать следующие зависимости и ещё несколько:

2b3a3cdd75a57711.png

  1. Замените файл HelloWorld.java содержимым из файла репозитория .

Обратите внимание, что вам необходимо заменить приведенные ниже значения фактическими данными:

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

Обратите внимание, что функция ожидает текст поиска в качестве входного параметра с ключом «search», и в этой реализации мы возвращаем только одно ближайшее совпадение из базы данных:

// 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. Чтобы развернуть только что созданную облачную функцию, выполните следующую команду в терминале Cloud Shell. Не забудьте сначала перейти в соответствующую папку проекта, используя команду:
cd alloydb-pgvector

Затем выполните команду:

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

ВАЖНЫЙ ШАГ:

После настройки развертывания вы увидите функции в консоли Google Cloud Run Functions . Найдите и откройте только что созданную функцию, отредактируйте конфигурации и измените следующее:

  1. Перейдите в раздел «Среда выполнения, сборка, подключения и параметры безопасности».
  2. Увеличьте тайм-аут до 180 секунд.
  3. Перейдите на вкладку ПОДКЛЮЧЕНИЯ:

4e83ec8a339cda08.png

  1. В настройках Ingress убедитесь, что выбран параметр «Разрешить весь трафик».
  2. В настройках выхода нажмите на раскрывающийся список «Сеть», выберите пункт «Добавить новый коннектор VPC» и следуйте инструкциям, которые вы увидите во всплывающем диалоговом окне:

8126ec78c343f199.png

  1. Укажите имя для VPC-коннектора и убедитесь, что регион совпадает с регионом вашего экземпляра. Оставьте значение «Сеть» по умолчанию и выберите для параметра «Подсеть» значение «Настраиваемый диапазон IP-адресов» (Custom IP Range) с диапазоном IP-адресов 10.8.0.0 или аналогичным доступным.
  2. Разверните ПОКАЗАТЬ ПАРАМЕТРЫ МАСШТАБИРОВАНИЯ и убедитесь, что у вас установлена следующая конфигурация:

7baf980463a86a5c.png

  1. Нажмите кнопку СОЗДАТЬ, и этот соединитель теперь должен быть указан в настройках выхода.
  2. Выберите недавно созданный соединитель.
  3. Выберите, чтобы весь трафик направлялся через этот VPC-коннектор.

8. Протестируйте приложение

После развертывания вы увидите конечную точку в следующем формате:

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

Вы можете протестировать его из терминала Cloud Shell, выполнив следующую команду:

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

Результат:

da3dcfac7d024031.png

Вы также можете протестировать её из списка «Облачные функции» . Выберите развёрнутую функцию и перейдите на вкладку «ТЕСТИРОВАНИЕ». В текстовом поле раздела «Настройка события-триггера» для запроса JSON введите следующее:

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

Нажмите кнопку ПРОВЕРИТЬ ФУНКЦИЮ, и вы увидите результат в правой части страницы:

e21f806d661996ff.png

Вот и всё! Выполнить поиск вектора подобия с использованием модели Embeddings на основе данных AlloyDB очень просто.

9. Уборка

Чтобы избежать списания средств с вашего аккаунта Google Cloud за ресурсы, использованные в этой публикации, выполните следующие действия:

  1. В консоли Google Cloud перейдите в раздел «Управление»
  2. страница ресурсов .
  3. В списке проектов выберите проект, который вы хотите удалить, а затем нажмите Удалить .
  4. В диалоговом окне введите идентификатор проекта, а затем нажмите кнопку «Завершить» , чтобы удалить проект.

10. Поздравления

Поздравляем! Вы успешно выполнили поиск по сходству с помощью AlloyDB, pgvector и векторного поиска. Объединив возможности AlloyDB , Vertex AI и векторного поиска , мы сделали огромный шаг вперёд в обеспечении доступности, эффективности и осмысленности поиска литературы.