AI · RAG security · Document ingestion

إدخال RAG الآمن: اعزل المستندات قبل الفهرسة

معمارية إنتاج لعزل المستندات غير الموثوقة وحفظ مصدرها ومنع المحتوى المسترجع من التحول إلى تعليمات ذات صلاحية.

المسار المرتبطالذكاء الاصطناعي وRAG والبحث المتجهي
ماسح أوراق يُستخدم لرقمنة المستندات المنفصلة، في توضيح لحد الإدخال المنضبط قبل دخول المستند إلى فهرس RAG.
h

يمكن لنظام RAG استرجاع مستند خبيث بالدقة نفسها التي يسترجع بها سياسة موثوقة. لا تميز Embeddings بين الدليل والتعليمات، ولا تثبت Similarity Score العالية أن الملف آمن أومصرح به أوحديث. التصميم الآمن هو عزل كل مستند جديد، وإثبات مصدره ونطاق وصوله، واستخراجه داخل Worker معزول، وفحص التمثيل المستخرج، ونشر Index Version ثابتة، مع الاستمرار في معاملة كل مقطع مسترجع كبيانات غير موثوقة وقت الإجابة.

هذا دليل هندسي عملي، وليس إعلانًا عن منتج جديد من OpenAI. تنص وثائق OpenAI الرسمية على أن Prompt Injection يبدأ عندما تحاول بيانات غير موثوقة تجاوز تعليمات النظام، وتوصي بعدم وضع المتغيرات غير الموثوقة داخل Developer Messages واستخدام Structured Outputs بين عقد Workflow. كما توثق File Search وRetrieval كيف تصبح الملفات المرفوعة محتوى قابلًا للبحث داخل Vector Stores. ويحدد NIST مخاطر Resource Control وData Poisoning وMalware والحاجة لإعادة تقييم المخاطر بعد تطبيق RAG. أما مسار العزل أدناه فهو تصميم هندسي مبني على تلك المصادر وتم التحقق منها في 26 أكتوبر 2026.

الخلاصة أولًا

لا ترفع ملف العميل مباشرة إلى Vector Store الحي. امنح الرفع هوية ثابتة، واحفظ الأصل بشكل خاص، وحلله في بيئة معزولة، وصنف الناتج وافحصه، واربط Metadata الصلاحيات الموثوقة خارج سيطرة المستند، ثم انشر Index Version مكتملة بعد نجاح كل البوابات. وعند البحث، اشتق Tenant وACL Filters من حالة التطبيق الموثقة، وحمّل النص المصرح من مصدر الحقيقة، وافصل المحتوى المسترجع كدليل، واطلب موافقة مستقلة لأي Side Effect.

المرحلةالقرار الموثوقالمادة غير الموثوقة
Uploadالمالك الموثق والتاجر والغرضاسم الملف وMIME المعلن والبايتات
Extractionسياسة Parser وحدوده وهوية Workerالنص والروابط وMacros والكائنات المضمنة
Classificationنوع المستند والوجهة المعتمدانالتعليمات المكتوبة داخل المستند
Indexingالإصدار الثابت وACL وPipeline VersionChunks وEmbeddings
RetrievalScope مشتقة من الخادم والصلاحية الحاليةSimilarity Score والنص المسترجع
Generationسياسة النظام والعقد المنظمادعاءات المستند وأوامره المضمنة
Actionتفويض الخدمة المالكة والموافقةTool Arguments اقترحها Model

ضع Threat Model لحدود الإدخال

قد يكون رافع الملف ومصدره ومؤلفه جهات مختلفة. يمكن لموظف موثوق رفع PDF لمورد يحتوي نصًا مخفيًا. وقد يستورد Crawler صفحة مخترقة، أوتتغير معرفة موثوقة بعد اعتمادها، أويوسع Parser ملفًا صغيرًا مضغوطًا إلى جيجابايتات. وقد يأمر مقطع مسترجع الـModel بتجاهل السياسة أوكشف أسرار أواستدعاء Tool.

