دروس

كتاب وصفات خط البيانات الحية: MCP مع n8n وLangChain (2026)

كتاب وصفات لخط بيانات حي في 2026: جدولة كاشطات Apify عبر n8n، وفهرسة النتائج في مخزن متجهات، وتقديم إجابات الاسترجاع مع LangChain، وربط الوكلاء بأدوات MCP عند الطلب.

✍️
ParseFlow
12 دقائق قراءة
/* Featured Image */
رسم يوضح خط بيانات حي يتدفق من كاشطات الويب عبر الأتمتة إلى قاعدة بيانات متجهات تخدم وكيل ذكاء اصطناعي

بصفتنا شركاء لـ Apify، قد نحصل على عمولة من عمليات الشراء المؤهلة التي تتم من خلال روابطنا، دون أي تكلفة إاضافية عليك. نحن نوصي فقط بالأدوات التي نثق بها.

كتاب وصفات خط البيانات الحية: MCP مع n8n وLangChain (2026)

وكلاء الذكاء الاصطناعي بجودة البيانات التي يصلون إليها فقط. فالنموذج الذي يجيب من حدّ تدريبه سيصف بثقة أسعار العام الماضي، ودورة أخبار الشهر الماضي، وصفحة توثيق أعيدت كتابتها مرتين منذ ذلك الحين. والحل ليس نموذجا أكبر — بل خط أنابيب يُبقي بيانات الويب الطازجة تتدفق إلى الأماكن التي يقرأ منها وكيلك فعلا. يبني لك كتاب الوصفات هذا ذلك بالضبط: كاشطات Apify تجمع وفق جدول، وn8n يدير التدفق من التشغيل إلى الفهرسة، ومخزن متجهات يحمل التضمينات، وLangChain يقدم إجابات الاسترجاع، وربط MCP يتيح للوكيل طلب كشط جديد كلما لم تكن الفهرسة طازجة بما يكفي.

ملاحظة أمانة قبل أن نبدأ، منقولة من كل دروس هذا البرنامج: التوصيل أدناه رسم توضيحي مُجمّع من القطع الموثقة لكل أداة — مخططات الإدخال المنشورة للأدوات، وأنواع العقد المدمجة في n8n، وواجهات المُحمّل والسلاسل الموثقة في LangChain، وشرح خادم MCP المُختبَر. وهو يعرض الشكل الحقيقي لنظام يعمل، لكن أسماء العقد وواردات الحزم تنزاح بين الإصدارات، فابنه في بيئة تجريبية أولا وكيّفه مع ما تعرضه إصداراتك المثبتة. ولا شيء هنا قياس أداء مُختبَر، وكل رقم تكلفة منقول من صفحات متجر الأدوات كما هي منشورة — تحقق من تبويب الأسعار قبل وضع الميزانية.

خط الأنابيب بالكلمات: الكاشطة ← خطاف الويب ← مخزن المتجهات ← الوكيل

كل نظام بيانات حية، من بوت أخبار لعطلة نهاية الأسبوع إلى وكيل أبحاث للشركات، هو التدفق نفسه من خمس مراحل. تعلّم المراحل ونقاط التسليم وستتمكن من تشخيص أي خط أنابيب بسؤال واحد: أي تسليم تعطّل؟

المرحلة 1: الكاشطة. أداة أو أكثر من أدوات Apify تعمل وفق جدول وتنتج سجلات منظمة. يستخدم كتاب الوصفات هذا ثلاثا، تغطي كل منها شكلا مختلفا من البيانات: زاحف محتوى الموقع (Website Content Crawler) لنص الصفحات النظيف بصيغة Markdown (توثيقك وسجلات تغيير المنافسين ومصادر قاعدة المعرفة)، وكاشطة أخبار جوجل (Google News Scraper) للعناوين مع الناشرين والطوابع الزمنية (مراقبة الإعلام وتتبع المواضيع)، والكاشطة العامة (Web Scraper) لأي شيء آخر على الويب العام يحتاج متصفحا حقيقيا. وتقبل الأدوات الثلاث حقلَي الإدخال الموثقَين نفسهما — startUrls وmaxItems — فيتعامل معها باقي خط الأنابيب بالتبادل.

