Tính năng Tìm kiếm tương tự kết hợp với Spanner và Vertex AI

1. Giới thiệu

Những tiến bộ gần đây trong công nghệ học sâu đã giúp bạn có thể trình bày văn bản và các dữ liệu khác theo cách nắm bắt được ý nghĩa ngữ nghĩa. Điều này đã dẫn đến một phương pháp tìm kiếm mới, được gọi là tìm kiếm vectơ, sử dụng các biểu diễn vectơ của văn bản (được gọi là phần nhúng) để tìm tài liệu có liên quan nhất đến truy vấn của người dùng. Tìm kiếm vectơ được ưu tiên hơn so với tìm kiếm truyền thống đối với các ứng dụng như tìm kiếm quần áo, trong đó người dùng thường tìm kiếm các mặt hàng theo mô tả, kiểu hoặc ngữ cảnh thay vì tìm kiếm theo tên chính xác của sản phẩm hoặc thương hiệu. Chúng tôi có thể tích hợp cơ sở dữ liệu Cloud Spanner với Vector Search để tiến hành so khớp vectơ tương đồng. Khi sử dụng kết hợp Spanner và Vector Search, khách hàng có thể tạo ra một giải pháp tích hợp mạnh mẽ, kết hợp khả năng sử dụng, độ tin cậy và quy mô của Spanner cũng như các chức năng tìm kiếm tương tự nâng cao của Vertex AI Vector Search. Tìm kiếm này được thực hiện bằng cách so sánh các nhúng mục trong chỉ mục của Vector Search và trả về các kết quả trùng khớp nhất.

Trường hợp sử dụng

Giả sử bạn là nhà khoa học về dữ liệu tại một cửa hàng bán lẻ thời trang và đang cố gắng bắt kịp các xu hướng, nội dung tìm kiếm sản phẩm và nội dung đề xuất đang thay đổi nhanh chóng. Thách thức đặt ra là bạn có tài nguyên hạn chế và các kho dữ liệu tách biệt. Bài đăng trên blog này minh hoạ cách triển khai một trường hợp sử dụng đề xuất về hàng may mặc bằng phương pháp tìm kiếm tương tự đối với dữ liệu về hàng may mặc.Bao gồm các bước sau đây:

  1. Dữ liệu được lấy từ Spanner
  2. Các vectơ được tạo cho dữ liệu hàng may mặc bằng ML.PREDICT và được lưu trữ trong Spanner
  3. Dữ liệu vectơ Spanner được tích hợp với Vector Search bằng cách sử dụng luồng dữ liệu và công việc trong quy trình công việc
  4. Đã thực hiện tìm kiếm vectơ để tìm kết quả tương tự cho nội dung do người dùng nhập

Chúng ta sẽ xây dựng một ứng dụng web minh hoạ để thực hiện việc tìm kiếm quần áo dựa trên văn bản nhập của người dùng. Ứng dụng cho phép người dùng tìm kiếm quần áo bằng cách nhập nội dung mô tả bằng văn bản.

Chỉ mục Spanner cho Vector Search:

Dữ liệu về nội dung tìm kiếm hàng may mặc được lưu trữ trong Spanner. Chúng ta sẽ gọi API Nhúng của Vertex AI trong cấu trúc ML.PREDICT ngay từ dữ liệu Spanner. Sau đó, chúng ta sẽ tận dụng các công việc Dataflow và Workflow để tải hàng loạt dữ liệu này (khoảng không quảng cáo và các mục nhúng) lên Vector Search của Vertex AI và làm mới chỉ mục.

Chạy truy vấn của người dùng trên chỉ mục:

Khi người dùng nhập nội dung mô tả về quần áo, ứng dụng sẽ tạo các mục nhúng theo thời gian thực bằng API Nhúng văn bản. Sau đó, dữ liệu này được gửi dưới dạng dữ liệu đầu vào đến Vector Search API để tìm 10 nội dung mô tả sản phẩm có liên quan trong chỉ mục và hiện hình ảnh tương ứng.

Tổng quan về Cấu trúc (Architecture)

Cấu trúc của ứng dụng Spanner- Vector Search được thể hiện trong sơ đồ 2 phần sau:

Spanner to Vector Search Index: a79932a25bee23a4.png

Ứng dụng khách để chạy truy vấn của người dùng trên chỉ mục:

b2b4d5a5715bd4c4.pngSản phẩm bạn sẽ tạo ra

Chỉ mục Spanner cho chỉ mục vectơ:

  • Cơ sở dữ liệu Spanner để lưu trữ và quản lý dữ liệu nguồn cũng như các mục nhúng tương ứng
  • Một công việc trong Quy trình công việc tải hàng loạt dữ liệu (mã nhận dạng và mục nhúng) lên cơ sở dữ liệu Vertex AI Vector Search.
  • Vector Search API được dùng để tìm nội dung mô tả sản phẩm có liên quan trong chỉ mục.

Chạy truy vấn của người dùng trên chỉ mục:

  • Một ứng dụng web cho phép người dùng nhập nội dung mô tả bằng văn bản về trang phục, thực hiện tìm kiếm các điểm tương đồng bằng cách sử dụng điểm cuối chỉ mục đã triển khai và trả về trang phục gần nhất với dữ liệu đầu vào.

Cách hoạt động

Khi người dùng nhập nội dung mô tả bằng văn bản về trang phục, ứng dụng web sẽ gửi nội dung mô tả đó đến Vector Search API. Sau đó, Vector Search API sử dụng các mục nhúng nội dung mô tả quần áo để tìm những nội dung mô tả sản phẩm phù hợp nhất trong chỉ mục. Sau đó, nội dung mô tả sản phẩm và hình ảnh tương ứng sẽ được trình bày cho người dùng. Dưới đây là quy trình làm việc chung:

  1. Tạo mục nhúng cho dữ liệu được lưu trữ trong Spanner.
  2. Xuất và tải các mục nhúng lên chỉ mục Tìm kiếm vectơ.
  3. Truy vấn chỉ mục Tìm kiếm vectơ cho các mục tương tự bằng cách thực hiện tìm kiếm lân cận gần nhất.

2. 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

Trước khi bắt đầu

  1. Trong Google Cloud Console, trên trang bộ chọn dự án, hãy chọn hoặc tạo một dự án trên Google Cloud
  2. Đảm bảo rằng bạn đã bật tính năng thanh toán cho dự án trên Google 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. Đảm bảo rằng tất cả API cần thiết (Cloud Spanner, Vertex AI, Google Cloud Storage) đều được bật
  4. Bạn sẽ sử dụng Cloud Shell, một môi trường dòng lệnh chạy trong Google Cloud được tải sẵn gcloud. Hãy tham khảo tài liệu để biết các lệnh gcloud và cách sử dụng. Nếu dự án của bạn chưa được thiết lập, hãy sử dụng lệnh sau để thiết lập dự án:
gcloud config set project <YOUR_PROJECT_ID>
  1. Chuyển đến trang Cloud Spanner bằng dự án Google Cloud đang hoạt động để bắt đầu

3. Phần phụ trợ: Tạo nguồn dữ liệu và các mục nhúng Spanner

Trong trường hợp sử dụng này, cơ sở dữ liệu Spanner lưu trữ kho hàng quần áo cùng với hình ảnh và nội dung mô tả tương ứng. Đảm bảo bạn tạo các mục nhúng cho nội dung mô tả văn bản và lưu trữ các mục đó trong cơ sở dữ liệu Spanner dưới dạng ARRAY<float64>.

  1. Tạo dữ liệu Spanner

Tạo một thực thể có tên là "spanner-vertex" và một cơ sở dữ liệu có tên là "spanner-vertex-embeddings". Tạo bảng bằng DDL:

CREATE TABLE
  apparels ( id NUMERIC,
    category STRING(100),
    sub_category STRING(50),
    uri STRING(200),
    content STRING(2000),
    embedding ARRAY<FLOAT64>
    )
PRIMARY KEY
  (id);
  1. Chèn dữ liệu vào bảng bằng INSERT SQL

Bạn có thể xem tập lệnh cho dữ liệu mẫu tại đây.

  1. Tạo mô hình Nhúng văn bản

Điều này là bắt buộc để chúng ta có thể tạo các mục nhúng cho nội dung trong đầu vào. Dưới đây là DDL cho cùng:

CREATE MODEL text_embeddings INPUT(content STRING(MAX))
OUTPUT(
  embeddings
    STRUCT<
      statistics STRUCT<truncated BOOL, token_count FLOAT64>,
      values ARRAY<FLOAT64>>
)
REMOTE OPTIONS (
  endpoint = '//aiplatform.googleapis.com/projects/abis-345004/locations/us-central1/publishers/google/models/textembedding-gecko');
  1. Tạo mục nhúng văn bản cho dữ liệu nguồn

Tạo bảng để lưu trữ các mục nhúng và chèn các mục nhúng được tạo. Trong ứng dụng cơ sở dữ liệu thực tế, việc tải dữ liệu đến Spanner đến bước 2 sẽ là giao dịch. Để giữ nguyên các phương pháp thiết kế hay nhất, tôi muốn chuẩn hoá các bảng giao dịch, vì vậy hãy tạo một bảng riêng cho các mục nhúng.

CREATE TABLE apparels_embeddings (id string(100), embedding ARRAY<FLOAT64>)
PRIMARY KEY (id);

INSERT INTO apparels_embeddings(id, embeddings) 
SELECT CAST(id as string), embeddings.values
FROM ML.PREDICT(
  MODEL text_embeddings,
  (SELECT id, content from apparels)
) ;

Nội dung hàng loạt và các mục nhúng đã sẵn sàng, hãy để chúng ta tạo Chỉ mục tìm kiếm vectơ và Điểm cuối để lưu trữ các mục nhúng sẽ giúp thực hiện Tìm kiếm vectơ.

4. Công việc trong quy trình công việc: Xuất dữ liệu Spanner sang Vector Search

  1. Tạo bộ chứa Cloud Storage

Đây là yêu cầu bắt buộc để lưu trữ các mục nhúng từ Spanner trong bộ chứa GCS ở định dạng json mà Vector Search muốn làm dữ liệu đầu vào. Tạo một bộ chứa ở cùng khu vực với dữ liệu của bạn trong Spanner. Nếu cần, hãy tạo một thư mục bên trong, nhưng chủ yếu tạo một tệp trống có tên là rỗng.json.

  1. Thiết lập Cloud Workflow

Cách thiết lập tính năng xuất dữ liệu hàng loạt từ Spanner sang chỉ mục Vertex AI Vector Search:

Tạo chỉ mục trống:

Đảm bảo Chỉ mục tìm kiếm vectơ ở cùng khu vực với Bộ chứa Cloud Storage và dữ liệu. Làm theo 11 bước hướng dẫn trong thẻ bảng điều khiển trên phần Tạo chỉ mục để cập nhật theo lô trên trang quản lý chỉ mục. Trong thư mục được chuyển đến nội dung DeltaUri, hãy tạo một tệp trống có tên là rỗng.json vì bạn không thể tạo chỉ mục nếu không có tệp này. Thao tác này sẽ tạo ra một chỉ mục trống.

Nếu đã có chỉ mục, bạn có thể bỏ qua bước này. Quy trình làm việc sẽ ghi đè lên chỉ mục của bạn.

Lưu ý: Bạn không thể triển khai chỉ mục trống cho một điểm cuối. Vì vậy, chúng tôi đang hoãn bước triển khai dữ liệu này đến một điểm cuối sang bước sau, sau khi xuất dữ liệu vectơ sang Cloud Storage.

Sao chép kho lưu trữ git này: Có nhiều cách để sao chép kho lưu trữ git, một cách là chạy lệnh sau bằng GitHub CLI. Chạy 2 lệnh bên dưới từ Cloud Shell Terminal:

gh repo clone cloudspannerecosystem/spanner-ai

cd spanner-ai/vertex-vector-search/workflows

Thư mục này chứa hai tệp

  • batch-export.yaml: Đây là định nghĩa quy trình làm việc.
  • sample-batch-input.json: Đây là mẫu của các tham số đầu vào trong quy trình công việc.

Thiết lập input.json từ tệp mẫu: Trước tiên, hãy sao chép tệp json mẫu.

cp sample-lô-input.json input.json

Sau đó, hãy chỉnh sửa input.json kèm theo thông tin chi tiết về dự án. Trong trường hợp này, tệp json của bạn sẽ có dạng như sau:

{
  "project_id": "<<YOUR_PROJECT>>",
  "location": "<<us-central1>>",
  "dataflow": {
    "temp_location": "gs://<<YOUR_BUCKET>>/<<FOLDER_IF_ANY>>/workflow_temp"
  },
  "gcs": {
    "output_folder": "gs://<<YOUR_BUCKET>>/<<FOLDER_IF_ANY>>/workflow_output"
  },
  "spanner": {
    "instance_id": "spanner-vertex",
    "database_id": "spanner-vertex-embeddings",
    "table_name": "apparels_embeddings",
    "columns_to_export": "embedding,id"
  },
  "vertex": {
    "vector_search_index_id": "<<YOUR_INDEX_ID>>"
  }
}

Thiết lập quyền

Đối với môi trường phát hành công khai, bạn nên tạo một tài khoản dịch vụ mới và cấp cho tài khoản đó một hoặc nhiều vai trò quản lý danh tính và quyền truy cập (IAM) có chứa các quyền tối thiểu cần thiết để quản lý dịch vụ. Những vai trò sau đây là cần thiết để thiết lập quy trình làm việc nhằm xuất dữ liệu từ Spanner (tính năng nhúng) sang chỉ mục Vector Search:

Tài khoản dịch vụ quy trình công việc của Cloud:

Theo mặc định, dịch vụ này sử dụng tài khoản dịch vụ mặc định của Compute Engine.

Nếu sử dụng tài khoản dịch vụ được thiết lập theo cách thủ công, bạn phải thêm các vai trò sau:

Để kích hoạt một công việc của dataflow: Quản trị viên Dataflow, Dataflow Worker.

Cách mạo danh tài khoản dịch vụ của trình thực thi luồng dữ liệu: Người dùng tài khoản dịch vụ.

Cách viết nhật ký: Ghi nhật ký.

Để kích hoạt tính năng tạo lại vectơ của Vertex AI, hãy làm như sau: Người dùng Vertex AI.

Tài khoản dịch vụ Dataflow Worker:

Nếu sử dụng tài khoản dịch vụ được thiết lập theo cách thủ công, bạn phải thêm các vai trò sau:

Để quản lý luồng dữ liệu: Quản trị viên Dataflow, Dataflow Worker. Cách đọc dữ liệu từ Spanner: Trình đọc cơ sở dữ liệu Cloud Spanner. Quyền ghi trên Sổ đăng ký vùng chứa GCS đã chọn: Chủ sở hữu bộ chứa bộ nhớ GCS.

  1. Triển khai Cloud Workflow

Triển khai tệp yaml quy trình công việc cho dự án trên Google Cloud. Bạn có thể định cấu hình khu vực hoặc vị trí nơi quy trình sẽ chạy khi được thực thi.

gcloud workflows deploy vector-export-workflow --source=batch-export.yaml --location="us-central1" [--service account=<service_account>]

or 

gcloud workflows deploy vector-export-workflow --source=batch-export.yaml --location="us-central1"

Giờ đây, quy trình công việc sẽ hiển thị trên trang Quy trình công việc trong bảng điều khiển Google Cloud.

Lưu ý: Bạn cũng có thể tạo và triển khai quy trình công việc trong bảng điều khiển Google Cloud. Làm theo lời nhắc trong bảng điều khiển Cloud. Để định nghĩa quy trình công việc, hãy sao chép và dán nội dung củaBatch-export.yaml.

Sau khi quá trình này hoàn tất, hãy thực thi quy trình để bắt đầu xuất dữ liệu.

  1. Thực thi quy trình công việc trên đám mây

Chạy lệnh sau để thực thi quy trình công việc:

gcloud workflows execute vector-export-workflow --data="$(cat input.json)"

Hoạt động thực thi sẽ xuất hiện trong thẻ Các lần thực thi trong Luồng công việc. Thao tác này sẽ tải dữ liệu của bạn vào cơ sở dữ liệu Vector Search và lập chỉ mục dữ liệu đó.

Lưu ý: Bạn cũng có thể thực thi từ bảng điều khiển bằng cách sử dụng nút Thực thi. Làm theo lời nhắc và để nhập thông tin, hãy sao chép và dán nội dung của tệp input.json tuỳ chỉnh của bạn.

5. Triển khai chỉ mục tìm kiếm vectơ

Triển khai chỉ mục cho một điểm cuối

