เพิ่มประสิทธิภาพความเร็วในการอนุมานด้วยการแคชคำนำหน้า

การแคชคำนำหน้าเป็นฟีเจอร์ที่ช่วยลดเวลาในการอนุมานด้วยการจัดเก็บและนำ สถานะ 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);