trustgraph/docs/tech-specs/extraction-flows.he.md

356 lines
13 KiB
Markdown
Raw Normal View History

---
layout: default
title: "זרימות חילוץ"
parent: "Hebrew (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 type)
הפניה לאחסון הבלובים `object_id`
`parent_id` עבור מסמכים משניים (עמודים, חלקים)
`document_type`: "source", "page", "chunk", "answer"
### סף בין הטמעה להזרמה
העברת תוכן משתמשת באסטרטגיה המבוססת על גודל:
**פחות מ-2MB**: התוכן כלול בתוך ההודעה (מקודד ב-base64)
**גדול או שווה ל-2MB**: נשלח רק `document_id`; המעבד שולף דרך ממשק ה-librarian API
## שלב 1: הגשת מסמך (Librarian)
### נקודת כניסה
מסמכים נכנסים למערכת דרך הפעולה `add-document` של ה-librarian:
1. התוכן מועלה לאחסון הבלובים
2. רשומה של מטא-דאטה נוצרת ב-Cassandra
3. מחזיר מזהה מסמך
### הפעלת חילוץ
הפעולה `add-processing` מפעילה חילוץ:
מציין `document_id`, `flow` (מזהה צינור), `collection` (מחסן יעד)
הפעולה `load_document()` של ה-librarian שולפת את התוכן ומפרסמת לתור הקלט של ה-flow
### סכימה: מסמך
```
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` → מפרק
## שלב 2: מפענח 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")
```
## שלב 3: חלוקה לחלקים
מחלק טקסט לחלקים בגודל מוגדר.
### פרמטרים (ניתנים להגדרה בתוך זרימת העבודה)
`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
```
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
```
## שלב 5: יצירת הטמעות (Embeddings)
### הטמעות גרפיות (Graph Embeddings)
ממיר הקשרים של ישויות להטמעות וקטוריות.
**תהליך:**
1. קבלת הקשרים של ישויות (EntityContexts)
2. הפעלת שירות הטמעות עם טקסט ההקשר
3. פלט הטמעות גרפיות (מיפוי ישות ← וקטור)
**סכימה: הטמעות גרפיות (GraphEmbeddings)**
```
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 (The metadata field (list of triples) in the pipeline Metadata class)
### תבניות שדות בייטים
כל שדות התוכן (`data`, `text`, `chunk`) הם `bytes` אך מפענחים מיד לשרשורי UTF-8 על ידי כל המעבדים. אף מעבד לא משתמש בבייטים גולמיים.
## תצורת זרימה
זרימות מוגדרות מחוץ למערכת ומועברות לספרן באמצעות שירות התצורה. כל זרימה מציינת:
תורי קלט (`text-load`, `document-load`)
שרשרת מעבדים
פרמטרים (גודל חתיכה, שיטת חילוץ, וכו')
דוגמאות לתבניות זרימה:
`pdf-graphrag`: PDF → מפענח → חולק → הגדרות + קשרים → הטמעות
`text-graphrag`: טקסט → חולק → הגדרות + קשרים → הטמעות
`pdf-ontology`: PDF → מפענח → חולק → חילוץ אונטולוגיה → הטמעות
`text-rows`: טקסט → חולק → חילוץ שורות → אחסון שורות