Në një rrjedhë pune tipike të AI, ju mund t'i kaloni të njëjtat argumente hyrëse vazhdimisht tek një model. Duke përdorur veçorinë e ruajtjes së kontekstit të Gemini API, mund t'i kaloni disa përmbajtje modelit një herë, të ruani në memorien e duhur shenjat hyrëse dhe më pas t'i referoheni argumenteve të ruajtura në memorie për kërkesat e mëvonshme. Në vëllime të caktuara, përdorimi i argumenteve të ruajtura në memorie është kosto më e ulët sesa kalimi në të njëjtin korpus tokenësh në mënyrë të përsëritur.
Kur ruani një grup argumentesh, mund të zgjidhni për sa kohë dëshironi të ekzistojë cache përpara se të fshihen automatikisht shenjat. Kjo kohëzgjatje memorie quhet koha për të jetuar (TTL). Nëse nuk është caktuar, TTL është parazgjedhur në 1 orë. Kostoja e ruajtjes në memorie varet nga madhësia e tokenit të hyrjes dhe nga sa kohë dëshironi që tokenët të vazhdojnë.
Memoria e kontekstit mbështet të dyja Gemini 1.5 Pro dhe Gemini 1.5 Flash.
Kur të përdorni memorien e kontekstit
Ruajtja në memorie e kontekstit është veçanërisht e përshtatshme për skenarët ku një kontekst thelbësor fillestar referohet në mënyrë të përsëritur nga kërkesa më të shkurtra. Merrni parasysh përdorimin e memories së kontekstit për rastet e përdorimit të tilla si:
- Chatbots me udhëzime të gjera të sistemit
- Analiza e përsëritur e skedarëve video të gjatë
- Pyetje të përsëritura kundër grupeve të mëdha të dokumenteve
- Analiza e shpeshtë e depove të kodit ose rregullimi i gabimeve
Si zvogëlon kostot memoria e fshehtë
Ruajtja në memorie e kontekstit është një veçori me pagesë e krijuar për të reduktuar kostot e përgjithshme operacionale. Faturimi bazohet në faktorët e mëposhtëm:
- Numri i shenjave të memories së memories: Numri i shenjave hyrëse të ruajtura në memorie, të faturuar me një tarifë të reduktuar kur përfshihen në kërkesat pasuese.
- Kohëzgjatja e ruajtjes: Sasia e kohës që ruhen argumentet e ruajtura në memorie (TTL), e faturuar bazuar në kohëzgjatjen TTL të numrit të shenjave të ruajtura në memorie. Nuk ka kufij minimalë ose maksimalë në TTL.
- Faktorë të tjerë: Zbatohen tarifa të tjera, si p.sh. për shenjat hyrëse dhe ato dalëse jo të ruajtura në memorie të fshehtë.
Për detaje të përditësuara të çmimeve, referojuni faqes së çmimeve të Gemini API. Për të mësuar se si të numëroni shenjat, shihni udhëzuesin Token .
Si të përdorni memorien e kontekstit
Ky seksion supozon se keni instaluar një Gemini SDK (ose keni instaluar curl) dhe se keni konfiguruar një çelës API, siç tregohet në fillimin e shpejtë .
Gjeneroni përmbajtje duke përdorur një cache
Shembulli i mëposhtëm tregon se si të gjeneroni përmbajtje duke përdorur një udhëzim të sistemit të ruajtur dhe skedar video.
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());
Listoni cache
Nuk është e mundur të rikuperoni ose shikoni përmbajtjen e ruajtur në memorie, por mund të rikuperoni metadatat e memories së memories ( name
, model
, displayName
, usageMetadata
, createTime
, updateTime
dhe expireTime
).
Për të renditur meta të dhënat për të gjitha memoriet e ngarkuara, përdorni GoogleAICacheManager.list()
:
const listResult = await cacheManager.list();
listResult.cachedContents.forEach((cache) => {
console.log(cache);
});
Përditëso një cache
Mund të vendosni një ttl
të ri ose expireTime
për një cache. Ndryshimi i ndonjë gjëje tjetër në lidhje me cache nuk mbështetet.
Shembulli i mëposhtëm tregon se si të përditësoni ttl
të një cache duke përdorur GoogleAICacheManager.update()
.
const ttlSeconds = 2 * 60 * 60;
const updateParams = { cachedContent: { ttlSeconds } };
const updatedCache = await cacheManager.update(cacheName, updateParams);
Fshi një cache
Shërbimi i memorizimit ofron një operacion fshirjeje për heqjen manuale të përmbajtjes nga cache. Shembulli i mëposhtëm tregon se si të fshini një cache duke përdorur GoogleAICacheManager.delete()
.
await cacheManager.delete(cacheName);
Konsiderata shtesë
Mbani parasysh konsideratat e mëposhtme kur përdorni memorien e kontekstit:
- Numri minimal i shenjave hyrëse për ruajtjen në memorien e kontekstit është 32,768, dhe maksimumi është i njëjtë me maksimumin për modelin e dhënë. (Për më shumë rreth numërimit të shenjave, shihni udhëzuesin Token ).
- Modeli nuk bën asnjë dallim midis argumenteve të ruajtura në memorie dhe shenjave të zakonshme të hyrjes. Përmbajtja e memorizuar është thjesht një parashtesë e kërkesës.
- Nuk ka kufizime të veçanta të tarifave ose përdorimit në memorien e kontekstit; zbatohen kufijtë standardë të tarifave për
GenerateContent
dhe kufijtë e tokenit përfshijnë argumentet e ruajtura në memorie të fshehtë. - Numri i shenjave të ruajtura në memorie kthehet në
usage_metadata
nga operacionet e krijimit, marrjes dhe listimit të shërbimit të memories së memories, dhe gjithashtu nëGenerateContent
kur përdorni cache.