Lưu tiền tố vào bộ nhớ đệm 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ố câu lệnh chung và lặp lại. Để bật tính năng lưu tiền tố vào bộ nhớ đệm, 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 tiền tố vào bộ nhớ đệm 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 tiền tố vào bộ nhớ đệm: ngầm ẩn hoặc tường minh:
- Lưu tiền tố ngầm ẩn (tự động) vào bộ nhớ đệ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 tiền tố vào bộ nhớ đệm một cách rõ ràng (thủ cô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 tiền tố vào bộ nhớ đệm một cách ngầm ẩn
Để bật tính năng lưu tiền tố vào bộ nhớ đệm, hãy thêm phần được chia sẻ của câu lệnh vào trường promptPrefix, như 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 |
Có kết quả tìm kiếm trong bộ nhớ đệm tiền tố (Lỗi thiếu bộ nhớ đệm tiền tố có thể xảy ra khi tiền tố được sử dụng lần đầu tiên) |
|
Pixel 9 với câu lệnh có tiền tố cố định 300 mã thông báo và hậu tố động 50 mã thông báo |
0,82 giây |
0,45 giây |
Pixel 9 với câu lệnh có tiền tố cố định 1.000 mã thông báo và hậu tố động 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 ẩn, các tệp bộ nhớ đệm được lưu vào bộ nhớ riêng tư của ứng dụng khách, làm tăng mức sử dụng bộ nhớ của ứng dụng. Các tệp bộ nhớ đệm đã mã hoá và siêu dữ liệu liên quan, bao gồm cả văn bản tiền tố ban đầu, đều đượ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 nhất gần đây). Bộ nhớ đệm ít được sử dụng nhất sẽ tự động bị xoá khi vượt quá tổng dung lượng bộ nhớ đệm tối đa.
- Kích thước bộ nhớ đệm 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 tiền tố vào bộ nhớ đệm, 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
Quyền truy cập trực tiếp vào mô hình bao gồm các phương thức quản lý bộ nhớ đệm rõ ràng để cung cấp cho nhà phát triển quyền kiểm soát chính xác hơn đối với cách tạo, tìm kiếm, sử dụng và xoá bộ nhớ đệm. 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á bộ nhớ đệm được quản lý rõ ràng bằ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);