Biến dữ liệu không rõ ràng thành thông tin có giá trị

1. Tổng quan

Tất cả chúng ta đều biết nỗi phiền toái của "dữ liệu tối". Đó là các tệp PDF, hình ảnh và tệp văn bản nằm trong các vùng lưu trữ trên đám mây, hoàn toàn không hiển thị cho các truy vấn SQL và trang tổng quan BI của bạn. Theo cách truyền thống, để khai thác dữ liệu này, bạn cần có các quy trình OCR phức tạp, nhập dữ liệu theo cách thủ công hoặc sử dụng các tập lệnh tuỳ chỉnh dễ bị lỗi.

Giờ thì không còn chuyện đó nữa!

Trong phòng thí nghiệm này, tôi sẽ hướng dẫn bạn cách chuyển đổi 400 tệp PDF không có cấu trúc (bao gồm văn bản, bảng và hình ảnh) thành các bảng BigQuery có cấu trúc rõ ràng, trong đó các mối quan hệ được suy luận tự động giữa các bảng. Chúng ta sẽ thực hiện việc này trong vài phút bằng cách sử dụng Danh mục kiến thức BigQuery và Dataplex.

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

Để hiểu rõ hơn, hãy xem một doanh nghiệp hư cấu: một chuỗi cửa hàng nhượng quyền Sữa chua đông lạnh đang phát triển nhanh chóng.

Giả sử bạn quản lý dữ liệu cho doanh nghiệp Froyo này. Bạn có hàng trăm công thức nấu ăn và bảng thông số kỹ thuật của nhà cung cấp, tất cả đều được lưu dưới dạng tệp PDF. Các nhà lãnh đạo doanh nghiệp muốn ra mắt một tác nhân AI để giúp người quản lý cửa hàng và khách hàng truy vấn thông tin chi tiết về sản phẩm.

Sau đây là một tình huống tồi tệ: Khách hàng hỏi: "Tôi rất quan tâm đến món sữa chua đông lạnh Midnight Swirl của bạn. Có chất gây dị ứng nào trong đó không?"

Để trả lời câu hỏi này, hệ thống của bạn thường phải:

  1. Tìm tệp PDF công thức "Midnight Swirl" (Xoáy nước nửa đêm).
  2. Đọc các thành phần (ví dụ: "Bột ca cao", "Đường sữa", "Chất nhũ hoá X").
  3. Tìm trong hàng chục tệp PDF của Nhà cung cấp để tìm bảng thông số kỹ thuật của những thành phần cụ thể đó.
  4. Kiểm tra trang tính của nhà cung cấp để tìm các chất gây dị ứng bị ẩn có liên quan đến những thành phần đó.

Việc cố gắng tạo một tác nhân AI thực hiện việc này ngay lập tức bằng cách đọc 400 tệp PDF thô trong thời gian chạy sẽ tốn nhiều thời gian, chi phí và dễ bị ảo tưởng. Thay vào đó, trước tiên, chúng ta sẽ sử dụng suy luận ngữ nghĩa để trích xuất tất cả dữ liệu này vào một cơ sở dữ liệu quan hệ, giúp tác nhân AI trong tương lai hoạt động cực nhanh và dựa hoàn toàn vào dữ liệu SQL thực tế.

Hãy bắt đầu xây dựng!

2381f1453211387d.png

Kiến thức bạn sẽ học được

  • Cách thiết lập bộ chứa Cloud Storage cho các tệp nguồn (PDF)
  • Cách thiết lập và chạy công việc Datascan và suy luận ngữ nghĩa trong Danh mục tri thức để trích xuất dữ liệu từ các tệp PDF nguồn, suy luận ngữ nghĩa về các mối kết nối và bối cảnh, đồng thời lưu trữ dữ liệu đó trong BigQuery
  • Cách sử dụng tác nhân BigQuery để trò chuyện với tập dữ liệu mới tạo

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.
  • Có kiến thức cơ bản về SQL và Java.

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

Tạo 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 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 trên một dự án hay không.
  1. 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.