Bạn có thể làm theo các bước bên dưới để triển khai chỉ mục:

  1. Trên trang Chỉ mục của tính năng Tìm kiếm vectơ, bạn sẽ thấy nút PHÂN KHÚC bên cạnh chỉ mục bạn vừa tạo trong bước 2 của phần trước. Ngoài ra, bạn có thể chuyển đến trang thông tin về chỉ mục rồi nhấp vào nút PHẢN HỒI ĐẾN ĐIỂM KẾT THÚC.
  2. Cung cấp thông tin cần thiết và triển khai chỉ mục đến một điểm cuối.

Ngoài ra, bạn có thể xem sổ tay này để triển khai sổ tay cho một điểm cuối (chuyển đến phần triển khai của sổ tay). Sau khi triển khai, hãy ghi lại mã chỉ mục và url điểm cuối đã triển khai.

6. Giao diện người dùng: Dữ liệu người dùng cho Tìm kiếm vectơ

Hãy tạo một ứng dụng Python đơn giản với trải nghiệm người dùng dựa trên gradio để nhanh chóng kiểm tra cách triển khai của chúng ta: Bạn có thể tham khảo cách triển khai tại đây để triển khai ứng dụng minh hoạ này trong sổ tay colab của riêng bạn.

  1. Chúng tôi sẽ sử dụng sdk aiplatform python để gọi API Nhúng cũng như để gọi điểm cuối chỉ mục Tìm kiếm vectơ.
# [START aiplatform_sdk_embedding]
!pip install google-cloud-aiplatform==1.35.0 --upgrade --quiet --user


import vertexai
vertexai.init(project=PROJECT_ID, location="us-central1")


from vertexai.language_models import TextEmbeddingModel


import sys
if "google.colab" in sys.modules:
    # Define project information
    PROJECT_ID = " "  # Your project id
    LOCATION = " "  # Your location 


    # Authenticate user to Google Cloud
    from google.colab import auth
    auth.authenticate_user()
  1. Chúng tôi sẽ sử dụng gradio để minh hoạ ứng dụng AI mà chúng tôi đang xây dựng một cách nhanh chóng và dễ dàng với giao diện người dùng. Hãy khởi động lại thời gian chạy trước khi triển khai bước này.
!pip install gradio
import gradio as gr
  1. Từ ứng dụng web khi người dùng nhập, gọi Nhúng API, chúng tôi sẽ sử dụng mô hình nhúng văn bản: textembedding-gecko@gọn

Phương thức bên dưới gọi Mô hình nhúng văn bản và trả về các mục nhúng vectơ cho văn bản mà người dùng đã nhập:

def text_embedding(content) -> list:
    """Text embedding with a Large Language Model."""
    model = TextEmbeddingModel.from_pretrained("textembedding-gecko@latest")
    embeddings = model.get_embeddings(content)
    for embedding in embeddings:
        vector = embedding.values
        #print(f"Length of Embedding Vector: {len(vector)}")
    return vector

Kiểm tra

text_embedding("red shorts for girls")

Bạn sẽ thấy kết quả tương tự như bên dưới (xin lưu ý rằng hình ảnh bị cắt theo chiều cao nên bạn không thể xem toàn bộ phản hồi vectơ):

5d8355ec04dac1f9.pngS

  1. Khai báo mã chỉ mục đã triển khai và mã điểm cuối
from google.cloud import aiplatform
DEPLOYED_INDEX_ID = "spanner_vector1_1702366982123"
#Vector Search Endpoint
index_endpoint = aiplatform.MatchingEngineIndexEndpoint('projects/273845608377/locations/us-central1/indexEndpoints/2021628049526620160')
  1. Xác định phương thức Tìm kiếm vectơ để gọi điểm cuối chỉ mục và hiển thị kết quả với 10 kết quả khớp gần nhất cho phản hồi nhúng tương ứng với văn bản nhập của người dùng.

Trong định nghĩa phương thức dưới đây cho Tìm kiếm vectơ, lưu ý rằng phương thức find_neighbors được gọi để xác định 10 vectơ gần nhất.

