JavaScript: AI söhbətinin yaddaşı
Hər mesajı massivdə saxla və contents kimi yenidən göndər. Rollar user və model-dir.
Bütün dərslər · JavaScript dərsləri: sıfırdan öyrən
Niyə unudur
API-nin öz yaddaşı yoxdur. Hər fetch yeni söhbətdir. Adı xatırlaması üçün bütün tarixçəni massivdə saxlayıb hər sorğuda contents kimi göndərmək lazımdır. İnsan mesajının rolu user, AI cavabının rolu model-dir. assistant və ai burada səhvdir, server 400 verir.
let sohbetTarixcesi = [
{ role: "user", parts: [{ text: "Mənim adım Ömərdir." }] },
{ role: "model", parts: [{ text: "Tanışlığımıza şadam, Ömər." }] },
{ role: "user", parts: [{ text: "Mənim adım nə oldu?" }] }
];push ilə yadda saxla
Massiv funksiyanın çölündə yaradılır. İçində yaradılsa hər çağırışda sıfırlanır. Əvvəl user mesajı push olunur, massiv göndərilir, gələn cavab model kimi yenə push olunur. Model cavabı əlavə olunmasa iki user ard-arda düşür və növbə pozulur. Uzun söhbətdə slice(-10) yalnız son 10 mesajı göndərir.
const apiKey = process.env.GEMINI_API_KEY;
const url = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=${apiKey}`;
let sohbetTarixcesi = [];
async function mesajGonder(yeniMesaj) {
sohbetTarixcesi.push({ role: "user", parts: [{ text: yeniMesaj }] });
const cavab = await fetch(url, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ contents: sohbetTarixcesi.slice(-10) })
});
const melumat = await cavab.json();
const aiCavabi = melumat.candidates[0].content.parts[0].text;
sohbetTarixcesi.push({ role: "model", parts: [{ text: aiCavabi }] });
console.log(aiCavabi);
}Suallar
İkinci sual niyə adı bilmir? Tarixçə göndərilməyib. contents tək sual yox, bütün massiv olmalıdır.
Massiv niyə boşalır? O, funksiyanın içində yaradılıb. Yuxarıda, bir dəfə yarat.
400 niyə gəlir? Rol model deyil. Gemini-də assistant yazılmır.
Yaddaşı necə silmək olar? sohbetTarixcesi = []. Köhnə massiv atılır, yeni boş massiv qalır.