المرحلة 2: خطاف الويب. عندما يكتمل التشغيل، تدفع Apify النتيجة إلى نقطة نهاية HTTP بدلا من أن تظل تستفسر عنها. الاستفسار الدوري يعمل لكنه يهدر الدورات ويضيف زمن انتظار؛ أما خطاف الويب فيعني أن خط الأنابيب يستيقظ بالضبط عندما تتوفر بيانات جديدة، حاملا معرّف مجموعة البيانات للتشغيل المكتمل. وتسليم الدفع هذا هو نبض النظام كله — كل ما يليه يتفاعل معه.

المرحلة 3: التطبيع. مخرجات الأداة الخام ليست جاهزة للفهرسة أبدا. تصل السجلات بأسماء حقول مختلفة لكل أداة، وبقايا HTML، وتكرار عبر التشغيلات، وطوابع زمنية بأشكال متنوعة. ترسم خطوة التطبيع الصغيرة كل سجل على مستند معياري واحد — الرابط والعنوان والنص والأداة المصدر وطابع الزمن للزحف — وتزيل التكرار على الرابط المعياري فيحدّث إعادة الزحف للصفحة سجلها بدلا من مضاعفته. هذه أقل المراحل بريقا وهي التي تحدد هل يقتبس وكيلك حقائق نظيفة أم شظايا مشوهة.

المرحلة 4: مخزن المتجهات. يُقطّع كل مستند معياري إلى مقاطع ويُضمَّن ويُرفع إلى قاعدة بيانات متجهات مثل Qdrant أو Pinecone، مفتاحا بالرابط المعياري. والمخزن هو ذاكرة الوكيل طويلة الأمد للويب الذي يهمك: كل تشغيل مجدول يحدّثه، وكل إجابة يقدمها وكيلك مؤسسة على ما التقطه آخر تحديث.

المرحلة 5: الوكيل. يخدم LangChain الأسئلة اليومية من الفهرس عبر سلسلة استرجاع، ويمنح ربط MCP الوكيل مسارا ثانيا — إطلاق تشغيل أداة جديد عند الطلب عندما يتطلب السؤال بيانات أحدث من آخر تحديث. حداثة مجدولة للحالة الشائعة، وحداثة عند الطلب للاستثناءات. وهذا التصميم ذو المسارين هو كتاب الوصفات كله في جملة واحدة.

تتدفق البيانات في اتجاه واحد — تُطلق الكاشطة، فيوقظ خطاف الويب التدفق، وتُطبَّع السجلات، وتُرفع المتجهات، ويجيب الوكيل — وكل مرحلة قابلة للاختبار مستقلة. شغّل الأداة يدويا وافحص مجموعة البيانات، وأرسل مجموعة بيانات محفوظة إلى خطاف الويب لاختبار التطبيع، واستعلم مخزن المتجهات مباشرة لاختبار الفهرسة، واسأل المُسترجِع سؤالا إجابته معروفة قبل أن توصّل حلقة الوكيل أبدا.

سير عمل n8n عقدةً عقدة

n8n هو الغراء المرئي: لوحة ترسم فيها كل مرحلة أعلاه كعقدة والتسليمات أسلاك يمكنك فحصها. أدناه سير العمل بترتيب العقد، باستخدام أنواع عقد n8n المدمجة الموجودة في أي تثبيت قياسي فقط — مُشغّل الجدولة Schedule Trigger وطلب HTTP والويب هوك Webhook والكود Code والشرط IF وعقد مخزن المتجهات والتضمينات من أدوات الذكاء الاصطناعي في n8n. وتعامل مع أسماء العقد كأسماء توضيحية وطابقها مع لوحة إصدار n8n لديك.

العقدة 1 — مُشغّل الجدولة Schedule Trigger. يملك الساعة. اضبط مُشغّلا لكل إيقاع تحتاجه: يومي لمواضيع الأخبار، وأسبوعي للتوثيق بطيء الحركة. لا تحمل هذه العقدة بيانات؛ بل توقظ سير العمل على إيقاع فحسب.

