การแคชคำนำหน้าเป็นฟีเจอร์ที่ช่วยลดเวลาในการอนุมานด้วยการจัดเก็บและนำ สถานะ LLM ระหว่างกลางของการประมวลผลคำนำหน้าที่แชร์และเกิดซ้ำ มาใช้ซ้ำ หากต้องการเปิดใช้การแคชคำนำหน้า คุณเพียงแค่ต้องแยกคำนำหน้าแบบคงที่ออกจาก คำต่อท้ายแบบไดนามิกในคำขอ API
ปัจจุบันการแคชคำนำหน้ารองรับเฉพาะอินพุตที่เป็นข้อความเท่านั้น ดังนั้นคุณไม่ควรใช้ฟีเจอร์นี้หากระบุรูปภาพในพรอมต์
การติดตั้งใช้งานการแคชคำนำหน้ามี 2 วิธี ได้แก่ แบบไม่ระบุและแบบระบุ
- การแคชคำนำหน้าโดยนัยเป็นแนวทางที่มีน้ำหนักเบาซึ่งแอปพลิเคชันจะต้องกำหนดเฉพาะส่วนที่แชร์ของพรอมต์
- การแคชคำนำหน้าที่ชัดเจนช่วยให้แอปพลิเคชันควบคุมแคชได้มากขึ้น รวมถึงการสร้าง การค้นหา และการลบแคช
ใช้การแคชคำนำหน้าโดยนัย
หากต้องการเปิดใช้การแคชคำนำหน้า ให้เพิ่มส่วนที่แชร์ของพรอมต์ลงในช่อง
promptPrefix ดังที่แสดงในข้อมูลโค้ดต่อไปนี้
Kotlin
val promptPrefix = "Reverse the given sentence: "
val dynamicSuffix = "Hello World"
val result = generativeModel.generateContent(
generateContentRequest(TextPart(dynamicSuffix)) {
promptPrefix = PromptPrefix(promptPrefix)
}
)
Java
String promptPrefix = "Reverse the given sentence: ";
String dynamicSuffix = "Hello World";
GenerateContentResponse response = generativeModelFutures.generateContent(
new GenerateContentRequest.Builder(new TextPart(dynamicSuffix))
.setPromptPrefix(new PromptPrefix(promptPrefix))
.build())
.get();
ในข้อมูลโค้ดก่อนหน้า ระบบจะส่ง dynamicSuffix เป็นเนื้อหาหลัก และส่ง promptPrefix แยกต่างหาก
การเพิ่มประสิทธิภาพโดยประมาณ
ไม่มีการแคชคำนำหน้า |
มีแคชฮิตของคำนำหน้า (อาจเกิดการไม่พบแคชของคำนำหน้า เมื่อใช้คำนำหน้าเป็นครั้งแรก) |
|
Pixel 9 ที่มีคำนำหน้าแบบคงที่ 300 โทเค็นและคำต่อท้ายแบบไดนามิก 50 โทเค็น พรอมต์ |
0.82 วินาที |
0.45 วินาที |
Pixel 9 ที่มีคำนำหน้าที่คงที่ 1,000 โทเค็นและพรอมต์คำต่อท้ายแบบไดนามิก 100 โทเค็น |
2.11 วินาที |
0.5 วินาที |
ข้อควรพิจารณาเกี่ยวกับพื้นที่เก็บข้อมูล
การแคชคำนำหน้าที่ชัดเจนจะบันทึกไฟล์แคชไว้ในพื้นที่เก็บข้อมูลส่วนตัวของแอปพลิเคชันไคลเอ็นต์ ซึ่งจะเพิ่มการใช้พื้นที่เก็บข้อมูลของแอป ระบบจะจัดเก็บไฟล์แคชที่เข้ารหัส และข้อมูลเมตาที่เกี่ยวข้อง รวมถึงข้อความคำนำหน้าเดิม โปรดคำนึงถึงข้อควรพิจารณาเกี่ยวกับพื้นที่เก็บข้อมูลต่อไปนี้
- ระบบจะจัดการจำนวนแคชโดยใช้กลไก LRU (Least Recently Used) ระบบจะลบแคชที่ใช้ล่าสุดโดยอัตโนมัติเมื่อเกินจำนวนแคชรวมสูงสุด
- ขนาดแคชของพรอมต์จะขึ้นอยู่กับความยาวของคำนำหน้า
หากต้องการล้างแคชทั้งหมดที่สร้างขึ้นจากการแคชคำนำหน้า ให้ใช้วิธี
generativeMode.clearImplicitCaches()
ใช้การจัดการแคชอย่างชัดเจน
Prompt API มีวิธีการจัดการแคชที่ชัดเจนเพื่อให้ผู้พัฒนา ควบคุมวิธีสร้าง ค้นหา ใช้ และนำแคชออกได้อย่างแม่นยำยิ่งขึ้น การดำเนินการด้วยตนเองเหล่านี้จะทำงานแยกจากการจัดการแคชอัตโนมัติของระบบ
ตัวอย่างนี้แสดงวิธีเริ่มต้นการจัดการแคชอย่างชัดเจนและ ทำการอนุมาน
Kotlin
val cacheName = "my_cache"
val promptPrefix = "Reverse the given sentence: "
val dynamicSuffix = "Hello World"
// Create a cache
val cacheRequest = createCachedContextRequest(cacheName, PromptPrefix(promptPrefix))
val cache = generativeModel.caches.create(cacheRequest)
// Run inference with the cache
val response = generativeModel.generateContent(
generateContentRequest(TextPart(dynamicSuffix)) {
cachedContextName = cache.name
}
)
Java
String cacheName = "my_cache";
String promptPrefix = "Reverse the given sentence: ";
String dynamicSuffix = "Hello World";
// Create a cache
CachedContext cache = cachesFutures.create(
new CreateCachedContextRequest.Builder(cacheName, new PromptPrefix(promptPrefix))
.build())
.get();
// Run inference with the cache
GenerateContentResponse response = generativeModelFutures.generateContent(
new GenerateContentRequest.Builder(new TextPart(dynamicSuffix))
.setCachedContextName(cache.getName())
.build())
.get();
ตัวอย่างนี้แสดงวิธีค้นหา ดึงข้อมูล และลบแคชที่จัดการอย่างชัดเจน
โดยใช้ generativeModel.caches
Kotlin
val cacheName = "my_cache"
// Query pre-created caches
for (cache in generativeModel.caches.list()) {
// Do something with cache
}
// Get specific cache
val cache = generativeModel.caches.get(cacheName)
// Delete a pre-created cache
generativeModel.caches.delete(cacheName)
Java
String cacheName = "my_cache";
// Query pre-created caches
for (PrefixCache cache : cachesFutures.list().get()) {
// Do something with cache
}
// Get specific cache
PrefixCache cache = cachesFutures.get(cacheName).get();
// Delete a pre-created cache
cachesFutures.delete(cacheName);