1. Giới thiệu
Các hàm AI tạo sinh của BigQuery cho phép bạn sử dụng SQL để suy luận về dữ liệu của mình bằng Mô hình ngôn ngữ lớn (LLM). Bạn có thể phân tích tình cảm, tạo bản tóm tắt và chú thích hình ảnh trên hàng triệu hàng mà không cần di chuyển dữ liệu.
Nhưng nếu câu lệnh của bạn cần rất nhiều bối cảnh (chẳng hạn như chính sách, sổ tay hoặc video) để nhận được kết quả chính xác và đáng tin cậy thì sao?
Tính năng lưu vào bộ nhớ đệm ngữ cảnh của Gemini giải quyết vấn đề này bằng cách lưu trữ ngữ cảnh lớn đó trong bộ nhớ đệm. Các câu lệnh tiếp theo sẽ tham chiếu đến bộ nhớ đệm thay vì xử lý toàn bộ nội dung mỗi lần, giúp giảm độ trễ và giảm tới 90% số lượng mã thông báo đầu vào.
Trong lớp học lập trình này, bạn sẽ xây dựng một Trình kiểm tra chính sách trả lại hàng "Chữ nhỏ" sử dụng tính năng lưu vào bộ nhớ đệm ngữ cảnh rõ ràng để phân tích các yêu cầu trả lại hàng của khách hàng dựa trên một tài liệu khổng lồ và tĩnh về chính sách trả lại hàng trong BigQuery.

Bạn sẽ thực hiện
- Tạo một tập dữ liệu BigQuery và điền thông tin vào đó bằng các yêu cầu trả lại hàng mẫu của khách hàng.
- Tạo một Bộ nhớ đệm bối cảnh trong Nền tảng tác nhân Gemini Enterprise (trước đây gọi là Vertex AI), trỏ đến một tài liệu chính sách trả lại hàng được lưu trữ trong Cloud Storage.
- Chạy một truy vấn bằng cách sử dụng
AI.GENERATEtham chiếu bộ nhớ đệm để đánh giá hiệu quả các yêu cầu theo từng hàng.
Bạn cần có
- Một trình duyệt web như Chrome
- Một dự án trên Google Cloud đã bật tính năng thanh toán
- Quyền truy cập vào Google Cloud Shell
Lớp học lập trình này dành cho nhà phát triển ở mọi cấp độ, kể cả người mới bắt đầu.
Các tài nguyên được tạo trong lớp học lập trình này sẽ có chi phí dưới 2 USD.
Thời lượng ước tính: Bạn sẽ mất khoảng 30 phút để hoàn thành lớp học lập trình này.
2. Trước khi bắt đầu
Tạo một dự án trên Google Cloud
- 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 trên một dự án hay không.
Khởi động Cloud Shell
Cloud Shell là một môi trường dòng lệnh chạy trong Google Cloud và được tải sẵn các công cụ cần thiết.
- Nhấp vào Kích hoạt Cloud Shell ở đầu bảng điều khiển Google Cloud.

