mirror of
https://github.com/trustgraph-ai/trustgraph.git
synced 2026-04-25 16:36:21 +02:00
Native CLI i18n: The TrustGraph CLI has built-in translation support that dynamically loads language strings. You can test and use different languages by simply passing the --lang flag (e.g., --lang es for Spanish, --lang ru for Russian) or by configuring your environment's LANG variable. Automated Docs Translations: This PR introduces autonomously translated Markdown documentation into several target languages, including Spanish, Swahili, Portuguese, Turkish, Hindi, Hebrew, Arabic, Simplified Chinese, and Russian.
355 lines
15 KiB
Markdown
355 lines
15 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.
|
|
|
|
يصف هذا المستند كيفية تدفق البيانات عبر مسار الاستخراج الخاص بـ TrustGraph، بدءًا من تقديم المستندات وصولًا إلى تخزينها في مستودعات المعرفة.
|
|
|
|
## نظرة عامة
|
|
|
|
```
|
|
┌──────────┐ ┌─────────────┐ ┌─────────┐ ┌────────────────────┐
|
|
│ Librarian│────▶│ PDF Decoder │────▶│ Chunker │────▶│ Knowledge │
|
|
│ │ │ (PDF only) │ │ │ │ Extraction │
|
|
│ │────────────────────────▶│ │ │ │
|
|
└──────────┘ └─────────────┘ └─────────┘ └────────────────────┘
|
|
│ │
|
|
│ ├──▶ Triples
|
|
│ ├──▶ Entity Contexts
|
|
│ └──▶ Rows
|
|
│
|
|
└──▶ Document Embeddings
|
|
```
|
|
|
|
## تخزين المحتوى
|
|
|
|
### تخزين الكائنات (S3/Minio)
|
|
|
|
يتم تخزين محتوى المستندات في تخزين الكائنات المتوافق مع S3:
|
|
تنسيق المسار: `doc/{object_id}` حيث object_id هو معرف فريد عالمي (UUID)
|
|
يتم تخزين جميع أنواع المستندات هنا: المستندات المصدر، الصفحات، الأجزاء
|
|
|
|
### تخزين البيانات الوصفية (Cassandra)
|
|
|
|
يتم تخزين البيانات الوصفية للمستندات في Cassandra وتشمل:
|
|
معرف المستند، العنوان، النوع (نوع MIME)
|
|
مرجع إلى تخزين الكائنات `object_id`
|
|
مرجع إلى المستندات الفرعية (الصفحات، الأجزاء) `parent_id`
|
|
`document_type`: "source"، "page"، "chunk"، "answer"
|
|
|
|
### عتبة التضمين مقابل التدفق
|
|
|
|
نقل المحتوى يستخدم استراتيجية تعتمد على الحجم:
|
|
**أقل من 2 ميجابايت**: يتم تضمين المحتوى مباشرة في الرسالة (مشفر بـ base64).
|
|
**أكبر من أو يساوي 2 ميجابايت**: يتم إرسال `document_id` فقط؛ يقوم المعالج باسترداد البيانات عبر واجهة برمجة التطبيقات الخاصة بالمكتبة.
|
|
|
|
## المرحلة الأولى: تقديم المستند (المكتبة)
|
|
|
|
### نقطة الدخول
|
|
|
|
تدخل المستندات إلى النظام عبر عملية `add-document` الخاصة بالمكتبة:
|
|
1. يتم تحميل المحتوى إلى مساحة تخزين الكائنات.
|
|
2. يتم إنشاء سجل بيانات وصفية في Cassandra.
|
|
3. يتم إرجاع معرف المستند.
|
|
|
|
### بدء عملية الاستخراج
|
|
|
|
عملية `add-processing` تبدأ عملية الاستخراج:
|
|
تحدد `document_id`، و `flow` (معرف المسار)، و `collection` (مخزن الهدف).
|
|
تقوم عملية `load_document()` الخاصة بالمكتبة باسترداد المحتوى ونشره في قائمة انتظار الإدخال الخاصة بالتدفق.
|
|
|
|
### المخطط: المستند
|
|
|
|
```
|
|
Document
|
|
├── metadata: Metadata
|
|
│ ├── id: str # Document identifier
|
|
│ ├── user: str # Tenant/user ID
|
|
│ ├── collection: str # Target collection
|
|
│ └── metadata: list[Triple] # (largely unused, historical)
|
|
├── data: bytes # PDF content (base64, if inline)
|
|
└── document_id: str # Librarian reference (if streaming)
|
|
```
|
|
|
|
**التوجيه:** بناءً على الحقل `kind`:
|
|
`application/pdf` → قائمة انتظار `document-load` → وحدة فك ترميز PDF
|
|
`text/plain` → قائمة انتظار `text-load` → وحدة تقسيم
|
|
|
|
## المرحلة الثانية: وحدة فك ترميز PDF
|
|
|
|
تحويل مستندات PDF إلى صفحات نصية.
|
|
|
|
### العملية
|
|
|
|
1. استرجاع المحتوى (مضمن في `data` أو عبر `document_id` من أمين المكتبة)
|
|
2. استخراج الصفحات باستخدام PyPDF
|
|
3. لكل صفحة:
|
|
حفظ كـ مستند فرعي في أمين المكتبة (`{doc_id}/p{page_num}`)
|
|
إرسال ثلاثيات المصدر (الصفحة مشتقة من المستند)
|
|
توجيه إلى وحدة التقسيم
|
|
|
|
### المخطط: TextDocument
|
|
|
|
```
|
|
TextDocument
|
|
├── metadata: Metadata
|
|
│ ├── id: str # Page URI (e.g., https://trustgraph.ai/doc/xxx/p1)
|
|
│ ├── user: str
|
|
│ ├── collection: str
|
|
│ └── metadata: list[Triple]
|
|
├── text: bytes # Page text content (if inline)
|
|
└── document_id: str # Librarian reference (e.g., "doc123/p1")
|
|
```
|
|
|
|
## المرحلة الثالثة: تقسيم النص إلى أجزاء
|
|
|
|
يقسم النص إلى أجزاء عند الحجم المحدد.
|
|
|
|
### المعلمات (قابلة للتكوين من خلال التدفق)
|
|
|
|
`chunk_size`: الحجم المستهدف للجزء الواحد بالأحرف (الافتراضي: 2000)
|
|
`chunk_overlap`: التداخل بين الأجزاء (الافتراضي: 100)
|
|
|
|
### العملية
|
|
|
|
1. استرجاع محتوى النص (مباشرة أو عبر أمين المكتبة)
|
|
2. التقسيم باستخدام مقسم الأحرف التكراري
|
|
3. لكل جزء:
|
|
حفظ كوثيقة فرعية في أمين المكتبة (`{parent_id}/c{index}`)
|
|
إرسال بيانات المصدر (الجزء مشتق من صفحة/مستند)
|
|
توجيه إلى معالجات الاستخراج
|
|
|
|
### المخطط: جزء
|
|
|
|
```
|
|
Chunk
|
|
├── metadata: Metadata
|
|
│ ├── id: str # Chunk URI
|
|
│ ├── user: str
|
|
│ ├── collection: str
|
|
│ └── metadata: list[Triple]
|
|
├── chunk: bytes # Chunk text content
|
|
└── document_id: str # Librarian chunk ID (e.g., "doc123/p1/c3")
|
|
```
|
|
|
|
### التسلسل الهرمي لمعرف المستند
|
|
|
|
تقوم المستندات الفرعية بتشفير أصلها في المعرف:
|
|
المصدر: `doc123`
|
|
الصفحة: `doc123/p5`
|
|
جزء من الصفحة: `doc123/p5/c2`
|
|
جزء من النص: `doc123/c2`
|
|
|
|
## المرحلة 4: استخراج المعرفة
|
|
|
|
تتوفر أنماط استخراج متعددة، يتم اختيارها بواسطة إعدادات التدفق.
|
|
|
|
### النمط أ: GraphRAG الأساسي
|
|
|
|
معالجتان متوازيتان:
|
|
|
|
**kg-extract-definitions**
|
|
المدخلات: جزء
|
|
المخرجات: ثلاثيات (تعريفات الكيانات)، سياقات الكيانات
|
|
يستخرج: تسميات الكيانات، التعريفات
|
|
|
|
**kg-extract-relationships**
|
|
المدخلات: جزء
|
|
المخرجات: ثلاثيات (علاقات)، سياقات الكيانات
|
|
يستخرج: علاقات الفاعل-الفعل-المفعول
|
|
|
|
### النمط ب: مدفوع بالدلالات (kg-extract-ontology)
|
|
|
|
المدخلات: جزء
|
|
المخرجات: ثلاثيات، سياقات الكيانات
|
|
يستخدم دلالات مُكوّنة لتوجيه الاستخراج
|
|
|
|
### النمط ج: قائم على الوكيل (kg-extract-agent)
|
|
|
|
المدخلات: جزء
|
|
المخرجات: ثلاثيات، سياقات الكيانات
|
|
يستخدم إطار عمل الوكيل للاستخراج
|
|
|
|
### النمط د: استخراج الصفوف (kg-extract-rows)
|
|
|
|
المدخلات: جزء
|
|
المخرجات: صفوف (بيانات منظمة، وليست ثلاثيات)
|
|
يستخدم تعريف المخطط لاستخراج سجلات منظمة
|
|
|
|
### المخطط: ثلاثيات
|
|
|
|
```
|
|
Triples
|
|
├── metadata: Metadata
|
|
│ ├── id: str
|
|
│ ├── user: str
|
|
│ ├── collection: str
|
|
│ └── metadata: list[Triple] # (set to [] by extractors)
|
|
└── triples: list[Triple]
|
|
└── Triple
|
|
├── s: Term # Subject
|
|
├── p: Term # Predicate
|
|
├── o: Term # Object
|
|
└── g: str | None # Named graph
|
|
```
|
|
|
|
### المخطط: سياقات الكيانات
|
|
|
|
```
|
|
EntityContexts
|
|
├── metadata: Metadata
|
|
└── entities: list[EntityContext]
|
|
└── EntityContext
|
|
├── entity: Term # Entity identifier (IRI)
|
|
├── context: str # Textual description for embedding
|
|
└── chunk_id: str # Source chunk ID (provenance)
|
|
```
|
|
|
|
### المخطط: الصفوف
|
|
|
|
```
|
|
Rows
|
|
├── metadata: Metadata
|
|
├── row_schema: RowSchema
|
|
│ ├── name: str
|
|
│ ├── description: str
|
|
│ └── fields: list[Field]
|
|
└── rows: list[dict[str, str]] # Extracted records
|
|
```
|
|
|
|
## المرحلة الخامسة: توليد التضمينات
|
|
|
|
### تضمينات الرسم البياني
|
|
|
|
تحويل سياقات الكيانات إلى تضمينات متجهة.
|
|
|
|
**العملية:**
|
|
1. استقبال سياقات الكيانات.
|
|
2. استدعاء خدمة التضمينات مع نص السياق.
|
|
3. إخراج تضمينات الرسم البياني (ت mapping بين الكيان والمتجه).
|
|
|
|
**النموذج: تضمينات الرسم البياني**
|
|
|
|
```
|
|
GraphEmbeddings
|
|
├── metadata: Metadata
|
|
└── entities: list[EntityEmbeddings]
|
|
└── EntityEmbeddings
|
|
├── entity: Term # Entity identifier
|
|
├── vector: list[float] # Embedding vector
|
|
└── chunk_id: str # Source chunk (provenance)
|
|
```
|
|
|
|
### تضمينات المستندات
|
|
|
|
يحول النص المقسم مباشرةً إلى تضمينات متجهة.
|
|
|
|
**العملية:**
|
|
1. استقبال الجزء
|
|
2. استدعاء خدمة التضمينات باستخدام نص الجزء
|
|
3. إخراج تضمينات المستندات
|
|
|
|
**التركيب: تضمينات المستندات**
|
|
|
|
```
|
|
DocumentEmbeddings
|
|
├── metadata: Metadata
|
|
└── chunks: list[ChunkEmbeddings]
|
|
└── ChunkEmbeddings
|
|
├── chunk_id: str # Chunk identifier
|
|
└── vector: list[float] # Embedding vector
|
|
```
|
|
|
|
### تضمينات الصفوف
|
|
|
|
تحويل حقول فهرس الصف إلى تضمينات متجهة.
|
|
|
|
**العملية:**
|
|
1. استقبال الصفوف
|
|
2. تضمين حقول الفهرس المحددة
|
|
3. الإخراج إلى مخزن المتجهات الصفية
|
|
|
|
## المرحلة 6: التخزين
|
|
|
|
### مخزن ثلاثي
|
|
|
|
يستقبل: ثلاثيات
|
|
التخزين: Cassandra (جداول تركز على الكيانات)
|
|
الرسوم البيانية المسماة تفصل المعرفة الأساسية عن المصادر:
|
|
`""` (افتراضي): حقائق المعرفة الأساسية
|
|
`urn:graph:source`: تتبع المصادر
|
|
`urn:graph:retrieval`: إمكانية الشرح في وقت الاستعلام
|
|
|
|
### مخزن المتجهات (تضمينات الرسم البياني)
|
|
|
|
يستقبل: تضمينات الرسم البياني
|
|
التخزين: Qdrant، Milvus، أو Pinecone
|
|
مفهرس بواسطة: IRI الكيان
|
|
البيانات الوصفية: chunk_id لتتبع المصادر
|
|
|
|
### مخزن المتجهات (تضمينات المستندات)
|
|
|
|
يستقبل: تضمينات المستندات
|
|
التخزين: Qdrant، Milvus، أو Pinecone
|
|
مفهرس بواسطة: chunk_id
|
|
|
|
### مخزن الصفوف
|
|
|
|
يستقبل: صفوف
|
|
التخزين: Cassandra
|
|
هيكل الجدول الموجه بالمخطط
|
|
|
|
### مخزن المتجهات الصفية
|
|
|
|
يستقبل: تضمينات الصفوف
|
|
التخزين: قاعدة بيانات المتجهات
|
|
مفهرس بواسطة: حقول فهرس الصف
|
|
|
|
## تحليل حقول البيانات الوصفية
|
|
|
|
### الحقول المستخدمة بنشاط
|
|
|
|
| الحقل | الاستخدام |
|
|
|-------|-------|
|
|
| `metadata.id` | معرف المستند/الكتلة، التسجيل، تتبع المصادر |
|
|
| `metadata.user` | تعدد المستأجرين، توجيه التخزين |
|
|
| `metadata.collection` | اختيار المجموعة المستهدفة |
|
|
| `document_id` | مرجع أمين المكتبة، ربط تتبع المصادر |
|
|
| `chunk_id` | تتبع المصادر عبر مسار العمل |
|
|
|
|
<<<<<<< HEAD
|
|
### الحقول التي قد تكون زائدة عن الحاجة
|
|
|
|
| الحقل | الحالة |
|
|
|-------|--------|
|
|
| `metadata.metadata` | يتم تعيينه على `[]` بواسطة جميع المستخرجات؛ يتم التعامل مع بيانات وصفية على مستوى المستند الآن بواسطة أمين المكتبة في وقت الإرسال |
|
|
=======
|
|
### الحقول التي تمت إزالتها
|
|
|
|
| الحقل | الحالة |
|
|
|-------|--------|
|
|
| `metadata.metadata` | تمت إزالته من الفئة `Metadata`. يتم الآن إرسال ثلاثيات البيانات الوصفية على مستوى المستند مباشرةً بواسطة أمين المكتبة إلى مخزن الثلاثيات في وقت الإرسال، ولا يتم نقلها عبر مسار العمل. |
|
|
>>>>>>> e3bcbf73 (قائمة البيانات الوصفية (الثلاثيات) في فئة مسار العمل Metadata)
|
|
|
|
### نمط حقول البايت
|
|
|
|
جميع حقول المحتوى (`data`، `text`، `chunk`) هي `bytes` ولكن يتم فك ترميزها على الفور إلى سلاسل UTF-8 بواسطة جميع المعالجات. لا يستخدم أي معالج بايت خام.
|
|
|
|
## تكوين التدفق
|
|
|
|
يتم تعريف التدفقات خارجيًا وتقديمها إلى أمين المكتبة عبر خدمة التكوين. يحدد كل تدفق:
|
|
|
|
قوائم انتظار الإدخال (`text-load`، `document-load`)
|
|
سلسلة المعالجات
|
|
المعلمات (حجم الكتلة، طريقة الاستخراج، إلخ.)
|
|
|
|
أمثلة على أنماط التدفق:
|
|
`pdf-graphrag`: PDF → Decoder → Chunker → Definitions + Relationships → Embeddings
|
|
`text-graphrag`: Text → Chunker → Definitions + Relationships → Embeddings
|
|
`pdf-ontology`: PDF → Decoder → Chunker → Ontology Extraction → Embeddings
|
|
`text-rows`: Text → Chunker → Row Extraction → Row Store
|