العقدة 2 — طلب HTTP (بدء تشغيل الأداة). يستدعي واجهة Apify البرمجية لإطلاق تشغيل، مستخدما حقلَي الإدخال الموثقَين فقط. عقدة لكل أداة بالشكل نفسه كل مرة:

{
  "method": "POST",
  "url": "https://api.apify.com/v2/acts/datascoutapi~website-content-crawler-pro/runs?token=YOUR_API_TOKEN",
  "body": {
    "startUrls": [{ "url": "https://example.com/docs" }],
    "maxItems": 50
  }
}

استبدل مقطع مسار الأداة بـ lhotanova~google-news-scraper أو apify~web-scraper وتبقى العقدة متماثلة في ما عدا ذلك — وهذا التبادل هو سبب توحيد خط الأنابيب على startUrls مع maxItems ولا شيء سواهما.

العقدة 3 — مُشغّل خطاف الويب Webhook Trigger (استلام مجموعة البيانات المكتملة). اضبط تشغيل الأداة (أو طلب HTTP لاحقا يسجّله) ليُرسل حمولة الاكتمال إلى رابط هذه العقدة. تحمل الحمولة معرّف مجموعة البيانات. وفصل «البدء» عن «الاستلام» في عقدتين مهم: فتشغيل الأدوات يستغرق دقائق، ولا ينبغي لأي تنفيذ لسير العمل أن يبقى خاملا منتظرا — تُطلق الجدولة وتكتمل، ويبدأ تنفيذ جديد تماما عندما يصل خطاف الويب.

العقدة 4 — طلب HTTP (جلب عناصر مجموعة البيانات). يقرأ {{$json.defaultDatasetId}} (صيغة تعبيرات n8n التي تشير إلى حمولة خطاف الويب) ويجلب العناصر من واجهة Apify. وتذكّر maxItems من مدخلات التشغيل هنا: فهو يحدّ الإنفاق لكل تشغيل، فقائمة روابط مُعدّة بخطأ لا يمكن أن تتضخم إلى زحف عملاق أبدا.

العقدة 5 — الكود Code (التطبيع إلى مستندات معيارية). خطوة جافاسكربت قصيرة ترسم حقول كل أداة على { url, title, text, source, crawledAt } وتُسقط السجلات فارغة النص. تعيش خصوصيات حقول كل أداة هنا وحصرا هنا — فرع if واحد لكل أداة مصدر — فإضافة أداة رابعة لاحقا تعني تحرير هذه العقدة لا إعادة توصيل سير العمل.

العقدة 6 — الشرط IF (بوابة الجودة). يوجّه الدفعات الفارغة أو الفاشلة إلى تنبيه (بريد أو سلاك) ويمضي بالدفعات السليمة قدما. هذه هي العقدة التي يتجاوزها الجميع ثم يتمنى الجميع لو وضعها: فهي ما يخبرك أن موقعا غيّر بنيته في الثالثة فجرا بدلا من ترك الصمت يسمّم الفهرس أسبوعا كاملا.

العقدة 7 — التضمينات + مخزن المتجهات (الرفع). تتدفق المستندات الناجية إلى عقدة تضمينات فرعية (نموذج التضمين لدى مزودك) ثم عقدة مخزن متجهات Qdrant أو Pinecone في وضع الرفع upsert، مفتاحا بالرابط المعياري فيحدّث إعادة الزحف بدلا من التكرار. اسم مجموعة أو فهرس لكل شكل بيانات — واحد للتوثيق وآخر للأخبار — يُبقي دقة الاسترجاع عالية لأن المُسترجِع لا يضطر لنخل مقتطفات الأخبار عند الإجابة عن أسئلة التوثيق.

