update more languages

Signed-off-by: Alex Jenkins <kjenkins60@gatech.edu>
This commit is contained in:
Alex Jenkins 2026-04-11 01:08:44 +00:00
parent 835acaa70e
commit 16c2f12a54
249 changed files with 117186 additions and 186 deletions

View file

@ -2,6 +2,7 @@
## סקירה כללית
<<<<<<< HEAD
מפרט זה מתאר שיפורי ביצועים מקיפים עבור אלגוריתם GraphRAG (Graph Retrieval-Augmented Generation) ב-TrustGraph. יישום הנוכחי סובל מבעיות ביצועים משמעותיות המגבילות את יכולת ההרחבה וזמני התגובה. מפרט זה מתייחס לארבעה תחומים עיקריים של אופטימיזציה:
1. **אופטימיזציה של מעבר גרפים**: ביטול שאילתות מסד נתונים רקורסיביות לא יעילות ויישום חקר גרפים באצווה.
@ -19,6 +20,25 @@
**הפחתת טביעת רגל של זיכרון**: יישום מבני נתונים וניהול זיכרון יעילים.
**הוספת יכולת ניטור**: הכללת מדדי ביצועים ויכולות ניטור.
**הבטחת אמינות**: הוספת טיפול בשגיאות ומנגנוני תזמון מתאימים.
=======
מפרט זה מתאר שיפורים מקיפים בביצועים עבור אלגוריתם GraphRAG (Graph Retrieval-Augmented Generation) ב-TrustGraph. יישום הנוכחי סובל מבעיות ביצועים משמעותיות המגבילות את יכולת ההרחבה וזמני התגובה. מפרט זה מתייחס לארבעה תחומים עיקריים של אופטימיזציה:
1. **אופטימיזציה של מעבר גרפים**: ביטול שאילתות מסד נתונים רקורסיביות לא יעילות ויישום חקר גרפים בקבוצות
2. **אופטימיזציה של פתרון תגיות**: החלפת שליפת תגיות רציפה בפעולות מקבילות/בקבוצות
3. **שיפור אסטרטגיית אחסון במטמון**: יישום אחסון במטמון חכם עם פינוי LRU וטעינה מראש
4. **אופטימיזציה של שאילתות**: הוספת שמירת תוצאות במטמון ואחסון במטמון של הטמעות לשיפור זמני התגובה
## מטרות
**הפחתת נפח שאילתות מסד הנתונים**: השגת הפחתה של 50-80% בסך כל שאילתות מסד הנתונים באמצעות קיבוץ ואחסון במטמון
**שיפור זמני תגובה**: יעד לבניית תת-גרפים מהירה פי 3-5 ופתרון תגיות מהיר פי 2-3
**שיפור יכולת הרחבה**: תמיכה בגרפי ידע גדולים יותר עם ניהול זיכרון טוב יותר
**שמירה על דיוק**: שמירה על פונקציונליות ואיכות תוצאות GraphRAG הקיימות
**אפשרות לעיבוד מקבילי**: שיפור יכולות עיבוד מקבילי עבור בקשות מרובות בו-זמנית
**הפחתת טביעת רגל של זיכרון**: יישום מבני נתונים וניהול זיכרון יעילים
**הוספת יכולת ניטור**: הכללת מדדי ביצועים ויכולות ניטור
**הבטחת אמינות**: הוספת טיפול מתאים בשגיאות ומנגנוני תזמון
>>>>>>> 82edf2d (New md files from RunPod)
## רקע
@ -27,6 +47,7 @@
### בעיות ביצועים נוכחיות
**1. מעבר גרפים לא יעיל (פונקציה `follow_edges`, שורות 79-127)**
<<<<<<< HEAD
מבצע 3 שאילתות נפרדות למסד הנתונים עבור כל ישות בכל רמת עומק.
תבנית שאילתה: שאילתות מבוססות נושא, מבוססות פרידיקט ומבוססות אובייקט עבור כל ישות.
ללא אצווה: כל שאילתה מעבדת רק ישות אחת בכל פעם.
@ -57,15 +78,55 @@
**מטמון תגיות מאופס עבור כל בקשה**: חימום מטמון וידע שנצבר אובדים בין בקשות.
**תקורה של יצירת לקוח מחדש**: לקוחות מסד נתונים פוטנציאליים מוקמים מחדש עבור כל בקשה.
**ללא אופטימיזציה חוצה בקשות**: לא ניתן להפיק תועלת מתבניות שאילתות או שיתוף תוצאות.
=======
מבצע 3 שאילתות נפרדות למסד הנתונים עבור כל ישות בכל רמת עומק
תבנית שאילתה: שאילתות מבוססות נושא, שאילתות מבוססות פרידיקט ושאילתות מבוססות אובייקט עבור כל ישות
ללא קיבוץ: כל שאילתה מעבדת רק ישות אחת בכל פעם
ללא זיהוי מעגלים: ניתן לחזור על צמתים זהים מספר פעמים
יישום רקורסיבי ללא שמירה במטמון מוביל למורכבות אקספוננציאלית
מורכבות זמן: O(entities × max_path_length × triple_limit³)
**2. פתרון תגיות רציף (פונקציה `get_labelgraph`, שורות 144-171)**
מעבד כל רכיב משולש (נושא, פרידיקט, אובייקט) ברצף
כל קריאה ל-`maybe_label` עלולה לגרום לשאילתה למסד הנתונים
ללא ביצוע מקבילי או קיבוץ של שאילתות תגיות
גורם עד ל-3 × קריאות אישיות למסד הנתונים עבור גודל תת-גרף
**3. אסטרטגיית אחסון במטמון בסיסית (פונקציה `maybe_label`, שורות 62-77)**
מטמון מילון פשוט ללא מגבלות גודל או TTL
מדיניות פינוי מטמון חסרת גבולות מובילה לצמיחה בלתי מוגבלת של זיכרון
החסרה במטמון גורמת לשאילתות נפרדות למסד הנתונים
ללא טעינה מראש או אחסון במטמון חכם
**4. תבניות שאילתות לא אופטימליות**
שאילתות דמיון וקטורי לישויות אינן מאוחסנות במטמון בין בקשות דומות
ללא שמירת תוצאות במטמון לתבניות שאילתות חוזרות
חסרים אופטימיזציות שאילתות לתבניות גישה נפוצות
**5. בעיות קריטיות של חיי אובייקט (`rag.py:96-102`)**
**אובייקט GraphRag נוצר מחדש עבור כל בקשה**: מופע חדש נוצר עבור כל שאילתה, ומאבד את כל יתרונות האחסון במטמון
**אובייקט שאילתה בעל אורך חיים קצר ביותר**: נוצר ונהרס בתוך ביצוע שאילתה יחידה (שורות 201-207)
**מטמון תגיות מאופס עבור כל בקשה**: חימום מטמון וידע שנצבר הולכים לאיבוד בין בקשות
**תקורה של יצירת לקוח**: לקוחות מסד נתונים פוטנציאליים נוצרים מחדש עבור כל בקשה
**ללא אופטימיזציה חוצה בקשות**: לא ניתן להפיק תועלת מתבניות שאילתות או שיתוף תוצאות
>>>>>>> 82edf2d (New md files from RunPod)
### ניתוח השפעת ביצועים
תרחיש גרוע ביותר נוכחי עבור שאילתה טיפוסית:
<<<<<<< HEAD
**אחזור ישות**: שאילתת דמיון וקטורית אחת.
**מעבר גרפים**: entities × max_path_length × 3 × שאילתות triple_limit.
**פתרון תגיות**: 3 × שאילתות תגיות אישיות עבור גודל תת-גרף.
פלט חוזה (יש לעקוב אחר הפורמט המדויק).
עבור פרמטרים ברירת מחדל (50 ישויות, אורך נתיב 2, מגבלת 30 משולשים, גודל תת-גרף 150):
=======
**שליפת ישות**: שאילתה אחת לדמיון וקטורי
**מעבר גרפים**: entities × max_path_length × 3 × שאילתות triple_limit
**פתרון תגיות**: 3 × שאילתות אישיות לגודל תת-גרף
פלט חוזה (יש לעקוב אחר הפורמט המדויק).
עבור פרמטרים ברירת מחדל (50 ישויות, אורך נתיב 2, מגבלת טריפל של 30, גודל תת-גרף של 150):
>>>>>>> 82edf2d (New md files from RunPod)
**מספר שאילתות מינימלי**: 1 + (50 × 2 × 3 × 30) + (150 × 3) = **9,451 שאילתות למסד נתונים**
**זמן תגובה**: 15-30 שניות עבור גרפים בגודל בינוני
**שימוש בזיכרון**: צמיחה בלתי מוגבלת של מטמון לאורך זמן
@ -87,22 +148,36 @@
#### 1. **שינוי ארכיטקטורה של משך חיי אובייקטים**
**הפוך את GraphRag לבעל חיים ארוך**: העבר את המופע של GraphRag לרמה של המעבד לצורך שמירה בין בקשות
**שמור על מטמון**: שמור על מטמון תוויות, מטמון הטבעות ומטמון תוצאות שאילתה בין בקשות
<<<<<<< HEAD
**אופטימיזציה של אובייקט שאילתה**: שנה את מבנה אובייקט השאילתה כהקשר ביצוע קל משקל, ולא כמכל נתונים
=======
**אופטימיזציה של אובייקט שאילתה**: שנה את מבנה אובייקט השאילתה כך שיהיה הקשר ביצוע קל משקל, ולא מיכל נתונים
>>>>>>> 82edf2d (New md files from RunPod)
**שמירה על חיבורים**: שמור על חיבורי לקוח למסד הנתונים בין בקשות
מודול: `trustgraph-flow/trustgraph/retrieval/graph_rag/rag.py` (עודכן)
#### 2. **מנוע מעבר גרפים מותאם**
החלף את `follow_edges` רקורסיבי בחיפוש רוחב-ראשוני איטרטיבי
<<<<<<< HEAD
הטמעת עיבוד אצווה של ישויות בכל רמת מעבר
הוסף זיהוי מעגלים באמצעות מעקב אחר צמתים מבקרים
כלול סיום מוקדם כאשר מגיעים למגבלות
=======
הטמע עיבוד אצווה של ישויות בכל רמת מעבר
הוסף זיהוי מעגלים באמצעות מעקב אחר צמתים שנצפו
כלול סיום מוקדם כאשר מגיעים לגבולות
>>>>>>> 82edf2d (New md files from RunPod)
מודול: `trustgraph-flow/trustgraph/retrieval/graph_rag/optimized_traversal.py`
#### 3. **מערכת פתרון תוויות מקבילה**
שאילתות תוויות באצווה עבור מספר ישויות בו-זמנית
<<<<<<< HEAD
הטמעת דפוסי async/await לגישה מקבילה למסד הנתונים
=======
הטמע דפוסי async/await לגישה מקבילה למסד הנתונים
>>>>>>> 82edf2d (New md files from RunPod)
הוסף אחזור מוקדם לדפוסי תוויות נפוצים
כלול אסטרטגיות חימום מטמון תוויות
@ -119,7 +194,11 @@
#### 5. **מסגרת אופטימיזציה של שאילתות**
ניתוח אופטימיזציה של דפוסי שאילתות והצעות
מתאם שאילתות באצווה לגישה למסד הנתונים
<<<<<<< HEAD
ניהול בריכת חיבורים וזמן קצוב של שאילתות
=======
ניהול בריכת חיבורים ותזמון תפוגה של שאילתות
>>>>>>> 82edf2d (New md files from RunPod)
ניטור ביצועים ואיסוף מדדים
מודול: `trustgraph-flow/trustgraph/retrieval/graph_rag/query_optimizer.py`
@ -142,10 +221,17 @@ class TraversalState:
```
גישה זו מאפשרת:
<<<<<<< HEAD
זיהוי יעיל של מעגלים באמצעות מעקב אחר ישויות שביקרו
הכנת שאילתות באצווה בכל רמת מעבר
ניהול מצב חסכוני בזיכרון
סיום מוקדם כאשר מגיעים למגבלות גודל
=======
זיהוי יעיל של מעגלים באמצעות מעקב אחר ישויות שכבר נבדקו.
הכנת שאילתות בקבוצות בכל רמת מעבר.
ניהול מצב חסכוני בזיכרון.
סיום מוקדם כאשר מגבלות גודל הושגו.
>>>>>>> 82edf2d (New md files from RunPod)
#### מבנה מטמון משופר
@ -467,7 +553,11 @@ class PerformanceMetrics:
memory_usage_mb: float
```
<<<<<<< HEAD
**זמן תגובה מקסימלי ומנגנון ניתוב מחדש:**
=======
**מגבלת זמן שאילתה ומנגנון ניתוב:**
>>>>>>> 82edf2d (New md files from RunPod)
```python
async def execute_with_timeout(self, query_func, timeout: int = 30):
try:
@ -479,14 +569,22 @@ async def execute_with_timeout(self, query_func, timeout: int = 30):
## שיקולים בנוגע לעקביות מטמון
<<<<<<< HEAD
**פשרות בנוגע לרעננות נתונים:**
**מטמון תוויות (TTL של 5 דקות)**: סיכון להצגת תוויות של ישויות שנמחקו/ששמותיהן שונו.
**ללא שמירת מטמון של הטמעות (embeddings)**: לא נדרש - הטמעות כבר שמורות מטמון עבור כל שאילתה.
**ללא שמירת מטמון של תוצאות**: מונע קבלת תוצאות תת-גרף לא עדכניות מישויות/קשרים שנמחקו.
=======
**פשרות בין רעננות נתונים:**
**מטמון תוויות (TTL של 5 דקות)**: סיכון בהצגת תוויות של ישויות שנמחקו/ששמותיהן שונו.
**ללא שמירת מטמון של הטמעות (embeddings)**: לא נדרש - הטמעות כבר שמורות מטמון עבור כל שאילתה.
**ללא שמירת מטמון של תוצאות**: מונע תוצאות תת-גרף שגויות מישויות/קשרים שנמחקו.
>>>>>>> 82edf2d (New md files from RunPod)
**אסטרטגיות הפחתה:**
**ערכי TTL שמרניים**: איזון בין שיפורי ביצועים (10-20%) לבין רעננות נתונים.
**מנגנוני ביטול מטמון**: שילוב אופציונלי עם אירועי שינוי בגרף.
<<<<<<< HEAD
**לוחות מחוונים לניטור**: מעקב אחר אחוזי פגיעה במטמון (cache hit rates) לעומת מקרים של נתונים לא עדכניים.
**מדיניות מטמון הניתנות לתצורה**: אפשרות לכוונון פר-פריסה בהתאם לתדירות השינויים.
@ -506,13 +604,38 @@ async def execute_with_timeout(self, query_func, timeout: int = 30):
אכיפת מגבלות על גודל תת-גרף מקסימלי.
יישום זמני קצבה לשאילתות כדי למנוע מיצוי משאבים.
הוספת ניטור מגבלות לשימוש בזיכרון.
=======
**לוחות מחוונים לניטור**: מעקב אחר שיעורי פגיעות במטמון לעומת מקרים של נתונים לא מעודכנים.
**מדיניות מטמון הניתנות לתצורה**: אפשרות לכוונון עדין בהתאם לתדירות השינויים בכל פריסה.
**תצורת מטמון מומלצת בהתאם לקצב שינויים בגרף:**
**שינויים רבים (>100 שינויים/שעה)**: TTL=60 שניות, גדלי מטמון קטנים יותר.
**שינויים בינוניים (10-100 שינויים/שעה)**: TTL=300 שניות (ברירת מחדל).
**שינויים מעטים (<10 שינויים/שעה)**: TTL=600 שניות, גדלי מטמון גדולים יותר.
## שיקולים בנושא אבטחה
**מניעת הזרקת שאילתות:**
אימות כל מזהי ישויות ופרמטרים של שאילתות.
שימוש בשאילתות מפורטות עבור כל אינטראקציות עם מסד הנתונים.
יישום מגבלות מורכבות שאילתות למניעת התקפות מניעת שירות (DoS).
**הגנה על משאבים:**
אכיפת מגבלות גודל תת-גרף מקסימלי.
יישום זמני קצבי שאילתות למניעת מיצוי משאבים.
הוספת ניטור מגבלות שימוש בזיכרון.
>>>>>>> 82edf2d (New md files from RunPod)
**בקרת גישה:**
שמירה על בידוד משתמשים ואוספים קיימים.
הוספת רישום ביקורת עבור פעולות המשפיעות על הביצועים.
יישום הגבלת קצב עבור פעולות יקרות.
<<<<<<< HEAD
## שיקולים בנוגע לביצועים
=======
## שיקולים בנושא ביצועים
>>>>>>> 82edf2d (New md files from RunPod)
### שיפורי ביצועים צפויים
@ -531,8 +654,13 @@ async def execute_with_timeout(self, query_func, timeout: int = 30):
איסוף אשפה טוב יותר באמצעות ניקוי משאבים נכון.
**ציפיות ריאליות בנוגע לביצועים:**
<<<<<<< HEAD
**מטמון תוויות**: הפחתה של 10-20% במספר השאילתות עבור גרפים עם קשרים נפוצים.
**אופטימיזציה של קיבוץ**: הפחתה של 50-80% במספר השאילתות (אופטימיזציה עיקרית).
=======
**מטמון תוויות**: הפחתת שאילתות ב-10-20% עבור גרפים עם קשרים נפוצים.
**אופטימיזציה של קיבוץ**: הפחתת שאילתות ב-50-80% (אופטימיזציה עיקרית).
>>>>>>> 82edf2d (New md files from RunPod)
**אופטימיזציה של חיי אובייקט**: ביטול תקורה של יצירה מחדש בכל בקשה.
**שיפור כולל**: שיפור של פי 3-4 בזמן התגובה בעיקר בזכות קיבוץ.
@ -545,8 +673,13 @@ async def execute_with_timeout(self, query_func, timeout: int = 30):
**מדדים בזמן אמת:**
זמני ביצוע שאילתות לפי סוג פעולה.
<<<<<<< HEAD
אחוזי פגיעה במטמון ויעילות.
שימוש בבריכת חיבורים למסד הנתונים.
=======
שיעורי פגיעה ויעילות של מטמון.
שימוש בבריכת חיבורי מסד נתונים.
>>>>>>> 82edf2d (New md files from RunPod)
שימוש בזיכרון והשפעת איסוף אשפה.
**בדיקות ביצועים:**
@ -557,16 +690,26 @@ async def execute_with_timeout(self, query_func, timeout: int = 30):
## אסטרטגיית בדיקות
### בדיקות יחידה
<<<<<<< HEAD
בדיקת רכיבים בודדים עבור מעבר, אחסון במטמון ופתרון תגיות
הדמיית אינטראקציות עם מסד נתונים לצורך בדיקות ביצועים
בדיקת פינוי מטמון ותפוגה של זמן תפוגה (TTL)
=======
בדיקת רכיבים בודדים עבור מעבר, אחסון במטמון ופתרון תוויות
הדמיית אינטראקציות עם מסד נתונים לצורך בדיקות ביצועים
בדיקת פינוי מטמון ותפוגת זמן (TTL)
>>>>>>> 82edf2d (New md files from RunPod)
בדיקת טיפול בשגיאות ותסריטי תזמון
### בדיקות אינטגרציה
בדיקות מקצה לקצה של שאילתות GraphRAG עם אופטימיזציות
בדיקת אינטראקציות עם מסד נתונים עם נתונים אמיתיים
טיפול בבקשות מקבילות וניהול משאבים
<<<<<<< HEAD
זיהוי דליפות זיכרון ואימות ניקוי משאבים
=======
זיהוי דליפות זיכרון ובדיקת ניקוי משאבים
>>>>>>> 82edf2d (New md files from RunPod)
### בדיקות ביצועים
בדיקות ביצועים מול המימוש הנוכחי
@ -582,6 +725,7 @@ async def execute_with_timeout(self, query_func, timeout: int = 30):
## תוכנית יישום
### גישת יישום ישירה
<<<<<<< HEAD
מכיוון שמותר לשנות ממשקי API, ליישם אופטימיזציות ישירות ללא מורכבות של העברה:
1. **החלפת `follow_edges`:** כתיבה מחדש עם מעבר אצווה איטרטיבי
@ -593,15 +737,34 @@ async def execute_with_timeout(self, query_func, timeout: int = 30):
**מחלקה של שאילתות:** החלפת כ-50 שורות ב-`follow_edges`, הוספת כ-30 שורות לטיפול באצווה
**מחלקה של GraphRag:** הוספת שכבת אחסון במטמון (כ-40 שורות)
**מחלקה של מעבד:** שינוי לשימוש במופע קבוע של GraphRag (כ-20 שורות)
=======
מכיוון שמותר לשנות ממשקי API, ליישם אופטימיזציות ישירות ללא מורכבות של מעבר:
1. **החלפת `follow_edges`:** כתיבה מחדש עם מעבר אצווה איטרטיבי
2. **אופטימיזציה של `get_labelgraph`:** יישום פתרון תוויות מקבילי
3. **הוספת GraphRag ארוך טווח:** שינוי של Processor לשמירה על מופע קבוע
4. **יישום אחסון תוויות במטמון:** הוספת מטמון LRU עם TTL למחלקת GraphRag
### היקף השינויים
**מחלקת שאילתה:** החלפת כ-50 שורות ב-`follow_edges`, הוספת כ-30 שורות לטיפול באצווה
**מחלקת GraphRag:** הוספת שכבת אחסון במטמון (כ-40 שורות)
**מחלקת Processor:** שינוי לשימוש במופע קבוע של GraphRag (כ-20 שורות)
>>>>>>> 82edf2d (New md files from RunPod)
**סה"כ:** כ-140 שורות של שינויים ממוקדים, בעיקר בתוך מחלקות קיימות
## ציר זמן
**שבוע 1: יישום ליבה**
החלפת `follow_edges` עם מעבר אצווה איטרטיבי
<<<<<<< HEAD
יישום פתרון תגיות מקבילי ב-`get_labelgraph`
הוספת מופע GraphRag ארוך טווח למעבד
יישום שכבת אחסון במטמון של תגיות
=======
יישום פתרון תוויות מקבילי ב-`get_labelgraph`
הוספת מופע GraphRag ארוך טווח ל-Processor
יישום שכבת אחסון במטמון
>>>>>>> 82edf2d (New md files from RunPod)
**שבוע 2: בדיקות ושילוב**
בדיקות יחידה ללוגיקה חדשה של מעבר ואחסון במטמון
@ -617,10 +780,17 @@ async def execute_with_timeout(self, query_func, timeout: int = 30):
## שאלות פתוחות
**בריכת חיבורים למסד נתונים:** האם עלינו ליישם בריכת חיבורים מותאמת אישית או להסתמך על בריכת חיבורים קיימת של לקוח מסד נתונים?
<<<<<<< HEAD
**שימור מטמון:** האם מטמון התגיות וההטבעות צריך להתמיד בין הפעלות מחדש של השירות?
**אחסון במטמון מבוזר:** עבור פריסות מרובות מופעים, האם עלינו ליישם אחסון במטמון מבוזר עם Redis/Memcached?
**פורמט תוצאות שאילתה:** האם עלינו לייעל את הייצוג הפנימי של משולש לטובת יעילות זיכרון טובה יותר?
**שילוב ניטור:** אילו מדדים יש לחשוף למערכות ניטור קיימות (Prometheus, וכו')?
=======
**שימור מטמון:** האם מטמון תוויות ו-embedding צריך להתמיד בין הפעלות מחדש של השירות?
**אחסון מבוזר:** עבור פריסות מרובות מופעים, האם עלינו ליישם אחסון מבוזר עם Redis/Memcached?
**פורמט תוצאות שאילתה:** האם עלינו לייעל את הייצוג הפנימי של משולש לטובת יעילות זיכרון טובה יותר?
**שילוב ניטור:** אילו מדדים צריכים להיות חשופים למערכות ניטור קיימות (Prometheus, וכו')?
>>>>>>> 82edf2d (New md files from RunPod)
## הפניות