Hình ảnh nút Kích hoạ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 muốn xác thực
gcloud auth login
  1. Nếu bạn chưa đặt dự án, hãy dùng lệnh sau để đặt:
export PROJECT_ID=<YOUR_PROJECT_ID>
gcloud config set project <YOUR_PROJECT_ID>
  1. Bật các API bắt buộc: Chạy lệnh này để bật tất cả các API bắt buộc:
gcloud services enable \
    dataplex.googleapis.com \
    datacatalog.googleapis.com \
    discoveryengine.googleapis.com \
    bigqueryconnection.googleapis.com \
    bigquery.googleapis.com \
    aiplatform.googleapis.com \
    cloudresourcemanager.googleapis.com \
    serviceusage.googleapis.com \
    storage.googleapis.com

Các lỗi thường gặp và cách khắc phục sự cố

Hội chứng "Dự án ma"

Bạn đã chạy gcloud config set project, nhưng thực ra bạn đang xem một dự án khác trong giao diện người dùng Console. Kiểm tra mã dự án trong trình đơn thả xuống ở trên cùng bên trái!

Rào chắn thanh toán

Bạn đã bật dự án nhưng quên tài khoản thanh toán. AlloyDB là một công cụ hiệu suất cao; công cụ này sẽ không khởi động nếu "bình xăng" (thanh toán) trống.

Độ trễ API Propagation

Bạn đã nhấp vào "Bật API", nhưng dòng lệnh vẫn hiển thị Service Not Enabled. Chờ 60 giây. Đám mây cần chút thời gian để kích hoạt các nơ-ron.

Quota Quags

Nếu đang sử dụng tài khoản dùng thử hoàn toàn mới, bạn có thể đạt đến hạn mức theo vùng cho các thực thể AlloyDB. Nếu us-central1 không thành công, hãy thử us-east1.

Nhân viên hỗ trợ dịch vụ"bị ẩn"

Đôi khi, AlloyDB Service Agent không được tự động cấp vai trò aiplatform.user. Nếu các truy vấn SQL của bạn không thể tương tác với Gemini sau này, thì đây thường là nguyên nhân.

3. Thiết lập bộ chứa Google Cloud Storage

Trong phần này, bạn sẽ tạo một cơ cấu tổ chức trong BigQuery để lưu trữ dữ liệu về công thức và nhà cung cấp Froyo, cụ thể là chi tiết sản phẩm Froyo. Thao tác này cũng thiết lập một Cloud Resource Connection (Kết nối tài nguyên trên đám mây), đóng vai trò là "cầu nối" an toàn cho phép BigQuery đọc các tệp từ các nguồn bên ngoài như Cloud Storage.

Trước khi bắt đầu:

Kho lưu trữ này chứa các công thức, tệp PDF của nhà cung cấp mà chúng ta sẽ sử dụng trong dự án này. Hãy nhớ tải các tệp này xuống. Để tải các tệp xuống, hãy làm như sau.

Trong Cloud Shell, hãy chạy lệnh sau:

git clone --depth 1 --filter=blob:none --sparse https://github.com/GoogleCloudPlatform/next-26-keynotes.git

Chuyển đến thư mục vừa tạo:

cd next-26-keynotes

Kéo thư mục data-cloud-demo

git sparse-checkout set genkey/data-cloud-demo

Sau khi hoàn tất quy trình thanh toán, hãy chuyển đến thư mục data-cloud-demo rồi giải nén các tệp ZIP để truy cập vào các thành phần của lớp học lập trình.