وإذا بدا n8n مبالغا فيه فقد يكون كذلك: فالأداة الواحدة على إيقاع ثابت يمكنها استخدام تبويب الجداول الخاص بالأداة مع خطاف ويب مباشر إلى سكربت صغير يطبّع ويرفع. اختر المسار الأصلي للأداة لمصدر واحد وإيقاع واحد؛ واختر n8n لحظة امتلاكك عدة أدوات أو منطقا متفرعا أو خطوات مرافقة كالتنبيهات والكتابة في قواعد البيانات. ويغطي دليل خطوط RAG أنماط الاستيعاب والتقطيع التي يندمج فيها سير العمل هذا بتوسع أكبر.

توصيل مُسترجِع LangChain

مع وصول المتجهات وفق الجدول، يحوّل LangChain المخزن إلى إجابات. الرسم أدناه بايثون يستخدم قطع LangChain الموثقة المجتمعية — ApifyDatasetLoader للتحميلات المخصصة، وRecursiveCharacterTextSplitter للتقطيع، ونموذج تضمينات، ومخزن متجهات Qdrant، وسلسلة استرجاع. وهو رسم توضيحي لا سكربت مُختبَر: ثبّت هذه الواردات على إصدارَي langchain وlangchain-community المثبتَين لديك وتوقع أن تكون الأسماء قد انزاحت.

from langchain_community.document_loaders import ApifyDatasetLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings
from langchain_qdrant import QdrantVectorStore
from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.prompts import ChatPromptTemplate

# 1. تحميل مخصص: اسحب تشغيلا مكتملا واحدا إلى مستندات مباشرة.
#    يستخدم معرّف مجموعة البيانات الذي سلّمه خطاف الويب أصلا.
loader = ApifyDatasetLoader(
    dataset_id="YOUR_DATASET_ID",
    dataset_mapping_function=lambda item: item.get("text", ""),
)
docs = loader.load()

# 2. التقطيع للاسترجاع: التداخل يمنع انقسام الإجابات وسط الحقيقة.
splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=150)
chunks = splitter.split_documents(docs)

# 3. الفهرسة: مجموعة Qdrant نفسها التي يرفع إليها سير عمل n8n،
#    فتتقاسم التشغيلات المجدولة والتحميلات المخصصة ذاكرة واحدة.
vectorstore = QdrantVectorStore.from_documents(
    chunks,
    OpenAIEmbeddings(),
    collection_name="docs-index",
)
retriever = vectorstore.as_retriever(search_kwargs={"k": 5})

# 4. الإجابة: سلسلة استرجاع مع تعليمة نظام توثّق المصادر.
system = (
    "Answer from the retrieved context only. "
    "Say when the context is insufficient."
)
prompt = ChatPromptTemplate.from_messages([("system", system), ("human", "{input}")])
chain = create_retrieval_chain(retriever, create_stuff_documents_chain(llm, prompt))
answer = chain.invoke({"input": "What changed in the docs this week?"})

ثلاثة خيارات تصميمية تنجز معظم العمل. أولا، مجموعة واحدة لكل شكل بيانات (التوثيق مقابل الأخبار)، مرآة لخطوة الرفع في n8n، فلا يخفّف المُسترجِع أعلى نتائجه بالمجموعة الخاطئة أبدا. ثانيا، بيانات وصفية على كل مقطع — رابط المصدر والأداة وطابع زمن الزحف — لتستشهد الإجابات بمصدر كل حقيقة وعمرها. ثالثا، تعليمة «صرّح عند عدم الكفاية» التي تحوّل فجوة المعرفة الصامتة إلى إشارة مرئية — وهذه الإشارة هي بالضبط ما يُطلق مسار MCP في القسم التالي.

ربط MCP: دع الوكيل يطلب كشطا طازجا

تغطي الفهرسة المجدولة كل سؤال تتحمل إجابته تأخر التحديث. لكن الوكيل سيواجه عاجلا أم آجلا سؤالا لا يستطيع الإجابة عنه من الفهرس: خبر عاجل منذ سحب هذا الصباح، أو صفحة تغيرت قبل ساعة، أو مصدر لم يجدوله أحد. عندها يجب أن يتوقف الوكيل عن الاسترجاع ويبدأ الكشط — والطريقة النظيفة لمنحه تلك القدرة هي خادم MCP من Apify.

