1. Tổng quan
Trong nhiều ngành, tìm kiếm theo bối cảnh là một chức năng quan trọng, tạo nên cốt lõi và trung tâm của các ứng dụng. Cơ chế Tạo sinh tăng cường truy xuất là yếu tố chính thúc đẩy sự phát triển quan trọng của công nghệ này trong một thời gian khá dài nhờ cơ chế truy xuất dựa trên AI tạo sinh. Các mô hình tạo sinh, với cửa sổ ngữ cảnh lớn và chất lượng đầu ra ấn tượng, đang chuyển đổi AI. RAG cung cấp một cách có hệ thống để chèn ngữ cảnh vào các ứng dụng và tác nhân AI (trí tuệ nhân tạo), liên kết thực tế chúng trong các cơ sở dữ liệu có cấu trúc hoặc thông tin từ nhiều phương tiện. Dữ liệu theo bối cảnh này rất quan trọng để đảm bảo tính rõ ràng của thông tin và độ chính xác của kết quả. Tuy nhiên, những kết quả đó chính xác đến mức nào? Doanh nghiệp của bạn có phụ thuộc nhiều vào độ chính xác của các kết quả so khớp theo ngữ cảnh và mức độ liên quan này không? Vậy thì dự án này sẽ khiến bạn thích thú!
Bí mật không mấy hay ho của tính năng tìm kiếm vectơ không chỉ nằm ở việc xây dựng mà còn ở việc biết liệu các kết quả khớp vectơ của bạn có thực sự tốt hay không. Chắc hẳn ai cũng từng rơi vào tình huống này, nhìn chằm chằm vào danh sách kết quả mà không biết phải làm gì, tự hỏi: "Cái này có hoạt động không vậy?!" Hãy cùng tìm hiểu cách đánh giá chất lượng của các kết quả khớp vectơ. "Vậy RAG có gì thay đổi?", bạn hỏi. Mọi thứ! Trong nhiều năm, tính năng Tạo sinh tăng cường truy xuất (RAG) có vẻ là một mục tiêu đầy hứa hẹn nhưng khó nắm bắt. Giờ đây, cuối cùng chúng ta đã có các công cụ để xây dựng các ứng dụng RAG với hiệu suất và độ tin cậy cần thiết cho các tác vụ quan trọng.
Giờ đây, chúng ta đã có kiến thức cơ bản về 3 điều:
- Ý nghĩa của tính năng tìm kiếm theo ngữ cảnh đối với tác nhân của bạn và cách thực hiện tính năng đó bằng tính năng Tìm kiếm vectơ.
- Chúng tôi cũng đi sâu vào việc đạt được tính năng Tìm kiếm vectơ trong phạm vi dữ liệu của bạn, tức là trong chính cơ sở dữ liệu của bạn (tất cả Cơ sở dữ liệu trên Google Cloud đều hỗ trợ tính năng đó, nếu bạn chưa biết!).
- Chúng tôi đã tiến thêm một bước so với các quốc gia và vùng lãnh thổ khác khi hướng dẫn bạn cách đạt được khả năng RAG Tìm kiếm vectơ có trọng lượng nhẹ như vậy với hiệu suất và chất lượng cao bằng khả năng Tìm kiếm vectơ của AlloyDB dựa trên chỉ mục ScaNN.
Nếu chưa thực hiện những thử nghiệm cơ bản, trung cấp và hơi nâng cao về RAG, bạn nên đọc 3 thử nghiệm đó tại đây, tại đây và tại đây theo thứ tự được liệt kê.
Tìm kiếm bằng sáng chế giúp người dùng tìm thấy những bằng sáng chế phù hợp theo ngữ cảnh với văn bản tìm kiếm của họ và chúng tôi đã xây dựng một phiên bản của tính năng này trong quá khứ. Giờ đây, chúng ta sẽ xây dựng ứng dụng này bằng các tính năng RAG mới và nâng cao, cho phép tìm kiếm theo ngữ cảnh có kiểm soát chất lượng cho ứng dụng đó. Hãy cùng tìm hiểu nhé!
Hình ảnh dưới đây cho thấy quy trình tổng thể của những gì đang diễn ra trong ứng dụng này.~ 
Mục tiêu
Cho phép người dùng tìm kiếm bằng sáng chế dựa trên nội dung mô tả bằng văn bản với hiệu quả được cải thiện và chất lượng tốt hơn, đồng thời có thể đánh giá chất lượng của các kết quả trùng khớp được tạo bằng các tính năng RAG mới nhất của AlloyDB.
Sản phẩm bạn sẽ tạo ra
Trong phần này của khoá học, bạn sẽ:
- Tạo một phiên bản AlloyDB và tải Tập dữ liệu công khai về bằng sáng chế
- Tạo chỉ mục siêu dữ liệu và chỉ mục ScaNN
- Triển khai tính năng Tìm kiếm vectơ nâng cao trong AlloyDB bằng phương thức lọc nội tuyến của ScaNN
- Triển khai tính năng đánh giá Khả năng nhớ lại
- Đánh giá câu trả lời cho câu hỏi
Yêu cầu
2. Trước khi bắt đầu
Tạo dự án
- 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.
- Đảm bảo rằng 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 trong một dự án hay không .
- Bạn sẽ sử dụng Cloud Shell, một môi trường dòng lệnh chạy trong Google Cloud. Nhấp vào Kích hoạt Cloud Shell ở đầu bảng điều khiển Cloud.