Tạo bộ chứa và tải tệp PDF Froyo (công thức và nhà cung cấp) lên

  1. Trong bảng điều khiển Google Cloud, hãy chuyển đến trang Bộ chứa Cloud Storage.
  2. Nhấp vào Tạo.
  3. Trên trang Tạo vùng lưu trữ, hãy nhập thông tin về vùng lưu trữ của bạn. Sau mỗi bước sau đây, hãy nhấp vào Tiếp tục để chuyển sang bước tiếp theo:
  4. Trong phần Bắt đầu, hãy nhập tên nhóm. Ví dụ: froyo_data
  5. Trong mục Chọn nơi lưu trữ dữ liệu của bạn, hãy chọn Khu vực rồi nhập khu vực của bạn. us-central1
  6. Trong phần Chọn cách kiểm soát quyền truy cập vào các đối tượng, hãy bỏ chọn hộp Thực thi biện pháp phòng tránh truy cập công khai trên bộ chứa này.
  7. Nhấp vào Tạo.
  8. Trong danh sách các nhóm, hãy nhấp vào nhóm mà bạn đã tạo.
  9. Trong thẻ Đối tượng của nhóm, hãy nhấp vào Tải lên rồi nhấp vào Tải thư mục lên.
  10. Chọn thư mục recipes mà bạn đã giải nén trong phần Trước khi bắt đầu của lớp học lập trình này.
  11. Nhấp Tải lên.
  12. Lặp lại quy trình tải lên cho thư mục suppliers.

Sau khi tải lên, cấu trúc nhóm của bạn sẽ có dạng như sau (bất kể tên nhóm là gì):

596b8acb481016b7.png

4. Thiết lập mối kết nối BigQuery

Tạo một Cloud Resource Connection. Thao tác này sẽ tạo một Tài khoản dịch vụ duy nhất đóng vai trò là "thẻ căn cước" của BigQuery để truy cập vào các tệp bên ngoài.

  • Chuyển đến trang BigQuery.
  • Trong ngăn bên trái, hãy nhấp vào Trình khám phá. Nếu bạn không thấy ngăn bên trái, hãy nhấp vào biểu tượng Mở rộng ngăn bên trái để mở ngăn này.
  • Trong ngăn Explorer (Trình khám phá), hãy mở rộng tên dự án của bạn, rồi nhấp vào Connections (Kết nối).
  • Trên trang Kết nối, hãy nhấp vào Tạo kết nối.
  • Đối với Loại kết nối, hãy chọn Mô hình từ xa Vertex AI, hàm từ xa, BigLake và Spanner (Tài nguyên trên đám mây).
  • Trong trường Mã kết nối, hãy nhập tên mã kết nối:
  • bq-connection. Hãy nhớ ghi lại mã nhận dạng này vì bạn sẽ cần đến mã này khi thiết lập quy trình quét dữ liệu sau này trong lớp học lập trình này.
  • Đặt Loại vị trí thành Vùng, rồi chọn một vùng. Ví dụ: us-central1. Mối kết nối phải nằm trong cùng khu vực với các tài nguyên khác của bạn, chẳng hạn như tập dữ liệu.
  • Nhấp vào Tạo mối kết nối.
  • Nhấp vào Chuyển đến phần kết nối.
  • Trong ngăn Thông tin kết nối, hãy sao chép mã nhận dạng tài khoản dịch vụ để sử dụng trong một bước sau. Tài khoản dịch vụ này có dạng như bqcx-**********-qn3a@gcp-sa-bigquery-condel.iam.gserviceaccount.com.

5. Thiết lập quyền

  1. Cấp các quyền cần thiết cho mối kết nối BigQuery để truy cập vào các đối tượng trong Cloud Storage và Danh mục tri thức

Chuyển đến trang IAM & Admin (Quản lý danh tính và quyền truy cập và Quản trị) rồi nhấp vào nút Grant access (Cấp quyền truy cập) trong phần View by Principals (Xem theo đối tượng chính), thêm một đối tượng chính bằng cách dán tài khoản dịch vụ mà bạn đã sao chép ở bước cuối cùng. Trong phần vai trò, hãy lần lượt thêm tên của các vai trò sau rồi lưu:

  • roles/storage.objectUser
  • roles/storage.objectViewer
  • roles/bigquery.user
  • roles/bigquery.dataEditor
  • roles/aiplatform.viewer
  • roles/agentplatform.user
  • roles/storage.admin
  • roles/dataproc.serviceAgent
  • roles/dataplex.discoveryPublishingServiceAgent
  • roles/dataplex.serviceAgent
  • roles/dataplex.securityAdmin
  1. Cấp quyền cho Tài khoản dịch vụ Dataplex để truy cập vào Bộ chứa Cloud Storage

