Tạo ứng dụng Tìm kiếm bằng sáng chế bằng AlloyDB, Tìm kiếm vectơ và Vertex AI!

Xây dựng một ứng dụng tìm kiếm bằng sáng chế bằng AlloyDB, Vector Search và Vertex AI!

Thông tin về lớp học lập trình này

subjectLần cập nhật gần đây nhất: thg 7 13, 2025
account_circleTác giả: Author: Abirami Sukumaran,

1. Tổng quan

Trong nhiều ngành, nghiên cứu về bằng sáng chế là một công cụ quan trọng để hiểu rõ bối cảnh cạnh tranh, xác định các cơ hội tiềm năng về việc cấp phép hoặc mua lại và tránh vi phạm các bằng sáng chế hiện có.

Nghiên cứu về bằng sáng chế là một lĩnh vực rộng lớn và phức tạp. Việc sàng lọc vô số bản tóm tắt kỹ thuật để tìm ra những điểm cải tiến phù hợp là một việc khó khăn. Các cụm từ tìm kiếm truyền thống dựa trên từ khoá thường không chính xác và tốn thời gian. Bản tóm tắt dài dòng và mang tính kỹ thuật, khiến người đọc khó nắm bắt ý tưởng cốt lõi một cách nhanh chóng. Điều này có thể khiến nhà nghiên cứu bỏ lỡ các bằng sáng chế quan trọng hoặc lãng phí thời gian vào những kết quả không liên quan.

Bí quyết đằng sau cuộc cách mạng này nằm ở tính năng Tìm kiếm vectơ. Thay vì dựa vào tính năng khớp từ khoá đơn giản, tính năng tìm kiếm vectơ sẽ chuyển đổi văn bản thành các biểu diễn bằng số (mã nhúng). Điều này cho phép chúng tôi tìm kiếm dựa trên ý nghĩa của cụm từ tìm kiếm, chứ không chỉ dựa trên những từ cụ thể được sử dụng. Trong thế giới tìm kiếm tài liệu, đây là một bước đột phá. Hãy tưởng tượng bạn tìm thấy một bằng sáng chế cho "thiết bị đeo đo nhịp tim" ngay cả khi cụm từ chính xác đó không được dùng trong tài liệu.

Mục tiêu

Trong lớp học lập trình này, chúng ta sẽ nỗ lực để quy trình tìm kiếm bằng sáng chế diễn ra nhanh hơn, trực quan hơn và cực kỳ chính xác bằng cách tận dụng AlloyDB, tiện ích pgvector và Gemini 1.5 Pro, Embeddings và Vector Search tại chỗ.

Sản phẩm bạn sẽ tạo ra

Trong phần này, bạn sẽ:

  1. Tạo một phiên bản AlloyDB và tải dữ liệu Patents Public Dataset
  2. Bật các tiện ích mô hình AI tạo sinh và pgvector trong AlloyDB
  3. Tạo các vectơ nhúng từ thông tin chi tiết
  4. Thực hiện tìm kiếm độ tương đồng Cosine theo thời gian thực cho văn bản tìm kiếm của người dùng
  5. Triển khai giải pháp trong Cloud Functions không máy chủ

Sơ đồ sau đây minh hoạ luồng dữ liệu và các bước liên quan đến việc triển khai.

8b73c40a0d12e194.png

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

Yêu cầu

  • Một trình duyệt, chẳng hạn như Chrome hoặc Firefox
  • Một dự án trên Google Cloud đã bật tính năng thanh toán.

2. Trước khi bắt đầu

Tạo một dự án

  1. Trong Google Cloud Console, trên trang chọn dự án, hãy chọn hoặc tạo một dự án trên Google Cloud.
  2. Đảm bảo bạn đã bật tính năng thanh toán cho dự án trên Cloud. Tìm hiểu cách kiểm tra xem tính năng thanh toán có được bật trên một dự án hay không .
  3. Bạn sẽ sử dụng Cloud Shell, một môi trường dòng lệnh chạy trong Google Cloud và được tải sẵn bq. Nhấp vào biểu tượng Kích hoạt Cloud Shell ở đầu bảng điều khiển Google Cloud.

Kích hoạt hình ảnh nút Cloud Shell

  1. Sau khi kết nối với Cloud Shell, bạn có thể kiểm tra để đảm bảo rằng bạn đã được xác thực và dự án được đặt thành mã dự án của bạn bằng lệnh sau:
