JavaScript: RAG, ответ из документа
Найди абзац под вопрос и заставь ИИ отвечать только из него.
Все уроки · Уроки JavaScript: учимся с нуля
Что такое RAG
ИИ знает общую тему, не твой PDF. Целую книгу в один запрос не положишь: лимит кончится. Где текста нет, он выдумывает. RAG сначала находит абзац под вопрос, потом говорит ИИ: отвечай только из этого текста. Если ответа нет, напиши «Этой информации в документе нет».
Четыре шага и код
Документ режется на короткие абзацы. Каждый абзац становится числами, вектором, чтобы смысл совпал. Когда приходит вопрос, находится самый близкий абзац. Этот абзац и вопрос уходят вместе. Тысячи кусков в обычный массив не лезут. В Supabase их хранят через pgvector, и SQL находит ближайший кусок. Если поиск выбрал не тот абзац, ответ тоже будет неверным.
const apiKey = process.env.GEMINI_API_KEY;
const url = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=${apiKey}`;
async function seneddenCavabAl(istifadeciSuali, senedinParaqrafi) {
const sorguMelumati = {
systemInstruction: {
parts: [{
text: "Sən sənəd köməkçisisən. Yalnız verilən mətndən cavab ver. Mətndə yoxdursa yaz: Bu məlumat sənəddə yoxdur. Uydurma."
}]
},
contents: [{
parts: [{
text: `Kontekst:\n${senedinParaqrafi}\n\nSual: ${istifadeciSuali}`
}]
}]
};
const cavab = await fetch(url, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(sorguMelumati)
});
const melumat = await cavab.json();
console.log(melumat.candidates[0].content.parts[0].text);
}
const pdfdenTapilanHisse = "Nibras PDF aləti brauzerdə açılır. Fayl serverə yüklənmir.";
seneddenCavabAl("PDF aləti harada açılır?", pdfdenTapilanHisse);Вопросы
Можно ли положить 100 страниц в один contents? Нет. Лимит токенов кончится. Документ режется на короткие абзацы.
Почему выдумывает? В инструкции нет запрета. Фраза «Отвечай только из этого текста, если нет — так и напиши» должна стоять в systemInstruction.
Почему ответ из не того абзаца? Поиск не выбрал подходящий кусок. ИИ видит только то, что ему дали.
Что такое RAG в двух словах? Найди и пиши только из найденного. Своего не добавляй.