نمذج على الأقل هذه الفئات:

  • Indirect Prompt Injection: تعليمات تصل داخل مستند أوصفحة أوEmail أونص OCR؛
  • Data Poisoning: محتوى مصمم يغير Chunks المسترجعة أوخلاصة المساعد؛
  • Parser Exploitation: ملفات تالفة أوDecompression Bombs أوConverters ضعيفة تهاجم Workers؛
  • Scope Poisoning: Metadata يسيطر عليها المهاجم تنقل المحتوى إلى Tenant أوAudience خاطئة؛
  • Provenance Loss: لا تعود Chunks مرتبطة بالبايتات والإصدار والموقع المحدد؛
  • Stale Deletion: ملف مسحوب يبقى قابلًا للبحث في Index قديمة أوCache أوReplica.

يسمي تصنيف NIST للتعلم الآلي العدائي سيطرة المهاجم على الموارد الخارجية المستخدمة وقت Inference بـResource Control ويربطها بـIndirect Prompt Injection. هذا تصنيف للتهديد وليس وعدًا بأن Scanner واحدة ستكتشفه.

ابن State Machine للعزل

أبق الملف الأصلي خارج Corpus القابلة للبحث حتى تصل State Machine إلى published:

received -> stored -> type_verified -> extracted -> scanned
         -> classified -> approved -> indexed -> published

any gate -> rejected | quarantined | needs_review
published -> superseded -> tombstoned -> verified_absent

تكتب كل Transition هوية Actor والوقت وإصدار السياسة وInput Digest وOutput Digest والسبب. تستأنف Retry إصدار المستند نفسه بدل إنشاء نسخة مرئية ثانية. وسجل الفشل صراحة؛ فإذا انتهت مهلة Ingestion Job بعد كتابة نصف Chunks، فلا يجب أن يصبح الإصدار الجزئي قابلًا للبحث.

تفصل هوية مفيدة بين المستند المنطقي وإصداراته الثابتة:

{
  "tenant_id": "derived-by-server",
  "document_id": "policy:returns",
  "version_id": "sha256:original-bytes",
  "source_uri": "controlled-reference",
  "ingestion_policy": "rag-ingest-v7",
  "parser_version": "pdf-pipeline-v4",
  "acl_revision": "acl-218",
  "status": "quarantined"
}

يكشف Digest تغير البايتات، لكنه لا يثبت المؤلف أوالسلامة. يمكن لـSigned Upstream Event أوRepository Commit أوCMS Audit Trail أوموافقة بشرية تقوية Provenance.

مخطط هندسي أصلي: عزل واستخراج منفصل وبوابات سياسة ونشر ذري للفهرس وإعادة تفويض وقت التشغيل. الصورة للمصور Oby Ezeilo بترخيص CC BY 4.0 عبر Wikimedia Commons؛ قد تُغيّر أبعادها للعرض المتجاوب.
مخطط هندسي أصلي: عزل واستخراج منفصل وبوابات سياسة ونشر ذري للفهرس وإعادة تفويض وقت التشغيل. الصورة للمصور Oby Ezeilo بترخيص CC BY 4.0 عبر Wikimedia Commons؛ قد تُغيّر أبعادها للعرض المتجاوب. اضغط لعرض أكبر

تحقق من النوع قبل Parsing

لا تثق بالامتداد أوContent-Type الذي يعلنه Client. قارن Magic Bytes والنوع المكتشف والصيغ المسموحة. ضع حدودًا للحجم المضغوط والمفكوك وعدد الصفحات والكائنات وRecursion Depth وTimeout والذاكرة والمعالج. وارفض الملفات المشفرة أوالمحمية بكلمة مرور ما لم يملك المنتج مسارًا آمنًا وصريحًا لها.

شغّل Parsers وOCR داخل Workers قصيرة العمر بلا Production Credentials، مع Input Mount للقراءة فقط، وموقع Output مستقل، ووصول شبكة محدود. حدّث Parser Image بصورة منفصلة عن Web App. وعامل Macros وScripts والمراجع الخارجية والملفات المضمنة كمحتوى نشط: احذفها أوارفضها أوحوّلها لتحليل متخصص حسب السياسة. Antivirus وسيلة للبرمجيات الخبيثة المعروفة، وليست إثباتًا أن النص آمن للـLLM.

احتفظ بالأصل وNormalized Extraction Manifest. يجب أن يسجل Manifest الصفحات والعناوين والجداول والصور والروابط والكائنات المضمنة وOCR Confidence وتحذيرات الاستخراج. قد يؤدي Parser يسقط جدولًا بصمت إلى Integrity Failure حتى دون مهاجم.