- 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
- 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
- Nếu bạn chưa đặt dự án, hãy dùng lệnh sau để đặt:
gcloud config set project <YOUR_PROJECT_ID>
- 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. Thiết lập cơ sở dữ liệu
Trong phòng thí nghiệm này, chúng ta sẽ sử dụng AlloyDB làm cơ sở dữ liệu cho dữ liệu bằng sáng chế. Nó sử dụng cụm để lưu giữ tất cả các tài nguyên, chẳng hạn như cơ sở dữ liệu và nhật ký. Mỗi cụm có một thực thể chính cung cấp một điểm truy cập vào dữ liệu. Các bảng sẽ chứa dữ liệu thực tế.
Hãy tạo một cụm, thực thể và bảng AlloyDB để tải tập dữ liệu về bằng sáng chế.
Tạo một cụm và phiên bản
- Chuyển đến trang AlloyDB trong Cloud Console. Một cách dễ dàng để tìm hầu hết các trang trong Cloud Console là tìm kiếm các trang đó bằng thanh tìm kiếm của bảng điều khiển.
- Chọn TẠO CỤM trên trang đó:

- Bạn sẽ thấy một màn hình như màn hình bên dưới. Tạo một cụm và thực thể bằng các giá trị sau (Đảm bảo các giá trị khớp nhau trong trường hợp bạn đang sao chép mã xử lý ứng dụng từ kho lưu trữ):
- mã nhận dạng cụm: "
vector-cluster" - password: "
alloydb" - PostgreSQL 15 / mới nhất (nên dùng)
- Vùng: "
us-central1" - Mạng: "
default"

- Khi chọn mạng mặc định, bạn sẽ thấy một màn hình như màn hình bên dưới.
Chọn THIẾT LẬP KẾT NỐI.

- Tại đó, hãy chọn "Sử dụng dải IP được phân bổ tự động" rồi chọn Tiếp tục. Sau khi xem xét thông tin, hãy chọn TẠO KẾT NỐI.

- Sau khi thiết lập mạng, bạn có thể tiếp tục tạo cụm. Nhấp vào TẠO CỤM để hoàn tất việc thiết lập cụm như minh hoạ bên dưới:

