الذكاء الاصطناعي · هندسة أدلة RAG

استشهادات RAG: حافظ على الدليل من الاسترجاع إلى الإجابة

معمارية إنتاج تحفظ هوية المصدر والصلاحيات والمقطع الداعم خلال كل تحويل داخل خط RAG.

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

تحتاج استشهادات RAG الموثوقة إلى خط بيانات للدليل، لا Prompt يطلب من النموذج أن «يضيف مصادر». كل مقطع يصل إلى النموذج يحتاج Evidence ID ثابتًا مرتبطًا بإصدار مستند مصرح به، وChunk أو Span محدد، وتشغيل الاسترجاع الذي اختاره. يجب أن تبقى هذه الهوية سليمة بعد Query Rewriting وHybrid Retrieval وReranking وإزالة التكرار وبناء السياق. لا تسمح طبقة الإجابة إلا بمعرفات موجودة في Evidence Set المرسل، ثم يحل Verifier هذه المعرفات ويعيد فحص الصلاحيات ويتأكد أن كل مقطع يدعم الادعاء القريب منه. تهم هذه المعمارية لوثائق المنتجات والدعم والامتثال وقواعد المعرفة الداخلية، حيث تبقى الإجابة المقنعة بلا دليل قابل للتتبع فشلًا.

توثق OpenAI أن File Search قد يعيد File Citation Annotations داخل النص، بينما لا تظهر نتائج البحث نفسها افتراضيًا إلا عند طلب file_search_call.results صراحة. وتوفر Anthropic استشهادات أصلية لمحتوى المستندات وSearch Result Blocks. ويخزن Qdrant بيانات Payload مع Points ويمكنه إعادتها مع المرشحين. هذه لبنات مفيدة، لكنها لا تحدد تلقائيًا سياسة Source Version أو Tenant Boundary أو اختبار دعم الادعاء أو مسار إبطال المصدر؛ على التطبيق امتلاك هذا العقد.

عرّف نجاح الاستشهاد قبل اختيار المزود

ينجح الاستشهاد عندما يستطيع القارئ الإجابة عن أربعة أسئلة: أي مصدر يدعم الادعاء، وأي إصدار استُخدم، وأي مقطع دقيق وصل للنموذج، وهل يملك القارئ صلاحية رؤيته. رابط الصفحة الرئيسية للمستند لا يكفي عندما يتغير المحتوى. وChunk ID لا يكفي إن لم يكن قابلًا للحل خارج Vector Database. ورقم هامش أنشأه النموذج لا يكفي إن لم يُفحص أمام النتائج المسترجعة.

افصل صحة الإجابة عن جودة الاستشهاد. قد تكون الإجابة صحيحة بالمصادفة مع استشهاد خاطئ، وقد يشير الاستشهاد إلى مقطع ذي صلة بينما تبالغ الجملة في معناه. قس Claim Coverage وCitation Validity وPassage Entailment كلًا على حدة، ولا تخلطها مع جودة الأسلوب. في الحالات عالية المخاطر، Abstention مع فجوة دليل واضحة أفضل من إجابة كاملة المظهر مصنوعة من التخمين.

ابنِ عقد دليل غير قابل للتغيير

مثّل كل وحدة قابلة للاسترجاع بحقول ثابتة مثل tenant_id وdocument_id وdocument_version وchunk_id وsource_uri وtitle وsection_path وcontent_hash وspan_start وspan_end. خزّن وقت الإدخال وفترة الصلاحية عندما تكون الحداثة مهمة. ضع Authorization Labels في Metadata موثوقة لا داخل نص يستطيع النموذج إعادة تفسيره. أما Vector Score وReranker Score فهما وصف لعملية استرجاع وليسا هوية المصدر.

اجعل إصدار المستند Immutable. عندما يتغير المحتوى، أنشئ Version جديدة وChunk Hashes جديدة، ثم أخرج النسخة القديمة عبر Alias أو Validity Rule مضبوطة. يتيح ذلك إعادة إنتاج الاستشهاد ويجعل Audit Record يثبت النص الذي رآه النموذج. وإذا كانت الواجهة تعرض كلمة «الأحدث»، فحلها قبل الاسترجاع وسجّل Version الحقيقية المستخدمة.