يستغرق الإعداد الكامل أقل من عشر دقائق وهو موثق خطوة بخطوة أصلا في شرح خادم MCP من Apify: وجّه عميلا متوافقا مع MCP (سطح مكتب Claude أو Cursor أو أي وكيل مبني على محولات MCP في LangChain أو LlamaIndex) إلى mcp.apify.com، وتحقق مرة واحدة برمز Apify البرمجي، فيكسب الوكيل سوق الأدوات كله كأدوات قابلة للاستدعاء. اتبع ذلك الدليل أولا ثم عد — فما يلي يفترض أن الاتصال قائم.

ومساهمة كتاب الوصفات هي قاعدة القرار التي تخبزها في موجّه الوكيل، وهي مملة عن قصد:

  1. أجب من مُسترجِع LangChain أولا، مستشهدا بروابط المصادر وطوابع زمن زحفها.
  2. إذا كان السياق المسترجع غير كاف أو أقدم مما يسمح به السؤال، فاستدعِ أداة الأداة المطابقة بمدخلات startUrls مع maxItems محكمة — الحقلان نفسهما اللذان يستخدمهما خط الأنابيب المجدول.
  3. لخّص النتيجة الطازجة للمستخدم، و(اختياريا) أعد إرسالها إلى خطاف ويب n8n فيصيب السؤال المطابق التالي الفهرس الدافئ بدلا من دفع ثمن تشغيل آخر.

الخطوة 3 هي التفصيل الذي يغلق الحلقة: فعمليات الكشط عند الطلب تصبح معرفة مجدولة، فيغدو النظام أرخص وأسرع كلما استُخدم أكثر. ولأن مدخلات أدوات الوكيل تستخدم شكل الحقلين المطابق نفسه لعقد البدء في n8n، فالمراجعة الأمنية بسيطة — حدّ maxItems في وصف الأداة، وقيّد startUrls بالنطاقات المعتمدة، ولا مفاجأة حقن موجّه يمكنها تحويل سؤال إلى زحف لألف صفحة.

استراتيجية التحديث والتكاليف الصادقة

خط الأنابيب بلا سياسة تحديث إما قديم أو يحرق المال. اضبط الإيقاع على إيقاع القرار لا على الحماس: يومي لمواضيع الأخبار وكل ما تُضلّل فيه إجابة الأمس (وهنا تستحق كاشطة أخبار جوجل مكانتها)، وأسبوعي للتوثيق والمصادر دائمة الخضرة (وهذه أرض زاحف محتوى الموقع)، وعند الطلب لكل سؤال عبر MCP لما عدا ذلك. وتملأ الكاشطة العامة الفجوات في أي إيقاع عند ظهور مصدر جديد. ووثّق الإيقاع بجانب البيانات — أي أداة وأي روابط وأي تاريخ — فلن تُفسَّر إجابة غريبة بعد ستة أشهر إلا إذا عرفت بالضبط ما قيس ومتى.

تبقى التكاليف صادقة عندما تُحاسَب كل مرحلة منفصلة وتقتبس الأرقام المنشورة لا التخمينات. فعلى جانب الكشط تنشر صفحات المتجر نماذجها: يتبع زاحف محتوى الموقع نموذج الدفع حسب النتيجة بدءا من 2.97 دولار لكل 1,000 نتيجة؛ والكاشطة العامة أداتها مجانية وتدفع استخدام الحوسبة للمنصة فقط (نحو 0.04 دولار لوحدة الحوسبة، يغطيها رصيد Apify المجاني البالغ 5 دولارات شهريا)؛ وتدرج كاشطة أخبار جوجل إيجارا شهريا يبدأ من 20 دولارا إضافة إلى تكاليف الاستخدام. وهذه أرقام معلنة من البائع وقت الكتابة — أكّد كلا منها في تبويب أسعار المتجر حيث تعيش الأرقام الحالية، واقرأ دليل أسعار Apify لتفهم سلوك وحدات الحوسبة على كل نطاق. ورافعتا التكلفة لديك هما انضباط maxItems والإيقاع: حدّ كل تشغيل بالحجم الذي ستستعلم عنه فعلا، وشغّل يوميا فقط حيث تغيّر الإجابات اليومية القرارات.