Đảm bảo bạn thay đổi mã nhận dạng thực thể (bạn có thể tìm thấy mã này tại thời điểm định cấu hình cụm / thực thể) thành
vector-instance. Nếu không thể thay đổi, hãy nhớ sử dụng mã nhận dạng phiên bản trong tất cả các thông tin tham chiếu sắp tới.
Xin lưu ý rằng quá trình tạo Cụm sẽ mất khoảng 10 phút. Sau khi tạo thành công, bạn sẽ thấy một màn hình cho biết thông tin tổng quan về cụm mà bạn vừa tạo.
4. Nhập dữ liệu
Bây giờ, đã đến lúc thêm một bảng có dữ liệu về cửa hàng. Chuyển đến AlloyDB, chọn cụm chính rồi chọn AlloyDB Studio:

Bạn có thể phải đợi thực thể của mình hoàn tất quá trình tạo. Sau khi tạo, hãy đăng nhập vào AlloyDB bằng thông tin đăng nhập mà bạn đã tạo khi tạo cụm. Sử dụng dữ liệu sau để xác thực với PostgreSQL:
- Tên người dùng : "
postgres" - Cơ sở dữ liệu : "
postgres" - Mật khẩu : "
alloydb"
Sau khi bạn xác thực thành công vào AlloyDB Studio, các lệnh SQL sẽ được nhập vào Trình chỉnh sửa. Bạn có thể thêm nhiều cửa sổ Trình chỉnh sửa bằng cách nhấp vào dấu cộng ở bên phải cửa sổ cuối cùng.