Chuyển đến trang IAM & Admin (IAM và Quản trị) rồi nhấp vào nút Grant access (Cấp quyền truy cập) trong phần View by Principals (Xem theo người dùng) và thêm một chủ thể bằng cách nhập Dataplex vào thanh văn bản New principal (Người dùng mới). Trong danh sách tự động hoàn thành, hãy chọn đối tượng chính của Tài khoản dịch vụ Dataplex có dạng như sau:

service-*********@ gcp-sa-dataplex.iam.gserviceaccount.com

Cấp các vai trò sau đây cho Tài khoản dịch vụ này:

  • roles/storage.objectUser
  • roles/storage.objectViewer
  • roles/storage.viewer
  • roles/dataplex.discoveryBigLakePublishingServiceAgentroles/storage.objectUser
  • roles/storage.objectViewer
  • roles/storage.viewer
  • roles/dataplex.discoveryBigLakePublishingServiceAgentroles/storage.objectUser
  • roles/storage.objectViewer
  • roles/storage.viewer
  • roles/dataplex.discoveryBigLakePublishingServiceAgent

6. Thiết lập Knowledge Catalog

Xây dựng Danh mục tri thức để hợp nhất dữ liệu không có cấu trúc và tự động hoá việc khám phá các tệp không có cấu trúc (chẳng hạn như công thức nấu ăn và nhà cung cấp dưới dạng tệp PDF).

  1. Tạo DataScan thông qua curl

Bạn cũng có thể tạo công việc này từ bảng điều khiển, nhưng trong phần này, chúng ta sẽ tạo các lượt quét cho bộ chứa Cloud Storage bằng cách thêm datascan_ID và trỏ đến các tập dữ liệu BigQuery. Sau đó, Danh mục kiến thức sẽ tự động tạo các mục cho tệp PDF của bạn trong BigQuery.

Chạy bộ lệnh bên dưới từ Cloud Shell Terminal trong dự án đang hoạt động mà bạn quan tâm:

# 1. Set your variables
PROJECT_ID="<PROJECT_ID>"
REGION="<REGION>"
ENV_SUFFIX="stg1"
DATASCAN_ID="froyo-data-${ENV_SUFFIX}"
BUCKET_NAME="<BUCKET_NAME>"

# 2. Set this to the Name of the connection you created in Step 7
CONNECTION_ID="<CONNECTION_ID_NAME>"

# 3. Define the API Endpoint
DATAPLEX_API="dataplex.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}"

# 4. Create the DataScan via CURL
echo "Creating Dataplex DataScan: ${DATASCAN_ID}..."

curl -X POST "https://$DATAPLEX_API/dataScans?dataScanId=${DATASCAN_ID}" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"data": {
   "resource": "//storage.googleapis.com/projects/'"${PROJECT_ID}"'/buckets/'"${BUCKET_NAME}"'"
   },
"executionSpec": {
   "trigger": {
      "on_demand": {}
   }
},
"dataDiscoverySpec": {
   "bigqueryPublishingConfig": {
      "tableType": "BIGLAKE",
      "connection": "projects/'"${PROJECT_ID}"'/locations/'"${REGION}"'/connections/'"${CONNECTION_ID}"'"
   },
   "storageConfig": {
      "unstructuredDataOptions": {
      "entity_inference_enabled": true
      }
   }
   }
}'

Thay thế các giá trị của Biến phần giữ chỗ ở trên để lệnh chạy thành công. Hãy nhớ rằng thao tác này chỉ tạo công việc chứ không chạy công việc.

  1. Sau khoảng 1 hoặc 2 phút, trong bảng điều khiển Cloud, hãy chuyển đến trang Tuyển chọn siêu dữ liệu.
  2. Trong thẻ Khám phá Cloud Storage, hãy nhấp vào Tên của mục quét khám phá (hãy nhớ không nhấp vào đường liên kết nguồn vì đây có thể là lựa chọn hấp dẫn nhưng sẽ mở bộ nhớ).

