Programlama

JavaScript: AI sohbetinin hafızası

Her mesajı dizide tut ve contents olarak yeniden gönder. Roller user ve model'dir.

Tüm dersler · JavaScript dersleri: sıfırdan öğren

Neden unutur

API'nin kendi hafızası yoktur. Her fetch yeni sohbettir. Adı hatırlaması için bütün geçmişi dizide tutup her sorguda contents olarak göndermek gerekir. İnsan mesajının rolü user, AI cevabının rolü model'dir. assistant ve ai burada yanlıştır, sunucu 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 ile hatırla

Dizi fonksiyonun dışında yaratılır. İçinde yaratılırsa her çağrıda sıfırlanır. Önce user mesajı push edilir, dizi gönderilir, gelen cevap model olarak yine push edilir. Model cevabı eklenmezse iki user art arda düşer ve sıra bozulur. Uzun sohbette slice(-10) yalnız son 10 mesajı gönderir.

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);
}

Sorular

İkinci soru adı neden bilmiyor? Geçmiş gönderilmemiş. contents tek soru değil, bütün dizi olmalıdır.

Dizi neden boşalır? Fonksiyonun içinde yaratılmış. Yukarıda, bir kez yarat.

400 neden gelir? Rol model değil. Gemini'de assistant yazılmaz.

Hafıza nasıl silinir? sohbetTarixcesi = []. Eski dizi atılır, yeni boş dizi kalır.

Yazar: Nibras Code