Bạn sẽ nhập các lệnh cho AlloyDB trong cửa sổ trình chỉnh sửa, sử dụng các lựa chọn Chạy, Định dạng và Xoá khi cần.
Bật tiện ích
Để tạo ứng dụng này, 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 IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector;
Nếu bạn muốn kiểm tra các tiện ích đã được bật trên cơ sở dữ liệu, hãy chạy lệnh SQL sau:
select extname, extversion from pg_extension;
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, abstract_embeddings vector(768)) ;
Cột abstract_embeddings sẽ cho phép lưu trữ các giá trị vectơ của văn bản.
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
Trên 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ó thể chạy lệnh bên dưới trong Cloud Shell Terminal:
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"
Tải dữ liệu bằng sáng chế vào cơ sở dữ liệu
Chúng ta 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. Dữ liệu được lấy từ tệp insert_scripts.sql này và chúng ta sẽ chạy tệp này để tải dữ liệu về bằng sáng chế.
- Trong bảng điều khiển Cloud, hãy mở trang AlloyDB.
- Chọn cụm bạn vừa tạo rồi nhấp vào thực thể.
- 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.
- 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.
- Sao chép câu lệnh truy vấn
inserttừ tập lệnhinsert_scripts.sqlđược đề cập ở trên vào trình chỉnh sửa. Bạn có thể sao chép 10 đến 50 câu lệnh chèn để xem nhanh bản minh hoạ về trường hợp sử dụng này. - 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ả).
Lưu ý: Bạn có thể nhận thấy rằng tập lệnh chèn có rất nhiều dữ liệu. Điều này là do chúng tôi đã đưa các thành phần nhúng vào tập lệnh chèn. Nhấp vào "View Raw" (Xem dữ liệu thô) trong trường hợp bạn gặp sự cố khi tải tệp trong github. Việc này nhằm giúp bạn không gặp phải rắc rối (trong các bước sắp tới) khi tạo nhiều hơn một vài vectơ nhúng (chẳng hạn như tối đa 20-25) trong trường hợp bạn đang sử dụng tài khoản thanh toán có tín dụng dùng thử cho Google Cloud.
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('text-embedding-005', 'AlloyDB is a managed, cloud-hosted SQL database service.');
Thao tác này sẽ trả về vectơ nhúng (có dạng một mảng số thực) cho văn bản mẫu trong truy vấn. Có dạng như sau:

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, chỉ khi bạn chưa chèn dữ liệu abstract_embeddings trong tập lệnh chèn:
UPDATE patents_data set abstract_embeddings = embedding( 'text-embedding-005', abstract);
Bạn có thể gặp khó khăn khi tạo nhiều hơn một vài vectơ nhúng (chẳng hạn như tối đa 20-25) nếu đang sử dụng tài khoản thanh toán có tín dụng dùng thử cho Google Cloud. Vì lý do đó, tôi đã đưa các mục nhúng vào tập lệnh chèn và bạn sẽ có mục nhúng trong bảng đã tải nếu bạn đã hoàn tất bước "tải dữ liệu bằng sáng chế vào cơ sở dữ liệu".
6. Thực hiện RAG nâng cao bằng các tính năng mới của AlloyDB
Giờ đây, khi bảng, dữ liệu và các mục 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 title FROM patents_data ORDER BY abstract_embeddings <=> embedding('text-embedding-005', 'Sentiment Analysis')::vector LIMIT 10;
Trong truy vấn này,
- Văn bản mà người dùng tìm kiếm là: "Phân tích cảm xúc".
- Chúng ta sẽ chuyển đổi văn bản này thành các vectơ nhúng trong phương thức embedding() bằng cách sử dụng mô hình: text-embedding-005.
- "<=>" biểu thị việc sử dụng phương thức khoảng cách COSINE SIMILARITY.
- 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.
- 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.
AlloyDB nâng RAG Tìm kiếm vectơ lên một tầm cao mới:
Có rất nhiều điều mới được giới thiệu. Hai trong số những chương trình tập trung vào nhà phát triển là:
- Lọc cùng dòng
- Người đánh giá mức độ liên quan
Lọc cùng dòng
Trước đây, với tư cách là nhà phát triển, bạn sẽ phải thực hiện truy vấn Tìm kiếm vectơ và phải xử lý việc lọc và thu hồi. Trình tối ưu hoá truy vấn AlloyDB sẽ đưa ra lựa chọn về cách thực thi một truy vấn có bộ lọc. Lọc nội tuyến là một kỹ thuật tối ưu hoá truy vấn mới, cho phép trình tối ưu hoá truy vấn AlloyDB đánh giá cả điều kiện lọc siêu dữ liệu và tìm kiếm vectơ cùng với nhau, tận dụng cả chỉ mục vectơ và chỉ mục trên các cột siêu dữ liệu. Điều này giúp tăng hiệu suất độ bao phủ, cho phép nhà phát triển tận dụng những gì mà AlloyDB cung cấp ngay từ đầu.
Tính năng lọc nội tuyến phù hợp nhất cho các trường hợp có tính chọn lọc trung bình. Khi tìm kiếm trong chỉ mục vectơ, AlloyDB chỉ tính toán khoảng cách cho những vectơ khớp với các điều kiện lọc siêu dữ liệu (các bộ lọc chức năng của bạn trong một truy vấn thường được xử lý trong mệnh đề WHERE). Điều này giúp cải thiện đáng kể hiệu suất cho các truy vấn này, bổ sung cho những lợi thế của bộ lọc sau hoặc bộ lọc trước.
- Cài đặt hoặc cập nhật tiện ích pgvector
CREATE EXTENSION IF NOT EXISTS vector WITH VERSION '0.8.0.google-3';
Nếu tiện ích pgvector đã được cài đặt, hãy nâng cấp tiện ích vectơ lên phiên bản 0.8.0.google-3 trở lên để có được các chức năng của trình đánh giá khả năng thu hồi.
ALTER EXTENSION vector UPDATE TO '0.8.0.google-3';
Bạn chỉ cần thực hiện bước này nếu tiện ích vectơ của bạn là <0.8.0.google-3>.
Lưu ý quan trọng: Nếu số hàng của bạn ít hơn 100, thì bạn không cần tạo chỉ mục ScaNN ngay từ đầu vì chỉ mục này sẽ không áp dụng cho số hàng ít hơn. Trong trường hợp đó, vui lòng bỏ qua các bước sau.
- Để tạo chỉ mục ScaNN, hãy cài đặt tiện ích alloydb_scann.
CREATE EXTENSION IF NOT EXISTS alloydb_scann;
- Trước tiên, hãy chạy Cụm từ tìm kiếm bằng tính năng Tìm kiếm vectơ mà không có chỉ mục và không bật Bộ lọc nội tuyến:
SELECT id || ' - ' || title as title FROM patents_data
WHERE num_claims >= 15
ORDER BY abstract_embeddings <=> embedding('text-embedding-005', 'Sentiment Analysis')::vector LIMIT 10;
Kết quả sẽ có dạng tương tự như sau:

- Chạy tính năng Giải thích dữ liệu phân tích trên dữ liệu đó: (không có chỉ mục cũng như tính năng Lọc nội tuyến)

Thời gian thực thi là 2,4 mili giây
- Hãy tạo một chỉ mục thông thường trên trường num_claims để chúng ta có thể lọc theo chỉ mục đó:
CREATE INDEX idx_patents_data_num_claims ON patents_data (num_claims);
- Hãy tạo chỉ mục ScaNN cho ứng dụng Tìm kiếm bằng sáng chế. Chạy lệnh sau trong AlloyDB Studio:
CREATE INDEX patent_index ON patents_data
USING scann (abstract_embeddings cosine)
WITH (num_leaves=32);
Lưu ý quan trọng: (num_leaves=32) áp dụng cho toàn bộ tập dữ liệu của chúng tôi với hơn 1.000 hàng. Nếu số hàng của bạn ít hơn 100, thì bạn không cần tạo chỉ mục ngay từ đầu vì chỉ mục sẽ không áp dụng cho số hàng ít hơn.
- Đặt tính năng Lọc cùng dòng được bật trên Chỉ mục ScaNN:
SET scann.enable_inline_filtering = on
- Bây giờ, hãy chạy cùng một truy vấn với bộ lọc và Tìm kiếm vectơ trong đó:
SELECT id || ' - ' || title as title FROM patents_data
WHERE num_claims >= 15
ORDER BY abstract_embeddings <=> embedding('text-embedding-005', 'Sentiment Analysis')::vector LIMIT 10;

Như bạn có thể thấy, thời gian thực thi đã giảm đáng kể đối với cùng một tính năng Tìm kiếm vectơ. Chỉ mục ScaNN được tích hợp tính năng Lọc nội tuyến trên Vector Search đã giúp điều này trở thành hiện thực!!!
Tiếp theo, hãy đánh giá khả năng thu hồi cho tính năng Tìm kiếm vectơ được bật ScaNN này.
Người đánh giá mức độ liên quan
Độ thu hồi trong tìm kiếm tương tự là tỷ lệ phần trăm số trường hợp có liên quan được truy xuất từ một lượt tìm kiếm, tức là số lượng dương tính thật. Đây là chỉ số phổ biến nhất được dùng để đo lường chất lượng tìm kiếm. Một nguồn gây ra tình trạng mất thông tin thu hồi là sự khác biệt giữa tìm kiếm lân cận gần đúng (aNN) và tìm kiếm k lân cận (chính xác) (kNN). Các chỉ mục vectơ như ScaNN của AlloyDB triển khai các thuật toán aNN, cho phép bạn tăng tốc tìm kiếm vectơ trên các tập dữ liệu lớn để đổi lấy một sự đánh đổi nhỏ về khả năng thu hồi. Giờ đây, AlloyDB cho phép bạn đo lường sự đánh đổi này ngay trong cơ sở dữ liệu cho từng truy vấn và đảm bảo rằng sự đánh đổi này ổn định theo thời gian. Bạn có thể cập nhật các tham số truy vấn và chỉ mục để phản hồi thông tin này nhằm đạt được kết quả và hiệu suất tốt hơn.
Logic đằng sau việc thu hồi kết quả tìm kiếm là gì?
Trong bối cảnh tìm kiếm vectơ, độ thu hồi đề cập đến tỷ lệ phần trăm vectơ mà chỉ mục trả về là các vectơ láng giềng gần nhất thực sự. Ví dụ: nếu một truy vấn về điểm dữ liệu láng giềng gần nhất cho 20 điểm dữ liệu láng giềng gần nhất trả về 19 điểm dữ liệu láng giềng gần nhất trong thực tế, thì độ thu hồi là 19/20 x 100 = 95%. Mức độ phù hợp là chỉ số được dùng để đánh giá chất lượng tìm kiếm, được xác định là tỷ lệ phần trăm kết quả được trả về gần nhất với các vectơ truy vấn một cách khách quan.
Bạn có thể tìm thấy độ thu hồi cho một truy vấn vectơ trên chỉ mục vectơ cho một cấu hình nhất định bằng cách sử dụng hàm evaluate_query_recall. Hàm này cho phép bạn điều chỉnh các tham số để đạt được kết quả truy vấn vectơ với độ bao phủ mà bạn muốn.
Lưu ý quan trọng:
Nếu bạn gặp lỗi bị từ chối quyền trên chỉ mục HNSW trong các bước sau, hãy bỏ qua toàn bộ phần đánh giá khả năng thu hồi này. Nguyên nhân có thể là do các hạn chế về quyền truy cập tại thời điểm này vì tính năng này chỉ được phát hành vào thời điểm lớp học lập trình này được ghi lại.
- Đặt cờ Bật tính năng quét chỉ mục trên chỉ mục ScaNN và chỉ mục HNSW:
SET scann.enable_indexscan = on
SET hnsw.enable_index_scan = on
- Chạy truy vấn sau trong AlloyDB Studio:
SELECT
*
FROM
evaluate_query_recall($$
SELECT
id || ' - ' || title AS title,
abstract
FROM
patents_data
where num_claims >= 15
ORDER BY
abstract_embeddings <=> embedding('text-embedding-005',
'sentiment analysis')::vector
LIMIT 25 $$,
'{"scann.num_leaves_to_search":1, "scann.pre_reordering_num_neighbors":10}',
ARRAY['scann']);
Hàm evaluate_query_recall nhận truy vấn làm tham số và trả về độ bao phủ của truy vấn đó. Tôi đang sử dụng cùng một truy vấn mà tôi đã dùng để kiểm tra hiệu suất làm truy vấn đầu vào của hàm. Tôi đã thêm SCaNN làm phương thức lập chỉ mục. Để biết thêm các lựa chọn về tham số, hãy tham khảo tài liệu.
Độ bao phủ cho truy vấn Tìm kiếm vectơ mà chúng tôi đã sử dụng:

Tôi thấy RECALL là 70%. Giờ đây, tôi có thể sử dụng thông tin này để thay đổi các tham số chỉ mục, phương thức và tham số truy vấn, đồng thời cải thiện độ bao phủ cho tính năng Tìm kiếm vectơ này!
7. Thử nghiệm với các tham số truy vấn và chỉ mục đã sửa đổi
Bây giờ, hãy kiểm thử truy vấn bằng cách sửa đổi các tham số truy vấn dựa trên thông tin thu hồi đã nhận được.
- Tôi đã sửa đổi số lượng hàng trong tập kết quả thành 7 (từ 25 trước đây) và tôi thấy RECALL (khả năng nhớ lại) đã tăng lên, tức là 86%.

Điều này có nghĩa là trong thời gian thực, tôi có thể thay đổi số lượng kết quả khớp mà người dùng nhìn thấy để cải thiện mức độ liên quan của kết quả khớp theo ngữ cảnh tìm kiếm của người dùng.
- Hãy thử lại bằng cách sửa đổi các tham số chỉ mục:
Đối với kiểm thử này, tôi sẽ sử dụng "L2 Distance" thay vì hàm khoảng cách tương tự "Cosine". Tôi cũng sẽ thay đổi giới hạn của truy vấn thành 10 để minh hoạ xem có sự cải thiện về chất lượng của kết quả tìm kiếm hay không, ngay cả khi số lượng kết quả tìm kiếm tăng lên.
[TRƯỚC] Truy vấn sử dụng hàm khoảng cách Tương đồng theo hàm cô-sin:
SELECT
*
FROM
evaluate_query_recall($$
SELECT
id || ' - ' || title AS title,
abstract
FROM
patents_data
where num_claims >= 15
ORDER BY
abstract_embeddings <=> embedding('text-embedding-005',
'sentiment analysis')::vector
LIMIT 10 $$,
'{"scann.num_leaves_to_search":1, "scann.pre_reordering_num_neighbors":10}',
ARRAY['scann']);
Lưu ý rất quan trọng: "Làm sao chúng ta biết truy vấn này sử dụng độ tương đồng COSINE?" bạn hỏi. Bạn có thể xác định hàm khoảng cách bằng cách sử dụng "<=>" để biểu thị khoảng cách Cosine.
Đường liên kết đến tài liệu cho các hàm khoảng cách của tính năng Tìm kiếm vectơ.
Kết quả của truy vấn trên là:

Như bạn có thể thấy, RECALL là 70% mà không có bất kỳ thay đổi nào đối với logic chỉ mục của chúng tôi. Hãy nhớ chỉ mục ScaNN mà chúng ta đã tạo ở bước 6 của phần Lọc nội tuyến, "patent_index "? Chỉ mục đó vẫn có hiệu quả khi chúng ta chạy truy vấn ở trên.
Bây giờ, hãy tạo một chỉ mục bằng truy vấn hàm khoảng cách khác: Khoảng cách L2: <->
drop index patent_index;
CREATE INDEX patent_index_L2 ON patents_data
USING scann (abstract_embeddings L2)
WITH (num_leaves=32);
Câu lệnh xoá chỉ mục chỉ nhằm đảm bảo không có chỉ mục không cần thiết trên bảng.
Giờ đây, tôi có thể thực hiện truy vấn sau để đánh giá RECALL sau khi thay đổi hàm khoảng cách của chức năng Tìm kiếm vectơ.
[SAU] Truy vấn sử dụng hàm khoảng cách Tương đồng cô-sin:
SELECT
*
FROM
evaluate_query_recall($$
SELECT
id || ' - ' || title AS title,
abstract
FROM
patents_data
where num_claims >= 15
ORDER BY
abstract_embeddings <-> embedding('text-embedding-005',
'sentiment analysis')::vector
LIMIT 10 $$,
'{"scann.num_leaves_to_search":1, "scann.pre_reordering_num_neighbors":10}',
ARRAY['scann']);
Kết quả của truy vấn trên là:

Thật là một sự biến đổi về mức độ ghi nhớ, 90%!!!
Bạn có thể thay đổi các tham số khác trong chỉ mục, chẳng hạn như num_leaves, v.v. dựa trên giá trị recall mong muốn và tập dữ liệu mà ứng dụng của bạn sử dụng.
8. Dọn dẹp
Để tránh bị tính phí vào tài khoản Google Cloud của bạn cho 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:
- Trong bảng điều khiển Cloud, hãy chuyển đến trang trình quản lý tài nguyên.
- 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á.
- Trong hộp thoại, hãy nhập mã dự án rồi nhấp vào Tắt để xoá dự án.
- Ngoài ra, bạn có thể chỉ cần xoá cụm AlloyDB (thay đổi vị trí trong siêu liên kết này nếu bạn không chọn us-central1 cho cụm tại thời điểm định cấu hình) mà chúng ta vừa tạo cho dự án này bằng cách nhấp vào nút XOÁ CỤM.
9. Xin chúc mừng
Xin chúc mừng! Bạn đã tạo thành công cụm từ tìm kiếm bằng sáng chế theo ngữ cảnh bằng tính năng Tìm kiếm vectơ nâng cao của AlloyDB để đạt hiệu suất cao và thực sự dựa trên ý nghĩa. Tôi đã tạo một ứng dụng nhiều công cụ có kiểm soát chất lượng, sử dụng ADK và tất cả các thành phần AlloyDB mà chúng ta đã thảo luận ở đây để tạo ra một Công cụ tìm kiếm và phân tích vectơ bằng sáng chế có hiệu suất cao và chất lượng cao mà bạn có thể xem tại đây: https://youtu.be/Y9fvVY0yZTY
Nếu bạn muốn tìm hiểu cách tạo tác nhân đó, vui lòng tham khảo lớp học lập trình này.