جميع الأدلة
الأدوات والإنتاجية

ابنِ روبوت RAG يُجيب من أي صفحة ويب في n8n (7 عقد)

وصل مُشغِّل دردشة بوكيل AI مع ذاكرة نافذة واسترجاع من رابط مباشر. السير يجلب الصفحة مع كل سؤال، يُقسمها إلى chunks، يُرتبها بالصلة بالاستعلام، ويُؤصل إجابة gpt-5-mini بمراجع مصدر — بدون قاعدة بيانات متجهية، بدون فاتورة embeddings.

17 دقيقة قراءة
٢٤ أبريل ٢٠٢٦
NerdLevelTech
2 مقالات مرتبطة
ابنِ روبوت RAG يُجيب من أي صفحة ويب في n8n (7 عقد)

{/* آخر تحديث: 2026-04-24 | بُني واستُورد مباشرة على nerdleveltech.app.n8n.cloud | gpt-5-mini */}

سبع عقد، مُشغِّل دردشة واحد، قاعدة معرفة مدعومة بـURL واحد، صفر قاعدة بيانات متجهية — وُصلت وحُفظت على n8n cloud. هذا أبسط روبوت RAG يمكنك بناؤه في n8n، وكافٍ لـ90% من حالات استخدام "دردشة مع مستنداتنا" الحقيقية. محادثة حقيقية مُلتقطة في الأسفل.

ما الذي ستبنيه

سير مُشغَّل بالدردشة:

  • يعرض واجهة دردشة جاهزة للمشاركة (n8n يستضيفها على رابط عام)
  • عند كل رسالة مستخدم، يجلب رابط قاعدة المعرفة طازجاً (يلتقط التحديثات فوراً)
  • يُقسِّم الصفحة ويُرتب chunks حسب مطابقة الكلمات المفتاحية مع سؤال المستخدم
  • يُمرر أفضل 6 chunks إلى وكيل AI مُؤصَّل بذلك السياق
  • يستخدم ذاكرة نافذية فيتذكر الوكيل آخر 6 رسائل من المحادثة
  • يرفض الإجابة عندما لا يحتوي السياق على الإجابة
سير دردشة RAG: When chat message received ← Set KB URL ← Fetch KB Page ← Extract & Chunk ← RAG Agent، مع OpenAI Chat Model و Chat Memory كعقد فرعية

تخطَّ البناء — استورد السير


المتطلبات المسبقة

المتطلبالتفاصيل
حساب n8nتجربة مجانية
أرصدة OpenAI100 مجانية من n8n
رابط تدردش معهصفحة مستنداتك أو منتجك أو مقالك
الوقتحوالي 12 دقيقة

العقد المستخدمة: Chat Trigger و Set و HTTP Request و Code و AI Agent و OpenAI Chat Model (فرعية) و Simple Memory Buffer Window (فرعية).


الخطوة 1 — استيراد السير

أنشئ سير عمل جديد. ألصق JSON على اللوحة الفارغة. تُحمَّل سبع عقد. افتح OpenAI Chat Model الفرعية وتأكد من gpt-5-mini بدرجة حرارة 0.2 (منخفضة — إجابات مُؤصَّلة فقط).

احفظ بـ Cmd+S / Ctrl+S.


الخطوة 2 — مُشغّل الدردشة

انقر نقراً مزدوجاً على When chat message received. مُشغِّل الدردشة لديه ثلاثة إعدادات مهمة:

الإعدادالقيمةلماذا
Publictrueيكشف رابط الدردشة بدون مصادقة — شارك الرابط وأي شخص يجربه
Title"Ask the docs"يظهر في رأس واجهة الدردشة
Subtitle"Ask anything about the URL configured in the 'Set KB URL' node."يُحدد توقعات المستخدم
Allowed Origins*يتيح تضمين widget الدردشة على أي دومين

اللوحة تُظهر رابطين. Test URL يُطلق أثناء التصحيح (يلتقط رسالة واحدة في كل مرة). Production URL يُصبح نشطاً بعد تبديل السير إلى Active (مفتاح أعلى اليمين)؛ هذا الرابط الذي تُشاركه مع المستخدمين.

لوحة سير RAG مع لوحة الدردشة مثبتة في الأسفل — إدخال 'Type message, or press tab for previous one' جاهز لاختبار خط الأنابيب مباشرة

الخطوة 3 — ضبط رابط قاعدة المعرفة

انقر نقراً مزدوجاً على Set KB URL. ثلاث تعيينات:

الحقلالتعبيرالغرض
kbUrlhttps://docs.n8n.io/الرابط الذي سيُجيب منه الروبوت. عدّل هذا إلى صفحة مستنداتك/منتجك.
userQuery{{ $json.chatInput || $json.message || '' }}يقرأ رسالة المستخدم عبر إصدارات n8n
sessionId{{ $json.sessionId || 'default' }}يُحدد خيط المحادثة للذاكرة