افصل بيانات المستند عن Control Metadata

لا تسمح للمستند باختيار tenant_id أوACLs أوSource Authority أوRetention أوLegal Status أوApproval State. تشتق Trusted Application Code هذه الحقول من مسار الرفع الموثق وPolicy Service، وتحفظها كـTyped Metadata بجانب Artifact وتعرضها داخل كل Searchable Point.

تدعم OpenAI File Search التصفية عبر Metadata، ويبحث Retrieval API داخل Vector Stores باستخدام File-attribute Filters. هذه قدرات مفيدة للتنفيذ، لكن التطبيق يبقى مالك السياسة. لا يقبل Public Request Tenant Filter اعتباطية؛ ابن الفلتر على الخادم وطبقه على كل Retrieval Branch.

في Corpora عالية المخاطر، حمّل Chunk النهائية عبر Authorized Repository بعد Vector Search. تعيد Vector Store Candidate Identities، ثم تعيد Source-of-truth Service فحص صلاحية المستخدم الحالية وتعرض Canonical Text. يكشف هذا ACL Projections القديمة ويمنع Vector Point من أن تصبح Authority.

افحص المحتوى دون ادعاء كشف كامل

استخدم عدة Detectors ضيقة بدل Flag واحدة باسم safe:

Detectorمثال للناتجالتصرف
Malware ScannerSignature أوكائن مشبوهرفض أوSpecialist Quarantine
Content PolicyData Class ممنوعةCorpus مقيدة أورفض
Instruction Detectorنص يخاطب Model أوToolsتعليم واختبار دون منح صلاحية
Secret/PII DetectorCredential أوبيانات شخصيةRedact أوTokenize أوتقييد
Provenance Checkمصدر غير موقع أوتغيرمراجعة مطلوبة
Duplicate DetectorDigest/Version موجودةأعد استخدام النتيجة ومنع Index Write مكررة

يمكن لـPrompt-injection Classifier تقليل الخطر، لكن تبقى False Negatives. لذلك يجب أن يكون Runtime آمنًا حتى إذا مر نص خبيث. لا تنقل النص المشبوه إلى Developer Message. افصله كدليل مسترجع، وقيد تدفق البيانات بين Nodes بـStructured Schemas، وأبق Authorization وTool Policy خارج Model.

انشر Indexes بشكل ذري

أنشئ Chunks وEmbeddings وIndex داخل Staging Version. سجل لكل Chunk إصدار المصدر والموقع وContent Digest وإصدارات Parser وEmbedding وACL Revision وPublication State. قارن Expected Chunks بالمكتوبة، وشغّل Sample Retrieval وPermission Tests، ثم بدّل Alias أوApplication Pointer ذريًا.

تنص وثائق OpenAI Retrieval على أن إضافة ملف إلى Vector Store تجعله يُقسّم ويُضمّن ويُفهرس تلقائيًا. وتشير أيضًا إلى أن حذف الملفات Eventually Consistent، وقد تعيد نتائج البحث محتوى محذوفًا لفترة قصيرة. لذلك لا تعتبر قبول Delete Call دليلًا فوريًا على الغياب عند سحب محتوى حساس. امنع Document ID داخل التطبيق، وأوقف Hydration، وامسح Caches، وطابق حتى يختفي المحتوى القديم، وسجل دليل الإكمال.

تعامل مع المقاطع كدليل لا تعليمات

استخدم عقدًا ثابتًا وقت Generation:

  1. تحدد System وDeveloper Policy المهمة والأدوات المسموحة.
  2. يحدد نص المستخدم الطلب لكنه لا يمنح Authority جديدة.
  3. تعرض المقاطع كEvidence مع Citation IDs ثابتة.
  4. يعيد Model جوابًا منظمًا أوTyped Abstention.
  5. يتحقق Validator من Citation IDs وOutput Schema.
  6. يُفوض أي Write Action ويُعتمد بشكل مستقل.

لا تضع أسرارًا أوTool Credentials واسعة أوسجلات خاصة غير مرتبطة داخل Context. ضع حدًا للـTokens وChunks لكل مستند حتى لا يهيمن مصدر مسموم. وإذا تعارضت المصادر، فاتبع Authority وEffective Dates تحددها السياسة؛ وإلا اعرض التعارض بدل تكليف Model باختيار الحقيقة من Similarity.

