در یک گردش کاری معمولی هوش مصنوعی، ممکن است همان توکن های ورودی را بارها و بارها به یک مدل ارسال کنید. با استفاده از ویژگی ذخیرهسازی متنی Gemini API، میتوانید یک بار مقداری از محتوا را به مدل ارسال کنید، نشانههای ورودی را در حافظه پنهان نگه دارید و سپس برای درخواستهای بعدی به نشانههای کششده مراجعه کنید. در حجمهای معین، استفاده از توکنهای ذخیرهسازی شده هزینه کمتری نسبت به ارسال مکرر در یک مجموعه توکنها دارد.
هنگامی که مجموعه ای از نشانه ها را در حافظه پنهان ذخیره می کنید، می توانید انتخاب کنید که چه مدت می خواهید کش وجود داشته باشد قبل از اینکه نشانه ها به طور خودکار حذف شوند. این مدت زمان ذخیره سازی، زمان زندگی (TTL) نامیده می شود. اگر تنظیم نشود، TTL به طور پیش فرض روی 1 ساعت است. هزینه ذخیره سازی به اندازه توکن ورودی و مدت زمانی که می خواهید توکن ها باقی بمانند بستگی دارد.
حافظه پنهان متنی از فلش Gemini 1.5 Pro و Gemini 1.5 پشتیبانی می کند.
زمان استفاده از کش زمینه
ذخیره سازی متن به ویژه برای سناریوهایی که در آن یک زمینه اولیه قابل توجه به طور مکرر توسط درخواست های کوتاهتر ارجاع داده می شود، مناسب است. استفاده از کش زمینه برای موارد استفاده مانند:
- چت بات ها با دستورالعمل های سیستمی گسترده
- تجزیه و تحلیل مکرر فایل های ویدئویی طولانی
- پرس و جوهای تکراری در برابر مجموعه اسناد بزرگ
- تجزیه و تحلیل مکرر مخزن کد یا رفع اشکال
چگونه کش هزینه ها را کاهش می دهد
ذخیره سازی متن یک ویژگی پولی است که برای کاهش هزینه های عملیاتی کلی طراحی شده است. صورتحساب بر اساس عوامل زیر است:
- تعداد نشانههای حافظه پنهان: تعداد نشانههای ورودی ذخیرهشده در حافظه پنهان که در صورت درج در درخواستهای بعدی با نرخ کاهشیافته صورتحساب میشوند.
- مدت زمان ذخیره سازی: مقدار زمانی که توکن های ذخیره شده در حافظه پنهان ذخیره می شوند (TTL) که بر اساس مدت زمان TTL تعداد توکن های ذخیره شده صورتحساب می شود. هیچ محدودیتی برای حداقل یا حداکثر در TTL وجود ندارد.
- عوامل دیگر: هزینههای دیگری اعمال میشود، مانند نشانههای ورودی و نشانههای خروجی غیر ذخیرهسازی شده در حافظه پنهان.
برای جزئیات قیمت به روز، به صفحه قیمت گذاری Gemini API مراجعه کنید. برای یادگیری نحوه شمارش نشانهها، راهنمای توکن را ببینید.
نحوه استفاده از کش زمینه
این بخش فرض میکند که Gemini SDK را نصب کردهاید (یا curl را نصب کردهاید) و یک کلید API را پیکربندی کردهاید، همانطور که در شروع سریع نشان داده شده است.
با استفاده از حافظه پنهان محتوا تولید کنید
مثال زیر نحوه تولید محتوا با استفاده از یک دستورالعمل سیستم و فایل ویدئویی ذخیره شده را نشان می دهد.
import { GoogleGenerativeAI } from '@google/generative-ai';
import {
FileState,
GoogleAICacheManager,
GoogleAIFileManager,
} from '@google/generative-ai/server';
// A helper function that uploads the video to be cached.
async function uploadMp4Video(filePath, displayName) {
const fileManager = new GoogleAIFileManager(process.env.API_KEY);
const fileResult = await fileManager.uploadFile(filePath, {
displayName,
mimeType: 'video/mp4',
});
const { name, uri } = fileResult.file;
// Poll getFile() on a set interval (2 seconds here) to check file state.
let file = await fileManager.getFile(name);
while (file.state === FileState.PROCESSING) {
console.log('Waiting for video to be processed.');
// Sleep for 2 seconds
await new Promise((resolve) => setTimeout(resolve, 2_000));
file = await fileManager.getFile(name);
}
console.log(`Video processing complete: ${uri}`);
return fileResult;
}
// Download video file
// curl -O https://storage.googleapis.com/generativeai-downloads/data/Sherlock_Jr_FullMovie.mp4
const pathToVideoFile = 'Sherlock_Jr_FullMovie.mp4';
// Upload the video.
const fileResult = await uploadMp4Video(pathToVideoFile, 'Sherlock Jr. video');
// Construct a GoogleAICacheManager using your API key.
const cacheManager = new GoogleAICacheManager(process.env.API_KEY);
// Create a cache with a 5 minute TTL.
const displayName = 'sherlock jr movie';
const model = 'models/gemini-1.5-flash-001';
const systemInstruction =
'You are an expert video analyzer, and your job is to answer ' +
"the user's query based on the video file you have access to.";
let ttlSeconds = 300;
const cache = await cacheManager.create({
model,
displayName,
systemInstruction,
contents: [
{
role: 'user',
parts: [
{
fileData: {
mimeType: fileResult.file.mimeType,
fileUri: fileResult.file.uri,
},
},
],
},
],
ttlSeconds,
});
// Get your API key from https://aistudio.google.com/app/apikey
// Access your API key as an environment variable.
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
// Construct a `GenerativeModel` which uses the cache object.
const genModel = genAI.getGenerativeModelFromCachedContent(cache);
// Query the model.
const result = await genModel.generateContent({
contents: [
{
role: 'user',
parts: [
{
text:
'Introduce different characters in the movie by describing ' +
'their personality, looks, and names. Also list the ' +
'timestamps they were introduced for the first time.',
},
],
},
],
});
console.log(result.response.usageMetadata);
// The output should look something like this:
//
// {
// promptTokenCount: 696220,
// candidatesTokenCount: 270,
// totalTokenCount: 696490,
// cachedContentTokenCount: 696191
// }
console.log(result.response.text());
فهرست کش ها
امکان بازیابی یا مشاهده محتوای ذخیره شده در حافظه پنهان وجود ندارد، اما می توانید ابرداده های حافظه پنهان ( name
، model
، displayName
، usageMetadata
، createTime
، updateTime
، و expireTime
) را بازیابی کنید.
برای فهرست کردن متادیتا برای همه کش های آپلود شده، از GoogleAICacheManager.list()
استفاده کنید:
const listResult = await cacheManager.list();
listResult.cachedContents.forEach((cache) => {
console.log(cache);
});
یک کش را به روز کنید
می توانید یک ttl
یا expireTime
جدید برای کش تنظیم کنید. تغییر هر چیز دیگری در مورد حافظه پنهان پشتیبانی نمی شود.
مثال زیر نحوه به روز رسانی ttl
یک کش را با استفاده از GoogleAICacheManager.update()
نشان می دهد.
const ttlSeconds = 2 * 60 * 60;
const updateParams = { cachedContent: { ttlSeconds } };
const updatedCache = await cacheManager.update(cacheName, updateParams);
یک کش را حذف کنید
سرویس کش عملیات حذف را برای حذف دستی محتوا از کش ارائه می دهد. مثال زیر نحوه حذف کش با استفاده از GoogleAICacheManager.delete()
را نشان می دهد.
await cacheManager.delete(cacheName);
ملاحظات اضافی
هنگام استفاده از کش زمینه، ملاحظات زیر را در نظر داشته باشید:
- حداقل تعداد توکن ورودی برای ذخیره سازی متن 32768 است و حداکثر همان حداکثر برای مدل داده شده است. (برای اطلاعات بیشتر در مورد شمارش نشانه ها، به راهنمای توکن مراجعه کنید).
- این مدل هیچ تمایزی بین نشانههای حافظه پنهان و نشانههای ورودی معمولی قائل نمیشود. محتوای ذخیره شده در حافظه پنهان به سادگی یک پیشوند برای درخواست است.
- هیچ محدودیت یا نرخ خاصی برای ذخیره سازی متن وجود ندارد. محدودیتهای نرخ استاندارد برای
GenerateContent
اعمال میشود و محدودیتهای رمز شامل توکنهای ذخیرهشده نیز میشود. - تعداد توکنهای ذخیرهشده در
usage_metadata
از عملیات ایجاد، دریافت و فهرست سرویس کش و همچنین درGenerateContent
هنگام استفاده از کش برگردانده میشود.
در یک گردش کاری معمولی هوش مصنوعی، ممکن است همان توکن های ورودی را بارها و بارها به یک مدل ارسال کنید. با استفاده از ویژگی ذخیرهسازی متنی Gemini API، میتوانید یک بار مقداری از محتوا را به مدل ارسال کنید، نشانههای ورودی را در حافظه پنهان نگه دارید و سپس برای درخواستهای بعدی به نشانههای کششده مراجعه کنید. در حجمهای معین، استفاده از توکنهای ذخیرهسازی شده هزینه کمتری نسبت به ارسال مکرر در یک مجموعه توکنها دارد.
هنگامی که مجموعه ای از نشانه ها را در حافظه پنهان ذخیره می کنید، می توانید انتخاب کنید که چه مدت می خواهید کش وجود داشته باشد قبل از اینکه نشانه ها به طور خودکار حذف شوند. این مدت زمان ذخیره سازی، زمان زندگی (TTL) نامیده می شود. اگر تنظیم نشود، TTL به طور پیش فرض روی 1 ساعت است. هزینه ذخیره سازی به اندازه توکن ورودی و مدت زمانی که می خواهید توکن ها باقی بمانند بستگی دارد.
حافظه پنهان متنی از فلش Gemini 1.5 Pro و Gemini 1.5 پشتیبانی می کند.
زمان استفاده از کش زمینه
ذخیره سازی متن به ویژه برای سناریوهایی که در آن یک زمینه اولیه قابل توجه به طور مکرر توسط درخواست های کوتاهتر ارجاع داده می شود، مناسب است. استفاده از کش زمینه برای موارد استفاده مانند:
- چت بات ها با دستورالعمل های سیستمی گسترده
- تجزیه و تحلیل مکرر فایل های ویدئویی طولانی
- پرس و جوهای تکراری در برابر مجموعه اسناد بزرگ
- تجزیه و تحلیل مکرر مخزن کد یا رفع اشکال
چگونه کش هزینه ها را کاهش می دهد
ذخیره سازی متن یک ویژگی پولی است که برای کاهش هزینه های عملیاتی کلی طراحی شده است. صورتحساب بر اساس عوامل زیر است:
- تعداد نشانههای حافظه پنهان: تعداد نشانههای ورودی ذخیرهشده در حافظه پنهان که در صورت درج در درخواستهای بعدی با نرخ کاهشیافته صورتحساب میشوند.
- مدت زمان ذخیره سازی: مقدار زمانی که توکن های ذخیره شده در حافظه پنهان ذخیره می شوند (TTL) که بر اساس مدت زمان TTL تعداد توکن های ذخیره شده صورتحساب می شود. هیچ محدودیتی برای حداقل یا حداکثر در TTL وجود ندارد.
- عوامل دیگر: هزینههای دیگری اعمال میشود، مانند نشانههای ورودی و نشانههای خروجی غیر ذخیرهسازی شده در حافظه پنهان.
برای جزئیات قیمت به روز، به صفحه قیمت گذاری Gemini API مراجعه کنید. برای یادگیری نحوه شمارش نشانهها، راهنمای توکن را ببینید.
نحوه استفاده از کش زمینه
این بخش فرض میکند که Gemini SDK را نصب کردهاید (یا curl را نصب کردهاید) و یک کلید API را پیکربندی کردهاید، همانطور که در شروع سریع نشان داده شده است.
با استفاده از حافظه پنهان محتوا تولید کنید
مثال زیر نحوه تولید محتوا با استفاده از یک دستورالعمل سیستم و فایل ویدئویی ذخیره شده را نشان می دهد.
import { GoogleGenerativeAI } from '@google/generative-ai';
import {
FileState,
GoogleAICacheManager,
GoogleAIFileManager,
} from '@google/generative-ai/server';
// A helper function that uploads the video to be cached.
async function uploadMp4Video(filePath, displayName) {
const fileManager = new GoogleAIFileManager(process.env.API_KEY);
const fileResult = await fileManager.uploadFile(filePath, {
displayName,
mimeType: 'video/mp4',
});
const { name, uri } = fileResult.file;
// Poll getFile() on a set interval (2 seconds here) to check file state.
let file = await fileManager.getFile(name);
while (file.state === FileState.PROCESSING) {
console.log('Waiting for video to be processed.');
// Sleep for 2 seconds
await new Promise((resolve) => setTimeout(resolve, 2_000));
file = await fileManager.getFile(name);
}
console.log(`Video processing complete: ${uri}`);
return fileResult;
}
// Download video file
// curl -O https://storage.googleapis.com/generativeai-downloads/data/Sherlock_Jr_FullMovie.mp4
const pathToVideoFile = 'Sherlock_Jr_FullMovie.mp4';
// Upload the video.
const fileResult = await uploadMp4Video(pathToVideoFile, 'Sherlock Jr. video');
// Construct a GoogleAICacheManager using your API key.
const cacheManager = new GoogleAICacheManager(process.env.API_KEY);
// Create a cache with a 5 minute TTL.
const displayName = 'sherlock jr movie';
const model = 'models/gemini-1.5-flash-001';
const systemInstruction =
'You are an expert video analyzer, and your job is to answer ' +
"the user's query based on the video file you have access to.";
let ttlSeconds = 300;
const cache = await cacheManager.create({
model,
displayName,
systemInstruction,
contents: [
{
role: 'user',
parts: [
{
fileData: {
mimeType: fileResult.file.mimeType,
fileUri: fileResult.file.uri,
},
},
],
},
],
ttlSeconds,
});
// Get your API key from https://aistudio.google.com/app/apikey
// Access your API key as an environment variable.
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
// Construct a `GenerativeModel` which uses the cache object.
const genModel = genAI.getGenerativeModelFromCachedContent(cache);
// Query the model.
const result = await genModel.generateContent({
contents: [
{
role: 'user',
parts: [
{
text:
'Introduce different characters in the movie by describing ' +
'their personality, looks, and names. Also list the ' +
'timestamps they were introduced for the first time.',
},
],
},
],
});
console.log(result.response.usageMetadata);
// The output should look something like this:
//
// {
// promptTokenCount: 696220,
// candidatesTokenCount: 270,
// totalTokenCount: 696490,
// cachedContentTokenCount: 696191
// }
console.log(result.response.text());
فهرست کش ها
امکان بازیابی یا مشاهده محتوای ذخیره شده در حافظه پنهان وجود ندارد، اما می توانید ابرداده های حافظه پنهان ( name
، model
، displayName
، usageMetadata
، createTime
، updateTime
، و expireTime
) را بازیابی کنید.
برای فهرست کردن متادیتا برای همه کش های آپلود شده، از GoogleAICacheManager.list()
استفاده کنید:
const listResult = await cacheManager.list();
listResult.cachedContents.forEach((cache) => {
console.log(cache);
});
یک کش را به روز کنید
می توانید یک ttl
یا expireTime
جدید برای کش تنظیم کنید. تغییر هر چیز دیگری در مورد حافظه پنهان پشتیبانی نمی شود.
مثال زیر نحوه به روز رسانی ttl
یک کش را با استفاده از GoogleAICacheManager.update()
نشان می دهد.
const ttlSeconds = 2 * 60 * 60;
const updateParams = { cachedContent: { ttlSeconds } };
const updatedCache = await cacheManager.update(cacheName, updateParams);
یک کش را حذف کنید
سرویس کش عملیات حذف را برای حذف دستی محتوا از کش ارائه می دهد. مثال زیر نحوه حذف کش با استفاده از GoogleAICacheManager.delete()
را نشان می دهد.
await cacheManager.delete(cacheName);
ملاحظات اضافی
هنگام استفاده از کش زمینه، ملاحظات زیر را در نظر داشته باشید:
- حداقل تعداد توکن ورودی برای ذخیره سازی متن 32768 است و حداکثر همان حداکثر برای مدل داده شده است. (برای اطلاعات بیشتر در مورد شمارش نشانه ها، به راهنمای توکن مراجعه کنید).
- این مدل هیچ تمایزی بین نشانههای حافظه پنهان و نشانههای ورودی معمولی قائل نمیشود. محتوای ذخیره شده در حافظه پنهان به سادگی یک پیشوند برای درخواست است.
- هیچ محدودیت یا نرخ خاصی برای ذخیره سازی متن وجود ندارد. محدودیتهای نرخ استاندارد برای
GenerateContent
اعمال میشود و محدودیتهای رمز شامل توکنهای ذخیرهشده نیز میشود. - تعداد توکنهای ذخیرهشده در
usage_metadata
از عملیات ایجاد، دریافت و فهرست سرویس کش و همچنین درGenerateContent
هنگام استفاده از کش برگردانده میشود.
در یک گردش کاری معمولی هوش مصنوعی، ممکن است همان توکن های ورودی را بارها و بارها به یک مدل ارسال کنید. با استفاده از ویژگی ذخیرهسازی متنی Gemini API، میتوانید یک بار مقداری از محتوا را به مدل ارسال کنید، نشانههای ورودی را در حافظه پنهان نگه دارید و سپس برای درخواستهای بعدی به نشانههای کششده مراجعه کنید. در حجمهای معین، استفاده از توکنهای ذخیرهسازی شده هزینه کمتری نسبت به ارسال مکرر در یک مجموعه توکنها دارد.
هنگامی که مجموعه ای از نشانه ها را در حافظه پنهان ذخیره می کنید، می توانید انتخاب کنید که چه مدت می خواهید کش وجود داشته باشد قبل از اینکه نشانه ها به طور خودکار حذف شوند. این مدت زمان ذخیره سازی، زمان زندگی (TTL) نامیده می شود. اگر تنظیم نشود، TTL به طور پیش فرض روی 1 ساعت است. هزینه ذخیره سازی به اندازه توکن ورودی و مدت زمانی که می خواهید توکن ها باقی بمانند بستگی دارد.
حافظه پنهان متنی از فلش Gemini 1.5 Pro و Gemini 1.5 پشتیبانی می کند.
زمان استفاده از کش زمینه
ذخیره سازی متن به ویژه برای سناریوهایی که در آن یک زمینه اولیه قابل توجه به طور مکرر توسط درخواست های کوتاهتر ارجاع داده می شود، مناسب است. استفاده از کش زمینه برای موارد استفاده مانند:
- چت بات ها با دستورالعمل های سیستمی گسترده
- تجزیه و تحلیل مکرر فایل های ویدئویی طولانی
- پرس و جوهای تکراری در برابر مجموعه اسناد بزرگ
- تجزیه و تحلیل مکرر مخزن کد یا رفع اشکال
چگونه کش هزینه ها را کاهش می دهد
ذخیره سازی متن یک ویژگی پولی است که برای کاهش هزینه های عملیاتی کلی طراحی شده است. صورتحساب بر اساس عوامل زیر است:
- تعداد نشانههای حافظه پنهان: تعداد نشانههای ورودی ذخیرهشده در حافظه پنهان که در صورت درج در درخواستهای بعدی با نرخ کاهشیافته صورتحساب میشوند.
- مدت زمان ذخیره سازی: مقدار زمانی که توکن های ذخیره شده در حافظه پنهان ذخیره می شوند (TTL) که بر اساس مدت زمان TTL تعداد توکن های ذخیره شده صورتحساب می شود. هیچ محدودیتی برای حداقل یا حداکثر در TTL وجود ندارد.
- عوامل دیگر: هزینههای دیگری اعمال میشود، مانند نشانههای ورودی و نشانههای خروجی غیر ذخیرهسازی شده در حافظه پنهان.
برای جزئیات قیمت به روز، به صفحه قیمت گذاری Gemini API مراجعه کنید. برای یادگیری نحوه شمارش نشانهها، راهنمای توکن را ببینید.
نحوه استفاده از کش زمینه
این بخش فرض میکند که Gemini SDK را نصب کردهاید (یا curl را نصب کردهاید) و یک کلید API را پیکربندی کردهاید، همانطور که در شروع سریع نشان داده شده است.
با استفاده از حافظه پنهان محتوا تولید کنید
مثال زیر نحوه تولید محتوا با استفاده از یک دستورالعمل سیستم و فایل ویدئویی ذخیره شده را نشان می دهد.
import { GoogleGenerativeAI } from '@google/generative-ai';
import {
FileState,
GoogleAICacheManager,
GoogleAIFileManager,
} from '@google/generative-ai/server';
// A helper function that uploads the video to be cached.
async function uploadMp4Video(filePath, displayName) {
const fileManager = new GoogleAIFileManager(process.env.API_KEY);
const fileResult = await fileManager.uploadFile(filePath, {
displayName,
mimeType: 'video/mp4',
});
const { name, uri } = fileResult.file;
// Poll getFile() on a set interval (2 seconds here) to check file state.
let file = await fileManager.getFile(name);
while (file.state === FileState.PROCESSING) {
console.log('Waiting for video to be processed.');
// Sleep for 2 seconds
await new Promise((resolve) => setTimeout(resolve, 2_000));
file = await fileManager.getFile(name);
}
console.log(`Video processing complete: ${uri}`);
return fileResult;
}
// Download video file
// curl -O https://storage.googleapis.com/generativeai-downloads/data/Sherlock_Jr_FullMovie.mp4
const pathToVideoFile = 'Sherlock_Jr_FullMovie.mp4';
// Upload the video.
const fileResult = await uploadMp4Video(pathToVideoFile, 'Sherlock Jr. video');
// Construct a GoogleAICacheManager using your API key.
const cacheManager = new GoogleAICacheManager(process.env.API_KEY);
// Create a cache with a 5 minute TTL.
const displayName = 'sherlock jr movie';
const model = 'models/gemini-1.5-flash-001';
const systemInstruction =
'You are an expert video analyzer, and your job is to answer ' +
"the user's query based on the video file you have access to.";
let ttlSeconds = 300;
const cache = await cacheManager.create({
model,
displayName,
systemInstruction,
contents: [
{
role: 'user',
parts: [
{
fileData: {
mimeType: fileResult.file.mimeType,
fileUri: fileResult.file.uri,
},
},
],
},
],
ttlSeconds,
});
// Get your API key from https://aistudio.google.com/app/apikey
// Access your API key as an environment variable.
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
// Construct a `GenerativeModel` which uses the cache object.
const genModel = genAI.getGenerativeModelFromCachedContent(cache);
// Query the model.
const result = await genModel.generateContent({
contents: [
{
role: 'user',
parts: [
{
text:
'Introduce different characters in the movie by describing ' +
'their personality, looks, and names. Also list the ' +
'timestamps they were introduced for the first time.',
},
],
},
],
});
console.log(result.response.usageMetadata);
// The output should look something like this:
//
// {
// promptTokenCount: 696220,
// candidatesTokenCount: 270,
// totalTokenCount: 696490,
// cachedContentTokenCount: 696191
// }
console.log(result.response.text());
فهرست کش ها
امکان بازیابی یا مشاهده محتوای ذخیره شده در حافظه پنهان وجود ندارد، اما می توانید ابرداده های حافظه پنهان ( name
، model
، displayName
، usageMetadata
، createTime
، updateTime
، و expireTime
) را بازیابی کنید.
برای فهرست کردن متادیتا برای همه کش های آپلود شده، از GoogleAICacheManager.list()
استفاده کنید:
const listResult = await cacheManager.list();
listResult.cachedContents.forEach((cache) => {
console.log(cache);
});
یک کش را به روز کنید
می توانید یک ttl
یا expireTime
جدید برای کش تنظیم کنید. تغییر هر چیز دیگری در مورد حافظه پنهان پشتیبانی نمی شود.
مثال زیر نحوه به روز رسانی ttl
یک کش را با استفاده از GoogleAICacheManager.update()
نشان می دهد.
const ttlSeconds = 2 * 60 * 60;
const updateParams = { cachedContent: { ttlSeconds } };
const updatedCache = await cacheManager.update(cacheName, updateParams);
یک کش را حذف کنید
سرویس کش عملیات حذف را برای حذف دستی محتوا از کش ارائه می دهد. مثال زیر نحوه حذف کش با استفاده از GoogleAICacheManager.delete()
را نشان می دهد.
await cacheManager.delete(cacheName);
ملاحظات اضافی
هنگام استفاده از کش زمینه، ملاحظات زیر را در نظر داشته باشید:
- حداقل تعداد توکن ورودی برای ذخیره سازی متن 32768 است و حداکثر همان حداکثر برای مدل داده شده است. (برای اطلاعات بیشتر در مورد شمارش نشانه ها، به راهنمای توکن مراجعه کنید).
- این مدل هیچ تمایزی بین نشانههای حافظه پنهان و نشانههای ورودی معمولی قائل نمیشود. محتوای ذخیره شده در حافظه پنهان به سادگی یک پیشوند برای درخواست است.
- هیچ محدودیت یا نرخ خاصی برای ذخیره سازی متن وجود ندارد. محدودیتهای نرخ استاندارد برای
GenerateContent
اعمال میشود و محدودیتهای رمز شامل توکنهای ذخیرهشده نیز میشود. - تعداد توکنهای ذخیرهشده در
usage_metadata
از عملیات ایجاد، دریافت و فهرست سرویس کش و همچنین درGenerateContent
هنگام استفاده از کش برگردانده میشود.
در یک گردش کاری معمولی هوش مصنوعی، ممکن است همان توکن های ورودی را بارها و بارها به یک مدل ارسال کنید. با استفاده از ویژگی ذخیرهسازی متنی Gemini API، میتوانید یک بار مقداری از محتوا را به مدل ارسال کنید، نشانههای ورودی را در حافظه پنهان نگه دارید و سپس برای درخواستهای بعدی به نشانههای کششده مراجعه کنید. در حجمهای معین، استفاده از توکنهای ذخیرهسازی شده هزینه کمتری نسبت به ارسال مکرر در یک مجموعه توکنها دارد.
هنگامی که مجموعه ای از نشانه ها را در حافظه پنهان ذخیره می کنید، می توانید انتخاب کنید که چه مدت می خواهید کش وجود داشته باشد قبل از اینکه نشانه ها به طور خودکار حذف شوند. این مدت زمان ذخیره سازی، زمان زندگی (TTL) نامیده می شود. اگر تنظیم نشود، TTL به طور پیش فرض روی 1 ساعت است. هزینه ذخیره سازی به اندازه توکن ورودی و مدت زمانی که می خواهید توکن ها باقی بمانند بستگی دارد.
حافظه پنهان متنی از فلش Gemini 1.5 Pro و Gemini 1.5 پشتیبانی می کند.
زمان استفاده از کش زمینه
ذخیره سازی متن به ویژه برای سناریوهایی که در آن یک زمینه اولیه قابل توجه به طور مکرر توسط درخواست های کوتاهتر ارجاع داده می شود، مناسب است. استفاده از کش زمینه برای موارد استفاده مانند:
- چت بات ها با دستورالعمل های سیستمی گسترده
- تجزیه و تحلیل مکرر فایل های ویدئویی طولانی
- پرس و جوهای تکراری در برابر مجموعه اسناد بزرگ
- تجزیه و تحلیل مکرر مخزن کد یا رفع اشکال
چگونه کش هزینه ها را کاهش می دهد
ذخیره سازی متن یک ویژگی پولی است که برای کاهش هزینه های عملیاتی کلی طراحی شده است. صورتحساب بر اساس عوامل زیر است:
- تعداد نشانههای حافظه پنهان: تعداد نشانههای ورودی ذخیرهشده در حافظه پنهان که در صورت درج در درخواستهای بعدی با نرخ کاهشیافته صورتحساب میشوند.
- مدت زمان ذخیره سازی: مقدار زمانی که توکن های ذخیره شده در حافظه پنهان ذخیره می شوند (TTL) که بر اساس مدت زمان TTL تعداد توکن های ذخیره شده صورتحساب می شود. هیچ محدودیتی برای حداقل یا حداکثر در TTL وجود ندارد.
- عوامل دیگر: هزینههای دیگری اعمال میشود، مانند نشانههای ورودی و نشانههای خروجی غیر ذخیرهسازی شده در حافظه پنهان.
برای جزئیات قیمت به روز، به صفحه قیمت گذاری Gemini API مراجعه کنید. برای یادگیری نحوه شمارش نشانهها، راهنمای توکن را ببینید.
نحوه استفاده از کش زمینه
این بخش فرض میکند که Gemini SDK را نصب کردهاید (یا curl را نصب کردهاید) و یک کلید API را پیکربندی کردهاید، همانطور که در شروع سریع نشان داده شده است.
با استفاده از حافظه پنهان محتوا تولید کنید
مثال زیر نحوه تولید محتوا با استفاده از یک دستورالعمل سیستم و فایل ویدئویی ذخیره شده را نشان می دهد.
import { GoogleGenerativeAI } from '@google/generative-ai';
import {
FileState,
GoogleAICacheManager,
GoogleAIFileManager,
} from '@google/generative-ai/server';
// A helper function that uploads the video to be cached.
async function uploadMp4Video(filePath, displayName) {
const fileManager = new GoogleAIFileManager(process.env.API_KEY);
const fileResult = await fileManager.uploadFile(filePath, {
displayName,
mimeType: 'video/mp4',
});
const { name, uri } = fileResult.file;
// Poll getFile() on a set interval (2 seconds here) to check file state.
let file = await fileManager.getFile(name);
while (file.state === FileState.PROCESSING) {
console.log('Waiting for video to be processed.');
// Sleep for 2 seconds
await new Promise((resolve) => setTimeout(resolve, 2_000));
file = await fileManager.getFile(name);
}
console.log(`Video processing complete: ${uri}`);
return fileResult;
}
// Download video file
// curl -O https://storage.googleapis.com/generativeai-downloads/data/Sherlock_Jr_FullMovie.mp4
const pathToVideoFile = 'Sherlock_Jr_FullMovie.mp4';
// Upload the video.
const fileResult = await uploadMp4Video(pathToVideoFile, 'Sherlock Jr. video');
// Construct a GoogleAICacheManager using your API key.
const cacheManager = new GoogleAICacheManager(process.env.API_KEY);
// Create a cache with a 5 minute TTL.
const displayName = 'sherlock jr movie';
const model = 'models/gemini-1.5-flash-001';
const systemInstruction =
'You are an expert video analyzer, and your job is to answer ' +
"the user's query based on the video file you have access to.";
let ttlSeconds = 300;
const cache = await cacheManager.create({
model,
displayName,
systemInstruction,
contents: [
{
role: 'user',
parts: [
{
fileData: {
mimeType: fileResult.file.mimeType,
fileUri: fileResult.file.uri,
},
},
],
},
],
ttlSeconds,
});
// Get your API key from https://aistudio.google.com/app/apikey
// Access your API key as an environment variable.
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
// Construct a `GenerativeModel` which uses the cache object.
const genModel = genAI.getGenerativeModelFromCachedContent(cache);
// Query the model.
const result = await genModel.generateContent({
contents: [
{
role: 'user',
parts: [
{
text:
'Introduce different characters in the movie by describing ' +
'their personality, looks, and names. Also list the ' +
'timestamps they were introduced for the first time.',
},
],
},
],
});
console.log(result.response.usageMetadata);
// The output should look something like this:
//
// {
// promptTokenCount: 696220,
// candidatesTokenCount: 270,
// totalTokenCount: 696490,
// cachedContentTokenCount: 696191
// }
console.log(result.response.text());
فهرست کش ها
امکان بازیابی یا مشاهده محتوای ذخیره شده در حافظه پنهان وجود ندارد، اما می توانید ابرداده های حافظه پنهان ( name
، model
، displayName
، usageMetadata
، createTime
، updateTime
، و expireTime
) را بازیابی کنید.
برای فهرست کردن متادیتا برای همه کش های آپلود شده، از GoogleAICacheManager.list()
استفاده کنید:
const listResult = await cacheManager.list();
listResult.cachedContents.forEach((cache) => {
console.log(cache);
});
یک کش را به روز کنید
می توانید یک ttl
یا expireTime
جدید برای کش تنظیم کنید. تغییر هر چیز دیگری در مورد حافظه پنهان پشتیبانی نمی شود.
مثال زیر نحوه به روز رسانی ttl
یک کش را با استفاده از GoogleAICacheManager.update()
نشان می دهد.
const ttlSeconds = 2 * 60 * 60;
const updateParams = { cachedContent: { ttlSeconds } };
const updatedCache = await cacheManager.update(cacheName, updateParams);
یک کش را حذف کنید
سرویس کش عملیات حذف را برای حذف دستی محتوا از کش ارائه می دهد. مثال زیر نحوه حذف کش با استفاده از GoogleAICacheManager.delete()
را نشان می دهد.
await cacheManager.delete(cacheName);
ملاحظات اضافی
هنگام استفاده از کش زمینه، ملاحظات زیر را در نظر داشته باشید:
- حداقل تعداد توکن ورودی برای ذخیره سازی متن 32768 است و حداکثر همان حداکثر برای مدل داده شده است. (برای اطلاعات بیشتر در مورد شمارش نشانه ها، به راهنمای توکن مراجعه کنید).
- این مدل هیچ تمایزی بین نشانههای حافظه پنهان و نشانههای ورودی معمولی قائل نمیشود. محتوای ذخیره شده در حافظه پنهان به سادگی یک پیشوند برای درخواست است.
- هیچ محدودیت یا نرخ خاصی برای ذخیره سازی متن وجود ندارد. محدودیتهای نرخ استاندارد برای
GenerateContent
اعمال میشود و محدودیتهای رمز شامل توکنهای ذخیرهشده نیز میشود. - تعداد توکنهای ذخیرهشده در
usage_metadata
از عملیات ایجاد، دریافت و فهرست سرویس کش و همچنین درGenerateContent
هنگام استفاده از کش برگردانده میشود.