31afb1dc3caba5f6.png

  1. Bước quan trọng:

Chỉnh sửa công việc và đảm bảo bạn đã đánh dấu vào hộp "Bật suy luận ngữ nghĩa". Nếu không, hãy đánh dấu vào ô này, nhập mã dự án và khu vực rồi nhấp vào lưu.

c021927bf80fe204.png

Sau khi hoàn tất, bạn có thể chạy lệnh sau từ Cloud Shell Terminal hoặc nhấp vào nút Chạy ngay trong trang Khám phá Cloud Storage:

gcloud dataplex datascans run $DATASCAN_ID --location=$REGION
  1. Quá trình quét sẽ mất một chút thời gian để hoàn tất. Sau khi công việc hoàn tất, hãy kiểm tra xem Tập dữ liệu đã xuất bản có xuất hiện hay không. Để kiểm tra trạng thái của công việc, bạn có thể kiểm tra trong trang Metadata curation (Tuyển chọn siêu dữ liệu). Trong thẻ Cloud Storage discovery (Khám phá Cloud Storage), hãy nhấp vào tên của các lần quét khám phá gần đây. Bạn sẽ thấy tập dữ liệu đã xuất bản như bên dưới:

d0cd6ae1edb81ce9.png

Lưu ý: Nếu bạn gặp lỗi ở bước quét, hãy đợi một lúc rồi thử lại (mất vài phút để tạo công việc và hoàn tất quá trình thực thi).

Bạn có thể xem bảng trong BigQuery bằng cách nhấp vào tập dữ liệu froyo_data rồi chuyển đến tập dữ liệu đó. Nhấp vào mã bảng trong BigQuery rồi chạy truy vấn bên dưới trong thẻ Trình chỉnh sửa truy vấn:

SELECT count(*) FROM `agent-data-cloud.froyo_data.froyo_data` LIMIT 1000;

Thao tác này sẽ cho ra kết quả là 400 (nếu không, bạn có thể quay lại và chạy lại lệnh Datascan).

7. Trích xuất dữ liệu ngữ nghĩa

Tuyệt vời!! Bây giờ, hãy trích xuất thông tin suy luận cho những đối tượng không có cấu trúc này bằng Knowledge Catalog.

Chúng ta sẽ sử dụng tính năng Thông tin chi tiết để tạo câu lệnh SQL nhằm trích xuất dữ liệu có cấu trúc từ bảng không có cấu trúc

  1. Trong bảng điều khiển Cloud, hãy chuyển đến trang Knowledge Catalog Search (Tìm kiếm danh mục kiến thức).
  2. Tìm bảng tập dữ liệu mà bạn muốn xem thông tin chi tiết. Trong thanh tìm kiếm, hãy nhập tên tập dữ liệu / bảng từ bước trước: "froyo_data" rồi nhấn Enter
  3. Trong danh sách kết quả, hãy nhấp vào mục BẢNG (không phải mục tập dữ liệu)
  4. Bạn sẽ thấy thẻ THÔNG TIN CHI TIẾT. Nhấp vào đó (nếu bạn cần bật API, hãy làm theo hướng dẫn và chỉ bật API).

Nếu đã bật API tại thời điểm này, bạn phải chạy lại quy trình quét.

  1. Trong thẻ THÔNG TIN CHI TIẾT, bạn sẽ thấy trình đơn thả xuống của nút TRÍCH XUẤT. Nhấp vào biểu tượng đó rồi chọn "Trích xuất bằng SQL".

89809b34c610569d.png

Trong hộp thoại "Trích xuất bằng SQL" bật lên, hãy đặt tập dữ liệu ĐÍCH là tập dữ liệu mà bạn thấy trong kết quả của công việc Datascan. Bắt đầu nhập tên của người đó và tên sẽ xuất hiện trong tính năng tự động hoàn thành. Nhấp vào nút "Trích xuất". Ngoài ra, bạn có thể tạo một tập dữ liệu mới tại thời điểm này và trích xuất.

