1. Giới thiệu
Tổng quan
Vertex AI Search and Conversation (trước đây là Trình tạo ứng dụng dựa trên AI tạo sinh) cho phép nhà phát triển khai thác sức mạnh của các mô hình nền tảng, chuyên môn về tìm kiếm và công nghệ AI đàm thoại của Google để tạo các ứng dụng AI tạo sinh cấp doanh nghiệp. Lớp học lập trình này tập trung vào việc sử dụng Vertex AI Search, nơi bạn có thể xây dựng một ứng dụng tìm kiếm đạt chất lượng của Google bằng dữ liệu của riêng mình và nhúng thanh tìm kiếm trong các trang web hoặc ứng dụng của mình.
Cloud Run là một nền tảng điện toán được quản lý, cho phép bạn chạy các vùng chứa ngay trên cơ sở hạ tầng có khả năng mở rộng của Google. Bạn có thể triển khai mã được viết bằng bất kỳ ngôn ngữ lập trình nào trên Cloud Run (có thể đặt bên trong một vùng chứa) bằng cách sử dụng lựa chọn triển khai dựa trên nguồn.
Trong lớp học lập trình này, bạn sẽ tạo một dịch vụ Cloud Run bằng cách sử dụng quy trình triển khai dựa trên nguồn để truy xuất kết quả tìm kiếm cho nội dung không có cấu trúc trong các tệp PDF trong một bộ chứa Cloud Storage. Bạn có thể tìm hiểu thêm về cách nhập nội dung không có cấu trúc tại đây.
Kiến thức bạn sẽ học được
- Cách tạo ứng dụng Vertex AI Search cho dữ liệu không có cấu trúc dưới dạng tệp PDF được nhập từ một bộ chứa Cloud Storage
- Cách tạo điểm cuối HTTP bằng cách triển khai dựa trên nguồn trong Cloud Run
- Cách tạo tài khoản dịch vụ theo nguyên tắc về đặc quyền tối thiểu để dịch vụ Cloud Run sử dụng nhằm truy vấn ứng dụng Vertex AI Search
- Cách gọi dịch vụ Cloud Run để truy vấn ứng dụng Vertex AI Search
2. Thiết lập và yêu cầu
Điều kiện tiên quyết
- Bạn đã đăng nhập vào Cloud Console.
- Trước đây, bạn đã triển khai một dịch vụ Cloud Run. Ví dụ: bạn có thể làm theo hướng dẫn nhanh về cách triển khai dịch vụ web từ mã nguồn để bắt đầu.
Kích hoạt Cloud Shell
- Trong Cloud Console, hãy nhấp vào Kích hoạt Cloud Shell
.

Nếu đây là lần đầu tiên bạn khởi động Cloud Shell, bạn sẽ thấy một màn hình trung gian mô tả về Cloud Shell. Nếu bạn thấy màn hình trung gian, hãy nhấp vào Tiếp tục.

Quá trình cung cấp và kết nối với Cloud Shell chỉ mất vài giây.

