การแคชบริบทใน BigQuery: Gen AI ที่รวดเร็ว คุ้มค่า และมีพื้นฐานสำหรับ Big Data

1. บทนำ

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

แต่จะเกิดอะไรขึ้นหากพรอมต์ของคุณต้องการบริบทจำนวนมาก (เช่น นโยบาย คู่มือ หรือวิดีโอ) เพื่อให้ได้ผลลัพธ์ที่ถูกต้องและเชื่อถือได้

การแคชบริบทของ Gemini ช่วยแก้ปัญหานี้ได้ด้วยการจัดเก็บบริบทขนาดใหญ่ดังกล่าวไว้ในแคช พรอมต์ต่อๆ ไปจะอ้างอิงแคชแทนที่จะประมวลผลเนื้อหาทั้งหมดทุกครั้ง ซึ่งจะช่วยลดเวลาในการตอบสนองและให้ส่วนลดสูงสุด 90% สำหรับโทเค็นอินพุต

ใน Codelab นี้ คุณจะได้สร้างเครื่องมือตรวจสอบนโยบายการคืนสินค้า "ตัวอักษรเล็กๆ" ซึ่งใช้การแคชบริบทที่ชัดเจนเพื่อวิเคราะห์คำขอคืนสินค้าของลูกค้ากับเอกสารนโยบายการคืนสินค้าแบบคงที่ขนาดใหญ่ใน BigQuery

เวิร์กโฟลว์แคชบริบทของ 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

  1. ในคอนโซล Google Cloud ในหน้าตัวเลือกโปรเจ็กต์ ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud
  2. ตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ที่อยู่ในระบบคลาวด์แล้ว ดูวิธีตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินในโปรเจ็กต์แล้วหรือไม่

เริ่มต้น Cloud Shell

Cloud Shell คือสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานใน Google Cloud ซึ่งโหลดเครื่องมือที่จำเป็นไว้ล่วงหน้า

  1. คลิกเปิดใช้งาน Cloud Shell ที่ด้านบนของคอนโซล Google Cloud เปิดใช้งานอิมเมจ Cloud Shell
  2. เมื่อเชื่อมต่อกับ Cloud Shell แล้ว ให้ยืนยันการตรวจสอบสิทธิ์โดยทำดังนี้
    gcloud auth list
    
  3. ตรวจสอบว่าได้กำหนดค่าโปรเจ็กต์แล้ว
    gcloud config get project
    
  4. หากไม่ได้ตั้งค่าโปรเจ็กต์ตามที่คาดไว้ ให้ตั้งค่าดังนี้
    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

ในแท็บแสดงตัวอย่าง คุณควรเห็นคำขอคืนสินค้าของลูกค้าที่เราสร้างไว้ก่อนหน้านี้

ตัวอย่างตาราง return_requests ใน BigQuery

เมื่อสร้างและป้อนข้อมูลแคชแล้ว คุณจะค้นหาโดยใช้ 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 ในเบราว์เซอร์ แล้วเรียกใช้การค้นหาในแท็บตัวแก้ไขคำค้นหา

ตัวอย่างตาราง return_requests ใน 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.GENERATE SQL เพื่อกำจัดโทเค็นอินพุตที่ซ้ำกันในพรอมต์ที่ใช้งานอยู่

เอกสารอ้างอิง