1. บทนำ
ฟังก์ชัน Generative AI ของ BigQuery ช่วยให้คุณใช้ SQL เพื่อให้เหตุผลเกี่ยวกับข้อมูลโดยใช้โมเดลภาษาขนาดใหญ่ (LLM) ได้ คุณสามารถวิเคราะห์ความรู้สึก สร้างข้อมูลสรุป และใส่คำบรรยายแทนรูปภาพในหลายล้านแถวได้โดยไม่ต้องย้ายข้อมูล
แต่จะเกิดอะไรขึ้นหากพรอมต์ของคุณต้องการบริบทจำนวนมาก (เช่น นโยบาย คู่มือ หรือวิดีโอ) เพื่อให้ได้ผลลัพธ์ที่ถูกต้องและเชื่อถือได้
การแคชบริบทของ Gemini ช่วยแก้ปัญหานี้ได้ด้วยการจัดเก็บบริบทขนาดใหญ่ดังกล่าวไว้ในแคช พรอมต์ต่อๆ ไปจะอ้างอิงแคชแทนที่จะประมวลผลเนื้อหาทั้งหมดทุกครั้ง ซึ่งจะช่วยลดเวลาในการตอบสนองและให้ส่วนลดสูงสุด 90% สำหรับโทเค็นอินพุต
ใน Codelab นี้ คุณจะได้สร้างเครื่องมือตรวจสอบนโยบายการคืนสินค้า "ตัวอักษรเล็กๆ" ซึ่งใช้การแคชบริบทที่ชัดเจนเพื่อวิเคราะห์คำขอคืนสินค้าของลูกค้ากับเอกสารนโยบายการคืนสินค้าแบบคงที่ขนาดใหญ่ใน BigQuery

สิ่งที่คุณต้องดำเนินการ
- สร้างชุดข้อมูล BigQuery และป้อนข้อมูลคำขอคืนสินค้าของลูกค้าตัวอย่าง
- สร้างแคชบริบทในแพลตฟอร์ม Agent ของ Gemini Enterprise (เดิมชื่อ Vertex AI) โดยชี้ไปยังเอกสารนโยบายคืนสินค้าที่จัดเก็บไว้ใน Cloud Storage
- เรียกใช้การค้นหาโดยใช้
AI.GENERATEที่อ้างอิงแคชเพื่อประเมินคำขอทีละแถวอย่างมีประสิทธิภาพ
สิ่งที่คุณต้องมี
- เว็บเบราว์เซอร์ เช่น Chrome
- โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงิน
- สิทธิ์เข้าถึง Google Cloud Shell
Codelab นี้มีไว้สำหรับนักพัฒนาซอฟต์แวร์ทุกระดับ รวมถึงผู้เริ่มต้น
ทรัพยากรที่สร้างใน Codelab นี้ควรมีค่าใช้จ่ายน้อยกว่า $2
ระยะเวลาโดยประมาณ: Codelab นี้จะใช้เวลาประมาณ 30 นาที
2. ก่อนเริ่มต้น
สร้างโปรเจ็กต์ Google Cloud
- ในคอนโซล Google Cloud ในหน้าตัวเลือกโปรเจ็กต์ ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud
- ตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ที่อยู่ในระบบคลาวด์แล้ว ดูวิธีตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินในโปรเจ็กต์แล้วหรือไม่
เริ่มต้น Cloud Shell
Cloud Shell คือสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานใน Google Cloud ซึ่งโหลดเครื่องมือที่จำเป็นไว้ล่วงหน้า
- คลิกเปิดใช้งาน Cloud Shell ที่ด้านบนของคอนโซล Google Cloud

