JavaScript: память чата с ИИ
Храни каждое сообщение в массиве и отправляй его снова как contents. Роли — user и model.
Все уроки · Уроки JavaScript: учимся с нуля
Почему забывает
У API нет своей памяти. Каждый 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
Массив создаётся вне функции. Если создать его внутри, каждый вызов обнулит его. Сначала push сообщения user, массив отправляется, пришедший ответ снова push как 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 = []. Старый массив выбрасывается, остаётся новый пустой.