mirror of
https://github.com/trustgraph-ai/trustgraph.git
synced 2026-07-09 05:12:12 +02:00
second round of translation fixes
Signed-off-by: Jenkins, Kenneth Alexander <kjenkins60@gatech.edu>
This commit is contained in:
parent
6ff883acee
commit
1f1aaa24ae
152 changed files with 41130 additions and 137 deletions
240
docs/tech-specs/graphrag-performance-optimization.sw.md
Normal file
240
docs/tech-specs/graphrag-performance-optimization.sw.md
Normal file
|
|
@ -0,0 +1,240 @@
|
|||
# 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)
|
||||
Loading…
Add table
Add a link
Reference in a new issue