- Sau khi kết nối với Cloud Shell, hãy xác minh thông tin xác thực của bạn:
gcloud auth list - Xác nhận rằng dự án của bạn đã được định cấu hình:
gcloud config get project - Nếu dự án của bạn không được thiết lập như mong đợi, hãy thiết lập dự án:
gcloud config set project <YOUR_PROJECT_ID>
Đặt mã dự án và vị trí
Chạy lệnh sau để truy xuất mã dự án Google Cloud đang hoạt động và đặt vị trí mặc định làm biến môi trường để sử dụng trong suốt lớp học lập trình này:
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
export LOCATION="us-central1"
Bật API
Chạy lệnh này để bật các API bắt buộc:
gcloud services enable \
bigquery.googleapis.com \
aiplatform.googleapis.com
3. Chuẩn bị dữ liệu BigQuery
Trước khi kiểm thử tính năng lưu vào bộ nhớ đệm theo bối cảnh, chúng ta cần một tập dữ liệu và một bảng chứa các yêu cầu trả lại hàng mẫu của khách hàng để chạy các truy vấn.
1. Tạo tập dữ liệu
Chạy lệnh sau trong Cloud Shell để tạo một tập dữ liệu BigQuery có tên là caching_demo:
bq mk --dataset $PROJECT_ID:caching_demo
2. Tạo và điền dữ liệu vào bảng
Chạy lệnh sau để tạo một bảng có tên là return_requests và chèn các yêu cầu trả lại hàng mẫu của khách hàng:
bq query \
--use_legacy_sql=false \
"CREATE OR REPLACE TABLE \`caching_demo.return_requests\` AS
SELECT
10001 AS return_id,
'P-1001' AS purchase_id,
'I bought this jacket on Black Friday but it was too small.' AS return_comment,
DATE('2025-11-28') AS purchase_date,
DATE('2025-12-05') AS return_date,
'ApexWear' AS product_brand,
'Gold' AS customer_tier
UNION ALL
SELECT
10002 AS return_id,
'P-1002' AS purchase_id,
'The item arrived broken, I want a refund. I don\'t have photos because I threw it away.' AS return_comment,
DATE('2026-04-01') AS purchase_date,
DATE('2026-04-02') AS return_date,
'GenericBrand' AS product_brand,
'Standard' AS customer_tier
UNION ALL
SELECT
10003 AS return_id,
'P-1003' AS purchase_id,
'I bought this ApexWear jacket, took the tags off to wear it once, but it doesn\'t fit well.' AS return_comment,
DATE('2026-02-15') AS purchase_date,
DATE('2026-02-20') AS return_date,
'ApexWear' AS product_brand,
'Standard' AS customer_tier
UNION ALL
SELECT
10004 AS return_id,
'P-1004' AS purchase_id,
'This was a holiday gift but doesn\'t fit.' AS return_comment,
DATE('2025-12-20') AS purchase_date,
DATE('2026-01-28') AS return_date,
'StyleCorp' AS product_brand,
'Standard' AS customer_tier
UNION ALL
SELECT
10005 AS return_id,
'P-1005' AS purchase_id,
'I realized this doesn\'t fit' AS return_comment,
DATE('2026-02-01') AS purchase_date,
DATE('2026-03-15') AS return_date,
'ApexWear' AS product_brand,
'Gold' AS customer_tier;"
Bạn sẽ thấy thông báo thành công:
Created your-project-id.caching_demo.return_requests
Giờ đây, chúng ta đã sẵn sàng tạo bộ nhớ đệm!
4. Tạo bộ nhớ đệm theo bối cảnh
Bạn sẽ tạo bộ nhớ đệm bằng cách sử dụng lệnh gọi REST đến điểm cuối mô hình Nền tảng tác nhân Gemini Enterprise (trước đây gọi là Vertex AI) bằng curl.
Chạy lệnh sau trong Cloud Shell để tạo một vùng lưu trữ mới. Thư mục này sẽ được dùng để lưu trữ các tệp mà chúng ta muốn lưu vào bộ nhớ đệm:
gcloud storage buckets create gs://${PROJECT_ID}-caching-demo --location=${LOCATION}
Tiếp theo, hãy sao chép tài liệu chính sách mẫu vào bộ chứa bạn vừa tạo:
gcloud storage cp gs://sample-data-and-media/context_caching_demo/return_policy.md gs://${PROJECT_ID}-caching-demo/
Bây giờ, hãy chạy lệnh sau để tạo bộ nhớ đệm tham chiếu đến tài liệu chính sách vừa được dàn dựng (quá trình này có thể mất khoảng một phút):
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/cachedContents" \
-d '{
"model": "projects/'"${PROJECT_ID}"'/locations/'"${LOCATION}"'/publishers/google/models/gemini-2.5-flash",
"contents": [
{
"role": "user",
"parts": [
{
"fileData": {
"mimeType": "text/markdown",
"fileUri": "gs://'"${PROJECT_ID}"'-caching-demo/return_policy.md"
}
}
]
}
],
"ttl": "3600s"
}'
Ghi lại name được trả về trong JSON phản hồi, sẽ có dạng như sau: projects/PROJECT_NUMBER/locations/LOCATION/cachedContents/CACHE_ID. Bạn sẽ cần CACHE_ID đó cho bước tiếp theo.
{
"name": "projects/123456789012/locations/us-central1/cachedContents/123456789012345"
}
Lưu CACHE_ID dưới dạng một biến môi trường trong Cloud Shell:
export CACHE_ID="<YOUR_CACHE_ID>"
5. Chạy AI.GENERATE với Nội dung được lưu vào bộ nhớ đệm
Trước tiên, hãy xác minh rằng dữ liệu mẫu của chúng ta đã được tạo chính xác. Chuyển đến bảng điều khiển BigQuery, tìm tập dữ liệu caching_demo rồi nhấp vào bảng return_requests.
Trong thẻ Xem trước, bạn sẽ thấy các yêu cầu trả lại hàng của khách hàng mà chúng ta đã tạo trước đó:

Giờ đây, sau khi tạo và điền dữ liệu vào bộ nhớ đệm, bạn có thể truy vấn bằng AI.GENERATE để đánh giá yêu cầu hoàn tiền bằng cách chỉ cần tham chiếu đến Mã nhận dạng bộ nhớ đệm đó.
Để tránh tìm và thay thế các biến theo cách thủ công, hãy chạy lệnh sau trong Cloud Shell. Thao tác này sẽ tạo truy vấn SQL một cách linh hoạt bằng các biến môi trường hiện có và in truy vấn đó ra màn hình để bạn có thể dễ dàng sao chép.
cat << EOF > query.sql
WITH generated_returns AS (
SELECT
*,
-- Call AI.GENERATE with the prompt, schema, and cache ID
AI.GENERATE(
-- Construct the prompt referencing the cached policy
prompt => CONCAT(
'Analyze this return request using the cached Return Policy. ',
'Return Comment: "', return_comment, '". ',
'Purchase Date: ', purchase_date, '. ',
'Brand: ', product_brand, '. ',
'Customer Tier: ', customer_tier, '. '
),
-- Define the structured output schema
output_schema => """
eligible_for_refund STRING OPTIONS(description = 'True/False whether the request is eligible for a refund based on the policy'),
refund_type STRING OPTIONS(description = 'Classify as Full, Store Credit, or None'),
reason_citation STRING OPTIONS(description = 'Quote the specific rule from the policy applied to this decision')
""",
-- Construct the endpoint string dynamically using variables
endpoint => 'gemini-2.5-flash',
-- Pass the cached content ID using bash interpolation for the literal
model_params => JSON '{"cachedContent": "projects/$PROJECT_NUMBER/locations/$LOCATION/cachedContents/$CACHE_ID"}'
) AS results
FROM \`caching_demo.return_requests\`
)
SELECT
*,
-- Extract token usage metrics from the raw JSON response
CAST(JSON_EXTRACT_SCALAR(results.full_response, '$.usage_metadata.prompt_token_count') AS INT64) AS prompt_token_count,
CAST(JSON_EXTRACT_SCALAR(results.full_response, '$.usage_metadata.cached_content_token_count') AS INT64) AS cached_content_token_count,
CAST(JSON_EXTRACT_SCALAR(results.full_response, '$.usage_metadata.candidates_token_count') AS INT64) AS output_token_count,
CAST(JSON_EXTRACT_SCALAR(results.full_response, '$.usage_metadata.total_token_count') AS INT64) AS total_token_count,
CAST(JSON_EXTRACT_SCALAR(results.full_response, '$.usage_metadata.thoughts_token_count') AS INT64) AS thoughts_token_count,
CAST(JSON_EXTRACT_SCALAR(results.full_response, '$.usage_metadata.billable_prompt_usage.text_count') AS INT64) AS billable_prompt_text_count,
CAST(JSON_EXTRACT_SCALAR(results.full_response, '$.usage_metadata.billable_cached_content_usage.text_count') AS INT64) AS billable_cached_text_count
FROM generated_returns;
EOF
cat query.sql
Bây giờ, hãy sao chép sql trong thiết bị đầu cuối, chuyển đến bảng điều khiển BigQuery trong trình duyệt rồi thực thi truy vấn trong thẻ trình chỉnh sửa truy vấn.

Sau đây là thông tin chi tiết về các đối số chính trong lệnh gọi hàm này:
prompt: Chứa thông tin cụ thể cho từng hàng khách hàng. Văn bản này sẽ được thêm vào tài liệu Chính sách trả lại hàng lớn đã có trong bộ nhớ đệm.output_schema: Xác định cấu trúc JSON dự kiến của phản hồi của mô hình.endpoint: Chỉ định điểm cuối của mô hình AI Nền tảng tác nhân (trong trường hợp này là Gemini 2.5 Flash) được dùng để tạo.model_params: Tham số quan trọng truyền Mã nhận dạng bộ nhớ đệm đã tạo bằng trườngcachedContent.
Bạn sẽ thấy kết quả được tạo để phân tích từng yêu cầu trả lại hàng theo chính sách đã lưu trữ. Di chuyển sang phải để xem các chỉ số về mã thông báo được trích xuất.

Sau đây là thông tin chi tiết về các chỉ số mã thông báo mà bạn thấy:
prompt_token_count: Tổng số mã thông báo được xử lý trong câu lệnh đầu vào (bao gồm cả nội dung được lưu vào bộ nhớ đệm).cached_content_token_count: Số lượng mã thông báo được phân phát từ bộ nhớ đệm (đại diện cho tài liệu tĩnh về Chính sách trả lại hàng).output_token_count: Số lượng mã thông báo do mô hình tạo trong phản hồi.total_token_count: Tổng số mã thông báo của câu lệnh và đầu ra.billable_prompt_text_count: Số lượng ký tự có tính phí trong phần không được lưu vào bộ nhớ đệm của câu lệnh.billable_cached_text_count: Số lượng ký tự có tính phí trong nội dung được lưu vào bộ nhớ đệm.
Hãy xem cột billable_prompt_text_count. Cột này chỉ hiển thị vài trăm ký tự cho mỗi hàng, đây chỉ là yêu cầu cụ thể của khách hàng. Hãy so sánh điều đó với billable_cached_text_count có hơn 30.000 ký tự cho toàn bộ Chính sách trả lại hàng. Nếu không có tính năng lưu vào bộ nhớ đệm theo bối cảnh, bạn sẽ phải trả phí để xử lý toàn bộ tài liệu chính sách đó cho mọi hàng. Bằng cách lưu trữ vào bộ nhớ đệm, bạn chỉ cần trả phí cho tài liệu lớn một lần và các hàng tiếp theo chỉ tính phí cho bạn đối với văn bản lời nhắc nhỏ và có thay đổi.
Điều này giúp tiết kiệm đáng kể cho các công việc hàng loạt!
6. Dọn dẹp
Để tránh các khoản phí phát sinh cho tài khoản Google Cloud của bạn, hãy xoá các tài nguyên đã tạo trong lớp học lập trình này.
Chạy lệnh sau trong Cloud Shell để xoá tập dữ liệu BigQuery và các bảng của tập dữ liệu đó:
bq rm -r -f -d caching_demo
Xoá bộ chứa dàn dựng được tạo cho tài liệu chính sách:
gcloud storage rm --recursive gs://${PROJECT_ID}-caching-demo
Cuối cùng, hãy xoá bộ nhớ đệm theo bối cảnh để tránh bị tính phí lưu trữ liên tục bằng cách sử dụng các biến mà bạn đã lưu trước đó:
curl -X DELETE \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/cachedContents/${CACHE_ID}"
7. Xin chúc mừng
Xin chúc mừng! Bạn đã tạo thành công một bộ nhớ đệm ngữ cảnh trong Nền tảng tác nhân và tham chiếu bộ nhớ đệm đó trong một chức năng AI BigQuery để tăng tốc độ phân tích trong khi giảm chi phí xử lý mã thông báo đầu vào.
Kiến thức bạn học được
- Cách thiết lập bảng môi trường cho số liệu phân tích yêu cầu trả lại hàng.
- Cách gọi Agent Platform (Vertex AI) API bằng
curlđể tạo rõ ràng bộ nhớ đệm ngữ cảnh tài liệu tĩnh. - Cách sử dụng Cache ID (Mã nhận dạng bộ nhớ đệm) đã tạo trong truy vấn SQL
AI.GENERATEđể loại bỏ các mã thông báo đầu vào dư thừa trên các câu lệnh đang hoạt động.