لتوجيه الروبوت إلى محتواك، فقط عدّل kbUrl. لا تغيير آخر ضروري.


الخطوة 4 — الاسترجاع والترتيب (بدون متجهات)

انقر نقراً مزدوجاً على Extract & Chunk. عقدة Code هذه تقوم بأمرين:

تجريد HTML

نفس النمط السابق — إزالة scripts و styles و nav و footer و tags و entities. يتبقى نص نظيف.

التقسيم والترتيب

const CHUNK = 500; // chars
const chunks = [];
for (let i = 0; i < text.length; i += CHUNK) chunks.push(text.slice(i, i + CHUNK));

const qTerms = userQuery.toLowerCase().match(/[a-z0-9]+/g) || [];
const scored = chunks.map((c, idx) => {
  const lower = c.toLowerCase();
  let score = 0;
  for (const t of qTerms) if (t.length > 2 && lower.includes(t)) score += 1;
  return { idx, score, chunk: c };
}).sort((a, b) => b.score - a.score).slice(0, 6);

const top = scored.sort((a, b) => a.idx - b.idx).map(s => s.chunk).join('\n---\n');

ثلاث حيل تستحق الملاحظة:

  1. chunks من 500 حرف. كبير بما يكفي لاحتواء مفهوم كامل، صغير بما يكفي ليتسع أعلى 6 chunks في سياق LLM مع مطالبة النظام وتاريخ الدردشة.
  2. ترتيب بالعد. كل مصطلح استعلام موجود في chunk يُضيف 1 للنتيجة. ليس حاداً مثل cosine similarity لكنه لا يتطلب استدعاء embeddings ويعمل جيداً لمحتوى نمط المستندات حيث كلمات المستخدم تطابق كلمات المستندات.
  3. إعادة الترتيب بالموقع قبل الضم. أعلى chunks ترتيباً بالنتيجة يُعاد ترتيبها بموقعها الأصلي ليقرأ السياق بترتيب المستند الأصلي — يساعد LLM على متابعة التدفق عندما تأتي chunks من أقسام متتالية.

لماذا يتفوق هذا على embeddings لقواعد المعرفة الصغيرة

المقياسترتيب الكلمات المفتاحيةEmbeddings
الإعدادلا شيءبناء index و vector DB و خدمة embed
التكلفة لكل استعلاممجاني0.00002$ + تكلفة vector DB
زمن الانتظار البارد<10 مللي ثانية200-500 مللي ثانية
الدقة على كلمات المستخدم الدقيقةممتازجيد
الدقة على الاستعلامات المُعاد صياغتهاضعيفممتاز
يتعامل مع > 10 آلاف chunkلانعم

لصفحة مستندات واحدة أو مقال، سؤال المستخدم عادة يحتوي على نفس كلمات الإجابة — ترتيب الكلمات المفتاحية يفوز. للمجموعات الكبيرة متعددة الصفحات، بدّل إلى embeddings.


الخطوة 5 — وكيل RAG المُؤصَّل

انقر نقراً مزدوجاً على RAG Agent. مطالبة النظام هي قلب التأصيل:

You are a careful documentation assistant. Answer the user's question
using ONLY the context below. If the context does not contain the answer,
say so directly — do not invent.

KB SOURCE: {{ $json.kbUrl }}

RETRIEVED CONTEXT:
"""
{{ $json.context }}
"""

USER QUESTION: {{ $json.userQuery }}

RULES
- Cite the source inline as [source]({{ $json.kbUrl }}) once near the top.
- Prefer short, structured answers (bullets or small tables).
- Do not add disclaimers about being an AI.
- If the user's question is outside the docs, say so and suggest what they
  could ask instead.

لماذا "ONLY the context below" مهمة

gpt-5-mini تدرب على الإنترنت العام — لديه آراء حول مستندات n8n سواء أعطيته السياق أم لا. بدون قيد "ONLY"، يدمج بسعادة ذكرياته من التدريب مع السياق المُسترجع، ويختلق محددات تبدو صحيحة لكنها ليست في مستنداتك.

القيد الصريح يُسقط معدل الهلوسة بشكل كبير. نتيجة اختبار حقيقي: سألنا "What is the n8n form trigger and what types of fields can it have?" مقابل https://docs.n8n.io/ (الصفحة الرئيسية، التي لا تحتوي على تفاصيل form-trigger). الوكيل رفض الاختلاق بشكل صحيح:

دردشة RAG حقيقية مُلتقطة من n8n: سؤال المستخدم 'What is the n8n form trigger and what types of fields can it have?' واستجابة الوكيل المُؤصلة بأنه لا يجد تلك المعلومات في مقتطف المستندات المُقدم ويقترح استعلامين أكثر تحديداً — مُولَّد في 7.2 ثانية بـ 880 رمز، كل العقد الـ5 خضراء