- เมื่อเชื่อมต่อกับ Cloud Shell แล้ว ให้ยืนยันการตรวจสอบสิทธิ์โดยทำดังนี้
gcloud auth list - ตรวจสอบว่าได้กำหนดค่าโปรเจ็กต์แล้ว
gcloud config get project - หากไม่ได้ตั้งค่าโปรเจ็กต์ตามที่คาดไว้ ให้ตั้งค่าดังนี้
gcloud config set project <YOUR_PROJECT_ID>
ตั้งค่ารหัสโปรเจ็กต์และตำแหน่ง
เรียกใช้คำสั่งต่อไปนี้เพื่อดึงข้อมูลรหัสโปรเจ็กต์ Google Cloud ที่ใช้งานอยู่และตั้งค่าตำแหน่งเริ่มต้นเป็นตัวแปรสภาพแวดล้อมเพื่อใช้ตลอด Codelab นี้
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
export LOCATION="us-central1"
เปิดใช้ API
เรียกใช้คำสั่งนี้เพื่อเปิดใช้ API ที่จำเป็น
gcloud services enable \
bigquery.googleapis.com \
aiplatform.googleapis.com
3. เตรียมข้อมูล BigQuery
ก่อนที่จะทดสอบการแคชบริบทได้ เราต้องมีชุดข้อมูลและตารางที่ป้อนข้อมูลคำขอคืนสินค้าของลูกค้าตัวอย่างเพื่อเรียกใช้การค้นหา
1. สร้างชุดข้อมูล
เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อสร้างชุดข้อมูล BigQuery ชื่อ caching_demo
bq mk --dataset $PROJECT_ID:caching_demo
2. สร้างและป้อนข้อมูลในตาราง
เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างตารางชื่อ return_requests และแทรกคำขอคืนสินค้าของลูกค้าตัวอย่าง
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;"
คุณควรเห็นข้อความว่าดำเนินการสำเร็จแล้ว
Created your-project-id.caching_demo.return_requests
ตอนนี้เราพร้อมที่จะสร้างแคชแล้ว
4. สร้างแคชบริบท
คุณจะสร้างแคชโดยใช้การเรียก REST ไปยังปลายทางโมเดลของแพลตฟอร์ม Agent ของ Gemini Enterprise (เดิมชื่อ Vertex AI) โดยใช้ curl
เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อสร้างที่เก็บข้อมูลใหม่ ซึ่งจะใช้เพื่อจัดเก็บไฟล์ที่เราต้องการแคช
gcloud storage buckets create gs://${PROJECT_ID}-caching-demo --location=${LOCATION}
จากนั้นคัดลอกเอกสารนโยบายตัวอย่างลงในที่เก็บข้อมูลที่สร้างขึ้นใหม่
gcloud storage cp gs://sample-data-and-media/context_caching_demo/return_policy.md gs://${PROJECT_ID}-caching-demo/
ตอนนี้ให้เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างแคชที่อ้างอิงเอกสารนโยบายที่เพิ่งจัดเตรียม (อาจใช้เวลาประมาณ 1 นาที)
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"
}'
จดบันทึก name ที่แสดงใน JSON ของการตอบกลับ ซึ่งจะมีลักษณะดังนี้ projects/PROJECT_NUMBER/locations/LOCATION/cachedContents/CACHE_ID คุณจะต้องใช้CACHE_IDดังกล่าวในขั้นตอนถัดไป
{
"name": "projects/123456789012/locations/us-central1/cachedContents/123456789012345"
}
บันทึก CACHE_ID เป็นตัวแปรสภาพแวดล้อมใน Cloud Shell โดยทำดังนี้
export CACHE_ID="<YOUR_CACHE_ID>"
5. เรียกใช้ AI.GENERATE ด้วยเนื้อหาที่แคชไว้
ก่อนอื่น ให้ยืนยันว่าระบบสร้างข้อมูลตัวอย่างถูกต้องแล้ว ไปที่คอนโซล BigQuery หาชุดข้อมูล caching_demo แล้วคลิกตาราง return_requests
ในแท็บแสดงตัวอย่าง คุณควรเห็นคำขอคืนสินค้าของลูกค้าที่เราสร้างไว้ก่อนหน้านี้

เมื่อสร้างและป้อนข้อมูลแคชแล้ว คุณจะค้นหาโดยใช้ AI.GENERATE เพื่อประเมินคำขอคืนเงินได้โดยอ้างอิงรหัสแคชนั้น
หากต้องการหลีกเลี่ยงการค้นหาและแทนที่ตัวแปรด้วยตนเอง ให้เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell ซึ่งจะสร้างคําค้นหา SQL แบบไดนามิกโดยใช้ตัวแปรสภาพแวดล้อมที่มีอยู่ และพิมพ์ลงบนหน้าจอเพื่อให้คุณคัดลอกได้ง่ายๆ
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
ตอนนี้คัดลอก SQL ในเทอร์มินัล ไปที่คอนโซล BigQuery ในเบราว์เซอร์ แล้วเรียกใช้การค้นหาในแท็บตัวแก้ไขคำค้นหา

