การแคชบริบท

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

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

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

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