قيّم الهجمات وإخفاقات دورة الحياة

أنشئ Security Evaluation Set بجانب Relevance Tests. ضم سياسة بريئة تحتوي كلمات مثل “ignore previous”، وتعليمة خبيثة مخفية في Footer، ونصًا أبيض استخرجه OCR، ونسخة مسمومة بتاريخ أحدث، ومستند Cross-tenant، ومستندًا مسحوبًا، وParser Timeout، وArchive Bomb، وملفًا يتغير بعد الاعتماد.

قس أكثر من Accuracy المصنف:

  • يجب أن تكون Unauthorized Retrieval Rate صفرًا في Test Suite؛
  • Revoked-content Retrieval وHydration Rates؛
  • Injection-following Rate وForbidden Tool-call Rate؛
  • Citation Validity ودقة Source Version؛
  • Quarantine False Positives وزمن Manual Review؛
  • الزمن من Revocation إلى Verified Absence؛
  • Incomplete Publication وOrphaned-point Counts.

يوصي NIST Generative AI Profile باختبار مخاطر Value Chain، ومنها Poisoning وMalware والخصوصية وLocalization، وإعادة تقييم المخاطر بعد تطبيق RAG، وتوثيق المصادر وProvenance. هذه توصيات حوكمة؛ حوّلها إلى Controls قابلة للتنفيذ وأدلة يستطيع تطبيقك إثباتها.

أفضل الممارسات وAnti-patterns

أفضل الممارسات

  • احتفظ بالبايتات الأصلية وProvenance ثابتة.
  • نفذ Parsing داخل Workers معزولة ومحدودة الموارد.
  • أبق ACL وAuthority Metadata خارج تحكم المستند.
  • انشر Index Versions مكتملة بشكل ذري.
  • أعد التفويض عند Hydration لا وقت الإدخال فقط.
  • أبق النص المسترجع خارج الرسائل ذات الأولوية.
  • تحقق من الحذف عبر Index وCache وReplicas.
  • أعد Red Team للخط الكامل بعد تغييرات Parser أوModel أوPolicy.

Anti-patterns

  • الرفع مباشرة إلى Vector Store الحية.
  • الثقة بالامتداد أوMIME Header أواسم الملف.
  • اعتبار Antivirus أوInjection Classifier ضمانًا.
  • السماح للنص بتحديد Tenant أوAudience Metadata.
  • إعطاء جواب RAG أداة كتابة غير مقيدة.
  • اعتبار الحذف مكتملًا عند قبول API للطلب.
  • تسجيل المستندات وPrompts الخاصة في Observability عامة.

خلاصة التنفيذ

  1. حدد المصادر والصيغ وData Classes وقواعد المراجعة.
  2. أنشئ هويات ثابتة للمستند وإصداراته.
  3. احفظ الأصل خاصًا ونفذ Parsing في Workers معزولة.
  4. سجل Extraction Manifest وSecurity Findings منظمة.
  5. اشتق Tenant وACL وAuthority من حالة موثوقة.
  6. اكتب في Staging مع Provenance Metadata مكتملة.
  7. شغّل Retrieval وPermission وInjection وDeletion Tests.
  8. انشر ذريًا واحتفظ بمؤشر Rollback.
  9. أعد تفويض Candidates قبل Hydration.
  10. تحقق من Citations وAbstention وTool Proposals وقت التشغيل.

اقرأ أيضًا: معمارية RAG للإنتاج، وعزل العملاء في Qdrant، وتقييم Retrieval في RAG، وProvenance للاستشهادات، ومركز AI وRAG وVector Search.

المراجع الأساسية

المراجع الرسمية

تدعم هذه المراجع سلوك الأدوات المذكورة. الأمثلة وقرارات التصميم توضيحية، ويجب تكييفها مع متطلبات المشروع وإصداراته.

إعداد: Noor Yasser

من القرار إلى التنفيذ

تعمل على تحدٍ تقني مشابه؟

أساعد الفرق على تحويل القرار المعماري إلى نطاق واضح وتنفيذ يمكن تشغيله ومراجعته بثقة.

احجز لقاءً لمدة ٣٠ دقيقةالخدمة المرتبطةهندسة الأنظمة الخلفية وتكاملات APIمشروع من الأعمالمنصة اللوجستيات