def vector_search(content) -> list:
  result = text_embedding(content)
  #call_vector_search_api(content)
  index_endpoint = aiplatform.MatchingEngineIndexEndpoint('projects/273845608377/locations/us-central1/indexEndpoints/2021628049526620160')
  # run query
  response = index_endpoint.find_neighbors(
      deployed_index_id = DEPLOYED_INDEX_ID,
      queries = [result],
      num_neighbors = 10
  )
  out = []
  # show the results
  for idx, neighbor in enumerate(response[0]):
      print(f"{neighbor.distance:.2f} {spanner_read_data(neighbor.id)}")
      out.append(f"{spanner_read_data(neighbor.id)}")
  return out

Bạn cũng sẽ nhận thấy lệnh gọi đến phương thức spanner_read_data. Hãy xem xét vấn đề này ở bước tiếp theo.

  1. Xác định phương thức triển khai phương thức đọc dữ liệu Spanner sẽ gọi phương thức lambda_sql để trích xuất hình ảnh tương ứng với id của các vectơ lân cận gần nhất được trả về từ bước cuối cùng.
!pip install google-cloud-spanner==3.36.0


from google.cloud import spanner


instance_id = "spanner-vertex"
database_id = "spanner-vertex-embeddings"
projectId = PROJECT_ID
client = spanner.Client()
client.project = projectId
instance = client.instance(instance_id)
database = instance.database(database_id)
def spanner_read_data(id):
    query = "SELECT uri FROM apparels where id = " + id
    outputs = []
    with database.snapshot() as snapshot:
        results = snapshot.execute_sql(query)


        for row in results:
            #print(row)
            #output = "ID: {}, CONTENT: {}, URI: {}".format(*row)
            output = "{}".format(*row)
            outputs.append(output)


    return "\n".join(outputs)

Phương thức này sẽ trả về URL của các hình ảnh tương ứng với vectơ đã chọn.

  1. Cuối cùng, hãy tập hợp các thành phần trong một giao diện người dùng và kích hoạt quy trình Tìm kiếm vectơ
from PIL import Image


def call_search(query):
  response = vector_search(query)
  return response


input_text = gr.Textbox(label="Enter your query. Examples: Girls Tops White Casual, Green t-shirt girls, jeans shorts, denim skirt etc.")
output_texts = [gr.Image(label="") for i in range(10)]
demo = gr.Interface(fn=call_search, inputs=input_text, outputs=output_texts, live=True)
resp = demo.launch(share = True)

Bạn sẽ thấy kết quả như sau:

8093b39fbab1a9cc.pngS

Hình ảnh: Đường liên kết

Xem video kết quả: tại đây.

7. Dọn dẹp

Để tránh bị tính phí vào tài khoản Google Cloud cho các tài nguyên sử dụng trong bài đăng này, hãy làm theo các bước sau:

  1. Trong bảng điều khiển Google Cloud, hãy chuyển đến trang Quản lý tài nguyên.
  2. 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á.
  3. Trong hộp thoại, nhập ID dự án, sau đó nhấp vào Tắt để xoá dự án.
  4. Nếu không muốn xoá dự án, hãy xoá phiên bản Spanner bằng cách chuyển đến phiên bản mà bạn vừa tạo cho dự án này rồi nhấp vào nút XOÁ TÌNH TRẠNG ở góc trên cùng bên phải trang tổng quan về phiên bản.
  5. Bạn cũng có thể chuyển đến chỉ mục Vector Search, huỷ triển khai điểm cuối và chỉ mục, cũng như xoá chỉ mục đó.

8. Kết luận

Xin chúc mừng! Bạn đã hoàn tất thành công việc triển khai Spanner – Vertex Vector Search bằng cách

  1. Tạo nguồn dữ liệu Spanner và các mục nhúng cho các ứng dụng có nguồn từ cơ sở dữ liệu Spanner.
  2. Tạo chỉ mục cơ sở dữ liệu Tìm kiếm vectơ.
  3. Tích hợp dữ liệu vectơ từ Spanner vào Vector Search bằng cách sử dụng công việc Dataflow và Workflow.
  4. Triển khai chỉ mục cho một điểm cuối.
  5. Cuối cùng là gọi Vector Search (Tìm kiếm vectơ) trên hoạt động đầu vào của người dùng trong quá trình triển khai Vertex AI sdk sử dụng Python.

Bạn có thể mở rộng phạm vi triển khai cho trường hợp sử dụng của riêng mình hoặc biến tấu trường hợp sử dụng hiện tại bằng các tính năng mới. Tìm hiểu thêm về khả năng học máy của Spanner tại đây.