Máy ảo này được trang bị tất cả các công cụ phát triển cần thiết. Nền tảng này cung cấp một thư mục chính có dung lượng 5 GB và chạy trong Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Bạn có thể thực hiện hầu hết, nếu không muốn nói là tất cả, công việc của mình trong lớp học lập trình này bằng trình duyệt.
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 mã dự án của bạn.
- Chạy lệnh sau trong Cloud Shell để xác nhận rằng bạn đã được xác thực:
gcloud auth list
Đầu ra của lệnh
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- 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
Đầu ra của lệnh
[core] project = <PROJECT_ID>
Nếu không, bạn có thể đặt nó bằng lệnh sau:
gcloud config set project <PROJECT_ID>
Đầu ra của lệnh
Updated property [core/project].
3. Bật API
Để có thể bắt đầu sử dụng Vertex AI Search, bạn cần bật một số API.
Trước tiên, lớp học lập trình này yêu cầu bạn sử dụng Vertex AI Search and Conversation, BigQuery, Cloud Storage API. Bạn có thể bật các API đó tại đây.
Thứ hai, hãy làm theo các bước sau để bật Vertex AI Search and Conversation API:
- Trong bảng điều khiển Google Cloud, hãy chuyển đến bảng điều khiển Vertex AI Search and Conversation.
- Đọc và đồng ý với Điều khoản dịch vụ, sau đó nhấp vào Tiếp tục và kích hoạt API.
4. Tạo một ứng dụng tìm kiếm cho dữ liệu không có cấu trúc từ Cloud Storage
- Trong bảng điều khiển Cloud, hãy chuyển đến trang Tìm kiếm và trò chuyện. Nhấp vào Ứng dụng mới.
- Trong ngăn Chọn loại ứng dụng, hãy chọn Tìm kiếm.
- Đảm bảo bạn đã bật Các tính năng dành cho doanh nghiệp để nhận được câu trả lời được trích nguyên văn từ tài liệu của bạn.
- Đảm bảo bạn đã bật lựa chọn Các tính năng nâng cao của LLM để nhận được thông tin tóm tắt về nội dung tìm kiếm.
- Trong trường Tên ứng dụng, hãy nhập tên cho ứng dụng của bạn. Mã ứng dụng sẽ xuất hiện bên dưới tên ứng dụng.
- Chọn toàn cầu (Global) làm vị trí cho ứng dụng của bạn, rồi nhấp vào Tiếp tục.
- Trong ngăn Data stores (Kho dữ liệu), hãy nhấp vào Create new data store (Tạo kho dữ liệu mới).
- Trong ngăn Chọn nguồn dữ liệu, hãy chọn Cloud Storage.
- Trong ngăn Import data from GCS (Nhập dữ liệu từ GCS), hãy nhớ chọn Folder (Thư mục).
- Trong trường gs://, hãy nhập giá trị sau:
cloud-samples-data/gen-app-builder/search/stanford-cs-224Bộ chứa Cloud Storage này chứa các tệp PDF trong một thư mục Cloud Storage công khai cho mục đích kiểm thử. - Chọn Tài liệu không có cấu trúc, rồi nhấp vào Tiếp tục.
- Trong ngăn Định cấu hình kho dữ liệu, hãy chọn toàn cầu (Global) làm vị trí cho kho dữ liệu của bạn.
- Nhập tên cho kho dữ liệu của bạn. Bạn sẽ sử dụng tên này sau trong lớp học lập trình này khi triển khai dịch vụ Cloud Run. Nhấp vào Tạo.
- Trong ngăn Kho dữ liệu, hãy chọn kho dữ liệu mới rồi nhấp vào Tạo.
- Trên trang Dữ liệu của kho dữ liệu, hãy nhấp vào thẻ Hoạt động để xem trạng thái nhập dữ liệu. Thông báo Đã nhập xong sẽ xuất hiện trong cột Trạng thái khi quá trình nhập hoàn tất.
- Nhấp vào thẻ Tài liệu để xem số lượng tài liệu đã nhập.
- Trong trình đơn điều hướng, hãy nhấp vào Xem trước để kiểm thử ứng dụng tìm kiếm.
- Trong thanh tìm kiếm, hãy nhập
final lab due daterồi nhấn phím Enter để xem kết quả.
5. Tạo dịch vụ Cloud Run
Trong phần này, bạn sẽ tạo một dịch vụ Cloud Run chấp nhận chuỗi truy vấn cho các cụm từ tìm kiếm. Dịch vụ này sẽ sử dụng thư viện ứng dụng Python cho Discovery Engine API. Đối với các môi trường thời gian chạy được hỗ trợ khác, bạn có thể xem danh sách tại đây.
Tạo mã nguồn cho hàm
Trước tiên, hãy tạo một thư mục rồi chuyển đến thư mục đó.
mkdir docs-search-service-python && cd $_
Sau đó, hãy tạo một tệp requirements.txt có nội dung sau:
blinker==1.6.3 cachetools==5.3.1 certifi==2023.7.22 charset-normalizer==3.3.0 click==8.1.7 Flask==3.0.0 google-api-core==2.12.0 google-auth==2.23.3 google-cloud-discoveryengine==0.11.2 googleapis-common-protos==1.61.0 grpcio==1.59.0 grpcio-status==1.59.0 idna==3.4 importlib-metadata==6.8.0 itsdangerous==2.1.2 Jinja2==3.1.2 MarkupSafe==2.1.3 numpy==1.26.1 proto-plus==1.22.3 protobuf==4.24.4 pyasn1==0.5.0 pyasn1-modules==0.3.0 requests==2.31.0 rsa==4.9 urllib3==2.0.7 Werkzeug==3.0.1 zipp==3.17.0
Tiếp theo, hãy tạo tệp nguồn main.py có nội dung sau:
from typing import List
import json
import os
from flask import Flask
from flask import request
app = Flask(__name__)
from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine
project_id = os.environ.get('PROJECT_ID')
location = "global" # Values: "global", "us", "eu"
data_store_id = os.environ.get('SEARCH_ENGINE_ID')
print(project_id)
print(data_store_id)
@app.route("/")
def search_storage():
search_query = request.args.get("searchQuery")
result = search_sample(project_id, location, data_store_id, search_query)
return result
def search_sample(
project_id: str,
location: str,
data_store_id: str,
search_query: str,
) -> str:
# For more information, refer to:
# https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
client_options = (
ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
if location != "global"
else None
)
# Create a client
client = discoveryengine.SearchServiceClient(client_options=client_options)
# The full resource name of the search engine serving config
# e.g. projects/{project_id}/locations/{location}/dataStores/{data_store_id}/servingConfigs/{serving_config_id}
serving_config = client.serving_config_path(
project=project_id,
location=location,
data_store=data_store_id,
serving_config="default_config",
)
# Optional: Configuration options for search
# Refer to the `ContentSearchSpec` reference for all supported fields:
# https://cloud.google.com/python/docs/reference/discoveryengine/latest/google.cloud.discoveryengine_v1.types.SearchRequest.ContentSearchSpec
content_search_spec = discoveryengine.SearchRequest.ContentSearchSpec(
# For information about snippets, refer to:
# https://cloud.google.com/generative-ai-app-builder/docs/snippets
snippet_spec=discoveryengine.SearchRequest.ContentSearchSpec.SnippetSpec(
return_snippet=True
),
# For information about search summaries, refer to:
# https://cloud.google.com/generative-ai-app-builder/docs/get-search-summaries
summary_spec=discoveryengine.SearchRequest.ContentSearchSpec.SummarySpec(
summary_result_count=5,
include_citations=True,
ignore_adversarial_query=True,
ignore_non_summary_seeking_query=True,
),
)
# Refer to the `SearchRequest` reference for all supported fields:
# https://cloud.google.com/python/docs/reference/discoveryengine/latest/google.cloud.discoveryengine_v1.types.SearchRequest
request = discoveryengine.SearchRequest(
serving_config=serving_config,
query=search_query,
page_size=10,
content_search_spec=content_search_spec,
query_expansion_spec=discoveryengine.SearchRequest.QueryExpansionSpec(
condition=discoveryengine.SearchRequest.QueryExpansionSpec.Condition.AUTO,
),
spell_correction_spec=discoveryengine.SearchRequest.SpellCorrectionSpec(
mode=discoveryengine.SearchRequest.SpellCorrectionSpec.Mode.AUTO
),
)
response = client.search(request)
return response.summary.summary_text
if __name__ == "__main__":
app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
Thiết lập các biến môi trường
Trong mã này, bạn sẽ tạo một số biến môi trường để cải thiện khả năng đọc của các lệnh gcloud được dùng trong lớp học lập trình này.
PROJECT_ID=$(gcloud config get-value project) SERVICE_NAME="search-storage-pdfs-python" SERVICE_REGION="us-central1" # update with your data store name SEARCH_ENGINE_ID=<your-data-store-name>
Tạo tài khoản dịch vụ
Lớp học lập trình này hướng dẫn bạn cách tạo một tài khoản dịch vụ cho dịch vụ Cloud Run để sử dụng nhằm truy cập vào Vertex AI Search API.
SERVICE_ACCOUNT="cloud-run-vertex-ai-search" SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run Vertex AI Search service account" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role='roles/discoveryengine.editor'
Triển khai dịch vụ Cloud Run
Giờ đây, bạn có thể sử dụng một quy trình triển khai dựa trên nguồn để tự động tạo vùng chứa cho dịch vụ Cloud Run.
gcloud run deploy $SERVICE_NAME \ --region=$SERVICE_REGION \ --source=. \ --service-account $SERVICE_ACCOUNT \ --update-env-vars SEARCH_ENGINE_ID=$SEARCH_ENGINE_ID,PROJECT_ID=$PROJECT_ID \ --no-allow-unauthenticated
sau đó, bạn có thể lưu URL Cloud Run dưới dạng một biến môi trường để sử dụng sau này.
ENDPOINT_URL="$(gcloud run services describe $SERVICE_NAME --region=$SERVICE_REGION --format='value(status.url)')"
6. Gọi dịch vụ Cloud Run
Giờ đây, bạn có thể gọi dịch vụ Cloud Run bằng một chuỗi truy vấn để hỏi What is the final lab due date?.
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" "$ENDPOINT_URL?searchQuery=what+is+the+final+lab+due+date"
Kết quả của bạn sẽ có dạng tương tự như kết quả mẫu bên dưới:
The final lab is due on Tuesday, March 21 at 4:30 PM [1].
7. Xin chúc mừng!
Chúc mừng bạn đã hoàn thành lớp học lập trình này!
Bạn nên xem tài liệu về Vertex AI Search và Cloud Run.
Nội dung đã đề cập
- Cách tạo ứng dụng Vertex AI Search cho dữ liệu không có cấu trúc dưới dạng tệp PDF được nhập từ một bộ chứa Cloud Storage
- Cách tạo điểm cuối HTTP bằng cách triển khai dựa trên nguồn trong Cloud Run
- Cách tạo tài khoản dịch vụ tuân theo nguyên tắc về đặc quyền tối thiểu để dịch vụ Cloud Run sử dụng nhằm truy vấn ứng dụng Vertex AI Search.
- Cách gọi dịch vụ Cloud Run để truy vấn ứng dụng Vertex AI Search
8. Dọn dẹp
Để tránh bị tính phí ngoài ý muốn (ví dụ: nếu Cloud Function này vô tình được gọi nhiều lần hơn hạn mức gọi Cloud Function hằng tháng của bạn trong cấp miễn phí), bạn có thể xoá Cloud Function hoặc xoá dự án mà bạn đã tạo ở Bước 2.
Để xoá Cloud Function, hãy chuyển đến Cloud Console của Cloud Function tại https://console.cloud.google.com/functions/ rồi xoá hàm imagen_vqa (hoặc $FUNCTION_NAME nếu bạn dùng tên khác).
Nếu chọn xoá toàn bộ dự án, bạn có thể truy cập vào https://console.cloud.google.com/cloud-resource-manager, chọn dự án bạn đã tạo ở Bước 2 rồi chọn Xoá. Nếu xoá dự án, bạn sẽ cần thay đổi dự án trong Cloud SDK. Bạn có thể xem danh sách tất cả các dự án có sẵn bằng cách chạy gcloud projects list.