การแคชบริบท

ในเวิร์กโฟลว์ AI ทั่วไป คุณอาจส่งโทเค็นอินพุตเดียวกันซ้ำๆ ไปยังโมเดล Gemini API มีกลไกการแคช 2 แบบ ได้แก่

  • การแคชโดยนัย (อัตโนมัติ ไม่มีการรับประกันการประหยัดค่าใช้จ่าย)
  • การแคชที่ชัดเจน (การรับประกันแบบประหยัดค่าใช้จ่ายด้วยตนเอง)

ระบบจะเปิดใช้การแคชโดยนัยในรุ่น Gemini 2.5 โดยค่าเริ่มต้น หากคำขอมีเนื้อหาที่ตรงกับแคช เราจะส่งเงินค่าบริการที่ประหยัดไปให้คุณโดยอัตโนมัติ

การแคชที่ชัดเจนมีประโยชน์ในกรณีที่คุณต้องการรับประกันการประหยัดค่าใช้จ่าย แต่นักพัฒนาซอฟต์แวร์ต้องทํางานเพิ่ม

การแคชโดยนัย

ระบบจะเปิดใช้การแคชโดยนัยโดยค่าเริ่มต้นสำหรับโมเดล Gemini 2.5 ทั้งหมด เราจะส่งต่อส่วนต่างค่าใช้จ่ายให้คุณโดยอัตโนมัติหากคำขอของคุณตรงกับแคช คุณไม่จำเป็นต้องดำเนินการใดๆ เพื่อเปิดใช้ตัวเลือกนี้ นโยบายนี้จะมีผลตั้งแต่วันที่ 8 พฤษภาคม 2025 จํานวนโทเค็นอินพุตขั้นต่ำสําหรับการแคชบริบทคือ 1,024 สำหรับ Flash 2.5 และ 2,048 สำหรับ Pro 2.5

วิธีเพิ่มโอกาสที่ระบบจะพบข้อมูลในแคชโดยนัย

  • ลองใส่เนื้อหาขนาดใหญ่และเนื้อหาที่พบบ่อยไว้ที่จุดเริ่มต้นของพรอมต์
  • พยายามส่งคำขอที่มีคำนำหน้าคล้ายกันในช่วงเวลาสั้นๆ

คุณสามารถดูจํานวนโทเค็นที่ตรงกับแคชได้ในช่อง usage_metadata ของออบเจ็กต์การตอบกลับ

การแคชที่ระบุชัด

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

เมื่อแคชชุดโทเค็น คุณจะเลือกระยะเวลาที่ต้องการให้แคชอยู่ได้ก่อนที่ระบบจะลบโทเค็นโดยอัตโนมัติ ระยะเวลาการแคชนี้เรียกว่า Time to Live (TTL) หากไม่ได้ตั้งค่า TTL ระบบจะใช้ค่าเริ่มต้น 1 ชั่วโมง ค่าใช้จ่ายในการแคชจะขึ้นอยู่กับขนาดของโทเค็นอินพุตและระยะเวลาที่คุณต้องการให้โทเค็นคงอยู่

ส่วนนี้จะถือว่าคุณได้ติดตั้ง Gemini SDK (หรือติดตั้ง curl) และกำหนดค่าคีย์ API แล้ว ตามที่แสดงในบทแนะนำ

สร้างเนื้อหาโดยใช้แคช

ตัวอย่างต่อไปนี้แสดงวิธีสร้างเนื้อหาโดยใช้คำสั่งของระบบที่แคชไว้และไฟล์ข้อความ

import {
  GoogleGenAI,
  createUserContent,
  createPartFromUri,
} from "@google/genai";

const ai = new GoogleGenAI({ apiKey: "GEMINI_API_KEY" });

async function main() {
  const doc = await ai.files.upload({
    file: "path/to/file.txt",
    config: { mimeType: "text/plain" },
  });
  console.log("Uploaded file name:", doc.name);

  const modelName = "gemini-2.0-flash-001";
  const cache = await ai.caches.create({
    model: modelName,
    config: {
      contents: createUserContent(createPartFromUri(doc.uri, doc.mimeType)),
      systemInstruction: "You are an expert analyzing transcripts.",
    },
  });
  console.log("Cache created:", cache);

  const response = await ai.models.generateContent({
    model: modelName,
    contents: "Please summarize this transcript",
    config: { cachedContent: cache.name },
  });
  console.log("Response text:", response.text);
}

await main();

แสดงรายการแคช

คุณไม่สามารถเรียกดูหรือดูเนื้อหาที่แคชไว้ได้ แต่สามารถเรียกข้อมูลเมตาที่แคชไว้ (name, model, displayName, usageMetadata, createTime, updateTime และ expireTime)

