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

356 lines
12 KiB
Markdown
Raw Normal View History

---
layout: default
title: "Mchakato wa Utoaji"
parent: "Swahili (Beta)"
---
# Mchakato wa Utoaji
> **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.
Hati hii inaeleza jinsi data inapita katika mfumo wa utoaji wa TrustGraph, kuanzia utoaji wa hati hadi uhifadhi katika hifadhia za maarifa.
## Muhtasari
```
┌──────────┐ ┌─────────────┐ ┌─────────┐ ┌────────────────────┐
│ Librarian│────▶│ PDF Decoder │────▶│ Chunker │────▶│ Knowledge │
│ │ │ (PDF only) │ │ │ │ Extraction │
│ │────────────────────────▶│ │ │ │
└──────────┘ └─────────────┘ └─────────┘ └────────────────────┘
│ │
│ ├──▶ Triples
│ ├──▶ Entity Contexts
│ └──▶ Rows
└──▶ Document Embeddings
```
## Hifadhi ya Maudhui
### Uhifadhi wa Data (S3/Minio)
Maudhui ya nyaraka huhifadhiwa katika uhifadhi wa data unaolingana na S3:
Muundo wa njia: `doc/{object_id}` ambapo object_id ni UUID
Aina zote za nyaraka huhifadhiwa hapa: nyaraka za asili, kurasa, sehemu
### Uhifadhi wa MetaData (Cassandra)
MetaData ya nyaraka iliyohifadhiwa katika Cassandra ni pamoja na:
Kitambulisho cha nyaraka, kichwa, aina (aina ya MIME)
Rejea ya `object_id` kwa uhifadhi wa data
`parent_id` kwa nyaraka za watoto (kurasa, sehemu)
`document_type`: "chanzo", "ukurasa", "sehemu", "jibu"
### Kigezo cha Kwanza na la Kuendelea
Usafirishaji wa maudhui hutumia mkakati unaotegemea saizi:
**< 2MB**: Maudhui yajumuishwa ndani ya ujumbe (yamekodishwa kwa base64)
**≥ 2MB**: `document_id` pekee hutumwa; mchakato hupata kupitia API ya msimamizi
## Hatua ya 1: Uwasilishaji wa Nyaraka (Msimamizi)
### Kifaa cha Kuanzia
Nyaraka huingia katika mfumo kupitia operesheni ya `add-document` ya msimamizi:
1. Maudhui yamepakuliwa kwenye uhifadhi wa data
2. Rekodi ya metaData imeundwa katika Cassandra
3. Inarudisha kitambulisho cha nyaraka
### Kuanzisha Utoaji
Operesheni ya `add-processing` inaanzisha utoaji:
Inaonyesha `document_id`, `flow` (kitambulisho cha mnyororo), `collection` (hifadhi inayolengwa)
Msimamizi wa `load_document()` hupata maudhui na huyaweka kwenye folyo ya ingizo
### Muundo: Nyaraka
```
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)
```
**Uelekezaji:** Kulingana na sehemu `kind`:
`application/pdf` → Kundi `document-load` → Kipangishi cha PDF
`text/plain` → Kundi `text-load` → Kipande
## Hatua ya 2: Kipangishi cha PDF
Hubadilisha hati za PDF kuwa kurasa za maandishi.
### Mchakato
1. Pata maudhui (moja kwa moja `data` au kupitia `document_id` kutoka kwa msimamizi)
2. Toa kurasa kwa kutumia PyPDF
3. Kwa kila ukurasa:
Hifadhi kama hati ndogo kwa msimamizi (`{doc_id}/p{page_num}`)
Toa matoleo ya asili (ukurasa ulichukuliwa kutoka hati)
Peleka kwa kipande
### Mpango: 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")
```
## Hatua ya 3: Kugawanya maandishi
Hugawanya maandishi katika sehemu ndogo kulingana na ukubwa uliopangwa.
### Vigezo (vielekezi ambavyo vinaweza kusanidiwa)
`chunk_size`: Ukubwa unaolengwa wa sehemu ndogo kwa herufi (kiwango chachilia: 2000)
`chunk_overlap`: Mzunguko kati ya sehemu ndogo (kiwango chachilia: 100)
### Mchakato
1. Pata maudhui ya maandishi (moja kwa moja au kupitia mfumo wa kumbukumbu)
2. Gawanya kwa kutumia mgawaji wa herufi unaojielekeza
3. Kwa kila sehemu ndogo:
Hifadhi kama hati ndogo katika mfumo wa kumbukumbu (`{parent_id}/c{index}`)
Toa taarifa za asili (sehemu ndogo ilitokana na ukurasa/hati)
Peleka kwa vichakavu vya utoaji
### Muundo: Sehemu Ndogo
```
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")
```
### Hierarkia ya Kitambulisho cha Hati
Hati za chini huandika urithi wao katika kitambulisho:
Chanzo: `doc123`
Ukurasa: `doc123/p5`
Sehemu kutoka ukurasa: `doc123/p5/c2`
Sehemu kutoka maandishi: `doc123/c2`
## Hatua ya 4: Utokaji wa Maarifa
Mfumo mbalimbali wa utokaji unapatikana, unaochaguliwa na usanidi wa mtiririko.
### Mfumo A: Basic GraphRAG
Wasindikaji wawili sambamba:
**kg-extract-definitions**
Ingizo: Sehemu
Patoto: Triples (ufafanuzi wa vitu), EntityContexts
Hutokaje: lebo za vitu, ufafanuzi
**kg-extract-relationships**
Ingizo: Sehemu
Patoto: Triples (uhusiano), EntityContexts
Hutokaje: uhusiano wa subjekti-kivumbe-kijisumu
### Mfumo B: Inayoendeshwa na Ontolojia (kg-extract-ontology)
Ingizo: Sehemu
Patoto: Triples, EntityContexts
Hutumia ontolojia iliyosanidiwa ili kuongoza utokaji
### Mfumo C: Inayoendeshwa na Wakala (kg-extract-agent)
Ingizo: Sehemu
Patoto: Triples, EntityContexts
Hutumia mfumo wa wakala kwa utokaji
### Mfumo D: Utokaji wa Mistari (kg-extract-rows)
Ingizo: Sehemu
Patoto: Mistari (data iliyopangwa, si triples)
Hutumia ufafanuzi wa schema ili kutokaje rekodi zilizopangwa
### Schema: Triples
```
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
```
### Mfumo: 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)
```
### Mfumo: Safu
```
Rows
├── metadata: Metadata
├── row_schema: RowSchema
│ ├── name: str
│ ├── description: str
│ └── fields: list[Field]
└── rows: list[dict[str, str]] # Extracted records
```
## Hatua ya 5: Uzalishaji wa Uelekezo (Embeddings)
### Uelekezo wa Grafu
Hubadilisha muktadha wa vitu katika uelekezo wa vector.
**Mchakato:**
1. Pokea Muktadha wa Vitu (EntityContexts)
2. Piga simu kwa huduma ya uelekezo (embeddings) kwa kutumia maandishi ya muktadha
3. Toa Uelekezo wa Grafu (ramani ya kitu hadi vector)
**Muundo: Uelekezo wa Grafu (GraphEmbeddings)**
```
GraphEmbeddings
├── metadata: Metadata
└── entities: list[EntityEmbeddings]
└── EntityEmbeddings
├── entity: Term # Entity identifier
├── vector: list[float] # Embedding vector
└── chunk_id: str # Source chunk (provenance)
```
### Uelekezaji wa Hati
Hubadilisha maandishi ya sehemu moja moja kwa uelekezaji wa vector.
**Mchakato:**
1. Pokea Sehemu
2. Piga simu kwa huduma ya uelekezaji kwa kutumia maandishi ya sehemu
3. Toa Uelekezaji wa Hati
**Muundo: Uelekezaji wa Hati**
```
DocumentEmbeddings
├── metadata: Metadata
└── chunks: list[ChunkEmbeddings]
└── ChunkEmbeddings
├── chunk_id: str # Chunk identifier
└── vector: list[float] # Embedding vector
```
### Ulinganisho wa Safu
Hubadilisha nambari za safu kuwa ulinganisho wa vekta.
**Mchakato:**
1. Pokea Safu
2. Linganisha nambari zilizoelezwa za safu
3. Toa kwenye hifadhi ya vekta ya safu
## Hatua ya 6: Uhifadhi
### Hifadhi ya Triple
Inapokea: Triples
Uhifadhi: Cassandra (meza zenye msingi wa vitu)
Picha zilizoainishwa zinatenganisha maarifa ya msingi kutoka kwa asili:
`""` (ya kawaida): Ukweli wa maarifa ya msingi
`urn:graph:source`: Asili ya uondoaji
`urn:graph:retrieval`: Uwezekano wa kufafanua wakati wa kuuliza
### Hifadhi ya Vektaja (Ulinganisho wa Picha)
Inapokea: Ulinganisho wa Picha
Uhifadhi: Qdrant, Milvus, au Pinecone
Imeorodheshwa kwa: IRI ya kitu
Meta: chunk_id kwa asili
### Hifadhi ya Vektaja (Ulinganisho wa Nyaraka)
Inapokea: Ulinganisho wa Nyaraka
Uhifadhi: Qdrant, Milvus, au Pinecone
Imeorodheshwa kwa: chunk_id
### Hifadhi ya Safu
Inapokea: Safu
Uhifadhi: Cassandra
Muundo wa meza unaoongozwa na schema
### Hifadhi ya Vektaja ya Safu
Inapokea: Ulinganisho wa safu
Uhifadhi: Hifadhi ya Vektaja
Imeorodheshwa kwa: nambari za safu
## Uchunguzi wa Uwanja wa Meta
### Uwanja Unaotumika Kwa Kazi
| Uwanja | Matumizi |
|-------|-------|
| `metadata.id` | Kitambulisho cha nyaraka/kipande, uandishi wa matukio, asili |
| `metadata.user` | Usimamizi wa wateja wengi, uelekezaji wa uhifadhi |
| `metadata.collection` | Uchaguzi wa mkusanyiko unaolengwa |
| `document_id` | Rejea ya mkusanyaji, kuunganisha asili |
| `chunk_id` | Kufuatilia asili kupitia mnyororo |
<<<<<<< HEAD
### Uwanja Unaowezekana kuwa Ziada
| Uwanja | Hali |
|-------|--------|
| `metadata.metadata` | Imepangwa kama `[]` na vichujio vyote; meta ya kiwango cha nyaraka sasa inashughulikiwa na mkusanyaji wakati wa kuwasilisha |
=======
### Uwanja Ulioondolewa
| Uwanja | Hali |
|-------|--------|
| `metadata.metadata` | Imeondolewa kutoka kwa darasa la `Metadata`. Triples za meta ya kiwango cha nyaraka sasa hutolewa moja kwa moja na mkusanyaji kwenye hifadhi ya triples wakati wa kuwasilisha, sio kuletwa kupitia mnyororo wa uondoaji. |
>>>>>>> e3bcbf73 (Uwanja wa meta (orodha ya triples) katika darasa la Mnyororo wa Meta)
### Mfumo wa Uwanja wa Bytes
Uwanja wote wa yaliyomo (`data`, `text`, `chunk`) ni `bytes` lakini huondolewa mara moja kuwa maandishi ya UTF-8 na vichujio vyote. Hakuna kichujio kinachotumia bytes mbichi.
## Usanidi wa Mnyororo
Mnyororo huainishwa nje na hutolewa kwa mkusanyaji kupitia huduma ya usanidi. Kila mnyororo unaonyesha:
Ndege za ingizo (`text-load`, `document-load`)
Mnyororo wa vichujio
Vigezo (ukubwa wa kipande, njia ya uondoaji, n.k.)
Mifano ya mnyororo:
`pdf-graphrag`: PDF → Dekoda → Kipande → Maelezo + Mahusiano → Ulinganisho
`text-graphrag`: Nakshata → Kipande → Maelezo + Mahusiano → Ulinganisho
`pdf-ontology`: PDF → Dekoda → Kipande → Uondoaji wa Ontolojia → Ulinganisho
`text-rows`: Nakshata → Kipande → Uondoaji wa Safu → Hifadhi ya Safu