جافاسكريبت: ذاكرة محادثة الذكاء
احفظ كل رسالة في مصفوفة وأعد إرسالها كـ contents. الدوران هما user وmodel.
كل الدروس · دروس جافاسكريبت: تعلّم من الصفر
لماذا ينسى
لا ذاكرة للواجهة وحدها. كل fetch محادثة جديدة. كي يتذكر الاسم احفظ التاريخ كله في مصفوفة وأرسله كـ contents في كل طلب. رسالة الإنسان دورها user وجواب الذكاء دوره model. assistant وai خطأ هنا، والخادم يُرجع 400.
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
تُنشأ المصفوفة خارج الدالة. إذا أُنشئت داخلها صُفّرت في كل استدعاء. أولاً تُدفع رسالة user، ثم تُرسل المصفوفة، ثم يُدفع الجواب القادم كـ model. إذا لم يُضف جواب model صار user مرتين متتاليتين وانكسر الترتيب. في حديث طويل slice(-10) يرسل آخر 10 رسائل فقط.
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);
}أسئلة
لماذا لا يعرف السؤال الثاني الاسم؟ لم يُرسل التاريخ. contents يجب أن يكون المصفوفة كلها لا سؤالاً واحداً.
لماذا تفرغ المصفوفة؟ أُنشئت داخل الدالة. أنشئها فوق، مرة واحدة.
لماذا يظهر 400؟ الدور ليس model. في Gemini لا تُكتب assistant.
كيف تُمسح الذاكرة؟ sohbetTarixcesi = []. تُرمى المصفوفة القديمة وتبقى واحدة جديدة فارغة.