mirror of
https://github.com/trustgraph-ai/trustgraph.git
synced 2026-04-25 08:26:21 +02:00
887 lines
57 KiB
Markdown
887 lines
57 KiB
Markdown
|
|
---
|
||
|
|
layout: default
|
||
|
|
title: "أصل البيانات في وقت الاستخراج: الطبقة المصدر"
|
||
|
|
parent: "Arabic (Beta)"
|
||
|
|
---
|
||
|
|
|
||
|
|
# أصل البيانات في وقت الاستخراج: الطبقة المصدر
|
||
|
|
|
||
|
|
> **Beta Translation:** This document was translated via Machine Learning and as such may not be 100% accurate. All non-English languages are currently classified as Beta.
|
||
|
|
|
||
|
|
## نظرة عامة
|
||
|
|
|
||
|
|
يوثق هذا المستند ملاحظات حول أصل البيانات في وقت الاستخراج لأعمال المواصفات المستقبلية. يسجل أصل البيانات في وقت الاستخراج "الطبقة المصدر" - من أين أتت البيانات في الأصل، وكيف تم استخراجها وتحويلها.
|
||
|
|
|
||
|
|
هذا يختلف عن أصل البيانات في وقت الاستعلام (انظر `query-time-provenance.md`) الذي يسجل استنتاجات الوكيل.
|
||
|
|
|
||
|
|
## بيان المشكلة
|
||
|
|
|
||
|
|
### التنفيذ الحالي
|
||
|
|
|
||
|
|
يعمل أصل البيانات حاليًا على النحو التالي:
|
||
|
|
<<<<<<< HEAD
|
||
|
|
يتم تخزين بيانات وصف المستند كـ RDF triples في الرسم البياني المعرفي.
|
||
|
|
=======
|
||
|
|
يتم تخزين بيانات وصف المستند كـ "ثلاثيات" RDF في الرسم البياني للمعرفة.
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
يربط معرف المستند البيانات الوصفية بالمستند، بحيث يظهر المستند كعقدة في الرسم البياني.
|
||
|
|
عند استخراج الحواف (العلاقات/الحقائق) من المستندات، تربط علاقة `subjectOf` الحافة المستخرجة بالمستند المصدر.
|
||
|
|
|
||
|
|
### المشاكل في النهج الحالي
|
||
|
|
|
||
|
|
<<<<<<< HEAD
|
||
|
|
1. **تحميل البيانات الوصفية المتكرر:** يتم تجميع بيانات وصف المستند وتحميلها بشكل متكرر مع كل مجموعة من الـ triples المستخرجة من هذا المستند. هذا مضيعة ويزيد من التكرار - نفس البيانات الوصفية تنتقل كحمولة مع كل مخرج استخراج.
|
||
|
|
=======
|
||
|
|
1. **تحميل البيانات الوصفية المتكرر:** يتم تجميع بيانات وصف المستند وتحميلها بشكل متكرر مع كل مجموعة من "الثلاثيات" المستخرجة من هذا المستند. هذا مضيعة ويزيد من التكرار - حيث تنتقل نفس البيانات الوصفية كحمولة مع كل مخرج استخراج.
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
|
||
|
|
2. **أصل بيانات سطحي:** تربط العلاقة `subjectOf` الحالية الحقائق مباشرة بالمستند ذي المستوى الأعلى فقط. لا توجد رؤية لسلسلة التحويل - أي الصفحة التي جاءت منها الحقيقة، أو الجزء، أو طريقة الاستخراج المستخدمة.
|
||
|
|
|
||
|
|
### الحالة المرغوبة
|
||
|
|
|
||
|
|
<<<<<<< HEAD
|
||
|
|
1. **تحميل البيانات الوصفية مرة واحدة:** يجب تحميل بيانات وصف المستند مرة واحدة وإرفاقها بعقدة المستند ذات المستوى الأعلى، وليس تكرارها مع كل مجموعة من الـ triples.
|
||
|
|
=======
|
||
|
|
1. **تحميل البيانات الوصفية مرة واحدة:** يجب تحميل بيانات وصف المستند مرة واحدة وإرفاقها بعقدة المستند ذات المستوى الأعلى، وليس تكرارها مع كل مجموعة من "الثلاثيات".
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
|
||
|
|
2. **رسم بياني كامل لأصل البيانات:** التقاط سلسلة التحويل الكاملة من المستند المصدر عبر جميع القطع الأثرية الوسيطة وصولاً إلى الحقائق المستخرجة. على سبيل المثال، تحويل مستند PDF:
|
||
|
|
|
||
|
|
```
|
||
|
|
PDF file (source document with metadata)
|
||
|
|
→ Page 1 (decoded text)
|
||
|
|
→ Chunk 1
|
||
|
|
→ Extracted edge/fact (via subjectOf)
|
||
|
|
→ Extracted edge/fact
|
||
|
|
→ Chunk 2
|
||
|
|
→ Extracted edge/fact
|
||
|
|
→ Page 2
|
||
|
|
→ Chunk 3
|
||
|
|
→ ...
|
||
|
|
```
|
||
|
|
|
||
|
|
<<<<<<< HEAD
|
||
|
|
3. **التخزين الموحد:** يتم تخزين الرسم البياني للأصل (provenance DAG) في نفس الرسم البياني للمعرفة كما يتم تخزين المعرفة المستخرجة. يتيح ذلك الاستعلام عن الأصل بنفس الطريقة التي يتم بها الاستعلام عن المعرفة - من خلال تتبع الحواف صعودًا في السلسلة من أي حقيقة إلى موقع مصدرها الدقيق.
|
||
|
|
|
||
|
|
4. **معرفات مستقرة:** لكل قطعة أثرية وسيطة (صفحة، جزء) معرف مستقر كعقدة في الرسم البياني.
|
||
|
|
|
||
|
|
5. **الربط بين الأب والطفل:** يتم ربط المستندات المشتقة بآبائها وصولاً إلى المستند المصدر الرئيسي باستخدام أنواع علاقات متسقة.
|
||
|
|
|
||
|
|
6. **تخصيص الحقائق بدقة:** تشير العلاقة `subjectOf` في الحواف المستخرجة إلى الأصل الفوري (الجزء)، وليس المستند الرئيسي. يتم استعادة الأصل الكامل من خلال التنقل عبر الرسم البياني للأصل.
|
||
|
|
=======
|
||
|
|
3. **التخزين الموحد:** يتم تخزين الرسم البياني للأصل (provenance DAG) في نفس الرسم البياني للمعرفة مثل المعرفة المستخرجة. يتيح ذلك الاستعلام عن الأصل بنفس الطريقة التي يتم بها الاستعلام عن المعرفة - من خلال تتبع الحواف صعودًا في السلسلة من أي حقيقة إلى موقع مصدرها الدقيق.
|
||
|
|
|
||
|
|
4. **معرفات مستقرة:** لكل قطعة أثرية وسيطة (صفحة، جزء) معرف مستقر كعقدة في الرسم البياني.
|
||
|
|
|
||
|
|
5. **الربط بين الأبناء والآباء:** يتم ربط المستندات المشتقة بآبائها وصولاً إلى المستند المصدر الرئيسي باستخدام أنواع علاقات متسقة.
|
||
|
|
|
||
|
|
6. **تخصيص الحقائق بدقة:** تشير العلاقة `subjectOf` في الحواف المستخرجة إلى الأصل الفوري (الجزء)، وليس المستند الرئيسي. يتم استعادة الأصل الكامل من خلال اجتياز الرسم البياني للأصل.
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
|
||
|
|
## حالات الاستخدام
|
||
|
|
|
||
|
|
### UC1: تحديد مصدر المعلومات في استجابات GraphRAG
|
||
|
|
|
||
|
|
**السيناريو:** يقوم المستخدم بتشغيل استعلام GraphRAG ويتلقى استجابة من الوكيل.
|
||
|
|
|
||
|
|
**التدفق:**
|
||
|
|
1. يرسل المستخدم استعلامًا إلى وكيل GraphRAG.
|
||
|
|
2. يسترجع الوكيل الحقائق ذات الصلة من الرسم البياني للمعرفة لصياغة استجابة.
|
||
|
|
3. وفقًا لمواصفات الأصل في وقت الاستعلام، يقوم الوكيل بالإبلاغ عن الحقائق التي ساهمت في الاستجابة.
|
||
|
|
<<<<<<< HEAD
|
||
|
|
4. يربط كل حقيقة بمصدره (الجزء) عبر الرسم البياني للأصل.
|
||
|
|
5. ترتبط الأجزاء بالصفحات، وترتبط الصفحات بمستندات المصدر.
|
||
|
|
|
||
|
|
**النتيجة في تجربة المستخدم:** يعرض الواجهة استجابة نموذج اللغة الكبير (LLM) جنبًا إلى جنب مع تحديد مصدر المعلومات. يمكن للمستخدم:
|
||
|
|
رؤية الحقائق التي دعمت الاستجابة.
|
||
|
|
النزول من الحقائق إلى الأجزاء إلى الصفحات إلى المستندات.
|
||
|
|
مراجعة المستندات المصدر الأصلية للتحقق من صحة الادعاءات.
|
||
|
|
فهم بالضبط من أين في المستند (في أي صفحة، في أي قسم) نشأت الحقيقة.
|
||
|
|
|
||
|
|
**القيمة:** يمكن للمستخدمين التحقق من صحة الاستجابات التي تم إنشاؤها بواسطة الذكاء الاصطناعي مقابل المصادر الأولية، مما يعزز الثقة ويمكن المستخدمين من التحقق من الحقائق.
|
||
|
|
=======
|
||
|
|
4. ترتبط كل حقيقة بمصدرها من خلال الرسم البياني للأصل.
|
||
|
|
5. ترتبط الأجزاء بالصفحات، وترتبط الصفحات بمستندات المصدر.
|
||
|
|
|
||
|
|
**النتيجة في تجربة المستخدم:** يعرض الواجهة استجابة نموذج اللغة (LLM) جنبًا إلى جنب مع تحديد مصدر المعلومات. يمكن للمستخدم:
|
||
|
|
رؤية الحقائق التي دعمت الاستجابة.
|
||
|
|
الانتقال من الحقائق إلى الأجزاء إلى الصفحات إلى المستندات.
|
||
|
|
مراجعة المستندات المصدر الأصلية للتحقق من الادعاءات.
|
||
|
|
فهم بالضبط من أين في المستند (في أي صفحة، في أي قسم) نشأت الحقيقة.
|
||
|
|
|
||
|
|
**القيمة:** يمكن للمستخدمين التحقق من الاستجابات التي تم إنشاؤها بواسطة الذكاء الاصطناعي مقابل المصادر الأولية، مما يعزز الثقة ويمكن المستخدمين من التحقق من الحقائق.
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
|
||
|
|
### UC2: تصحيح جودة الاستخراج
|
||
|
|
|
||
|
|
تبدو حقيقة خاطئة. تتبعها من خلال الجزء إلى الصفحة إلى المستند لمعرفة النص الأصلي. هل كان استخراجًا سيئًا، أم أن المصدر نفسه كان خاطئًا؟
|
||
|
|
|
||
|
|
### UC3: إعادة استخراج تدريجي
|
||
|
|
|
||
|
|
يتم تحديث مستند المصدر. ما هي الأجزاء/الحقائق التي تم اشتقاقها منه؟ قم بإبطالها وإعادة إنشائها فقط لتلك الأجزاء، بدلاً من إعادة معالجة كل شيء.
|
||
|
|
|
||
|
|
### UC4: حذف البيانات / الحق في النسيان
|
||
|
|
|
||
|
|
<<<<<<< HEAD
|
||
|
|
يجب إزالة مستند المصدر (بسبب اللائحة العامة لحماية البيانات، أو لأسباب قانونية، إلخ). تتبع الرسم البياني للأصل للعثور على جميع الحقائق المشتقة وإزالتها.
|
||
|
|
|
||
|
|
### UC5: حل النزاعات
|
||
|
|
|
||
|
|
تتناقض حقائق مع بعضها البعض. تتبع كلتا الحالتين إلى مصادرها لفهم السبب واتخاذ قرار بشأن أي منهما يجب الوثوق به (المصدر الأكثر موثوقية، أو الأحدث، إلخ).
|
||
|
|
|
||
|
|
### UC6: وزن سلطة المصدر
|
||
|
|
|
||
|
|
بعض المصادر أكثر موثوقية من غيرها. يمكن ترجيح الحقائق أو تصفيتها بناءً على سلطة/جودة مستندات الأصل.
|
||
|
|
|
||
|
|
### UC7: مقارنة مسار الاستخراج
|
||
|
|
=======
|
||
|
|
يجب إزالة مستند المصدر (بسبب GDPR، أو لأسباب قانونية، وما إلى ذلك). ابحث في الرسم البياني للأصل وأزل جميع الحقائق المشتقة.
|
||
|
|
|
||
|
|
### UC5: حل النزاعات
|
||
|
|
|
||
|
|
تتناقض حقيقتان مع بعضهما البعض. تتبع كلتاهما إلى مصادرهما لفهم السبب واتخاذ قرار بشأن أي منهما يجب الوثوق به (المصدر الأكثر موثوقية، أو الأحدث، وما إلى ذلك).
|
||
|
|
|
||
|
|
### UC6: وزن سلطة المصدر
|
||
|
|
|
||
|
|
بعض المصادر أكثر موثوقية من غيرها. يمكن وزن الحقائق أو تصفيتها بناءً على سلطة/جودة مستندات الأصل.
|
||
|
|
|
||
|
|
### UC7: مقارنة مسارات الاستخراج
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
|
||
|
|
قارن المخرجات من طرق/إصدارات استخراج مختلفة. أي أداة استخراج أنتجت حقائق أفضل من نفس المصدر؟
|
||
|
|
|
||
|
|
## نقاط التكامل
|
||
|
|
|
||
|
|
### أمين المكتبة
|
||
|
|
|
||
|
|
يوفر مكون أمين المكتبة بالفعل تخزين المستندات بمعرفات مستندات فريدة. يتكامل نظام التتبع مع هذه البنية التحتية الحالية.
|
||
|
|
|
||
|
|
#### القدرات الحالية (تم تنفيذها بالفعل)
|
||
|
|
|
||
|
|
<<<<<<< HEAD
|
||
|
|
**ربط المستندات من الأب إلى الابن:**
|
||
|
|
`parent_id` الحقل في `DocumentMetadata` - يربط المستند الابن بالمستند الأب
|
||
|
|
`document_type` الحقل - القيم: `"source"` (أصلي) أو `"extracted"` (مشتق)
|
||
|
|
واجهة برمجة تطبيقات `add-child-document` - لإنشاء مستند ابن بمعرف `document_type = "extracted"` تلقائيًا
|
||
|
|
واجهة برمجة تطبيقات `list-children` - لاسترداد جميع المستندات الابناء لمستند أب معين
|
||
|
|
الحذف المتتالي - يؤدي إزالة مستند الأب تلقائيًا إلى حذف جميع مستندات الأبناء
|
||
|
|
|
||
|
|
**تحديد المستند:**
|
||
|
|
معرفات المستندات محددة من قبل العميل (وليس تم إنشاؤها تلقائيًا)
|
||
|
|
المستندات مفهرسة باستخدام `(user, document_id)` المركب في Cassandra
|
||
|
|
يتم إنشاء معرفات الكائنات (UUIDs) داخليًا لتخزين الكائنات الثنائية
|
||
|
|
|
||
|
|
**دعم البيانات الوصفية:**
|
||
|
|
`metadata: list[Triple]` الحقل - ثلاثيات RDF للبيانات الوصفية المنظمة
|
||
|
|
`title`، `comments`، `tags` - بيانات وصفية أساسية للمستند
|
||
|
|
`time` - الطابع الزمني، `kind` - نوع MIME
|
||
|
|
|
||
|
|
**هيكل التخزين:**
|
||
|
|
يتم تخزين البيانات الوصفية في Cassandra (مساحة مفاتيح `librarian`، جدول `document`)
|
||
|
|
يتم تخزين المحتوى في تخزين الكائنات الثنائية MinIO/S3 (دلو `library`)
|
||
|
|
تسليم محتوى ذكي: يتم تضمين المستندات الأقل من 2 ميجابايت، ويتم بث المستندات الأكبر حجمًا
|
||
|
|
|
||
|
|
#### الملفات الرئيسية
|
||
|
|
|
||
|
|
`trustgraph-flow/trustgraph/librarian/librarian.py` - العمليات الأساسية لأمين المكتبة
|
||
|
|
`trustgraph-flow/trustgraph/librarian/service.py` - معالج الخدمة، تحميل المستند
|
||
|
|
`trustgraph-flow/trustgraph/tables/library.py` - تخزين جدول Cassandra
|
||
|
|
`trustgraph-base/trustgraph/schema/services/library.py` - تعريفات المخططات
|
||
|
|
=======
|
||
|
|
**ربط المستندات من النوع "الأب-الابن":**
|
||
|
|
الحقل `parent_id` في `DocumentMetadata` - يربط المستند الابن بالمستند الأب.
|
||
|
|
الحقل `document_type` - القيم: `"source"` (أصلي) أو `"extracted"` (مشتق).
|
||
|
|
واجهة برمجة تطبيقات `add-child-document` - لإنشاء مستند ابن مع `document_type = "extracted"` تلقائيًا.
|
||
|
|
واجهة برمجة تطبيقات `list-children` - لاسترداد جميع المستندات الابناء لمستند أب معين.
|
||
|
|
الحذف المتتالي - يؤدي إزالة مستند الأب تلقائيًا إلى حذف جميع مستندات الأبناء.
|
||
|
|
|
||
|
|
**تحديد المستند:**
|
||
|
|
معرفات المستندات محددة من قبل العميل (وليس تم إنشاؤها تلقائيًا).
|
||
|
|
المستندات مفهرسة بواسطة مفتاح مركب `(user, document_id)` في Cassandra.
|
||
|
|
يتم إنشاء معرفات الكائنات (UUIDs) داخليًا لتخزين الكائنات الثنائية.
|
||
|
|
|
||
|
|
**دعم البيانات الوصفية:**
|
||
|
|
الحقل `metadata: list[Triple]` - ثلاثيات RDF للبيانات الوصفية المنظمة.
|
||
|
|
`title`، `comments`، `tags` - بيانات وصفية أساسية للمستند.
|
||
|
|
`time` - الطابع الزمني، `kind` - نوع MIME.
|
||
|
|
|
||
|
|
**هيكل التخزين:**
|
||
|
|
يتم تخزين البيانات الوصفية في Cassandra (مساحة مفاتيح `librarian`، جدول `document`).
|
||
|
|
يتم تخزين المحتوى في تخزين الكائنات الثنائية MinIO/S3 (حاوية `library`).
|
||
|
|
تسليم محتوى ذكي: المستندات الأقل من 2 ميجابايت مضمنة، ويتم بث المستندات الأكبر حجمًا.
|
||
|
|
|
||
|
|
#### الملفات الرئيسية
|
||
|
|
|
||
|
|
`trustgraph-flow/trustgraph/librarian/librarian.py` - العمليات الأساسية لأمين المكتبة.
|
||
|
|
`trustgraph-flow/trustgraph/librarian/service.py` - معالج الخدمة، تحميل المستند.
|
||
|
|
`trustgraph-flow/trustgraph/tables/library.py` - متجر جدول Cassandra.
|
||
|
|
`trustgraph-base/trustgraph/schema/services/library.py` - تعريفات المخططات.
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
|
||
|
|
#### الثغرات التي يجب معالجتها
|
||
|
|
|
||
|
|
يحتوي أمين المكتبة على اللبنات الأساسية ولكن حاليًا:
|
||
|
|
<<<<<<< HEAD
|
||
|
|
1. الربط من الأب إلى الابن ذو مستوى واحد فقط - لا توجد أدوات مساعدة لتصفح الرسوم البيانية متعددة المستويات
|
||
|
|
2. لا يوجد مفردات قياسية لأنواع العلاقات (مثل `derivedFrom`، `extractedFrom`)
|
||
|
|
3. بيانات التتبع الوصفية (طريقة الاستخراج، والثقة، وموضع الجزء) غير موحدة
|
||
|
|
4. لا توجد واجهة برمجة تطبيقات للاستعلام للتنقل عبر سلسلة التتبع الكاملة من حقيقة إلى المصدر
|
||
|
|
=======
|
||
|
|
1. ربط الأب-الابن ذو مستوى واحد فقط - لا توجد أدوات مساعدة لتصفح الرسوم البيانية متعددة المستويات.
|
||
|
|
2. لا يوجد مفردات قياسية لأنواع العلاقات (مثل `derivedFrom`، `extractedFrom`).
|
||
|
|
3. بيانات التتبع الوصفية (طريقة الاستخراج، والثقة، وموضع الجزء) غير موحدة.
|
||
|
|
4. لا توجد واجهة برمجة تطبيقات للاستعلام للتنقل عبر سلسلة التتبع الكاملة من حقيقة إلى المصدر.
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
|
||
|
|
## تصميم التدفق الشامل
|
||
|
|
|
||
|
|
يتبع كل معالج في خط الأنابيب نمطًا متسقًا:
|
||
|
|
<<<<<<< HEAD
|
||
|
|
استقبال معرف المستند من البنية التحتية
|
||
|
|
جلب المحتوى من أمين المكتبة
|
||
|
|
إنتاج القطع الأثرية الفرعية
|
||
|
|
لكل قطعة أثرية فرعية: حفظ في أمين المكتبة، وإصدار حافة إلى الرسم البياني، وتمرير المعرف إلى البنية التحتية
|
||
|
|
=======
|
||
|
|
استقبال معرف المستند من المصدر العلوي.
|
||
|
|
جلب المحتوى من أمين المكتبة.
|
||
|
|
إنتاج القطع الأثرية الفرعية.
|
||
|
|
لكل قطعة أثرية فرعية: حفظ في أمين المكتبة، وإصدار حافة إلى الرسم البياني، وتمرير المعرف إلى المكون التالي.
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
|
||
|
|
### تدفقات المعالجة
|
||
|
|
|
||
|
|
هناك تدفقان اعتمادًا على نوع المستند:
|
||
|
|
|
||
|
|
#### تدفق مستند PDF
|
||
|
|
|
||
|
|
```
|
||
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
||
|
|
│ Librarian (initiate processing) │
|
||
|
|
│ 1. Emit root document metadata to knowledge graph (once) │
|
||
|
|
│ 2. Send root document ID to PDF extractor │
|
||
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
||
|
|
│
|
||
|
|
▼
|
||
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
||
|
|
│ PDF Extractor (per page) │
|
||
|
|
│ 1. Fetch PDF content from librarian using document ID │
|
||
|
|
│ 2. Extract pages as text │
|
||
|
|
│ 3. For each page: │
|
||
|
|
│ a. Save page as child document in librarian (parent = root doc) │
|
||
|
|
│ b. Emit parent-child edge to knowledge graph │
|
||
|
|
│ c. Send page document ID to chunker │
|
||
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
||
|
|
│
|
||
|
|
▼
|
||
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
||
|
|
│ Chunker (per chunk) │
|
||
|
|
│ 1. Fetch page content from librarian using document ID │
|
||
|
|
│ 2. Split text into chunks │
|
||
|
|
│ 3. For each chunk: │
|
||
|
|
│ a. Save chunk as child document in librarian (parent = page) │
|
||
|
|
│ b. Emit parent-child edge to knowledge graph │
|
||
|
|
│ c. Send chunk document ID + chunk content to next processor │
|
||
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
||
|
|
│
|
||
|
|
▼
|
||
|
|
─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
|
||
|
|
Post-chunker optimization: messages carry both
|
||
|
|
chunk ID (for provenance) and content (to avoid
|
||
|
|
librarian round-trip). Chunks are small (2-4KB).
|
||
|
|
─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
|
||
|
|
│
|
||
|
|
▼
|
||
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
||
|
|
│ Knowledge Extractor (per chunk) │
|
||
|
|
│ 1. Receive chunk ID + content directly (no librarian fetch needed) │
|
||
|
|
│ 2. Extract facts/triples and embeddings from chunk content │
|
||
|
|
│ 3. For each triple: │
|
||
|
|
│ a. Emit triple to knowledge graph │
|
||
|
|
│ b. Emit reified edge linking triple → chunk ID (edge pointing │
|
||
|
|
│ to edge - first use of reification support) │
|
||
|
|
│ 4. For each embedding: │
|
||
|
|
│ a. Emit embedding with its entity ID │
|
||
|
|
│ b. Link entity ID → chunk ID in knowledge graph │
|
||
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
||
|
|
```
|
||
|
|
|
||
|
|
#### تدفق مستندات النص
|
||
|
|
|
||
|
|
تتجاوز مستندات النص أداة استخراج ملفات PDF وتنتقل مباشرةً إلى وحدة التقسيم:
|
||
|
|
|
||
|
|
```
|
||
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
||
|
|
│ Librarian (initiate processing) │
|
||
|
|
│ 1. Emit root document metadata to knowledge graph (once) │
|
||
|
|
│ 2. Send root document ID directly to chunker (skip PDF extractor) │
|
||
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
||
|
|
│
|
||
|
|
▼
|
||
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
||
|
|
│ Chunker (per chunk) │
|
||
|
|
│ 1. Fetch text content from librarian using document ID │
|
||
|
|
│ 2. Split text into chunks │
|
||
|
|
│ 3. For each chunk: │
|
||
|
|
│ a. Save chunk as child document in librarian (parent = root doc) │
|
||
|
|
│ b. Emit parent-child edge to knowledge graph │
|
||
|
|
│ c. Send chunk document ID + chunk content to next processor │
|
||
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
||
|
|
│
|
||
|
|
▼
|
||
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
||
|
|
│ Knowledge Extractor │
|
||
|
|
│ (same as PDF flow) │
|
||
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
||
|
|
```
|
||
|
|
|
||
|
|
الرسم البياني الموجه الناتج أقصر بمستوى واحد:
|
||
|
|
|
||
|
|
```
|
||
|
|
PDF: Document → Pages → Chunks → Triples/Embeddings
|
||
|
|
Text: Document → Chunks → Triples/Embeddings
|
||
|
|
```
|
||
|
|
|
||
|
|
<<<<<<< HEAD
|
||
|
|
التصميم يتكيف مع كل من المصدر والصفحة لأن وحدة التقسيم تعالج مدخلاتها بشكل عام - فهي تستخدم أي معرف مستند تتلقاه كمعرف رئيسي، بغض النظر عما إذا كان ذلك مستند مصدر أم صفحة.
|
||
|
|
|
||
|
|
### مخطط البيانات الوصفية (PROV-O)
|
||
|
|
|
||
|
|
تستخدم البيانات الوصفية المتعلقة بالأصل علم الوجود W3C PROV-O. يوفر هذا مفردات قياسية ويمكن أن يمكّن التوقيع/المصادقة المستقبلية لنتائج الاستخراج.
|
||
|
|
=======
|
||
|
|
التصميم يتكيف مع كلتا الحالتين لأن وحدة التقسيم تعالج مدخلاتها بشكل عام - فهي تستخدم أي معرف مستند تتلقاه كمعرف رئيسي، بغض النظر عما إذا كان ذلك مستندًا أصليًا أم صفحة.
|
||
|
|
|
||
|
|
### مخطط البيانات الوصفية (PROV-O)
|
||
|
|
|
||
|
|
تستخدم البيانات الوصفية المتعلقة بالأصل علم الوجود W3C PROV-O. يوفر هذا مفردات قياسية ويمكن أن يتيح في المستقبل التوقيع والمصادقة على مخرجات الاستخراج.
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
|
||
|
|
#### المفاهيم الأساسية في PROV-O
|
||
|
|
|
||
|
|
| نوع PROV-O | استخدام TrustGraph |
|
||
|
|
|-------------|------------------|
|
||
|
|
| `prov:Entity` | مستند، صفحة، جزء، ثلاثي، تضمين |
|
||
|
|
| `prov:Activity` | حالات عمليات الاستخراج |
|
||
|
|
| `prov:Agent` | مكونات TG (مثل أداة استخراج PDF، ووحدة التقسيم، إلخ) مع الإصدارات |
|
||
|
|
|
||
|
|
#### علاقات PROV-O
|
||
|
|
|
||
|
|
| الرابط | المعنى | مثال |
|
||
|
|
|-----------|---------|---------|
|
||
|
|
| `prov:wasDerivedFrom` | كيان مشتق من كيان آخر | الصفحة مشتقة من المستند |
|
||
|
|
| `prov:wasGeneratedBy` | كيان تم إنشاؤه بواسطة نشاط | الصفحة تم إنشاؤها بواسطة نشاط استخراج PDF |
|
||
|
|
| `prov:used` | نشاط استخدم كيانًا كمدخل | نشاط استخراج PDF استخدم المستند |
|
||
|
|
| `prov:wasAssociatedWith` | نشاط تم تنفيذه بواسطة وكيل | نشاط استخراج PDF مرتبط بـ tg:PDFExtractor |
|
||
|
|
|
||
|
|
#### البيانات الوصفية في كل مستوى
|
||
|
|
|
||
|
|
<<<<<<< HEAD
|
||
|
|
**المستند المصدر (يتم إصداره بواسطة Librarian):**
|
||
|
|
=======
|
||
|
|
**المستند الأصلي (يتم إصداره بواسطة Librarian):**
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
```
|
||
|
|
doc:123 a prov:Entity .
|
||
|
|
doc:123 dc:title "Research Paper" .
|
||
|
|
doc:123 dc:source <https://example.com/paper.pdf> .
|
||
|
|
doc:123 dc:date "2024-01-15" .
|
||
|
|
doc:123 dc:creator "Author Name" .
|
||
|
|
doc:123 tg:pageCount 42 .
|
||
|
|
doc:123 tg:mimeType "application/pdf" .
|
||
|
|
```
|
||
|
|
|
||
|
|
**الصفحة (تم إنشاؤها بواسطة مُستخرج PDF):**
|
||
|
|
```
|
||
|
|
page:123-1 a prov:Entity .
|
||
|
|
page:123-1 prov:wasDerivedFrom doc:123 .
|
||
|
|
page:123-1 prov:wasGeneratedBy activity:pdf-extract-456 .
|
||
|
|
page:123-1 tg:pageNumber 1 .
|
||
|
|
|
||
|
|
activity:pdf-extract-456 a prov:Activity .
|
||
|
|
activity:pdf-extract-456 prov:used doc:123 .
|
||
|
|
activity:pdf-extract-456 prov:wasAssociatedWith tg:PDFExtractor .
|
||
|
|
activity:pdf-extract-456 tg:componentVersion "1.2.3" .
|
||
|
|
activity:pdf-extract-456 prov:startedAtTime "2024-01-15T10:30:00Z" .
|
||
|
|
```
|
||
|
|
|
||
|
|
<<<<<<< HEAD
|
||
|
|
**الجزء (يتم إصداره بواسطة وحدة التجميع):**
|
||
|
|
=======
|
||
|
|
**جزء (يتم إصداره بواسطة أداة التقسيم):**
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
```
|
||
|
|
chunk:123-1-1 a prov:Entity .
|
||
|
|
chunk:123-1-1 prov:wasDerivedFrom page:123-1 .
|
||
|
|
chunk:123-1-1 prov:wasGeneratedBy activity:chunk-789 .
|
||
|
|
chunk:123-1-1 tg:chunkIndex 1 .
|
||
|
|
chunk:123-1-1 tg:charOffset 0 .
|
||
|
|
chunk:123-1-1 tg:charLength 2048 .
|
||
|
|
|
||
|
|
activity:chunk-789 a prov:Activity .
|
||
|
|
activity:chunk-789 prov:used page:123-1 .
|
||
|
|
activity:chunk-789 prov:wasAssociatedWith tg:Chunker .
|
||
|
|
activity:chunk-789 tg:componentVersion "1.0.0" .
|
||
|
|
activity:chunk-789 tg:chunkSize 2048 .
|
||
|
|
activity:chunk-789 tg:chunkOverlap 200 .
|
||
|
|
```
|
||
|
|
|
||
|
|
**ثلاثي (تم إصداره بواسطة مُستخلص المعرفة):**
|
||
|
|
```
|
||
|
|
# The extracted triple (edge)
|
||
|
|
entity:JohnSmith rel:worksAt entity:AcmeCorp .
|
||
|
|
|
||
|
|
# Subgraph containing the extracted triples
|
||
|
|
subgraph:001 tg:contains <<entity:JohnSmith rel:worksAt entity:AcmeCorp>> .
|
||
|
|
subgraph:001 prov:wasDerivedFrom chunk:123-1-1 .
|
||
|
|
subgraph:001 prov:wasGeneratedBy activity:extract-999 .
|
||
|
|
|
||
|
|
activity:extract-999 a prov:Activity .
|
||
|
|
activity:extract-999 prov:used chunk:123-1-1 .
|
||
|
|
activity:extract-999 prov:wasAssociatedWith tg:KnowledgeExtractor .
|
||
|
|
activity:extract-999 tg:componentVersion "2.1.0" .
|
||
|
|
activity:extract-999 tg:llmModel "claude-3" .
|
||
|
|
activity:extract-999 tg:ontology <http://example.org/ontologies/business-v1> .
|
||
|
|
```
|
||
|
|
|
||
|
|
**التضمين (يتم تخزينه في مخزن المتجهات، وليس في مخزن الثلاثيات):**
|
||
|
|
|
||
|
|
يتم تخزين التضمينات في مخزن المتجهات مع البيانات الوصفية، وليس كـ RDF triples. يحتوي كل سجل تضمين على:
|
||
|
|
|
||
|
|
| الحقل | الوصف | مثال |
|
||
|
|
|-------|-------------|---------|
|
||
|
|
| vector | متجه التضمين | [0.123, -0.456, ...] |
|
||
|
|
| entity | عنوان URI للعقدة التي يمثلها التضمين | `entity:JohnSmith` |
|
||
|
|
| chunk_id | الجزء المصدر (الأصل) | `chunk:123-1-1` |
|
||
|
|
| model | نموذج التضمين المستخدم | `text-embedding-ada-002` |
|
||
|
|
| component_version | إصدار مُحسِّن التضمين (TG embedder) | `1.0.0` |
|
||
|
|
|
||
|
|
يربط الحقل `entity` التضمين بالرسم البياني المعرفي (عنوان URI للعقدة). يوفر الحقل `chunk_id` معلومات عن الأصل إلى الجزء المصدر، مما يتيح التنقل صعودًا في الرسم البياني الموجه (DAG) إلى المستند الأصلي.
|
||
|
|
|
||
|
|
#### امتدادات مساحة اسم TrustGraph
|
||
|
|
|
||
|
|
محددات مخصصة ضمن مساحة الاسم `tg:` لبيانات وصفية خاصة بالاستخراج:
|
||
|
|
|
||
|
|
| المحدد | النطاق | الوصف |
|
||
|
|
|-----------|--------|-------------|
|
||
|
|
| `tg:contains` | Subgraph | يشير إلى ثلاثية موجودة في هذا الرسوم البيانية الفرعية للاستخراج |
|
||
|
|
| `tg:pageCount` | Document | العدد الإجمالي لصفحات المستند المصدر |
|
||
|
|
| `tg:mimeType` | Document | نوع MIME للمستند المصدر |
|
||
|
|
| `tg:pageNumber` | Page | رقم الصفحة في المستند المصدر |
|
||
|
|
| `tg:chunkIndex` | Chunk | فهرس الجزء داخل الأصل |
|
||
|
|
| `tg:charOffset` | Chunk | الإزاحة الحرفية في النص الأصل |
|
||
|
|
| `tg:charLength` | Chunk | طول الجزء بالأحرف |
|
||
|
|
| `tg:chunkSize` | Activity | حجم الجزء المُكوَّن |
|
||
|
|
| `tg:chunkOverlap` | Activity | التداخل المُكوَّن بين الأجزاء |
|
||
|
|
| `tg:componentVersion` | Activity | إصدار مكون TG |
|
||
|
|
| `tg:llmModel` | Activity | نموذج LLM المستخدم للاستخراج |
|
||
|
|
<<<<<<< HEAD
|
||
|
|
| `tg:ontology` | Activity | عنوان URI للأنطولوجيا المستخدم لتوجيه الاستخراج |
|
||
|
|
=======
|
||
|
|
| `tg:ontology` | Activity | عنوان URI للدلالة المستخدم لتوجيه الاستخراج |
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
| `tg:embeddingModel` | Activity | النموذج المستخدم للتضمينات |
|
||
|
|
| `tg:sourceText` | Statement | النص الدقيق الذي تم استخراج ثلاثية منه |
|
||
|
|
| `tg:sourceCharOffset` | Statement | الإزاحة الحرفية داخل الجزء حيث يبدأ النص المصدر |
|
||
|
|
| `tg:sourceCharLength` | Statement | طول النص المصدر بالأحرف |
|
||
|
|
|
||
|
|
#### تهيئة المفردات (لكل مجموعة)
|
||
|
|
|
||
|
|
<<<<<<< HEAD
|
||
|
|
الرسم البياني المعرفي محايد للأنطولوجيا ويبدأ فارغًا. عند كتابة بيانات سلالة PROV-O إلى مجموعة لأول مرة، يجب تهيئة المفردات باستخدام تسميات RDF لجميع الفئات والمحددات. يضمن ذلك عرضًا قابلاً للقراءة بواسطة الإنسان في الاستعلامات وواجهة المستخدم.
|
||
|
|
=======
|
||
|
|
الرسم البياني المعرفي محايد بالنسبة للدلالات ويبدأ فارغًا. عند كتابة بيانات سلالة PROV-O إلى مجموعة لأول مرة، يجب تهيئة المفردات باستخدام تسميات RDF لجميع الفئات والمحددات. يضمن ذلك عرضًا قابلاً للقراءة بواسطة الإنسان في الاستعلامات وواجهة المستخدم.
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
|
||
|
|
**فئات PROV-O:**
|
||
|
|
```
|
||
|
|
prov:Entity rdfs:label "Entity" .
|
||
|
|
prov:Activity rdfs:label "Activity" .
|
||
|
|
prov:Agent rdfs:label "Agent" .
|
||
|
|
```
|
||
|
|
|
||
|
|
<<<<<<< HEAD
|
||
|
|
**المُتَعَدِّيات (Predicates) الخاصة بـ PROV-O:**
|
||
|
|
=======
|
||
|
|
**المفردات (Predicates) الخاصة بـ PROV-O:**
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
```
|
||
|
|
prov:wasDerivedFrom rdfs:label "was derived from" .
|
||
|
|
prov:wasGeneratedBy rdfs:label "was generated by" .
|
||
|
|
prov:used rdfs:label "used" .
|
||
|
|
prov:wasAssociatedWith rdfs:label "was associated with" .
|
||
|
|
prov:startedAtTime rdfs:label "started at" .
|
||
|
|
```
|
||
|
|
|
||
|
|
**عبارات TrustGraph:**
|
||
|
|
```
|
||
|
|
tg:contains rdfs:label "contains" .
|
||
|
|
tg:pageCount rdfs:label "page count" .
|
||
|
|
tg:mimeType rdfs:label "MIME type" .
|
||
|
|
tg:pageNumber rdfs:label "page number" .
|
||
|
|
tg:chunkIndex rdfs:label "chunk index" .
|
||
|
|
tg:charOffset rdfs:label "character offset" .
|
||
|
|
tg:charLength rdfs:label "character length" .
|
||
|
|
tg:chunkSize rdfs:label "chunk size" .
|
||
|
|
tg:chunkOverlap rdfs:label "chunk overlap" .
|
||
|
|
tg:componentVersion rdfs:label "component version" .
|
||
|
|
tg:llmModel rdfs:label "LLM model" .
|
||
|
|
tg:ontology rdfs:label "ontology" .
|
||
|
|
tg:embeddingModel rdfs:label "embedding model" .
|
||
|
|
tg:sourceText rdfs:label "source text" .
|
||
|
|
tg:sourceCharOffset rdfs:label "source character offset" .
|
||
|
|
tg:sourceCharLength rdfs:label "source character length" .
|
||
|
|
```
|
||
|
|
|
||
|
|
**ملاحظة حول التنفيذ:** يجب أن يكون هذا الإطار اللغوي ذاتي الإعادة - آمنًا للتشغيل عدة مرات دون إنشاء تكرارات. يمكن تشغيله في معالجة المستند الأول في المجموعة، أو كخطوة منفصلة لتهيئة المجموعة.
|
||
|
|
|
||
|
|
<<<<<<< HEAD
|
||
|
|
#### أصل الجزء الفرعي (طموح)
|
||
|
|
|
||
|
|
للحصول على معلومات تفصيلية حول الأصل، سيكون من المفيد تسجيل المكان الدقيق داخل جزء معين حيث تم استخراج الثلاثي. هذا يسمح بـ:
|
||
|
|
|
||
|
|
تسليط الضوء على النص المصدر الدقيق في واجهة المستخدم.
|
||
|
|
التحقق من دقة الاستخراج مقابل المصدر.
|
||
|
|
=======
|
||
|
|
#### مصدر المعلومات التفصيلية (طموح)
|
||
|
|
|
||
|
|
للحصول على معلومات تفصيلية حول المصدر، سيكون من المفيد تسجيل المكان الدقيق داخل جزء معين حيث تم استخراج الثلاثيات منه. هذا يسمح بـ:
|
||
|
|
|
||
|
|
تسليط الضوء على النص المصدر الدقيق في واجهة المستخدم.
|
||
|
|
التحقق من دقة الاستخراج مقارنة بالمصدر.
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
تصحيح جودة الاستخراج على مستوى الجملة.
|
||
|
|
|
||
|
|
**مثال مع تتبع الموضع:**
|
||
|
|
```
|
||
|
|
# The extracted triple
|
||
|
|
entity:JohnSmith rel:worksAt entity:AcmeCorp .
|
||
|
|
|
||
|
|
# Subgraph with sub-chunk provenance
|
||
|
|
subgraph:001 tg:contains <<entity:JohnSmith rel:worksAt entity:AcmeCorp>> .
|
||
|
|
subgraph:001 prov:wasDerivedFrom chunk:123-1-1 .
|
||
|
|
subgraph:001 tg:sourceText "John Smith has worked at Acme Corp since 2019" .
|
||
|
|
subgraph:001 tg:sourceCharOffset 1547 .
|
||
|
|
subgraph:001 tg:sourceCharLength 46 .
|
||
|
|
```
|
||
|
|
|
||
|
|
**مثال مع نطاق نص (بديل):**
|
||
|
|
```
|
||
|
|
subgraph:001 tg:contains <<entity:JohnSmith rel:worksAt entity:AcmeCorp>> .
|
||
|
|
subgraph:001 prov:wasDerivedFrom chunk:123-1-1 .
|
||
|
|
subgraph:001 tg:sourceRange "1547-1593" .
|
||
|
|
subgraph:001 tg:sourceText "John Smith has worked at Acme Corp since 2019" .
|
||
|
|
```
|
||
|
|
|
||
|
|
**اعتبارات التنفيذ:**
|
||
|
|
|
||
|
|
<<<<<<< HEAD
|
||
|
|
قد لا توفر استخراج البيانات باستخدام نماذج اللغة الكبيرة (LLM) بشكل طبيعي مواقع الأحرف.
|
||
|
|
يمكن توجيه نموذج اللغة الكبيرة لإرجاع الجملة/العبارة المصدرية بالإضافة إلى الثلاثيات المستخرجة.
|
||
|
|
بدلاً من ذلك، يمكن إجراء معالجة لاحقة لمطابقة الكيانات المستخرجة بشكل تقريبي مع النص المصدر.
|
||
|
|
يوجد مقايضة بين تعقيد الاستخراج ودقة تتبع المصدر.
|
||
|
|
قد يكون من الأسهل تحقيق ذلك باستخدام طرق الاستخراج المنظمة بدلاً من استخراج البيانات المجردة باستخدام نماذج اللغة الكبيرة.
|
||
|
|
=======
|
||
|
|
قد لا توفر عملية الاستخراج القائمة على نماذج اللغة الكبيرة (LLM) بشكل طبيعي مواقع الأحرف.
|
||
|
|
يمكن توجيه نموذج اللغة الكبيرة لإرجاع الجملة/العبارة المصدرية بالإضافة إلى الثلاثيات المستخرجة.
|
||
|
|
بدلاً من ذلك، يمكن إجراء معالجة لاحقة لمطابقة الكيانات المستخرجة بشكل تقريبي مع النص الأصلي.
|
||
|
|
يوجد مقايضة بين تعقيد الاستخراج ودقة تتبع المصدر.
|
||
|
|
قد يكون من الأسهل تحقيق ذلك باستخدام طرق الاستخراج المنظمة بدلاً من استخراج نماذج اللغة الكبيرة غير المنظمة.
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
|
||
|
|
هذا الأمر مصنف على أنه طموح - يجب تنفيذ تتبع المصدر على مستوى المقطع أولاً، مع تتبع المقطع الفرعي كتحسين مستقبلي إذا كان ذلك ممكنًا.
|
||
|
|
|
||
|
|
### نموذج التخزين المزدوج
|
||
|
|
|
||
|
|
<<<<<<< HEAD
|
||
|
|
يتم بناء رسم بياني لتتبع المصدر بشكل تدريجي أثناء تدفق المستندات عبر مسار العمل:
|
||
|
|
=======
|
||
|
|
يتم بناء رسم بياني (DAG) لتتبع المصدر تدريجيًا أثناء تدفق المستندات عبر مسار العمل:
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
|
||
|
|
| التخزين | ما يتم تخزينه | الغرض |
|
||
|
|
|-------|---------------|---------|
|
||
|
|
| أمين المكتبة | محتوى المستند + روابط الأبناء | استرجاع المحتوى، حذف متسلسل |
|
||
|
|
<<<<<<< HEAD
|
||
|
|
| الرسم البياني للمعرفة | حواف الأبناء، وبيانات وصفية | استعلامات تتبع المصدر، إسناد الحقائق |
|
||
|
|
|
||
|
|
تحتفظ كلا التخزينين بنفس هيكل الرسم البياني. يحتوي أمين المكتبة على المحتوى، بينما يحتوي الرسم البياني على العلاقات ويمكنه تمكين استعلامات التصفح.
|
||
|
|
|
||
|
|
### المبادئ الأساسية للتصميم
|
||
|
|
|
||
|
|
1. **معرف المستند كوحدة تدفق** - تمرر المعالجات المعرفات، وليس المحتوى. يتم استرداد المحتوى من أمين المكتبة عند الحاجة.
|
||
|
|
|
||
|
|
2. **الإرسال مرة واحدة من المصدر** - يتم كتابة البيانات الوصفية في الرسم البياني مرة واحدة عند بدء المعالجة، وليس بشكل متكرر في المراحل اللاحقة.
|
||
|
|
|
||
|
|
3. **نمط معالج متسق** - يتبع كل معالج نفس النمط: الاستقبال/الاسترداد/الإنتاج/الحفظ/الإرسال/التوجيه.
|
||
|
|
|
||
|
|
4. **بناء تدريجي للرسم البياني** - يضيف كل معالج مستواه إلى الرسم البياني. يتم بناء سلسلة تتبع المصدر الكاملة بشكل تدريجي.
|
||
|
|
|
||
|
|
5. **تحسين ما بعد التقطيع** - بعد التقطيع، تحمل الرسائل كلاً من المعرف والمحتوى. تكون القطع صغيرة (2-4 كيلوبايت)، لذلك يؤدي تضمين المحتوى إلى تجنب عمليات الذهاب والإياب غير الضرورية إلى أمين المكتبة مع الحفاظ على تتبع المصدر عبر المعرف.
|
||
|
|
=======
|
||
|
|
| الرسم البياني المعرفي | حواف الأبناء، بالإضافة إلى البيانات الوصفية | استعلامات تتبع المصدر، إسناد الحقائق |
|
||
|
|
|
||
|
|
تحتفظ كلتا الحالتين بنفس هيكل الرسم البياني. تحتفظ أمين المكتبة بالمحتوى، بينما يحتفظ الرسم البياني بالعلاقات ويمكنه تمكين استعلامات التصفح.
|
||
|
|
|
||
|
|
### المبادئ الأساسية للتصميم
|
||
|
|
|
||
|
|
1. **معرف المستند كوحدة تدفق** - تمرر المعالجات المعرفات، وليس المحتوى. يتم جلب المحتوى من أمين المكتبة عند الحاجة.
|
||
|
|
|
||
|
|
2. **الإرسال مرة واحدة من المصدر** - يتم كتابة البيانات الوصفية في الرسم البياني مرة واحدة عند بدء المعالجة، وليس بشكل متكرر في المراحل اللاحقة.
|
||
|
|
|
||
|
|
3. **نمط معالج متسق** - يتبع كل معالج نفس النمط: الاستقبال/الجلب/الإنتاج/الحفظ/الإرسال/التوجيه.
|
||
|
|
|
||
|
|
4. **بناء تدريجي للرسم البياني** - يضيف كل معالج مستواه إلى الرسم البياني. يتم بناء سلسلة تتبع المصدر الكاملة بشكل تدريجي.
|
||
|
|
|
||
|
|
5. **تحسين ما بعد التقسيم إلى أجزاء** - بعد التقسيم إلى أجزاء، تحمل الرسائل كلاً من المعرف والمحتوى. الأجزاء صغيرة (2-4 كيلوبايت)، لذا فإن تضمين المحتوى يتجنب عمليات الذهاب والإياب غير الضرورية إلى أمين المكتبة مع الحفاظ على تتبع المصدر عبر المعرف.
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
|
||
|
|
## مهام التنفيذ
|
||
|
|
|
||
|
|
### تغييرات أمين المكتبة
|
||
|
|
|
||
|
|
#### الحالة الحالية
|
||
|
|
|
||
|
|
يبدأ معالجة المستند عن طريق إرسال معرف المستند إلى المعالج الأول.
|
||
|
|
لا يوجد اتصال بمخزن الثلاثيات - يتم تجميع البيانات الوصفية مع مخرجات الاستخراج.
|
||
|
|
`add-child-document` ينشئ روابط الأبناء من مستوى واحد.
|
||
|
|
`list-children` يُرجع فقط الأبناء المباشرين.
|
||
|
|
|
||
|
|
#### التغييرات المطلوبة
|
||
|
|
|
||
|
|
**1. واجهة جديدة: اتصال بمخزن الثلاثيات**
|
||
|
|
|
||
|
|
<<<<<<< HEAD
|
||
|
|
يحتاج أمين المكتبة إلى إرسال حواف بيانات وصفية للمستند مباشرة إلى الرسم البياني للمعرفة عند بدء المعالجة.
|
||
|
|
=======
|
||
|
|
تحتاج أمين المكتبة إلى إرسال حواف بيانات وصفية لمستندات الأبناء مباشرة إلى الرسم البياني المعرفي عند بدء المعالجة.
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
إضافة عميل/ناشر مخزن الثلاثيات إلى خدمة أمين المكتبة.
|
||
|
|
عند بدء المعالجة: إرسال بيانات وصفية للمستند الجذر كحواف في الرسم البياني (مرة واحدة).
|
||
|
|
|
||
|
|
**2. مفردات أنواع المستندات**
|
||
|
|
|
||
|
|
<<<<<<< HEAD
|
||
|
|
توحيد قيم `document_type` لأبناء المستند:
|
||
|
|
=======
|
||
|
|
توحيد قيم `document_type` لمستندات الأبناء:
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
`source` - المستند الذي تم تحميله أصلاً.
|
||
|
|
`page` - صفحة مستخرجة من المصدر (PDF، إلخ).
|
||
|
|
`chunk` - جزء نصي مشتق من الصفحة أو المصدر.
|
||
|
|
|
||
|
|
#### ملخص تغييرات الواجهة
|
||
|
|
|
||
|
|
| الواجهة | التغيير |
|
||
|
|
|-----------|--------|
|
||
|
|
<<<<<<< HEAD
|
||
|
|
| مخزن الثلاثيات | اتصال صادر جديد - إرسال حواف بيانات وصفية للمستند |
|
||
|
|
=======
|
||
|
|
| مخزن الثلاثيات | اتصال صادر جديد - إرسال حواف بيانات وصفية لمستندات الأبناء |
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
| بدء المعالجة | إرسال البيانات الوصفية إلى الرسم البياني قبل توجيه معرف المستند |
|
||
|
|
|
||
|
|
### تغييرات مستخرج PDF
|
||
|
|
|
||
|
|
#### الحالة الحالية
|
||
|
|
|
||
|
|
<<<<<<< HEAD
|
||
|
|
يتلقى محتوى المستند (أو يتدفق المستندات الكبيرة).
|
||
|
|
يستخرج النص من صفحات PDF.
|
||
|
|
يوجه محتوى الصفحة إلى وحدة التقطيع.
|
||
|
|
=======
|
||
|
|
يتلقى محتوى المستند (أو يقوم بتدفق المستندات الكبيرة).
|
||
|
|
يستخرج النص من صفحات PDF.
|
||
|
|
يوجه محتوى الصفحة إلى وحدة تقسيم إلى أجزاء.
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
لا يوجد تفاعل مع أمين المكتبة أو مخزن الثلاثيات.
|
||
|
|
|
||
|
|
#### التغييرات المطلوبة
|
||
|
|
|
||
|
|
**1. واجهة جديدة: عميل أمين المكتبة**
|
||
|
|
|
||
|
|
يحتاج مستخرج PDF إلى حفظ كل صفحة كمستند تابع في أمين المكتبة.
|
||
|
|
إضافة عميل أمين المكتبة إلى خدمة مستخرج PDF.
|
||
|
|
لكل صفحة: استدعاء `add-child-document` مع parent = معرف المستند الجذر.
|
||
|
|
|
||
|
|
**2. واجهة جديدة: اتصال بمخزن الثلاثيات**
|
||
|
|
|
||
|
|
<<<<<<< HEAD
|
||
|
|
يحتاج مستخرج PDF إلى إرسال حواف الأبناء إلى الرسم البياني للمعرفة.
|
||
|
|
=======
|
||
|
|
يحتاج مستخرج PDF إلى إرسال حواف الأبناء إلى الرسم البياني المعرفي.
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
إضافة عميل/ناشر مخزن الثلاثيات.
|
||
|
|
لكل صفحة: إرسال حافة تربط مستند الصفحة بالمستند الأصل.
|
||
|
|
|
||
|
|
**3. تغيير تنسيق الإخراج**
|
||
|
|
|
||
|
|
بدلًا من إرسال محتوى الصفحة مباشرةً، أرسل مُعرّف مستند الصفحة.
|
||
|
|
<<<<<<< HEAD
|
||
|
|
سيقوم المقطع (Chunker) بجلب المحتوى من أمين المكتبة (librarian) باستخدام المعرّف.
|
||
|
|
=======
|
||
|
|
سيقوم المقطع (Chunker) بجلب المحتوى من المكتبة (librarian) باستخدام المعرّف.
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
|
||
|
|
#### ملخص التغييرات في الواجهة
|
||
|
|
|
||
|
|
| الواجهة | التغيير |
|
||
|
|
|-----------|--------|
|
||
|
|
<<<<<<< HEAD
|
||
|
|
| أمين المكتبة (Librarian) | واجهة تصدير جديدة - حفظ المستندات الفرعية |
|
||
|
|
| قاعدة البيانات الثلاثية (Triple store) | واجهة تصدير جديدة - إرسال علاقات الأبناء والبنات |
|
||
|
|
=======
|
||
|
|
| المكتبة (librarian) | إخراج جديد - حفظ المستندات الفرعية |
|
||
|
|
| المستودع الثلاثي (Triple store) | إخراج جديد - إرسال علاقات الأبناء |
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
| رسالة الإخراج | تغيير من المحتوى إلى مُعرّف المستند |
|
||
|
|
|
||
|
|
### تغييرات المقطع (Chunker)
|
||
|
|
|
||
|
|
#### الحالة الحالية
|
||
|
|
|
||
|
|
<<<<<<< HEAD
|
||
|
|
يستقبل محتوى الصفحة/النص
|
||
|
|
يقسم إلى أجزاء (chunks)
|
||
|
|
يرسل محتوى الجزء إلى المعالجات اللاحقة
|
||
|
|
لا يوجد تفاعل مع أمين المكتبة أو قاعدة البيانات الثلاثية
|
||
|
|
=======
|
||
|
|
يتلقى محتوى الصفحة/النص
|
||
|
|
يقسم إلى أجزاء
|
||
|
|
يرسل محتوى الجزء إلى المعالجات اللاحقة
|
||
|
|
لا يوجد تفاعل مع المكتبة أو المستودع الثلاثي
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
|
||
|
|
#### التغييرات المطلوبة
|
||
|
|
|
||
|
|
**1. تغيير طريقة معالجة الإدخال**
|
||
|
|
|
||
|
|
<<<<<<< HEAD
|
||
|
|
استقبل مُعرّف المستند بدلًا من المحتوى، وجلبه من أمين المكتبة.
|
||
|
|
أضف عميل أمين المكتبة إلى خدمة المقطع.
|
||
|
|
جلب محتوى الصفحة باستخدام مُعرّف المستند.
|
||
|
|
|
||
|
|
**2. واجهة جديدة: عميل أمين المكتبة (للكتابة)**
|
||
|
|
|
||
|
|
احفظ كل جزء كمستند فرعي في أمين المكتبة.
|
||
|
|
لكل جزء: استدعِ `add-child-document` مع `parent = page document ID`
|
||
|
|
|
||
|
|
**3. واجهة جديدة: اتصال بقاعدة البيانات الثلاثية**
|
||
|
|
|
||
|
|
أرسل علاقات الأبناء والبنات إلى الرسم البياني المعرفي.
|
||
|
|
أضف عميل/ناشر قاعدة البيانات الثلاثية.
|
||
|
|
=======
|
||
|
|
استقبل مُعرّف المستند بدلاً من المحتوى، وجلبه من المكتبة.
|
||
|
|
أضف عميل المكتبة إلى خدمة المقطع.
|
||
|
|
جلب محتوى الصفحة باستخدام مُعرّف المستند.
|
||
|
|
|
||
|
|
**2. واجهة جديدة: عميل المكتبة (للكتابة)**
|
||
|
|
|
||
|
|
احفظ كل جزء كمستند فرعي في المكتبة.
|
||
|
|
لكل جزء: اتصل بـ `add-child-document` مع `parent = مُعرّف مستند الصفحة`
|
||
|
|
|
||
|
|
**3. واجهة جديدة: اتصال بالمستودع الثلاثي**
|
||
|
|
|
||
|
|
أرسل علاقات الأبناء إلى الرسم البياني المعرفي.
|
||
|
|
أضف عميل/ناشر المستودع الثلاثي.
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
لكل جزء: أرسل علاقة تربط مستند الجزء بمستند الصفحة.
|
||
|
|
|
||
|
|
**4. تغيير تنسيق الإخراج**
|
||
|
|
|
||
|
|
<<<<<<< HEAD
|
||
|
|
أرسل كلاً من مُعرّف مستند الجزء ومحتوى الجزء (تحسين لاحق للمقطع).
|
||
|
|
تستقبل المعالجات اللاحقة المعرّف لأغراض التتبع + المحتوى للعمل به.
|
||
|
|
=======
|
||
|
|
أرسل كلاً من مُعرّف مستند الجزء ومحتوى الجزء (تحسين بعد تقسيم الجزء).
|
||
|
|
تتلقى المعالجات اللاحقة المعرّف لتتبع المصدر + المحتوى للعمل به.
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
|
||
|
|
#### ملخص التغييرات في الواجهة
|
||
|
|
|
||
|
|
| الواجهة | التغيير |
|
||
|
|
|-----------|--------|
|
||
|
|
| رسالة الإدخال | تغيير من المحتوى إلى مُعرّف المستند |
|
||
|
|
<<<<<<< HEAD
|
||
|
|
| أمين المكتبة (Librarian) | واجهة تصدير جديدة (قراءة وكتابة) - جلب المحتوى، حفظ المستندات الفرعية |
|
||
|
|
| قاعدة البيانات الثلاثية (Triple store) | واجهة تصدير جديدة - إرسال علاقات الأبناء والبنات |
|
||
|
|
=======
|
||
|
|
| المكتبة (librarian) | إخراج جديد (قراءة وكتابة) - جلب المحتوى، حفظ المستندات الفرعية |
|
||
|
|
| المستودع الثلاثي (Triple store) | إخراج جديد - إرسال علاقات الأبناء |
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
| رسالة الإخراج | تغيير من المحتوى فقط إلى المعرّف + المحتوى |
|
||
|
|
|
||
|
|
### تغييرات مُستخرج المعرفة (Knowledge Extractor)
|
||
|
|
|
||
|
|
#### الحالة الحالية
|
||
|
|
|
||
|
|
<<<<<<< HEAD
|
||
|
|
يستقبل محتوى الجزء
|
||
|
|
يستخرج الثلاثيات والتضمينات
|
||
|
|
يرسل إلى قاعدة البيانات الثلاثية ومخزن التضمينات
|
||
|
|
`subjectOf` تشير العلاقة إلى المستند ذي المستوى الأعلى (وليس الجزء)
|
||
|
|
=======
|
||
|
|
يتلقى محتوى الجزء
|
||
|
|
يستخرج الثلاثيات والتضمينات
|
||
|
|
يرسل إلى المستودع الثلاثي ومستودع التضمينات
|
||
|
|
تشير علاقة `subjectOf` إلى المستند ذي المستوى الأعلى (وليس الجزء).
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
|
||
|
|
#### التغييرات المطلوبة
|
||
|
|
|
||
|
|
**1. تغيير طريقة معالجة الإدخال**
|
||
|
|
|
||
|
|
استقبل مُعرّف مستند الجزء بالإضافة إلى المحتوى.
|
||
|
|
<<<<<<< HEAD
|
||
|
|
استخدم مُعرّف الجزء لأغراض الربط (المحتوى مدرج بالفعل كتحسين).
|
||
|
|
|
||
|
|
**2. تحديث أثر الثلاثيات**
|
||
|
|
|
||
|
|
اربط الثلاثيات المستخرجة بالجزء (وليس المستند ذي المستوى الأعلى).
|
||
|
|
استخدم التجريد لإنشاء حافة تشير إلى الحافة
|
||
|
|
`subjectOf` العلاقة: ثلاثية → مُعرّف مستند الجزء
|
||
|
|
الاستخدام الأول للدعم الحالي للتجريد
|
||
|
|
|
||
|
|
**3. تحديث أثر التضمينات**
|
||
|
|
|
||
|
|
اربط معرفات كيانات التضمين بالجزء.
|
||
|
|
أرسل حافة: معرف كيان التضمين → مُعرّف مستند الجزء
|
||
|
|
=======
|
||
|
|
استخدم مُعرّف الجزء لتتبع المصدر (تم تضمين المحتوى بالفعل كجزء من التحسين).
|
||
|
|
|
||
|
|
**2. تحديث تتبع المصدر**
|
||
|
|
|
||
|
|
اربط الثلاثيات المستخرجة بالجزء (وليس المستند ذي المستوى الأعلى).
|
||
|
|
استخدم التجريد لإنشاء حافة تشير إلى الحافة.
|
||
|
|
علاقة `subjectOf`: الثلاثية → مُعرّف مستند الجزء
|
||
|
|
الاستخدام الأول للدعم الحالي للتجريد.
|
||
|
|
|
||
|
|
**3. تحديث تتبع التضمينات**
|
||
|
|
|
||
|
|
اربط معرفات كيانات التضمين بالجزء.
|
||
|
|
أرسل حافة: معرف كيان التضمين → مُعرّف مستند الجزء.
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
|
|
||
|
|
#### ملخص التغييرات في الواجهة
|
||
|
|
|
||
|
|
| الواجهة | التغيير |
|
||
|
|
|-----------|--------|
|
||
|
|
| رسالة الإدخال | توقع مُعرّف الجزء + المحتوى (وليس المحتوى فقط) |
|
||
|
|
<<<<<<< HEAD
|
||
|
|
| قاعدة البيانات الثلاثية | استخدم التجريد لأثر الثلاثية → الجزء |
|
||
|
|
| أثر التضمين | اربط معرف الكيان → معرف الجزء |
|
||
|
|
|
||
|
|
## المراجع
|
||
|
|
|
||
|
|
أثر وقت الاستعلام: `docs/tech-specs/query-time-provenance.md`
|
||
|
|
معيار PROV-O لنمذجة الأثر
|
||
|
|
البيانات الوصفية المصدر الحالية في الرسم البياني المعرفي (تحتاج إلى تدقيق)
|
||
|
|
=======
|
||
|
|
| المستودع الثلاثي (Triple store) | استخدم التجريد لتتبع الثلاثية → الجزء |
|
||
|
|
| تتبع التضمينات | اربط معرف الكيان → معرف الجزء |
|
||
|
|
|
||
|
|
## المراجع
|
||
|
|
|
||
|
|
تتبع وقت الاستعلام: `docs/tech-specs/query-time-provenance.md`
|
||
|
|
معيار PROV-O لنمذجة التتبع.
|
||
|
|
البيانات الوصفية المصدر الحالية في الرسم البياني المعرفي (تحتاج إلى تدقيق).
|
||
|
|
>>>>>>> 82edf2d (New md files from RunPod)
|