وتُحاسَب التضمينات وتخزين المتجهات عبر مزودَيهما علاوة على ذلك — ولا أرقام مقتبسة هنا لأنها تعتمد على اختيار نموذجك وحجم المقاطع ونافذة الاحتفاظ، وكلها يقيسها خط الأنابيب هذا بدقة (عُدّ عمليات الرفع لأسبوع ثم سعّرها). ابدأ بمصدر توثيق واحد على إيقاع أسبوعي مع موضوع أخبار واحد يوميا، وراقب فواتير شهر بجانب إجابات شهر، ووسّع الزحف فقط عندما تثبت الإجابات أنها تقود قرارات. فخط الأنابيب الذي يعمل دون لمس لأسابيع على رصيد 5 دولارات بينما يجيب عن أسئلة حقيقية بنية تحتية؛ وخط الأنابيب الذي يفهرس الويب كله ولا يستعلم عنه أحد هواية بعدّاد يشتغل.

موارد ذات صلة

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

هل أحتاج إلى n8n أم يمكن للأداة أن تجدول نفسها؟
لأداة واحدة على إيقاع ثابت يكفي تبويب الجداول المدمج في الأداة مع خطاف ويب. ويستحق n8n مكانه عندما توزع العمل على عدة أدوات، أو تتفرع حسب نتائج التشغيل، أو تزيل التكرار، أو تجمع الكشط مع التنبيهات والكتابة في قواعد البيانات في سير عمل مرئي واحد.
لماذا لا أتجاوز مخزن المتجهات وأجعل الوكيل يستدعي الكاشطة كل مرة؟
بسبب زمن الاستجابة والتكلفة. فالكشط الجديد يستغرق دقائق ويستهلك الحوسبة مع كل سؤال، بينما يستغرق البحث في المتجهات أجزاء من الثانية وتكلفته شبه معدومة. فهرس وفق جدول للأسئلة المتكررة، واحتفظ بالكشط عند الطلب — عبر MCP — للأسئلة التي تغير حداثتها الإجابة فعلا.
ما حقول إدخال الأداة التي يعتمد عليها خط الأنابيب هذا؟
فقط startUrls وmaxItems، وهما حقلا الإدخال الموثقان المشتركان بين الأدوات الثلاث المستخدمة هنا. كل سير عمل أدناه يمرر هذين الحقلين ويجري كل التطبيع والتقطيع وإزالة التكرار لاحقا، فاستبدال أداة بأخرى لا يعيد توصيل خط الأنابيب أبدا.
ما مدى حداثة البيانات التي يراها الوكيل؟
بحداثة أبطأ مرحلة بالضبط: إيقاع الجدولة مضافا إليه مدة تشغيل الأداة وزمن الفهرسة. فسحب الأخبار اليومي يعني أن الإجابات تتأخر عن الويب الحي حتى يوم كامل، ولهذا يهم ربط MCP — فهو يتيح للوكيل طلب كشط جديد تماما عندما يتطلب السؤال ذلك.
✍️

الكاتب: ParseFlow

فريق التحرير في ParseFlow يتألف من خبراء في استخراج بيانات الويب والأتمتة. نحن نختبر ونراجع باستمرار أدوات Apify لضمان تقديم أفضل التوصيات العملية وأكثرها دقة.

اقرأ إرشاداتنا التحريرية ←

شارك هذا:

الوسوم

#خط البيانات الحية #أتمتة n8n #langchain rag #خادم apify mcp #قاعدة بيانات المتجهات
✍️

ParseFlow

استوديو سحب البيانات والأتمتة

سنوات من الخبرة العملية في بناء وصيانة أدوات سحب البيانات. ننشر أدوات حقيقية ومستخدمة فعلياً على متجر Apify تحت علامة Website Harvester — بما في ذلك أداة Articles Extractor — إلى جانب فهرسة ومراجعة نظام Apify الأوسع هنا في ParseFlow.