"I cannot find a description of the 'n8n Form Trigger' or a list of the types of fields it supports in the provided documentation excerpt. If you want that information, you can ask for: 'Show the n8n Docs page for the n8n Form Trigger'..."

هذا هو السلوك الصحيح — chunks الصفحة الرئيسية لم تحتوي على تفاصيل form-trigger، فأبرز الوكيل الفجوة بدلاً من التخمين. 7.2 ثانية و ~880 رمز من البداية للنهاية.

AI Agent مقابل Basic LLM Chain

لماذا نستخدم agent بدلاً من chainLlm؟ سببان:

  1. دعم الذاكرة. AI Agent لديه موصل ai_memory أصلي لتاريخ الدردشة. Basic LLM Chain ليس لديه.
  2. دعم الأدوات. إذا أضفت أدوات لاحقاً (آلة حاسبة أو web search أو سير آخر)، Agent يستخدمها تلقائياً. السلسلة لا تستطيع.

الخطوة 6 — ذاكرة الدردشة النافذية

انقر نقراً مزدوجاً على عقدة Chat Memory الفرعية. الإعدادات:

الإعدادالقيمةالأثر
Session ID TypeFrom inputيستخدم sessionId المضبوط سابقاً
Session Key{{ $('Set KB URL').item.json.sessionId }}يحصر الذاكرة في جلسة الدردشة
Context Window Length6يتذكر آخر 6 رسائل

عند 6 دورات، gpt-5-mini يرى ~12 رسالة متبادلة user/assistant إضافة إلى سياق الاسترجاع. هذا كافٍ لأسئلة المتابعة مثل "وماذا في الإنتاج؟" بدون تفجير ميزانية السياق.

ارفع النافذة إلى 10-15 لمحادثات أطول مقابل بعض مساحة السياق للاسترجاع. اخفض إلى 2-3 لـQ&A صارم حيث المتابعات لا تهم.


التوسعات: قاعدة معرفة متعددة الروابط، vector store، المصادقة

روابط متعددة (موقع مستندات حقيقي)

استبدل حقل kbUrl الواحد في Set KB URL بمصفوفة. أضف عقدة Split In Batches لجلب كل الروابط بالتوازي، ثم Merge + عقدة Code لدمج النصوص المُسترجعة قبل الترتيب. Chunks من صفحات مختلفة تحصل على نفس تمريرة الترتيب وأعلى 6 chunks عبر كل الصفحات تذهب إلى الوكيل.

أضف عقدة Vector Store (Pinecone/Supabase) فرعية. انقل الترتيب من عقدة Code إلى سير ingestion يشتغل مرة، يُضمِّن chunks بعقدة OpenAI embedding، ويخزنها. في سير الدردشة، استبدل Extract & Chunk بعقدة استعلام Vector Store. الوكيل يستهلك النتائج بنفس الطريقة — بدون تغييرات للمطالبة.

بوابة الدردشة بالمصادقة

اضبط مفتاح Public في Chat Trigger على false. وَلِّد رمز وصول في إعدادات العقدة، والمستخدمون يحتاجون تضمينه كـheader عند تضمين الدردشة. يدمج مع عقدة If قبل ذلك لإجابات بحسب الدور ("يمكنك رؤية هذا، لا يمكنك").

تسجيل المحادثات في قاعدة بيانات

أضف عقدة Postgres Insert (أو Supabase أو MySQL) بعد RAG Agent. سجِّل { session_id, question, answer, retrieved_chunks, response_time, feedback } للتحليلات. راجع يومياً الأسئلة التي حصلت على استجابة "لا أعرف" — تلك ثغرات مستنداتك.


ما التالي

لديك الآن نمط RAG الأساسي. مكانان لأخذه:

شارك هذا الدليل

الأسئلة الشائعة

قواعد البيانات المتجهية مطلوبة عندما تكون قاعدة معرفتك أكبر من نافذة سياق LLM. لرابط واحد (صفحة مستندات، صفحة منتج، مقال)، النص الكامل يتسع في سياق gpt-5-mini الـ 128k بسهولة، والاسترجاع المبني على الكلمات المفتاحية يطابق مصطلحات الاستعلام مع chunks في زمن O(n) — سريع، مجاني، بدون فاتورة embeddings. عندما توسع إلى 100+ صفحة أو مليون+ مستند، بدّل ترتيب عقدة Code بـvector store حقيقي (Pinecone، Supabase، Postgres pgvector). باقي السير يبقى كما هو.

مقالات ذات صلة

نشرة أسبوعية مجانية

ابقَ على مسار النيرد

بريد واحد أسبوعياً — دورات، مقالات معمّقة، أدوات، وتجارب ذكاء اصطناعي.

بدون إزعاج. إلغاء الاشتراك في أي وقت.