برمجة

جافاسكريبت: RAG، جواب من مستند

جد الفقرة المناسبة للسؤال واجعل الذكاء يجيب منها فقط.

كل الدروس · دروس جافاسكريبت: تعلّم من الصفر

ما هو 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 بكلمتين؟ جد واكتب فقط مما وُجد. لا تضف من عندك.

المؤلف: Nibras Code