Thao tác này sẽ mở Trình chỉnh sửa truy vấn BigQuery với một thẻ được điền sẵn SQL đã trích xuất từ suy luận quét dữ liệu.

8. Xác thực SQL và tạo lược đồ

Nếu cụm từ tìm kiếm được tạo có vẻ ổn và phù hợp về mặt ngữ nghĩa với dữ liệu không có cấu trúc của bạn, hãy kích hoạt cụm từ đó bằng cách nhấp vào nút Chạy trên trình chỉnh sửa cụm từ tìm kiếm. Quá trình này sẽ mất vài phút để tạo lược đồ cần thiết cho bộ nhớ có cấu trúc của nội dung nghe nhìn không có cấu trúc.

Sau khi hoàn tất, bạn có thể xác minh giản đồ bằng cách mở rộng tập dữ liệu trong ngăn trình khám phá của BigQuery Studio như minh hoạ dưới đây:

6e65906240a9a8be.png

Được rồi!!! Thật tuyệt khi chúng tôi có thể làm tất cả những việc liên quan đến cơ sở dữ liệu một cách nhanh chóng. Giờ là lúc bạn thực hiện bài kiểm tra cuối cùng!

9. Bài kiểm tra cuối cùng!!!

Giả sử tôi muốn tác nhân của mình trả lời các câu hỏi của người dùng bằng thông tin thực tế, đầy đủ và được sắp xếp hợp lý dựa trên các dữ kiện. Tôi sẽ đặt một câu hỏi mà chỉ có thể trả lời bằng cách tham khảo nhiều tệp đa phương tiện và tài liệu tham khảo trong nguồn của tôi.

Đây là câu hỏi của tôi:

I'm really interested in your Midnight Swirl froyo. Are there any allergens in it?

Giờ đây, một cụm từ tìm kiếm chung hoặc một cụm từ tìm kiếm LLM sẽ cho biết "Không có thành phần". Nhưng chúng tôi đã xây dựng một suy luận ngữ nghĩa đầy đủ để chuyển đổi tất cả nội dung nghe nhìn không có cấu trúc thành dữ liệu có cấu trúc. Sau đây là một câu lệnh SQL đơn giản sẽ tìm nạp thông tin này:

SELECT p.product_name, i.ingredient_name, a.allergen_name, category, stability
FROM froyo_data.consistsof c
INNER JOIN froyo_data.product p
  ON c.product_id = p.product_id
INNER JOIN froyo_data.ingredient i
  ON c.ingredient_id = i.ingredient_name
LEFT OUTER JOIN froyo_data.containsallergen a
  ON i.ingredient_id = a.ingredient_id
WHERE
  UPPER(p.product_name) LIKE '%MIDNIGHT%SWIRL%'
  AND allergen_name IS NOT NULL;

Thật tuyệt vời! Xem kết quả:

f582d55814a23e8.png

10. Dọn dẹp

Sau khi hoàn thành bài thực hành này, đừng quên xoá công việc quét và các bảng BigQuery mà công việc đã tạo.

Truy cập vào https://console.cloud.google.com/bigquery/governance/metadata-curation/cloud-storage-discovery. Chọn công việc bạn muốn xoá bằng cách nhấp vào dấu ba chấm dọc bên cạnh công việc đó rồi nhấp vào XOÁ.

9fcbbfa1a9ccba6d.png

Thao tác này sẽ dọn dẹp công việc.

11. Xin chúc mừng

Việc triển khai của chúng tôi đã xác định được chất gây dị ứng bị ẩn. Không còn dữ liệu tối nữa, mọi người ơi!!! Trong phần 2, chúng ta sẽ liên kết dữ liệu BigQuery này trong một hệ thống giao dịch với AlloyDB để hợp nhất các nhu cầu về dữ liệu cho ứng dụng dựa trên tác nhân của mình.