หากต้องการแสดงรายการข้อมูลเมตาของแคชที่อัปโหลดทั้งหมด ให้ใช้ GoogleGenAI.caches.list()

console.log("My caches:");
const pager = await ai.caches.list({ config: { pageSize: 10 } });
let page = pager.page;
while (true) {
  for (const c of page) {
    console.log("    ", c.name);
  }
  if (!pager.hasNextPage()) break;
  page = await pager.nextPage();
}

อัปเดตแคช

คุณสามารถตั้งค่า ttl หรือ expireTime ใหม่สำหรับแคชได้ ไม่รองรับการเปลี่ยนแปลงอื่นๆ เกี่ยวกับแคช

ตัวอย่างต่อไปนี้แสดงวิธีอัปเดต ttl ของแคชโดยใช้ GoogleGenAI.caches.update()

const ttl = `${2 * 3600}s`; // 2 hours in seconds
const updatedCache = await ai.caches.update({
  name: cache.name,
  config: { ttl },
});
console.log("After update (TTL):", updatedCache);

ลบแคช

บริการแคชมีการดำเนินการลบสําหรับนําเนื้อหาออกจากแคชด้วยตนเอง ตัวอย่างต่อไปนี้แสดงวิธีลบแคชโดยใช้ GoogleGenAI.caches.delete()

await ai.caches.delete({ name: cache.name });

กรณีที่ควรใช้การแคชที่ชัดเจน

การแคชบริบทเหมาะอย่างยิ่งสําหรับสถานการณ์ที่มีการอ้างอิงบริบทเริ่มต้นจำนวนมากซ้ำๆ โดยคําขอที่สั้นลง ลองใช้แคชตามบริบทสําหรับกรณีการใช้งาน เช่น

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

วิธีที่การแคชที่ชัดเจนช่วยลดต้นทุน

การแคชบริบทเป็นฟีเจอร์แบบชำระเงินที่ออกแบบมาเพื่อลดต้นทุนการดําเนินการโดยรวม การเรียกเก็บเงินจะอิงตามปัจจัยต่อไปนี้

  1. จํานวนโทเค็นแคช: จํานวนโทเค็นอินพุตที่แคชไว้ ซึ่งจะเรียกเก็บในราคาที่ลดลงเมื่อรวมอยู่ในพรอมต์ต่อๆ ไป
  2. ระยะเวลาการจัดเก็บ: ระยะเวลาที่จัดเก็บโทเค็นแคชไว้ (TTL) ซึ่งจะเรียกเก็บเงินตามระยะเวลา TTL ของจำนวนโทเค็นแคช TTL ไม่มีขอบเขตขั้นต่ำหรือสูงสุด
  3. ปัจจัยอื่นๆ: ระบบจะเรียกเก็บเงินอื่นๆ เช่น สำหรับโทเค็นอินพุตและโทเค็นเอาต์พุตที่ไม่ได้แคชไว้

ดูรายละเอียดราคาล่าสุดได้ที่หน้าราคาของ Gemini API ดูวิธีนับโทเค็นได้ที่คู่มือโทเค็น

ข้อควรพิจารณาเพิ่มเติม

โปรดคำนึงถึงข้อควรพิจารณาต่อไปนี้เมื่อใช้การแคชบริบท

  • จํานวนโทเค็นอินพุตขั้นต่ำสําหรับการแคชบริบทคือ 1,024 สำหรับ Flash 2.5 และ 2,048 สำหรับ Pro 2.5 ค่าสูงสุดจะเหมือนกับค่าสูงสุดของรูปแบบที่ระบุ (ดูข้อมูลเพิ่มเติมเกี่ยวกับการนับโทเค็นได้ในคู่มือโทเค็น)
  • โมเดลนี้ไม่ได้แยกความแตกต่างระหว่างโทเค็นที่แคชไว้กับโทเค็นอินพุตปกติ เนื้อหาที่แคชไว้คือคำนำหน้าของพรอมต์
  • ไม่มีการจำกัดอัตราหรือการใช้งานพิเศษในการแคชบริบท ระบบจะใช้ขีดจำกัดอัตรามาตรฐานสำหรับ GenerateContent และขีดจำกัดโทเค็นจะรวมโทเค็นที่แคชไว้
  • ระบบจะแสดงจำนวนโทเค็นที่แคชไว้ใน usage_metadata จากการดำเนินการสร้าง รับ และแสดงรายการของบริการแคช และใน GenerateContent เมื่อใช้แคช