1. Giới thiệu
Spanner là một dịch vụ cơ sở dữ liệu được phân phối trên toàn cầu, được quản lý hoàn toàn, có thể mở rộng theo chiều ngang, rất phù hợp cho cả khối lượng công việc vận hành có quan hệ lẫn không có quan hệ.
Spanner đã tích hợp sẵn tính năng hỗ trợ tìm kiếm vectơ, cho phép bạn thực hiện việc tìm kiếm điểm tương đồng hoặc tìm kiếm về ngữ nghĩa, cũng như triển khai tính năng tạo tăng cường truy xuất (RAG) trong các ứng dụng AI tạo sinh trên quy mô lớn, tận dụng các tính năng chính xác hàng lân cận K-gần nhất (KNN) hoặc kết hợp lân cận gần nhất (ANN).
Các truy vấn tìm kiếm vectơ của Spanner trả về dữ liệu mới theo thời gian thực ngay sau khi giao dịch được cam kết, giống như bất kỳ truy vấn nào khác về dữ liệu hoạt động của bạn.
Trong phòng thí nghiệm này, bạn sẽ hướng dẫn cách thiết lập các tính năng cơ bản cần thiết để tận dụng Spanner nhằm tìm kiếm vectơ cũng như truy cập vào tính năng nhúng và các mô hình LLM từ khu vườn mô hình của VertexAI bằng SQL.
Cấu trúc sẽ có dạng như sau:
Trên nền tảng đó, bạn sẽ tìm hiểu cách tạo chỉ mục vectơ được thuật toán ScaNN hỗ trợ, đồng thời sử dụng các hàm khoảng cách APPROX khi khối lượng công việc ngữ nghĩa cần mở rộng quy mô.
Sản phẩm bạn sẽ tạo ra
Trong phòng thí nghiệm này, bạn sẽ:
- Tạo một thực thể Spanner
- Thiết lập giản đồ cơ sở dữ liệu của Spanner để tích hợp với các mô hình nhúng và mô hình LLM trong VertexAI
- Tải tập dữ liệu bán lẻ
- Đưa ra cụm từ tìm kiếm tương tự với tập dữ liệu
- Cung cấp bối cảnh cho mô hình LLM để tạo các đề xuất theo sản phẩm cụ thể.
- Sửa đổi giản đồ và tạo một chỉ mục vectơ.
- Thay đổi các truy vấn để tận dụng chỉ mục vectơ mới tạo.
Kiến thức bạn sẽ học được
- Cách thiết lập thực thể Spanner
- Cách tích hợp với VertexAI
- Cách sử dụng Spanner để tìm kiếm vectơ nhằm tìm các mục tương tự trong một tập dữ liệu bán lẻ
- Cách chuẩn bị cơ sở dữ liệu để mở rộng khối lượng công việc tìm kiếm vectơ bằng phương pháp tìm kiếm ANN.
Bạn cần có
2. Thiết lập và yêu cầu
Tạo một dự án
Nếu chưa có Tài khoản Google (Gmail hoặc Google Apps), bạn phải tạo một tài khoản. Đăng nhập vào bảng điều khiển Google Cloud Platform ( console.cloud.google.com) và tạo một dự án mới.
Nếu bạn đã có một dự án, hãy nhấp vào trình đơn kéo xuống để chọn dự án ở phía trên bên trái của bảng điều khiển:
và nhấp vào "Dự án MỚI" trong hộp thoại kết quả để tạo một dự án mới:
Nếu chưa có dự án nào, bạn sẽ thấy một hộp thoại như sau để tạo dự án đầu tiên:
Hộp thoại tạo dự án tiếp theo cho phép bạn nhập thông tin chi tiết về dự án mới:
Xin lưu ý rằng mã dự án là tên duy nhất trong tất cả dự án Google Cloud (tên ở trên đã được sử dụng nên sẽ không phù hợp với bạn!). Mã này sẽ được đề cập sau trong lớp học lập trình này với tên PROJECT_ID.
Tiếp theo, nếu chưa bật tính năng thanh toán, bạn sẽ phải bật tính năng thanh toán trong Developers Console để có thể sử dụng tài nguyên trên Google Cloud và bật Spanner API.
Bạn sẽ không mất quá vài đô la khi chạy lớp học lập trình này, nhưng có thể sẽ cao hơn nếu bạn quyết định sử dụng nhiều tài nguyên hơn hoặc nếu bạn để chúng chạy (xem phần "dọn dẹp" ở cuối tài liệu này). Bạn có thể xem giá của Google Cloud Spanner tại đây.
Người dùng mới của Google Cloud Platform đủ điều kiện nhận 300 USD dùng thử miễn phí. Vì vậy, lớp học lập trình này sẽ hoàn toàn miễn phí.
Thiết lập Google Cloud Shell
Mặc dù bạn có thể vận hành Google Cloud và Spanner từ xa trên máy tính xách tay, nhưng trong lớp học lập trình này, chúng ta sẽ sử dụng Google Cloud Shell, một môi trường dòng lệnh chạy trong Đám mây.
Máy ảo dựa trên Debian này được tải tất cả các công cụ phát triển mà bạn cần. Dịch vụ này cung cấp thư mục gốc 5 GB ổn định và chạy trong Google Cloud, giúp nâng cao đáng kể hiệu suất và khả năng xác thực của mạng. Tức là tất cả những gì bạn cần để thực hiện lớp học lập trình này là một trình duyệt (vâng, trình duyệt này hoạt động trên Chromebook).
- Để kích hoạt Cloud Shell từ Cloud Console, bạn chỉ cần nhấp vào biểu tượng Kích hoạt Cloud Shell (chỉ mất vài phút để cấp phép và kết nối với môi trường).
Sau khi kết nối với Cloud Shell, bạn sẽ thấy rằng mình đã được xác thực và dự án đã được đặt thành PROJECT_ID.
gcloud auth list
Kết quả lệnh
Credentialed accounts:
- <myaccount>@<mydomain>.com (active)
gcloud config list project
Kết quả lệnh
[core]
project = <PROJECT_ID>
Nếu vì lý do nào đó mà dự án không được thiết lập, chỉ cần phát hành lệnh sau:
gcloud config set project <PROJECT_ID>
Bạn đang tìm PROJECT_ID
? Hãy xem mã nhận dạng bạn đã sử dụng ở các bước thiết lập hoặc tra cứu trong trang tổng quan Cloud Console:
Cloud Shell cũng đặt một số biến môi trường theo mặc định. Điều này có thể hữu ích khi bạn chạy các lệnh sau này.
echo $GOOGLE_CLOUD_PROJECT
Kết quả lệnh
<PROJECT_ID>
Bật Spanner API
gcloud services enable spanner.googleapis.com
Tóm tắt
Ở bước này, bạn đã thiết lập dự án của mình nếu bạn chưa có dự án, kích hoạt Cloud shell và bật các API bắt buộc.
Tiếp theo
Tiếp theo, bạn sẽ thiết lập thực thể và cơ sở dữ liệu Spanner.
3. Tạo một thực thể và cơ sở dữ liệu Spanner
Tạo thực thể Spanner
Ở bước này, chúng ta đã thiết lập Thực thể Spanner cho lớp học lập trình này. Để thực hiện việc này, hãy mở Cloud Shell và chạy lệnh sau:
export SPANNER_INSTANCE_ID=retail-demo
gcloud spanner instances create $SPANNER_INSTANCE_ID \
--config=regional-us-central1 \
--description="spanner AI retail demo" \
--nodes=1
Kết quả của lệnh:
$ gcloud spanner instances create $SPANNER_INSTANCE_ID \
--config=regional-us-central1 \
--description="spanner AI retail demo" \
--nodes=1
Creating instance...done.
Tạo cơ sở dữ liệu
Khi thực thể của bạn đang chạy, bạn có thể tạo cơ sở dữ liệu. Spanner cho phép nhiều cơ sở dữ liệu trên một thực thể.
Cơ sở dữ liệu là nơi bạn xác định giản đồ của mình. Bạn cũng có thể kiểm soát ai có quyền truy cập vào cơ sở dữ liệu, thiết lập mã hoá tuỳ chỉnh, định cấu hình trình tối ưu hoá và đặt khoảng thời gian lưu giữ.
Để tạo cơ sở dữ liệu, hãy sử dụng lại công cụ dòng lệnh gcloud:
export SPANNER_DATABASE=cymbal-bikes
gcloud spanner databases create $SPANNER_DATABASE \
--instance=$SPANNER_INSTANCE_ID
Kết quả của lệnh:
$ gcloud spanner databases create $SPANNER_DATABASE \
--instance=$SPANNER_INSTANCE_ID
Creating database...done.
Tóm tắt
Ở bước này, bạn đã tạo phiên bản thể hiện và cơ sở dữ liệu Spanner.
Tiếp theo
Tiếp theo, bạn sẽ thiết lập giản đồ và dữ liệu Spanner.
4. Tải dữ liệu và giản đồ Cymbal
Tạo giản đồ Cymbal
Để thiết lập giản đồ, hãy chuyển đến Spanner Studio:
Giản đồ có hai phần. Trước tiên, bạn muốn thêm bảng products
. Sao chép và dán câu lệnh này vào thẻ trống.
Đối với giản đồ, hãy sao chép và dán DDL này vào hộp:
CREATE TABLE products (
categoryId INT64 NOT NULL,
productId INT64 NOT NULL,
productName STRING(MAX) NOT NULL,
productDescription STRING(MAX) NOT NULL,
productDescriptionEmbedding ARRAY<FLOAT32>,
createTime TIMESTAMP NOT NULL OPTIONS (
allow_commit_timestamp = true
),
inventoryCount INT64 NOT NULL,
priceInCents INT64,
) PRIMARY KEY(categoryId, productId);
Sau đó, hãy nhấp vào nút run
rồi đợi vài giây để tạo giản đồ.
Tiếp theo, bạn sẽ tạo hai mô hình và định cấu hình chúng cho các điểm cuối của mô hình VertexAI.
Mô hình đầu tiên là mô hình Nhúng dùng để tạo các mục nhúng từ văn bản, còn mô hình thứ hai là mô hình LLM (mô hình ngôn ngữ lớn) dùng để tạo các câu trả lời dựa trên dữ liệu trong Spanner.
Dán giản đồ sau vào một thẻ mới trong Spanner Studio:
CREATE MODEL EmbeddingsModel INPUT(
content STRING(MAX),
) OUTPUT(
embeddings STRUCT<statistics STRUCT<truncated BOOL, token_count FLOAT32>, values ARRAY<FLOAT32>>,
) REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/<PROJECT_ID>/locations/us-central1/publishers/google/models/text-embedding-004'
);
CREATE MODEL LLMModel INPUT(
prompt STRING(MAX),
) OUTPUT(
content STRING(MAX),
) REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/<PROJECT_ID>/locations/us-central1/publishers/google/models/gemini-pro',
default_batch_size = 1
);
Sau đó, nhấp vào nút run
và đợi vài giây để tạo mô hình.
Trong ngăn bên trái của Spanner Studio, bạn sẽ thấy các bảng và mô hình sau:
Tải dữ liệu
Bây giờ, bạn sẽ muốn chèn một số sản phẩm vào cơ sở dữ liệu của mình. Mở một thẻ mới trong Spanner Studio, sau đó sao chép và dán các câu lệnh chèn sau:
INSERT INTO products (categoryId, productId, productName, productDescription, createTime, inventoryCount, priceInCents)
VALUES (1, 1, "Cymbal Helios Helmet", "Safety meets style with the Cymbal children's bike helmet. Its lightweight design, superior ventilation, and adjustable fit ensure comfort and protection on every ride. Stay bright and keep your child safe under the sun with Cymbal Helios!", PENDING_COMMIT_TIMESTAMP(), 100, 10999),
(1, 2, "Cymbal Sprout", "Let their cycling journey begin with the Cymbal Sprout, the ideal balance bike for beginning riders ages 2-4 years. Its lightweight frame, low seat height, and puncture-proof tires promote stability and confidence as little ones learn to balance and steer. Watch them sprout into cycling enthusiasts with Cymbal Sprout!", PENDING_COMMIT_TIMESTAMP(), 10, 13999),
(1, 3, "Cymbal Spark Jr.", "Light, vibrant, and ready for adventure, the Spark Jr. is the perfect first bike for young riders (ages 5-8). Its sturdy frame, easy-to-use brakes, and puncture-resistant tires inspire confidence and endless playtime. Let the spark of cycling ignite with Cymbal!", PENDING_COMMIT_TIMESTAMP(), 34, 13900),
(1, 4, "Cymbal Summit", "Conquering trails is a breeze with the Summit mountain bike. Its lightweight aluminum frame, responsive suspension, and powerful disc brakes provide exceptional control and comfort for experienced bikers navigating rocky climbs or shredding downhill. Reach new heights with Cymbal Summit!", PENDING_COMMIT_TIMESTAMP(), 0, 79999),
(1, 5, "Cymbal Breeze", "Cruise in style and embrace effortless pedaling with the Breeze electric bike. Its whisper-quiet motor and long-lasting battery let you conquer hills and distances with ease. Enjoy scenic rides, commutes, or errands with a boost of confidence from Cymbal Breeze!", PENDING_COMMIT_TIMESTAMP(), 72, 129999),
(1, 6, "Cymbal Trailblazer Backpack", "Carry all your essentials in style with the Trailblazer backpack. Its water-resistant material, multiple compartments, and comfortable straps keep your gear organized and accessible, allowing you to focus on the adventure. Blaze new trails with Cymbal Trailblazer!", PENDING_COMMIT_TIMESTAMP(), 24, 7999),
(1, 7, "Cymbal Phoenix Lights", "See and be seen with the Phoenix bike lights. Powerful LEDs and multiple light modes ensure superior visibility, enhancing your safety and enjoyment during day or night rides. Light up your journey with Cymbal Phoenix!", PENDING_COMMIT_TIMESTAMP(), 87, 3999),
(1, 8, "Cymbal Windstar Pump", "Flat tires are no match for the Windstar pump. Its compact design, lightweight construction, and high-pressure capacity make inflating tires quick and effortless. Get back on the road in no time with Cymbal Windstar!", PENDING_COMMIT_TIMESTAMP(), 36, 24999),
(1, 9,"Cymbal Odyssey Multi-Tool","Be prepared for anything with the Odyssey multi-tool. This handy gadget features essential tools like screwdrivers, hex wrenches, and tire levers, keeping you ready for minor repairs and adjustments on the go. Conquer your journey with Cymbal Odyssey!", PENDING_COMMIT_TIMESTAMP(), 52, 999),
(1, 10,"Cymbal Nomad Water Bottle","Stay hydrated on every ride with the Nomad water bottle. Its sleek design, BPA-free construction, and secure lock lid make it the perfect companion for staying refreshed and motivated throughout your adventures. Hydrate and explore with Cymbal Nomad!", PENDING_COMMIT_TIMESTAMP(), 42, 1299);
Nhấp vào nút run
để chèn dữ liệu.
Tóm tắt
Ở bước này, bạn đã tạo giản đồ và tải một số dữ liệu cơ bản vào cơ sở dữ liệu cymbal-bikes
.
Tiếp theo
Tiếp theo, bạn sẽ tích hợp với mô hình Nhúng để tạo các mục nhúng cho nội dung mô tả sản phẩm, cũng như chuyển đổi một yêu cầu tìm kiếm dạng văn bản thành một mục nhúng để tìm kiếm các sản phẩm có liên quan.
5. Làm việc với các mục nhúng
Tạo các mục nhúng vectơ cho nội dung mô tả sản phẩm
Để tính năng tìm kiếm điểm tương đồng hoạt động trên các sản phẩm, bạn cần tạo các mục nhúng cho nội dung mô tả sản phẩm.
Với EmbeddingsModel
được tạo trong giản đồ, đây là một câu lệnh DML UPDATE
đơn giản.
UPDATE products p1
SET productDescriptionEmbedding =
(SELECT embeddings.values from ML.PREDICT(MODEL EmbeddingsModel,
(SELECT productDescription as content FROM products p2 where p2.productId=p1.productId)))
WHERE categoryId=1;
Nhấp vào nút run
để cập nhật nội dung mô tả sản phẩm.
Sử dụng tìm kiếm vectơ
Trong ví dụ này, bạn sẽ cung cấp yêu cầu tìm kiếm bằng ngôn ngữ tự nhiên thông qua truy vấn SQL. Cụm từ tìm kiếm này sẽ chuyển yêu cầu tìm kiếm thành một mục nhúng, sau đó tìm kiếm kết quả tương tự dựa trên mục nhúng đã lưu trữ cho nội dung mô tả sản phẩm đã được tạo ở bước trước.
-- Use Spanner's vector search, and integration with embedding and LLM models to
-- return items that are semantically relevant and available in inventory based on
-- real-time data.
SELECT productName, productDescription, inventoryCount, COSINE_DISTANCE(
productDescriptionEmbedding,
( SELECT embeddings.values
FROM ML.PREDICT(
MODEL EmbeddingsModel,
(SELECT "I'd like to buy a starter bike for my 3 year old child" as content)
)
)
) as distance
FROM products
WHERE inventoryCount > 0
ORDER BY distance
LIMIT 5;
Nhấp vào nút run
để tìm các sản phẩm tương tự. Kết quả sẽ có dạng như sau:
Xin lưu ý rằng các bộ lọc bổ sung được sử dụng cho cụm từ tìm kiếm, chẳng hạn như chỉ quan tâm đến những sản phẩm còn hàng (inventoryCount > 0
).
Tóm tắt
Trong bước này, bạn đã tạo các mục nhúng nội dung mô tả sản phẩm và một mục nhúng yêu cầu tìm kiếm bằng SQL, tận dụng tính năng tích hợp của Spanner với các mô hình trong VertexAI. Bạn cũng đã thực hiện tìm kiếm vectơ để tìm các sản phẩm tương tự phù hợp với yêu cầu tìm kiếm.
Các bước tiếp theo
Tiếp theo, hãy sử dụng kết quả tìm kiếm để cấp dữ liệu cho một LLM (mô hình ngôn ngữ lớn) nhằm tạo câu trả lời tuỳ chỉnh cho từng sản phẩm.
6. Làm việc với một mô hình ngôn ngữ lớn (LLM)
Spanner giúp bạn dễ dàng tích hợp với các mô hình LLM do VertexAI cung cấp. Điều này cho phép nhà phát triển sử dụng SQL để giao tiếp trực tiếp với các LLM, thay vì yêu cầu ứng dụng thực hiện logic.
Ví dụ: chúng ta có kết quả từ truy vấn SQL trước đó từ người dùng "I'd like to buy a starter bike for my 3 year old child".
Đối với mỗi kết quả, nhà phát triển muốn phản hồi về việc sản phẩm có phù hợp với người dùng hay không bằng cách sử dụng câu lệnh sau:
"Answer with ‘Yes' or ‘No' and explain why: Is this a good fit for me? I'd like to buy a starter bike for my 3 year old child"
Dưới đây là truy vấn bạn có thể sử dụng:
-- Use an LLM to analyze this list and provide a recommendation on whether each
-- product is a good fit for the user. We use the vector search and real time
-- inventory data to first filter the products to reduce the size of the prompt to
-- the LLM.
SELECT productName, productDescription, inventoryCount, content AS LLMResponse
FROM ML.PREDICT(
MODEL LLMModel,
( SELECT
inventoryCount,
productName,
productDescription,
CONCAT(
"Answer with ‘Yes' or ‘No' and explain why: Is this a good fit for me?",
"I'd like to buy a starter bike for my 3 year old child \n",
"Product Name: ", productName, "\n",
"Product Description:", productDescription) AS prompt,
FROM products
WHERE inventoryCount > 0
ORDER by COSINE_DISTANCE(
productDescriptionEmbedding,
( SELECT embeddings.values
FROM ML.PREDICT(
MODEL EmbeddingsModel,
( SELECT "I'd like to buy a starter bike for my 3 year old child" as content)
)
)
) LIMIT 5
),
STRUCT(256 AS maxOutputTokens)
);
Nhấp vào nút run
để đưa ra truy vấn. Kết quả sẽ có dạng như sau:
Sản phẩm đầu tiên là sản phẩm phù hợp cho bé 3 tuổi vì sản phẩm phù hợp với lứa tuổi trong phần mô tả sản phẩm (từ 2 đến 4 tuổi). Các sản phẩm khác không phù hợp lắm.
Tóm tắt
Trong bước này, bạn đã làm việc với một LLM (mô hình ngôn ngữ lớn) để tạo các câu trả lời cơ bản cho các câu lệnh của người dùng.
Các bước tiếp theo
Tiếp theo, hãy tìm hiểu cách sử dụng ANN để tìm kiếm vectơ chia tỷ lệ.
7. Tìm kiếm vectơ theo tỷ lệ
Các ví dụ tìm kiếm vectơ trước đó đã tận dụng tìm kiếm vectơ chính xác-KNN. Điều này thật tuyệt vời khi bạn có thể truy vấn các tập hợp con dữ liệu Spanner rất cụ thể. Những loại cụm từ tìm kiếm đó được cho là có khả năng phân vùng cao.
Nếu bạn không có những khối lượng công việc có khả năng phân vùng cao và có một lượng lớn dữ liệu, bạn nên sử dụng tính năng tìm kiếm vectơ ANN tận dụng thuật toán ScaNN để tăng hiệu suất tra cứu.
Để thực hiện việc đó trong Spanner, bạn cần thực hiện hai việc:
- Tạo chỉ mục vectơ
- Sửa đổi truy vấn của bạn để sử dụng các hàm khoảng cách APPROX.
Tạo chỉ mục vectơ
Để tạo chỉ mục vectơ trên tập dữ liệu này, trước tiên, chúng ta cần sửa đổi cột productDescriptionEmbeddings
để xác định độ dài của từng vectơ. Để thêm độ dài vectơ vào một cột, bạn phải bỏ cột ban đầu và tạo lại cột đó.
ALTER TABLE `products` DROP COLUMN `productDescriptionEmbedding`;
ALTER TABLE
`products` ADD COLUMN `productDescriptionEmbedding` ARRAY<FLOAT32>(vector_length=>768);
Tiếp theo, hãy tạo lại các mục nhúng từ bước Generate Vector embedding
mà bạn đã chạy trước đó.
UPDATE products p1
SET productDescriptionEmbedding =
(SELECT embeddings.values from ML.PREDICT(MODEL EmbeddingsModel,
(SELECT productDescription as content FROM products p2 where p2.productId=p1.productId)))
WHERE categoryId=1;
Sau khi tạo cột, hãy tạo chỉ mục:
CREATE VECTOR INDEX ProductDescriptionEmbeddingIndex
ON products(productDescriptionEmbedding)
WHERE productDescriptionEmbedding IS NOT NULL
OPTIONS (
distance_type = 'COSINE'
);
Sử dụng chỉ mục mới
Để sử dụng chỉ mục vectơ mới, bạn sẽ phải sửa đổi truy vấn nhúng trước đó một chút.
Đây là truy vấn ban đầu:
SELECT productName, productDescription, inventoryCount, COSINE_DISTANCE(
productDescriptionEmbedding,
( SELECT embeddings.values
FROM ML.PREDICT(
MODEL EmbeddingsModel,
(SELECT "I'd like to buy a starter bike for my 3 year old child" as content)
)
)
) as distance
FROM products
WHERE inventoryCount > 0
ORDER BY distance
LIMIT 5;
Bạn sẽ phải thực hiện các thay đổi sau:
- Sử dụng gợi ý chỉ mục cho chỉ mục vectơ mới:
@{force_index=ProductDescriptionEmbeddingIndex}
- Thay đổi lệnh gọi hàm
COSINE_DISTANCE
thànhAPPROX_COSINE_DISTANCE
. Xin lưu ý rằng bạn cũng phải sử dụng các lựa chọn JSON trong truy vấn cuối cùng bên dưới. - Tạo các mục nhúng từ hàm ML.PREDICT một cách riêng biệt.
- Sao chép kết quả của các mục nhúng vào truy vấn cuối cùng.
Tạo các mục nhúng
-- Generate the prompt embeddings
SELECT embeddings.values
FROM ML.PREDICT(
MODEL EmbeddingsModel,
(SELECT "I'd like to buy a starter bike for my 3 year old child" as content)
)
)
Đánh dấu kết quả từ truy vấn rồi sao chép các kết quả đó.
Sau đó, thay thế <VECTOR>
trong truy vấn sau bằng cách dán các mục nhúng bạn đã sao chép.
-- Embedding query now using the vector index
SELECT productName, productDescription, inventoryCount,
APPROX_COSINE_DISTANCE(productDescriptionEmbedding, array<float32>[@VECTOR], options => JSON '{\"num_leaves_to_search\": 10}')
FROM products @{force_index=ProductDescriptionEmbeddingIndex}
WHERE productDescriptionEmbedding IS NOT NULL AND inventoryCount > 0
ORDER BY distance
LIMIT 5;
Hàm này có dạng như sau:
Tóm tắt
Trong bước này, bạn đã chuyển đổi giản đồ để tạo một chỉ mục vectơ. Sau đó, bạn viết lại truy vấn nhúng để thực hiện tìm kiếm ANN bằng chỉ mục vectơ. Đây là một bước quan trọng khi dữ liệu của bạn phát triển để mở rộng khối lượng công việc tìm kiếm vectơ.
Các bước tiếp theo
Tiếp theo, đã đến lúc dọn dẹp!
8. Dọn dẹp (không bắt buộc)
Để dọn dẹp, bạn chỉ cần chuyển đến phần Cloud Spanner của Cloud Console rồi xoá thực thể 'retail-demo
' mà chúng ta đã tạo trong lớp học lập trình này.
9. Xin chúc mừng!
Xin chúc mừng, bạn đã thực hiện thành công tìm kiếm tương tự bằng tìm kiếm vectơ tích hợp sẵn của Spanner. Ngoài ra, bạn đã thấy việc sử dụng các mô hình nhúng và LLM để cung cấp trực tiếp chức năng AI tạo sinh bằng SQL dễ dàng như thế nào.
Cuối cùng, bạn đã tìm hiểu quy trình thực hiện tìm kiếm ANN dựa trên thuật toán ScaNN để mở rộng khối lượng công việc tìm kiếm vectơ.
Tiếp theo là gì?
Tìm hiểu thêm về tính năng hàng xóm gần nhất chính xác của Spanner (tìm kiếm vectơ KNN) tại đây: https://cloud.google.com/spanner/docs/find-k-nearest-neighbors
Tìm hiểu thêm về tính năng hàng xóm gần nhất gần nhất của Spanner (tìm kiếm vectơ ANN) tại đây: https://cloud.google.com/spanner/docs/find-approximate-nearest-neighbors
Bạn cũng có thể đọc thêm về cách thực hiện dự đoán trực tuyến bằng SQL bằng công cụ tích hợp VertexAI của Spanner tại đây: https://cloud.google.com/spanner/docs/ml