Lưu trữ vào bộ nhớ đệm tiền tố là một tính năng giúp giảm thời gian suy luận bằng cách lưu trữ và sử dụng lại trạng thái LLM trung gian của quá trình xử lý một phần tiền tố lời nhắc dùng chung và định kỳ. Để bật tính năng lưu vào bộ nhớ đệm theo tiền tố, bạn chỉ cần tách tiền tố tĩnh khỏi hậu tố động trong yêu cầu API.
Tính năng lưu vào bộ nhớ đệm tiền tố hiện chỉ hỗ trợ dữ liệu đầu vào dạng văn bản, vì vậy, bạn không nên sử dụng tính năng này nếu đang cung cấp hình ảnh trong câu lệnh.
Có hai cách để triển khai tính năng lưu vào bộ nhớ đệm tiền tố: ngầm ẩn hoặc tường minh:
- Bộ nhớ đệm tiền tố ngầm là một phương pháp đơn giản, trong đó ứng dụng chỉ cần xác định một phần chung của câu lệnh.
- Tính năng lưu vào bộ nhớ đệm tiền tố rõ ràng cho phép các ứng dụng có nhiều quyền kiểm soát hơn đối với bộ nhớ đệm, bao gồm cả việc tạo, truy vấn và xoá bộ nhớ đệm.
Sử dụng tính năng lưu vào bộ nhớ đệm theo tiền tố một cách gián tiếp
Để bật tính năng lưu vào bộ nhớ đệm tiền tố, hãy thêm phần dùng chung của câu lệnh vào trường promptPrefix, như minh hoạ trong các đoạn mã sau:
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();
Trong đoạn mã trước, dynamicSuffix được truyền dưới dạng nội dung chính và promptPrefix được cung cấp riêng.
Mức tăng hiệu suất ước tính
Không có tính năng lưu tiền tố vào bộ nhớ đệm |
Với lượt truy cập bộ nhớ đệm tiền tố (Có thể xảy ra lỗi không tìm thấy trong bộ nhớ đệm tiền tố khi tiền tố được dùng lần đầu) |
|
Pixel 9 có tiền tố cố định gồm 300 mã thông báo và hậu tố động gồm 50 mã thông báo |
0,82 giây |
0,45 giây |
Pixel 9 có tiền tố cố định gồm 1.000 mã thông báo và hậu tố động gồm 100 mã thông báo |
2,11 giây |
0,5 giây |
Lưu ý về bộ nhớ
Với tính năng lưu vào bộ nhớ đệm tiền tố ngầm, các tệp bộ nhớ đệm sẽ được lưu vào bộ nhớ riêng của ứng dụng khách, điều này làm tăng mức sử dụng bộ nhớ của ứng dụng. Các tệp bộ nhớ đệm được mã hoá và siêu dữ liệu liên quan (bao gồm cả văn bản tiền tố ban đầu) sẽ được lưu trữ. Hãy lưu ý những điều sau đây về bộ nhớ:
- Số lượng bộ nhớ đệm được quản lý bằng cơ chế LRU (Ít dùng gần đây nhất). Các bộ nhớ đệm ít được dùng nhất sẽ tự động bị xoá khi vượt quá tổng số lượng bộ nhớ đệm tối đa.
- Kích thước bộ nhớ đệm của câu lệnh phụ thuộc vào độ dài của tiền tố.
Để xoá tất cả bộ nhớ đệm được tạo từ tính năng lưu vào bộ nhớ đệm theo tiền tố, hãy sử dụng phương thức
generativeMode.clearImplicitCaches().
Sử dụng tính năng quản lý bộ nhớ đệm rõ ràng
Prompt API bao gồm các phương thức quản lý bộ nhớ đệm rõ ràng để giúp nhà phát triển kiểm soát chính xác hơn cách bộ nhớ đệm được tạo, tìm kiếm, sử dụng và xoá. Các thao tác thủ công này chạy độc lập với quy trình xử lý bộ nhớ đệm tự động của hệ thống.
Ví dụ này minh hoạ cách khởi chạy tính năng quản lý bộ nhớ đệm rõ ràng và thực hiện suy luận:
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();
Ví dụ này minh hoạ cách truy vấn, truy xuất và xoá các bộ nhớ đệm được quản lý rõ ràng bằng cách sử dụng 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);