รายละเอียดอาร์กิวเมนต์หลักในการเรียกใช้ฟังก์ชันนี้มีดังนี้
prompt: มีข้อมูลเฉพาะสำหรับแถวของลูกค้าแต่ละราย ข้อความนี้จะต่อท้ายเอกสารนโยบายคืนสินค้าขนาดใหญ่ที่อยู่ในแคชอยู่แล้วoutput_schema: กำหนดโครงสร้าง JSON ที่คาดไว้ของการตอบกลับของโมเดลendpoint: ระบุปลายทางโมเดล AI ของ Agent Platform (Gemini 2.5 Flash ในกรณีของเรา) ที่ใช้สำหรับการสร้างmodel_params: พารามิเตอร์สําคัญที่ส่งรหัสแคชที่สร้างขึ้นโดยใช้ฟิลด์cachedContent
คุณควรเห็นผลลัพธ์ที่สร้างขึ้นซึ่งวิเคราะห์คำขอคืนสินค้าแต่ละรายการตามนโยบายที่จัดเก็บไว้ เลื่อนไปทางขวาเพื่อดูเมตริกโทเค็นที่แยกออกมา

รายละเอียดเมตริกโทเค็นที่คุณเห็นมีดังนี้
prompt_token_count: จำนวนโทเค็นทั้งหมดที่ประมวลผลในพรอมต์อินพุต (รวมถึงเนื้อหาที่แคชไว้)cached_content_token_count: จำนวนโทเค็นที่แสดงจากแคช (แสดงเอกสารนโยบายคืนสินค้าแบบคงที่)output_token_count: จำนวนโทเค็นที่โมเดลสร้างขึ้นในการตอบกลับtotal_token_count: ผลรวมของโทเค็นพรอมต์และเอาต์พุตbillable_prompt_text_count: จำนวนอักขระที่เรียกเก็บเงินได้ในส่วนที่ไม่ได้แคชของพรอมต์billable_cached_text_count: จำนวนอักขระที่เรียกเก็บเงินได้ในเนื้อหาที่แคชไว้
ดูคอลัมน์ billable_prompt_text_count ซึ่งแสดงอักขระเพียงไม่กี่ร้อยตัวต่อแถว ซึ่งเป็นคำขอเฉพาะของลูกค้า ซึ่งแตกต่างจากbillable_cached_text_countที่มีอักขระมากกว่า 30,000 ตัวสำหรับนโยบายคืนสินค้าฉบับเต็ม หากไม่มีการแคชบริบท คุณจะต้องจ่ายเงินเพื่อประมวลผลเอกสารนโยบายฉบับเต็มสำหรับทุกแถว การแคชจะช่วยให้คุณจ่ายเงินสำหรับเอกสารขนาดใหญ่เพียงครั้งเดียว และแถวต่อๆ ไปจะเรียกเก็บเงินเฉพาะข้อความพรอมต์ขนาดเล็กที่มีการเปลี่ยนแปลงเท่านั้น
ซึ่งช่วยให้ประหยัดค่าใช้จ่ายสำหรับงานแบบกลุ่มได้มาก
6. ล้างข้อมูล
โปรดลบทรัพยากรที่สร้างขึ้นระหว่างการทำ Codelab นี้เพื่อหลีกเลี่ยงการเรียกเก็บเงินอย่างต่อเนื่องในบัญชี Google Cloud
เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อลบชุดข้อมูล BigQuery และตารางของชุดข้อมูล
bq rm -r -f -d caching_demo
ลบที่เก็บข้อมูล Staging ที่สร้างขึ้นสำหรับเอกสารนโยบาย
gcloud storage rm --recursive gs://${PROJECT_ID}-caching-demo
สุดท้าย ให้ลบแคชบริบทเพื่อหลีกเลี่ยงการเรียกเก็บเงินค่าพื้นที่เก็บข้อมูลอย่างต่อเนื่องโดยใช้ตัวแปรที่คุณจัดเก็บไว้ก่อนหน้านี้
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. ขอแสดงความยินดี
ยินดีด้วย คุณสร้างแคชบริบทใน Agent Platform และอ้างอิงในฟังก์ชัน AI ของ BigQuery ได้สำเร็จแล้วเพื่อเร่งการวิเคราะห์พร้อมทั้งลดต้นทุนการประมวลผลโทเค็นอินพุต
สิ่งที่คุณได้เรียนรู้
- วิธีตั้งค่าตารางสภาพแวดล้อมสําหรับข้อมูลวิเคราะห์คําขอคืนสินค้า
- วิธีเรียกใช้ Agent Platform (Vertex AI) API โดยใช้
curlเพื่อสร้างแคชบริบทเอกสารแบบคงที่อย่างชัดเจน - วิธีใช้รหัสแคชที่สร้างขึ้นในการค้นหา
AI.GENERATESQL เพื่อกำจัดโทเค็นอินพุตที่ซ้ำกันในพรอมต์ที่ใช้งานอยู่