gcloud auth list
  1. Chạy lệnh sau trong Cloud Shell để xác nhận rằng lệnh gcloud biết về dự án của bạn.
gcloud config list project
  1. Nếu bạn chưa đặt dự án, hãy dùng lệnh sau để đặt:
gcloud config set project <YOUR_PROJECT_ID>
  1. Bật các API bắt buộc. Bạn có thể dùng lệnh gcloud trong thiết bị đầu cuối 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

Bạn có thể thay thế lệnh gcloud bằng cách tìm kiếm từng sản phẩm trên bảng điều khiển hoặc sử dụng đường liên kết này.

Tham khảo tài liệu để biết các lệnh và cách sử dụng gcloud.

3. Chuẩn bị cơ sở dữ liệu AlloyDB

Hãy tạo một cụm, phiên bản và bảng AlloyDB nơi tập dữ liệu bằng sáng chế sẽ được tải.

Tạo các đối tượng AlloyDB

Tạo một cụm và phiên bản có mã nhận dạng cụm "patent-cluster", mật khẩu "alloydb", tương thích với PostgreSQL 15 và khu vực là "us-central1", mạng được đặt thành "default". Đặt mã nhận dạng phiên bản thành "patent-instance". Nhấp vào CREATE CLUSTER (TẠO CỤM). Thông tin chi tiết về cách tạo một cụm có trong đường liên kết này: https://cloud.google.com/alloydb/docs/cluster-create.

Tạo bảng

Bạn có thể tạo một bảng bằng câu lệnh DDL bên dưới trong 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) ;

Bật tiện ích

Để tạo Ứng dụng tìm kiếm bằng sáng chế, chúng ta sẽ sử dụng các tiện ích pgvector và google_ml_integration. Tiện ích pgvector cho phép bạn lưu trữ và tìm kiếm các vectơ nhúng. Tiện ích google_ml_integration cung cấp các hàm mà bạn dùng để truy cập vào các điểm cuối dự đoán của Vertex AI nhằm nhận thông tin dự đoán bằng SQL. Bật các tiện ích này bằng cách chạy các DDL sau:

CREATE EXTENSION vector;
CREATE EXTENSION google_ml_integration
;

Cấp quyền

Chạy câu lệnh bên dưới để cấp quyền thực thi cho hàm "embedding":

GRANT EXECUTE ON FUNCTION embedding TO postgres;

Cấp VAI TRÒ Người dùng Vertex AI cho tài khoản dịch vụ AlloyDB

Trong bảng điều khiển IAM của Google Cloud, hãy cấp cho tài khoản dịch vụ AlloyDB (có dạng như sau: service-<<PROJECT_NUMBER>>@gcp-sa-alloydb.iam.gserviceaccount.com) quyền truy cập vào vai trò "Người dùng Vertex AI". PROJECT_NUMBER sẽ có số dự án của bạn.

Ngoài ra, bạn cũng có thể cấp quyền truy cập bằng lệnh 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"

Sửa đổi bảng để thêm một cột Vector để lưu trữ các Embedding

Chạy DDL bên dưới để thêm trường abstract_embeddings vào bảng mà chúng ta vừa tạo. Cột này sẽ cho phép lưu trữ các giá trị vectơ của văn bản:

ALTER TABLE patents_data ADD column abstract_embeddings vector(3072);

4. Tải dữ liệu bằng sáng chế vào cơ sở dữ liệu

Chúng tôi sẽ sử dụng Tập dữ liệu công khai về bằng sáng chế của Google trên BigQuery làm tập dữ liệu. Chúng ta sẽ sử dụng AlloyDB Studio để chạy các truy vấn. Kho lưu trữ alloydb-pgvector bao gồm tập lệnh insert_into_patents_data.sql mà chúng ta sẽ chạy để tải dữ liệu bằng sáng chế.

  1. Trong Google Cloud Console, hãy mở trang AlloyDB.
  2. Chọn cụm bạn vừa tạo rồi nhấp vào phiên bản.
  3. Trong trình đơn điều hướng AlloyDB, hãy nhấp vào AlloyDB Studio. Đăng nhập bằng thông tin đăng nhập của bạn.
  4. Mở một thẻ mới bằng cách nhấp vào biểu tượng Thẻ mới ở bên phải.
  5. Sao chép câu lệnh truy vấn insert từ tập lệnh insert_into_patents_data.sql đã đề cập ở trên vào trình chỉnh sửa. Bạn có thể sao chép 50 đến 100 câu lệnh chèn để xem bản minh hoạ nhanh về trường hợp sử dụng này.
  6. Nhấp vào Chạy. Kết quả của truy vấn sẽ xuất hiện trong bảng Results (Kết quả).

