mirror of
https://github.com/trustgraph-ai/trustgraph.git
synced 2026-07-09 21:32:10 +02:00
240 lines
No EOL
12 KiB
Markdown
240 lines
No EOL
12 KiB
Markdown
# GraphRAG Utendaji Uboreshaji Maelezo ya Kiufundi
|
||
|
||
## Muhtasari
|
||
|
||
Maelezo haya yanaeleza uboreshaji kamili wa utendaji wa algorithm ya GraphRAG (Graph Retrieval-Augmented Generation) katika TrustGraph. Matumizi ya sasa yana vizuizi vya utendaji muhimu ambavyo hu limit scalability na muda wa majibu. Maelezo haya yanashughulikia maeneo manne makuu ya uboreshaji:
|
||
|
||
1. **Uboreshaji wa Ufuatiliaji wa Grafu**: Ondoa maswali ya hivi karibuni ya database na utumie utafiti wa kikundi.
|
||
2. **Uboreshaji wa Utatuzi wa Labe**: Badilisha upataji wa mlolongo wa lebo kwa operesheni za sambamba/kikundi.
|
||
3. **Uboreshaji wa Mkakati wa Kumbukumbu**: Implement caching kwa akili pamoja na uondoshaji wa LRU na utaratibu wa kupata data.
|
||
4. **Uboreshaji wa Maswali**: Ongeza kumbukumbu ya matokeo na caching ya embeddings ili kuboresha muda wa majibu.
|
||
|
||
## Malengo
|
||
|
||
- **Punguza Idadi ya Maswali ya Database**: Punguza kwa 50-80% jumla ya maswali ya database kupitia kikundi na caching.
|
||
- **Boresha Muda wa Majibu**: Lenga ujenzi wa subgraph wa haraka 3-5x na utatuzi wa lebo wa haraka 2-3x.
|
||
- **Boresha Scalability**: Unga grafu kubwa zaidi za maarifa na usimamizi bora wa kumbukumbu.
|
||
- **Dumishe Usahihi**: Dumishe utendakazi na ubora wa matokeo ya GraphRAG iliyopo.
|
||
- **Wezesha Ujazo**: Boresha uwezo wa usindikaji sambamba kwa maombi mengi sambamba.
|
||
- **Punguza Uwepo wa Kumbukumbu**: Implement miundo ya data na usimamizi wa kumbukumbu bora.
|
||
- **Ongeza Ufuatiliaji**: Jumuisha metriki za utendaji na uwezo wa ufuatiliaji.
|
||
- **Hakikisha Utiaji Njia**: Ongeza utunzaji sahihi wa makosa na mitaratibu ya muda.
|
||
|
||
## Asili
|
||
|
||
Matumizi ya sasa ya GraphRAG katika `trustgraph-flow/trustgraph/retrieval/graph_rag/graph_rag.py` ina masuala muhimu ya utendaji ambayo yanaathiri sana scalability ya mfumo:
|
||
|
||
### Matatizo ya Sasa ya Utendaji
|
||
|
||
**1. Ufuatiliaji Usio na Ufanisi wa Grafu (`follow_edges` function, mistari 79-127)**
|
||
- Hufanya maswali 3 tofauti ya database kwa kila entiti kwa kila ngazi.
|
||
- Mfumo wa swali: maswali yanayozingatia mada, yanayozingatia predikat, na yanayozingatia kitu kwa kila entiti.
|
||
- Hakuna kikundi: Kila swali hutumia entiti moja tu wakati mmoja.
|
||
- Hakuna ugunduzi wa mzunguko: Inaweza kutembelea nodi sawa mara nyingi.
|
||
- Matumizi ya recursive bila kumbukumbu hupelekea utata wa kielelekeo.
|
||
- Utata wa muda: O(entities × max_path_length × triple_limit³)
|
||
|
||
**2. Utatuzi Mfululizo wa Labe (`get_labelgraph` function, mistari 144-171)**
|
||
- Hufanya usindikaji wa kila sehemu ya triple (mada, predikat, kitu) mfululizo.
|
||
- Kila wito wa `maybe_label` inaweza kusababisha swali la database.
|
||
- Hakuna utekelezaji au kikundi sambamba wa maswali ya lebo.
|
||
- Hupelekea hadi simu 3 × subgraph_size za database.
|
||
|
||
**3. Mkakati wa Msingi wa Kumbukumbu (`maybe_label` function, mistari 62-77)**
|
||
- Cache rahisi ya kamusi bila mipaka ya saizi au TTL.
|
||
- Hakuna sera ya kuondolewa kwa cache hupelekea ukuaji usio na kikomo wa kumbukumbu.
|
||
- Upotezaji wa cache husababisha maswali ya database ya kibinafsi.
|
||
- Hakuna kupata data au uongezaji mahiri wa cache.
|
||
|
||
**4. Mfumo Usio bora wa Maswali**
|
||
- Maswali ya ufanano wa vector ya entiti hayahifadhiwi kati ya maombi sawa.
|
||
- Hakuna kumbukumbu ya matokeo kwa mifumo ya swali iliyorudiwa.
|
||
- Uboreshaji wa maswali unokosekana kwa mifumo ya kawaida ya ufikiaji.
|
||
|
||
**5. Masuala Muhimu ya Muda wa Kitu (`rag.py:96-102`)**
|
||
- **Kitu cha GraphRag kinaundwa kila maombi**: Instance mpya huundwa kwa kila swali, na kupoteza faida zote za cache.
|
||
- **Kitu cha swali kina muda mfupi sana**: Huundwa na kuharibiwa ndani ya utekelezaji wa swali moja (mistari 201-207).
|
||
- **Cache ya lebo huwezeshwa kila maombi**: Uongezaji wa cache na maarifa yaliyokusanywa hayapotei kati ya maombi.
|
||
- **Utoaji wa upya wa mteja**: Wateja wa database wanaweza kuanzishwa tena kwa kila maombi.
|
||
- **Uboreshaji usio na maombi**: Haiwezi kufaidika na mifumo ya swali au kushiriki matokeo.
|
||
|
||
### Uchambuzi wa Athari za Utendaji
|
||
|
||
Jalada la mbaya zaidi linalowezekana kwa swali la kawaida:
|
||
- **Uongezaji wa Entiti**: Swali 1 la ufanano wa vector
|
||
- **Ufuatiliaji wa Grafu**: entities × max_path_length × 3 × maswali ya triple_limit
|
||
- **Utatuzi wa Labe**: maswali ya lebo ya `subgraph_size` × 3 ya kibinafsi
|
||
|
||
Kwa vigezo vya chagu msingi (entities 50, urefu wa njia 2, kikomo cha triple 30, saizi ya subgraph 150):
|
||
- **Maswali ya chini**: 1 + (50 × 2 × 3 × 30) + (150 × 3) = **maswali 9,451 ya database**
|
||
- **Muda wa majibu**: 15-30 sekunde kwa grafu za ukubwa wa wastani
|
||
- **Matumizi ya kumbukumbu**: Ukuaji usio na kikomo wa cache baada ya muda
|
||
- **Ufanisi wa cache**: 0% - caches huwezeshwa kila maombi
|
||
- **Utoaji wa kitu**: Kitu cha GraphRag + Kitu cha swali kinaundwa/kuharibiwa kwa kila maombi
|
||
|
||
Maelezo haya yanashughulikia pengo hizi kwa kutumia maswali ya kikundi, caching kwa akili, na usindikaji sambamba. Kwa kuongeza ufanisi wa mifumo ya swali na ufikiaji wa data, TrustGraph inaweza:
|
||
- Unga grafu kubwa za maarifa na milioni ya entiti
|
||
- Kutoa muda wa majibu wa chini ya sekunde kwa swali la kawaida
|
||
- Kushughulikia maombi ya GraphRAG ya sambamba mamia
|
||
- Kuongezeka kwa ufanisi na saizi na utata wa grafu
|
||
|
||
## Ubunifu wa Kiufundi
|
||
|
||
### Usanifu
|
||
|
||
Uboreshaji wa utendaji wa GraphRAG unahitaji vipengele hivi vya kiufundi:
|
||
|
||
#### 1. **Urekebishaji wa Usanifu wa Muda wa Kitu**
|
||
- **Fanya GraphRag kuwa wa muda mrefu**: Hamisha instance ya GraphRag hadi ngazi ya Processor ili kudumu katika maombi.
|
||
- **Dumishe caches**: Dumishe cache ya lebo, cache ya embedding, na cache ya matokeo ya swali kati ya maombi.
|
||
- **Boresha Kitu cha Swali**: Rekebisha Swali kama muktadha wa utekelezaji nyepesi, sio kontena ya data.
|
||
- **Usaidizi wa miunganisho**: Dumishe miunganisho ya mteja wa database katika maombi.
|
||
|
||
Moduli: `trustgraph-flow/trustgraph/retrieval/graph_rag/rag.py` (imebadilishwa)
|
||
|
||
#### 2. **Njia Iliyo bora ya Ufuatiliaji wa Grafu**
|
||
- Badilisha `follow_edges` ya recursive na utafutaji wa msingi wa upana wa iterative
|
||
- Implement utunzaji wa kikundi wa entiti katika kila ngazi ya utafutaji
|
||
- Ongeza ugunduzi wa mzunguko kwa kufuatilia nodi zilizotembelea
|
||
- Jumuisha kumalizika mapema wakati mipaka inafikiwa
|
||
|
||
Moduli: `trustgraph-flow/trustgraph/retrieval/graph_rag/optimized_traversal.py`
|
||
|
||
#### 3. **Mfumo Sambamba wa Utatuzi wa Labe**
|
||
- Kundi maswali ya lebo kwa entiti nyingi wakati mmoja
|
||
- Implement mifumo ya async/kusubiri kwa ufikiaji wa sambamba wa database
|
||
- Ongeza kupata data mahiri kwa mifumo ya kawaida ya lebo
|
||
- Jumusha mikakati ya uongezaji wa lebo
|
||
|
||
Moduli: `trustgraph-flow/trustgraph/retrieval/graph_rag/label_resolution.py`
|
||
|
||
#### 4. **Mkakati wa Kina wa Kumbukumbu**
|
||
- Implement cache ya LRU na TTL
|
||
- Zana za ufuatiliaji wa utendaji wa cache
|
||
- Usalama wa maswali na utunzaji wa rasilimali
|
||
|
||
**Mbinu ya Ufuatiliaji ya Kumbukumbu**:
|
||
```python
|
||
class LRUCacheWithTTL:
|
||
def __init__(self, max_size: int, default_ttl: int = 3600):
|
||
self.cache = OrderedDict()
|
||
self.max_size = max_size
|
||
self.default_ttl = default_ttl
|
||
self.access_times = {}
|
||
|
||
async def get(self, key: str) -> Optional[Any]:
|
||
if key in self.cache:
|
||
# Check TTL expiration
|
||
if time.time() - self.access_times[key] > self.default_ttl:
|
||
del self.cache[key]
|
||
del self.access_times[key]
|
||
return None
|
||
|
||
# Move to end (most recently used)
|
||
self.cache.move_to_end(key)
|
||
return self.cache[key]
|
||
return None
|
||
|
||
async def put(self, key: str, value: Any):
|
||
if key in self.cache:
|
||
self.cache.move_to_end(key)
|
||
else:
|
||
if len(self.cache) >= self.max_size:
|
||
# Remove least recently used
|
||
oldest_key = next(iter(self.cache))
|
||
del self.cache[oldest_key]
|
||
del self.access_times[oldest_key]
|
||
|
||
self.cache[key] = value
|
||
self.access_times[key] = time.time()
|
||
```
|
||
|
||
#### 5. **Uboreshaji wa Swali na Ufuatiliaji**
|
||
- **Ukusanyaji wa Metriki za Utendaji**:
|
||
- **Upekuzi na Muda**:
|
||
- **Usimamizi wa Rasilimali**:
|
||
- **Ufuatiliaji**:
|
||
|
||
**Muda wa Majibu**:
|
||
- Ufuatiliaji wa utendaji wa GraphRAG
|
||
- Ufuatiliaji wa maswali ya database
|
||
- Ufuatiliaji wa matumizi ya kumbukumbu
|
||
- Ufuatiliaji wa utekelezaji wa maombi
|
||
|
||
## Mkakati wa Kujaribu
|
||
|
||
### Kujaribu Kawaida
|
||
- Kujaribu sehemu kwa sehemu kwa utafutaji, caching, na utatuzi wa lebo
|
||
- Ujaribu bandia wa mashambulio ya database kwa utendaji
|
||
- Kujaribu cache ya uondoshaji na utekelezaji wa TTL
|
||
- Kujaribu utunzaji na muda wa makosa
|
||
|
||
### Kujaribu Kuunganisha
|
||
- Kujaribu swali la GraphRAG kamili na uboreshaji
|
||
- Kujaribu mashambulio ya database ya kweli
|
||
- Kujaribu uendeshaji sambamba na usimamizi wa rasilimali
|
||
- Kujaribu ugunduzi na usimamizi wa rasilimali
|
||
- Kujaribu utangamano na API iliyopo ya GraphRAG
|
||
- Kujaribu na nyuma tofauti za database
|
||
- Kuhakikisha usahihi wa matokeo ikilinganisha na utumizi wa sasa
|
||
|
||
### Kujaribu Utendaji
|
||
- Kujaribu utendaji dhidi ya utumizi wa sasa
|
||
- Kujaribu mzigo kwa saizi tofauti na utata wa grafu
|
||
- Kujaribu shinikizo kwa mipaka ya kumbukumbu na muunganisho
|
||
- Kujaribu utangamano kwa uboreshaji wa utendaji
|
||
|
||
### Kujaribu Utangamano
|
||
- Hakikisha utangamano wa API ya GraphRAG iliyopo
|
||
- Jaribu na nyuma tofauti za database
|
||
- Hakikisha usahihi wa matokeo ikilinganisha na utumizi wa sasa
|
||
|
||
## Mpango wa Utekelezaji
|
||
|
||
### Njia ya Utekelezaji Moja kwa Moja
|
||
Kwa kuwa API zinaidhinishwa kubadilika, implement uboreshaji moja kwa moja bila utata wa uhamishaji:
|
||
|
||
1. **Badilisha njia ya `follow_edges`**: Andika upya na utafutaji ulioidhinishwa wa kikundi
|
||
2. **Boresha `get_labelgraph`**: Implement utatuzi sambamba wa lebo
|
||
3. **Ongeza GraphRag ya muda mrefu**: Badilisha Processor ili itumie instance ya GraphRag iliyodumu
|
||
4. **Implement cache ya lebo**: Ongeza safu ya caching kwenye darasa la GraphRag
|
||
|
||
### Nguvu ya Marekebisho
|
||
- **Darasa la swali**: Badilisha ~50 mistari katika `follow_edges`, ongeza ~30 mistari ya utunzaji wa kikundi
|
||
- **Darasa la GraphRag**: Ongeza safu ya caching (~40 mistari)
|
||
- **Darasa la Processor**: Badilisha ili utumie instance ya GraphRag iliyodumu (~20 mistari)
|
||
- **Jumla**: ~140 mistari ya mabadiliko iliyolengwa, haswa ndani ya madarasa yaliyopo
|
||
|
||
## Ratiba
|
||
|
||
**Wiki ya 1: Utumizi wa Msingi**
|
||
- Badilisha `follow_edges` na utafutaji wa kikundi wa iterative
|
||
- Implement utatuzi wa sambamba wa lebo katika `get_labelgraph`
|
||
- Ongeza instance ya GraphRag iliyodumu kwa Processor
|
||
- Implement safu ya caching ya lebo
|
||
|
||
**Wiki ya 2: Kujaribu na Kuunganisha**
|
||
- Kujaribu kawaida kwa mantiki mpya ya utafutaji na caching
|
||
- Kujaribu utendaji dhidi ya utumizi wa sasa
|
||
- Kujaribu kuunganisha na data ya grafu ya kweli
|
||
- Tathmini ya msimamizi wa msimamizi wa msimamizi wa msimamizi wa msimamizi
|
||
- Kujaribu utangamano
|
||
|
||
**Wiki ya 3: Utekelezaji**
|
||
- Tepeleza utumizi uliorekebishwa
|
||
- Fuatilia uboreshaji wa utendaji
|
||
- Rekebisha TTL ya cache na saizi za kikundi kulingana na matumizi halisi
|
||
|
||
## Maswali Yaliyofungwa
|
||
|
||
- **Pooli ya Muunganisho wa Database**: Je, tunapaswa kutumia pooli ya muunganisho ya database maalum au kutegemea pooli ya mteja wa database iliyopo?
|
||
- **Usaidizi wa Kumbukumbu**: Je, cache ya lebo na ya embedding inapaswa kuendelea katika kuchelewesha huduma?
|
||
- **Kumbukumbu Iliyosambaa**: Kwa usimamizi wa idadi nyingi, je, tunapaswa kutumia kumbukumbu iliyosambaa kwa Redis/Memcached?
|
||
- **Umbizo la Matokeo ya Swali**: Je, tunapaswa kuongeza ufanisi wa uwakilishi wa ndani wa triple kwa ufanisi bora wa kumbukumbu?
|
||
- **Uunganisho wa Ufuatiliaji**: Metriki gani zinapaswa kuonyeshwa kwenye mifumo ya ufuatiliaji iliyopo (Prometheus, n.k.)?
|
||
|
||
## Marejeleo
|
||
|
||
- [Utekelezaji wa awali wa GraphRAG](trustgraph-flow/trustgraph/retrieval/graph_rag/graph_rag.py)
|
||
- [Kanuni za Usanifu za TrustGraph](architecture-principles.md)
|
||
- [Maelezo ya Usimamizi wa Mkusanyiko](collection-management.md) |