تستطيع Qdrant Points حمل JSON Payload اختياري ودعم Filters على حقولها. استخدم Payload للهوية والنطاق الموثوق، وأنشئ Payload Index للحقول المستخدمة في الفلاتر، واطلب Payload اللازمة في نتيجة Query. لا تحاول إعادة بناء أصل الدليل من نص Chunk بعد الاسترجاع.

حافظ على الهوية خلال الاسترجاع وإعادة الترتيب

يجب أن ينتج Query Rewriting استعلامات استرجاع لا هويات مصادر جديدة. قد يعيد Dense وSparse Retrieval المقطع نفسه عبر مسارين مختلفين. ادمج المرشحين حسب Evidence ID الثابت، واحتفظ بالرتب والدرجات الأصلية للتشخيص، ثم أعد ترتيب القائمة الموحدة. لا تعين أرقام الاستشهاد قبل إزالة التكرار؛ وإلا قد يظهر المقطع نفسه بأرقام مختلفة.

تستطيع Hybrid Queries في Qdrant تشغيل Prefetches متعددة ثم دمج المرشحين. تفيد رتبة Fusion في الترتيب، لكن التطبيق ما يزال يحتاج Point ID وPayload الأصليين. أرسل إلى Reranker Envelope يحتوي evidence_id والنص، واشترط أن يعيد evidence_id دون تغيير. ارفض أي نتيجة بمعرف مفقود أو متكرر بصورة غير متوقعة أو خارج Candidate Set المصرح بها.

أنشئ Retrieval Ledger لكل إجابة: الاستعلام الأصلي، والاستعلامات المعاد صياغتها، والفلاتر، ومعرفات المرشحين، ونتيجة الدمج، وترتيب Reranker، والThresholds وإصدارات النماذج. اخفِ النص الحساس إن لم تملك Logs الحد الأمني نفسه لقاعدة المعرفة. الغرض من Ledger التشخيص والتقييم، لا صنع نسخة غير مضبوطة من المستندات الخاصة.

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

ابنِ السياق دون كسر أصل الدليل

يدمر Context Construction الاستشهادات كثيرًا بالمصادفة. تدمج الفرق Chunks متجاورة أو تقص النص ليلائم Token Budget أو تلخص المرشحين، ثم تحتفظ بالOffsets القديمة كأن المقطع لم يتغير. بدل ذلك، أنشئ Evidence Manifest بعد التعبئة النهائية. يأخذ كل Block تسمية محلية للطلب مثل E1، لكن E1 تشير إلى Evidence Record ثابتة وإلى النص الفعلي المرسل للنموذج.

إذا دمجت Chunks متجاورة، خزّن Child IDs المرتبة وHash النص المدمج. وإذا قصصت Block، فسجّل Span الجديدة أو عامله كدليل مشتق له Parents. لا تُشر إلى حروف لم تصل للنموذج. ضع Evidence Label والعنوان والمسار خارج نص المصدر غير الموثوق حتى لا يزور مستند تعليمات أو ينتحل مصدرًا آخر.

هذا Context Envelope توضيحي:

\`\`\`json { "evidence_id": "E3", "source": { "tenant_id": "tenant_42", "document_id": "refund-policy", "document_version": "2026-10-10", "chunk_id": "refund-policy#returns#04", "content_hash": "sha256:...", "uri": "/policies/refunds#returns" }, "text": "يجب إرسال طلب الاسترداد خلال ...", "retrieval": {"dense_rank": 7, "sparse_rank": 2, "final_rank": 1} } \`\`\`

تستطيع الاستجابة العامة عرض عنوان وURI آمنين، بينما يحتفظ سجل التدقيق بالمعرفات الداخلية. لا تعرض Tenant IDs أو Storage Paths أو أسماء ملفات سرية لمجرد وجودها في Payload.

اختر توليد الاستشهاد الأصلي أو المحمول

تقلل Native Citations عمل التنسيق عندما يلائم Evidence Flow عقد المزود كاملًا. تستطيع Anthropic Document Citations إرفاق مراجع بمواقع محددة من المصدر، وتسمح Search Result Blocks لـClaude بالاستشهاد بنتائج بحث قدمها التطبيق مع المصدر والعنوان. وتستطيع OpenAI File Search إنتاج file_citation annotations داخل Response Text. استخدم هذه الميزات عندما يلائم Source Representation وStreaming Behavior وOutput Metadata متطلبات المنتج.

الأسلوب المحمول أفضل عندما تستخدم الاسترجاع والتوليد من مزودين مختلفين، أو تجمع Qdrant وSQL وProvider Search في إجابة واحدة. أعط النموذج Evidence Manifest مغلقة، واطلب Claim Objects منظمة تختار Evidence IDs من Enum. ابنِ Footnotes المقروءة داخل كود التطبيق لا داخل نص النموذج الحر؛ عندها لا يؤدي تغيير صياغة بريء إلى إفساد أرقام الاستشهاد.

لا تفترض أن Native Citations تلغي التحقق. تأكد أن كل Annotation تعود إلى Input Source، وأن Cited Text تنتمي إلى Version المسجلة، وأن الواجهة تعرض Target الصحيحة. ويجب أن تطبق Streaming Consumers أحداث Annotation دون فقدان Character Ranges أو تحريكها عندما يُعدل النص.

تحقق من الادعاءات بعد التوليد

يبدأ Verifier حتميًا: حلل الاستجابة، واجمع Evidence IDs، وارفض المعرفات المجهولة أو غير المصرح بها، واكتشف الاستشهادات بلا Claim قريب والادعاءات الواقعية بلا استشهاد. حل كل ID عبر Evidence Manifest بدل الثقة في URI كررها النموذج. أعد فحص Tenant Permissions وDocument Permissions عند إخراج الاستجابة، لأن الصلاحية قد تتغير خلال طلب طويل.

ثم قيّم الدعم. قسّم الإجابة إلى Atomic Claims، واختبر هل يدعم المقطع المستشهد به كل Claim دون الاعتماد على معرفة مخفية خارجية. عامل الدعم الجزئي وتعارض المصادر والثقة الزائدة كحالات مختلفة. يستطيع Model Judge المساعدة على نطاق كبير، لكن عايره أمام Human Labels وأبقِ Failure Categories الحتمية ظاهرة.

تحقق أخيرًا من الحداثة والسلطة. قد تحتوي Policy Draft الكلمات الصحيحة لكنها مستبدلة، وقد يجيب Forum Post عن السؤال دون أن يكون مرجعًا رسميًا. رتّب Source Authority وValidity بصورة مستقلة عن Semantic Relevance. وإذا كانت الحقيقة الحالية في Database، فاسترجع Record مباشرة واستشهد بعرض System of Record بدل Snapshot نثرية قديمة.

قيّم خط الدليل لا جودة النثر فقط

أنشئ Labeled Set فيها أسئلة وExpected Claims وAcceptable Evidence IDs وForbidden Evidence وحالات Abstention. قس Retrieval Recall قبل Reranking، وEvidence Recall بعد Context Packing، وCitation Precision وCitation Coverage وUnsupported Claim Rate وStale Source Rate وAuthorization Violations. وقس Latency وToken Cost لكل مرحلة لمعرفة هل يكسب Reranker أو Verifier الإضافي ميزانيته.

اختبر حالات هجومية: مستندات مكررة، وإصدارات متناقضة، وChunk خبيثة تطلب من النموذج تجاهل قواعد الاستشهاد، ونتيجة من Tenant آخر، وإجابة تدمج مصدرين لتصنع ادعاء أقوى مما يدعمه أي منهما، ومصدر يحذف بين الاسترجاع والعرض. يجب أن تحفظ Regression Tests معرفات الدليل وحالات الفشل المتوقعة، لا تشابه صياغة الجواب فقط.

القياسات Offline ضرورية لكنها غير كافية. في الإنتاج سجّل Citation Events قابلة للحل، وعمليات فتح المصدر، والTargets المكسورة، وAbstentions وانحراف Source Version دون تسجيل المحتوى الحساس بلا حاجة. راجع عينة من Traces، وجهز Incident Path لاستشهاد كشف Metadata لا يجب أن يراها المستخدم.

تعامل مع التحديث والحذف والتدقيق

يجب أن يبطل Source Deletion الاسترجاع والعرض معًا. ضع Tombstone على Document Version، واحذف Points أو رشحها، وحدد هل تستطيع Audit Records التاريخية الاحتفاظ بنسخة غير عامة تحت سياسة أشد. لا ينبغي لإجابة قديمة إبقاء Public Link لمحتوى مسحوب. تستطيع صفحة الإجابة إظهار أن الدليل أزيل، بينما يحتفظ Audit System مصرح به بالحدث.

لا يلزم أن يغير Re-embedding هوية المصدر. Vector Representation وEmbedding Model من Index Metadata، أما document_id وdocument_version وChunk Identity فتصف الدليل. وإذا غير Chunker جديد الحدود، فأنشئ Chunk IDs جديدة واحفظ Parent Lineage. لا تعِد استخدام ID قديمة لنص مختلف بصمت.

خزّن إعدادات الاسترجاع والتوليد مع الإجابة: Embedding Version وCollection أو Alias وFilter Policy Version وReranker وContext Builder وModel وPrompt Revision. لا يثبت ذلك صحة الإجابة، لكنه يجعل الفشل قابلًا لإعادة الإنتاج بما يكفي لإصلاحه.

الحدود الأمنية

طبق Tenant وAccess Filters قبل Vector Search، ثم أعد الفحص بعد الاسترجاع وقبل العرض. لا تسترجع على نطاق واسع ثم تطلب من النموذج إخفاء النتائج غير المصرح بها. أخضع Document Titles وSource URIs لسياسة المحتوى نفسها؛ فقد تكشف Metadata أسماء عملاء أو قضايا قانونية أو خطط منتجات.

عامل النص المسترجع كمدخل غير موثوق. افصله عن التعليمات، وامنع Tools من تفسيره كطلب فعل، ولا تسمح لـChunk باختيار Evidence ID لنفسها. وإذا دعم النظام روابط خارجية، فاستخدم Allowlist أو Signed Source Registry حتى لا تتحول الاستشهادات إلى روابط يتحكم بها مهاجم.

يجب أن تتضمن Cache Key الـTenant وAuthorization Scope وإصدارات المصادر وRetrieval Policy Revision. لا يجوز لسؤال متشابه دلاليًا من Tenant آخر إعادة استخدام Evidence Response نفسها. أبطل Cache عند تغير الصلاحيات أو Source Validity، لا عند تغير النص فقط.

متى لا تستخدم استشهادات RAG

استخدم SQL أو API عندما تكون الإجابة قيمة حالية دقيقة مثل المخزون أو الرصيد أو حالة الطلب. استخدم البحث التقليدي عندما يريد المستخدم الاكتشاف ويستطيع فحص النتائج مباشرة. واستخدم Knowledge Page مراجعة عندما تكون Evidence Set صغيرة وتتغير عبر تحرير منضبط. يفيد RAG عندما يضيف Semantic Retrieval والتوليف قيمة؛ والاستشهاد لا يصلح مصدرًا ناقصًا أو غير مصرح به أو أنسب لاستعلام منظم.

تجنب RAG للقرارات التي تحتاج سجلًا قانونيًا كاملًا ما لم يستطع النظام إثبات اكتمال Corpus والمراجعة. ولا تنتج Synthesis واثقة من سياسات متعارضة دون كشف التعارض. قد تبقى إجابة غنية بالاستشهادات خاطئة، ولذلك يجب أن توضح الواجهة الحدود وتسمح بالتصعيد.

قائمة الإنتاج

عرّف Document وChunk Identities ثابتة. خزّن Source Revision وURI آمنًا وSection Path وChecksum وAuthorization Metadata. رشح قبل الاسترجاع وحافظ على Evidence IDs خلال Fusion وReranking. ابنِ Evidence Manifest النهائية من النص المعبأ فعلًا. قيّد التوليد بمعرفات Manifest، وارسم الاستشهادات في كود التطبيق، وتحقق من كل Annotation. قس الدعم والتغطية منفصلين عن جودة الجواب. Version خط الاسترجاع كاملًا، وأبطل الدليل المسحوب، وفضّل Abstention عند نقص الدعم. لا تصبح إجابة RAG موثوقة إلا إذا ظل دليلها قابلًا للتتبع بعد كل تحويل.

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

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

إعداد: Noor Yasser

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

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

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

احجز لقاءً لمدة ٣٠ دقيقةالخدمة المرتبطةتكاملات الذكاء الاصطناعي وأنظمة RAGمشروع من الأعمالمُرشد