5. Tạo vectơ nhúng cho dữ liệu bằng sáng chế

Trước tiên, hãy kiểm thử hàm nhúng bằng cách chạy truy vấn mẫu sau:

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

Thao tác này sẽ trả về vectơ nhúng (có dạng như một mảng số thực) cho văn bản mẫu trong truy vấn. Có dạng như sau:

25a1d7ef0e49e91e.png

Cập nhật trường Vector abstract_embeddings

Chạy DML bên dưới để cập nhật bản tóm tắt bằng sáng chế trong bảng bằng các mục nhúng tương ứng:

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

6. Thực hiện tìm kiếm vectơ

Giờ đây, khi bảng, dữ liệu và các thành phần nhúng đều đã sẵn sàng, hãy thực hiện tính năng Tìm kiếm vectơ theo thời gian thực cho văn bản tìm kiếm của người dùng. Bạn có thể kiểm thử điều này bằng cách chạy truy vấn bên dưới:

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;

Trong truy vấn này,

  1. Văn bản tìm kiếm của người dùng là: "Một mô hình học máy mới liên quan đến Xử lý ngôn ngữ tự nhiên".
  2. Chúng tôi đang chuyển đổi văn bản này thành các mục nhúng trong phương thức embedding() bằng mô hình: gemini-embedding-001.
  3. "<=>" biểu thị việc sử dụng phương thức khoảng cách COSINE SIMILARITY.
  4. Chúng tôi đang chuyển đổi kết quả của phương thức nhúng thành loại vectơ để tương thích với các vectơ được lưu trữ trong cơ sở dữ liệu.
  5. LIMIT 10 cho biết chúng ta đang chọn 10 kết quả phù hợp nhất với văn bản tìm kiếm.

Sau đây là kết quả:

8e77af965fc787ae.png

Như bạn có thể thấy trong kết quả, các kết quả khớp khá gần với văn bản tìm kiếm.

7. Đưa ứng dụng lên web

Bạn đã sẵn sàng đưa ứng dụng này lên web chưa? Hãy làm theo các bước sau:

  1. Chuyển đến Cloud Shell Editor rồi nhấp vào biểu tượng "Cloud Code – Đăng nhập" ở góc dưới cùng bên trái (Thanh trạng thái) của trình chỉnh sửa. Chọn Dự án hiện tại của bạn trên Google Cloud đã bật tính năng thanh toán và đảm bảo bạn cũng đã đăng nhập vào cùng một dự án trên Gemini (ở góc bên phải của thanh trạng thái).
  2. Nhấp vào biểu tượng Cloud Code và đợi cho đến khi hộp thoại Cloud Code bật lên. Chọn New Application (Ứng dụng mới) rồi chọn Cloud Functions application (Ứng dụng Chức năng đám mây) trong cửa sổ bật lên Create New Application (Tạo ứng dụng mới):

a800ee1eb6cb8a5b.png

Trong trang 2/2 của cửa sổ bật lên Create New Application (Tạo ứng dụng mới), hãy chọn Java: Hello World (Xin chào thế giới) rồi nhập tên dự án là "alloydb-pgvector" ở vị trí bạn muốn và nhấp vào OK:

5b09446ecf7d4f8d.png

  1. Trong cấu trúc dự án kết quả, hãy tìm pom.xml rồi thay thế bằng nội dung trong tệp kho lưu trữ. Ngoài một số phần phụ thuộc khác, nó phải có các phần phụ thuộc sau:

2b3a3cdd75a57711.png

  1. Thay thế tệp HelloWorld.java bằng nội dung trong tệp repo.

Xin lưu ý rằng bạn phải thay thế các giá trị bên dưới bằng giá trị thực tế của mình:

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

Xin lưu ý rằng hàm này yêu cầu văn bản tìm kiếm làm tham số đầu vào có khoá "search" và trong quá trình triển khai này, chúng ta chỉ trả về một kết quả khớp gần nhất từ cơ sở dữ liệu:

// 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. Để triển khai Cloud Functions mà bạn vừa tạo, hãy chạy lệnh sau từ thiết bị đầu cuối Cloud Shell. Trước tiên, hãy nhớ chuyển đến thư mục dự án tương ứng bằng lệnh:
cd alloydb-pgvector

Sau đó, hãy chạy lệnh:

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

BƯỚC QUAN TRỌNG:

Sau khi thiết lập để triển khai, bạn sẽ có thể thấy các hàm trong bảng điều khiển Hàm của Cloud Run trên Google. Tìm hàm mới tạo và mở hàm đó, chỉnh sửa cấu hình và thay đổi những nội dung sau:

  1. Chuyển đến phần Cài đặt thời gian chạy, bản dựng, kết nối và bảo mật
  2. Tăng thời gian chờ lên 180 giây
  3. Chuyển đến thẻ KẾT NỐI:

4e83ec8a339cda08.png

  1. Trong phần cài đặt Ingress, hãy nhớ chọn "Cho phép tất cả lưu lượng truy cập".
  2. Trong phần Egress settings (Cài đặt lưu lượng truy cập đi), hãy nhấp vào trình đơn thả xuống Network (Mạng) rồi chọn "Add New VPC Connector" (Thêm trình kết nối VPC mới) và làm theo hướng dẫn mà bạn thấy trên hộp thoại bật lên:

8126ec78c343f199.png

  1. Đặt tên cho Trình kết nối VPC và đảm bảo rằng khu vực này giống với khu vực của phiên bản. Để nguyên giá trị Mạng là mặc định và đặt Mạng con thành Dải IP tuỳ chỉnh với dải IP là 10.8.0.0 hoặc một dải IP tương tự có sẵn.
  2. Mở rộng mục HIỂN THỊ CÁC CHẾ ĐỘ CÀI ĐẶT VỀ TỶ LỆ và đảm bảo bạn đã đặt cấu hình chính xác như sau:

7baf980463a86a5c.png

  1. Nhấp vào CREATE (Tạo) và trình kết nối này sẽ xuất hiện trong phần cài đặt lưu lượng truy cập đi.
  2. Chọn giắc cắm mới tạo
  3. Chọn định tuyến tất cả lưu lượng truy cập thông qua trình kết nối VPC này.

8. Kiểm thử ứng dụng

Sau khi triển khai, bạn sẽ thấy điểm cuối ở định dạng sau:

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

Bạn có thể kiểm thử tính năng này trong Cửa sổ dòng lệnh Cloud Shell bằng cách chạy lệnh sau:

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

Kết quả:

da3dcfac7d024031.png

Bạn cũng có thể kiểm thử hàm này trong danh sách Cloud Functions. Chọn hàm đã triển khai rồi chuyển đến thẻ "KIỂM THỬ". Trong hộp văn bản Configure triggering event (Định cấu hình sự kiện kích hoạt) cho request json, hãy nhập nội dung sau:

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

Nhấp vào nút KIỂM THỬ CHỨC NĂNG và bạn có thể thấy kết quả ở bên phải trang:

e21f806d661996ff.png

Vậy là xong! Bạn chỉ cần thực hiện thao tác đơn giản đó để thực hiện Tìm kiếm vectơ tương tự bằng cách sử dụng mô hình Nhúng trên dữ liệu AlloyDB.

9. Dọn dẹp

Để tránh bị tính phí cho tài khoản Google Cloud của bạn đối với các tài nguyên được dùng trong bài đăng này, hãy làm theo các bước sau:

  1. Trong Google Cloud Console, hãy chuyển đến trang Quản lý
  2. trang tài nguyên.
  3. Trong danh sách dự án, hãy chọn dự án mà bạn muốn xoá, rồi nhấp vào Xoá.
  4. Trong hộp thoại, hãy nhập mã dự án rồi nhấp vào Tắt để xoá dự án.

10. Xin chúc mừng

Xin chúc mừng! Bạn đã thực hiện thành công một lượt tìm kiếm tương tự bằng AlloyDB, pgvector và tính năng Tìm kiếm vectơ. Bằng cách kết hợp các chức năng của AlloyDB, Vertex AIVector Search, chúng tôi đã có một bước tiến vượt bậc trong việc giúp mọi người có thể tìm kiếm tài liệu một cách dễ dàng, hiệu quả và thực sự có ý nghĩa.