ในเวิร์กโฟลว์ AI ทั่วไป คุณอาจส่งโทเค็นอินพุตเดียวกันซ้ำๆ ไปยังโมเดล Gemini API มีกลไกการแคช 2 แบบที่แตกต่างกัน ดังนี้
- การแคชโดยนัย (เปิดใช้โดยอัตโนมัติในโมเดล Gemini 2.5 ไม่มีการรับประกันการประหยัดค่าใช้จ่าย)
- การแคชอย่างชัดเจน (เปิดใช้ได้ด้วยตนเองในโมเดลส่วนใหญ่ รับประกันการประหยัดค่าใช้จ่าย)
การแคชอย่างชัดเจนมีประโยชน์ในกรณีที่คุณต้องการรับประกันการประหยัดค่าใช้จ่าย แต่ต้องมีการทำงานของนักพัฒนาซอฟต์แวร์เพิ่มเติม
การแคชโดยนัย
ระบบจะเปิดใช้การแคชโดยนัยโดยค่าเริ่มต้นสำหรับโมเดล Gemini 2.5 ทั้งหมด เราจะส่งต่อส่วนลดค่าใช้จ่ายโดยอัตโนมัติ หากคำขอของคุณเข้าถึงแคช คุณไม่จำเป็นต้องดำเนินการใดๆ เพื่อเปิดใช้ฟีเจอร์นี้ โดยจะมีผลตั้งแต่วันที่ 8 พฤษภาคม 2025 จำนวนโทเค็นอินพุตขั้นต่ำ สำหรับการแคชบริบทแสดงอยู่ในตารางต่อไปนี้สำหรับแต่ละโมเดล
| รุ่น | ขีดจำกัดโทเค็นขั้นต่ำ |
|---|---|
| Gemini 3 Pro เวอร์ชันตัวอย่าง | 4096 |
| Gemini 2.5 Pro | 4096 |
| Gemini 2.5 Flash | 1024 |
วิธีเพิ่มโอกาสในการเข้าถึงแคชโดยนัย
- ลองวางเนื้อหาขนาดใหญ่และเนื้อหาที่ใช้กันทั่วไปไว้ที่จุดเริ่มต้นของพรอมต์
- ลองส่งคำขอที่มีคำนำหน้าที่คล้ายกันในระยะเวลาสั้นๆ
คุณดูจำนวนโทเค็นที่แคชตรงได้ในฟิลด์ 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 });
การแคชอย่างชัดเจนโดยใช้ไลบรารี OpenAI
หากใช้ไลบรารี OpenAI คุณจะเปิดใช้
การแคชที่ชัดเจนได้โดยใช้พร็อพเพอร์ตี้ cached_content ใน
extra_body
กรณีที่ควรใช้การแคชที่ชัดเจน
การแคชบริบทเหมาะอย่างยิ่งกับสถานการณ์ที่คำขอที่สั้นกว่าอ้างอิงบริบทเริ่มต้นที่สำคัญซ้ำๆ พิจารณาใช้ การแคชบริบทสำหรับกรณีการใช้งานต่อไปนี้
- แชทบอทที่มีคำสั่งของระบบที่ครอบคลุม
- การวิเคราะห์ไฟล์วิดีโอขนาดยาวซ้ำๆ
- การค้นหาที่เกิดซ้ำกับชุดเอกสารขนาดใหญ่
- การวิเคราะห์ที่เก็บโค้ดหรือการแก้ไขข้อบกพร่องบ่อยๆ
การแคชที่ชัดเจนช่วยลดค่าใช้จ่ายได้อย่างไร
การแคชบริบทเป็นฟีเจอร์แบบชำระเงินที่ออกแบบมาเพื่อลดต้นทุนในการดำเนินการโดยรวม การเรียกเก็บเงินจะอิงตามปัจจัยต่อไปนี้
- จำนวนโทเค็นแคช: จำนวนโทเค็นอินพุตที่แคชไว้ ซึ่งจะเรียกเก็บเงินใน อัตราที่ลดลงเมื่อรวมไว้ในพรอมต์ที่ตามมา
- ระยะเวลาการจัดเก็บ: ระยะเวลาที่จัดเก็บโทเค็นที่แคชไว้ (TTL) เรียกเก็บเงินตามระยะเวลา TTL ของจำนวนโทเค็นที่แคชไว้ ไม่มีขอบเขตขั้นต่ำ หรือสูงสุดสำหรับ TTL
- ปัจจัยอื่นๆ: มีการเรียกเก็บเงินอื่นๆ เช่น สำหรับโทเค็นอินพุตและเอาต์พุตที่ไม่ได้แคช
ดูรายละเอียดราคาล่าสุดได้ที่หน้าการกำหนดราคาของ Gemini API ดูวิธีนับโทเค็นได้ที่คำแนะนำเกี่ยวกับโทเค็น
ข้อควรพิจารณาเพิ่มเติม
โปรดคำนึงถึงข้อควรพิจารณาต่อไปนี้เมื่อใช้การแคชบริบท
- จำนวนโทเค็นอินพุตขั้นต่ำสำหรับการแคชบริบทคือ 1,024 สำหรับ 2.5 Flash, 4,096 สำหรับ 2.5 Pro และ 2,048 สำหรับ 3 Pro Preview สูงสุดจะเท่ากับสูงสุดสำหรับโมเดลที่ระบุ (ดูข้อมูลเพิ่มเติมเกี่ยวกับการนับโทเค็นได้ที่คำแนะนำเกี่ยวกับโทเค็น)
- โมเดลไม่ได้แยกความแตกต่างระหว่างโทเค็นที่แคชไว้กับโทเค็นอินพุตปกติ เนื้อหาที่แคชไว้จะเป็นคำนำหน้าของพรอมต์
- ไม่มีขีดจำกัดด้านอัตราหรือการใช้งานพิเศษสำหรับการแคชบริบท โดยจะใช้ขีดจำกัดด้านอัตรามาตรฐานสำหรับ
GenerateContentและขีดจำกัดโทเค็นจะรวมโทเค็นที่แคชไว้ - ระบบจะแสดงจำนวนโทเค็นที่แคชไว้ใน
usage_metadataจากการดำเนินการสร้าง รับ และแสดงรายการของบริการแคช รวมถึงในGenerateContentเมื่อใช้แคช