mirror of
https://github.com/trustgraph-ai/trustgraph.git
synced 2026-04-25 08:26:21 +02:00
177 lines
9.2 KiB
Markdown
177 lines
9.2 KiB
Markdown
|
|
---
|
|||
|
|
layout: default
|
|||
|
|
title: "תמיכה בסטרימינג של RAG - ספציפיציה טכנית"
|
|||
|
|
parent: "Hebrew (Beta)"
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# תמיכה בסטרימינג של RAG - ספציפיציה טכנית
|
|||
|
|
|
|||
|
|
> **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.
|
|||
|
|
|
|||
|
|
## סקירה כללית
|
|||
|
|
|
|||
|
|
מסמך זה מתאר את הוספת תמיכה בסטרימינג לשירותי GraphRAG ו-DocumentRAG, המאפשרות תגובות בזמן אמת, שוט אחר שוט, עבור שאילתות שליפה של גרפי ידע ומסמכים. זה מרחיב את הארכיטקטורה הסטנדרטית לסטרימינג, אשר כבר מיושמת עבור שירותי LLM להשלמת טקסט, בקשות וסוכנים.
|
|||
|
|
|
|||
|
|
## מטרות
|
|||
|
|
|
|||
|
|
- **חוויית משתמש סטנדרטית בסטרימינג**: לספק חוויית סטרימינג אחידה בכל שירותי TrustGraph.
|
|||
|
|
- **שינויים מינימליים בממשק API**: להוסיף תמיכה בסטרימינג באמצעות דגל `streaming` יחיד, תוך עמידה בדפוסי העבודה הקיימים.
|
|||
|
|
- **תאימות לאחור**: לשמור על התנהגות לא סטנדרטית קיימת כברירת מחדל.
|
|||
|
|
- **ניצול תשתית קיימת**: להשתמש בסטרימינג הקיים, אשר כבר מיושם עבור ה-PromptClient.
|
|||
|
|
- **תמיכה בדגלים**: לאפשר סטרימינג באמצעות דגל websocket עבור יישומי לקוח.
|
|||
|
|
|
|||
|
|
## רקע
|
|||
|
|
|
|||
|
|
שירותי סטרימינג קיימים:
|
|||
|
|
- **שירות השלמת טקסט של LLM**: שלב 1 - סטרימינג מספקי LLM
|
|||
|
|
- **שירות בקשות**: שלב 2 - סטרימינג באמצעות תבניות בקשות
|
|||
|
|
- **שירות סוכן**: שלבים 3-4 - סטרימינג של תגובות ReAct עם חלקים של מחשבה/תצפית/תשובה
|
|||
|
|
|
|||
|
|
מגבלות נוכחיות לשירותי RAG:
|
|||
|
|
- GraphRAG ו-DocumentRAG תומכים רק בתגובות בלתי סטנדרטיות.
|
|||
|
|
- משתמשים צריכים לחכות לתגובה שלמה של LLM לפני קבלת כל תוצאה.
|
|||
|
|
- חוויית משתמש גרועה עבור תגובות ארוכות לשאילתות של גרפי ידע או מסמכים.
|
|||
|
|
- חוויה לא עקבית בהשוואה לשירותי TrustGraph אחרים.
|
|||
|
|
|
|||
|
|
מסמך זה מטפל בבעיות אלו על ידי הוספת תמיכה בסטרימינג ל-GraphRAG ו-DocumentRAG. על ידי אפשרות תגובות שוט אחר שוט, TrustGraph יכול:
|
|||
|
|
- לספק חוויית משתמש סטנדרטית בסטרימינג עבור כל סוגי השאילתות.
|
|||
|
|
- להפחית את הפיגור הרגשי עבור שאילתות RAG.
|
|||
|
|
- לאפשר משוב מתקדם עבור שאילתות ארוכות.
|
|||
|
|
- לתמוך בהצגה בזמן אמת ביישומים של לקוח.
|
|||
|
|
|
|||
|
|
## עיצוב טכני
|
|||
|
|
|
|||
|
|
### ארכיטקטורה
|
|||
|
|
|
|||
|
|
היישום הסטנדרטי של RAG של מנצל את התשתית הקיימת:
|
|||
|
|
|
|||
|
|
1. **סטרימינג של PromptClient** (כבר מיושם)
|
|||
|
|
- הפרמטרים `kg_prompt()` ו-`document_prompt()` כבר מקבלים את הפרמטרים `streaming` ו-`chunk_callback`.
|
|||
|
|
- הפרמטרים אלו קוראים לפונקציה `prompt()` עם תמיכה בסטרימינג.
|
|||
|
|
- אין צורך לשנות את ה-PromptClient.
|
|||
|
|
- מודול: `trustgraph-base/trustgraph/base/prompt_client.py`
|
|||
|
|
|
|||
|
|
2. **שירות GraphRAG** (דורש העברת פרמטר סטרימינג)
|
|||
|
|
- להוסיף את הפרמטר `streaming` למתודה `query()`.
|
|||
|
|
- להעביר את הדגל הסטרימינג ואת ה-callbacks ל-`prompt_client.kg_prompt()`.
|
|||
|
|
- סכימת ה-GraphRagRequest צריכה לכלול את השדה `streaming`.
|
|||
|
|
- מודולים:
|
|||
|
|
- `trustgraph-flow/trustgraph/retrieval/graph_rag/graph_rag.py`
|
|||
|
|
- `trustgraph-flow/trustgraph/retrieval/graph_rag/rag.py` (Processor)
|
|||
|
|
- `trustgraph-base/trustgraph/schema/graph_rag.py` (סכימת בקשה)
|
|||
|
|
- `trustgraph-flow/trustgraph/gateway/dispatch/graph_rag.py` (Gateway)
|
|||
|
|
|
|||
|
|
3. **שירות DocumentRAG** (דורש העברת פרמטר סטרימינג)
|
|||
|
|
- להוסיף את הפרמטר `streaming` למתודה `query()`.
|
|||
|
|
- להעביר את הדגל הסטרימינג ואת ה-callbacks ל-`prompt_client.document_prompt()`.
|
|||
|
|
- סכימת ה-DocumentRagRequest צריכה לכלול את השדה `streaming`.
|
|||
|
|
- מודולים:
|
|||
|
|
- `trustgraph-flow/trustgraph/retrieval/document_rag/document_rag.py`
|
|||
|
|
- `trustgraph-flow/trustgraph/retrieval/document_rag/rag.py` (Processor)
|
|||
|
|
- `trustgraph-base/trustgraph/schema/document_rag.py` (סכימת בקשה)
|
|||
|
|
- `trustgraph-flow/trustgraph/gateway/dispatch/document_rag.py` (Gateway)
|
|||
|
|
|
|||
|
|
### זרימת נתונים
|
|||
|
|
|
|||
|
|
**לא סטנדרטי (נוכחי)**:
|
|||
|
|
```
|
|||
|
|
לקוח → דגל → שירות RAG → PromptClient.kg_prompt(streaming=False)
|
|||
|
|
↓
|
|||
|
|
שירות בקשות → LLM
|
|||
|
|
↓
|
|||
|
|
תגובה שלמה
|
|||
|
|
↓
|
|||
|
|
לקוח ← דגל ← שירות RAG ← תגובה
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**סטנדרטי (מוצע)**:
|
|||
|
|
```
|
|||
|
|
לקוח → דגל → שירות RAG → PromptClient.kg_prompt(streaming=True, chunk_callback=cb)
|
|||
|
|
↓
|
|||
|
|
שירות בקשות → LLM (סטרימינג)
|
|||
|
|
↓
|
|||
|
|
חלק → Callback → תגובת RAG (חלק)
|
|||
|
|
↓ ↓
|
|||
|
|
לקוח ← דגל ← ────────────────────────────────── זרם תגובה
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### ממשקי API
|
|||
|
|
|
|||
|
|
**שינויים ב-GraphRAG**:
|
|||
|
|
|
|||
|
|
1. **GraphRag.query()** - הוספת פרמטרים סטרימינג
|
|||
|
|
```python
|
|||
|
|
async def query(
|
|||
|
|
self, query, user, collection,
|
|||
|
|
streaming=False, chunk_callback=None
|
|||
|
|
):
|
|||
|
|
# ...
|
|||
|
|
```
|
|||
|
|
2. **שינויים ב-DocumentRAG**:
|
|||
|
|
- כפי שמתואר עבור GraphRAG.
|
|||
|
|
|
|||
|
|
### בדיקות
|
|||
|
|
|
|||
|
|
**בדיקות יחידות**:
|
|||
|
|
- בדיקת GraphRag.query() עם `streaming=True/False`.
|
|||
|
|
- בדיקת DocumentRAG.query() עם `streaming=True/False`.
|
|||
|
|
- שימוש ב-Mock עבור PromptClient כדי לבדוק את קריאות ה-callbacks.
|
|||
|
|
|
|||
|
|
**בדיקות אינטגרציה**:
|
|||
|
|
- בדיקת זרימת הסטרימינג המלאה של GraphRAG (בדיקות דומות לבדיקות סטרימינג של סוכן קיימות).
|
|||
|
|
- בדיקת זרימת הסטרימינג המלאה של DocumentRAG.
|
|||
|
|
- בדיקת העברת דגל ה-סטרימינג.
|
|||
|
|
- בדיקת הפלט של ה-CLI עם סטרימינג.
|
|||
|
|
|
|||
|
|
**בדיקות ידניות**:
|
|||
|
|
- `tg-invoke-graph-rag -q "מהו למידת מכונה?"` (סטרימינג כברירת מחדל).
|
|||
|
|
- `tg-invoke-document-rag -q "סכם את המסמכים על AI"` (סטרימינג כברירת מחדל).
|
|||
|
|
- `tg-invoke-graph-rag --no-streaming -q "..."` (בדיקת מצב לא סטנדרטי).
|
|||
|
|
- בדיקה שהחלקים מופיעים בסטרימינג.
|
|||
|
|
|
|||
|
|
## תכנון בדיקות
|
|||
|
|
|
|||
|
|
**בדיקות יחידות**:
|
|||
|
|
- בדיקת GraphRag.query() עם `streaming=True/False`.
|
|||
|
|
- בדיקת DocumentRAG.query() עם `streaming=True/False`.
|
|||
|
|
- שימוש ב-Mock עבור PromptClient כדי לבדוק את קריאות ה-callbacks.
|
|||
|
|
|
|||
|
|
**בדיקות אינטגרציה**:
|
|||
|
|
- בדיקת זרימת הסטרימינג המלאה של GraphRAG (בדיקות דומות לבדיקות סטרימינג של סוכן קיימות).
|
|||
|
|
- בדיקת זרימת הסטרימינג המלאה של DocumentRAG.
|
|||
|
|
- בדיקת העברת דגל ה-סטרימינג.
|
|||
|
|
- בדיקת הפלט של ה-CLI עם סטרימינג.
|
|||
|
|
|
|||
|
|
**בדיקות ידניות**:
|
|||
|
|
- `tg-invoke-graph-rag -q "מהו למידת מכונה?"` (סטרימינג כברירת מחדל).
|
|||
|
|
- `tg-invoke-document-rag -q "סכם את המסמכים על AI"` (סטרימינג כברירת מחדל).
|
|||
|
|
- `tg-invoke-graph-rag --no-streaming -q "..."` (בדיקת מצב לא סטנדרטי).
|
|||
|
|
- בדיקה שהחלקים מופיעים בסטרימינג.
|
|||
|
|
|
|||
|
|
## תכנון המיגרציה
|
|||
|
|
|
|||
|
|
אין צורך במיגרציה:
|
|||
|
|
- הסטרימינג הוא "אופציונלי" באמצעות הפרמטר `streaming` (ברירת מחדל היא False).
|
|||
|
|
- לקוחות קיימים ממשיכים לעבוד ללא שינוי.
|
|||
|
|
- לקוחות חדשים יכולים לבחור בסטרימינג.
|
|||
|
|
|
|||
|
|
## לוח זמנים
|
|||
|
|
|
|||
|
|
הערכת זמן ליישום: 4-6 שעות
|
|||
|
|
- שלב 1 (2 שעות): תמיכה בסטרימינג של GraphRAG.
|
|||
|
|
- שלב 2 (2 שעות): תמיכה בסטרימינג של DocumentRAG.
|
|||
|
|
- שלב 3 (1-2 שעות): עדכוני דגל ו-CLI.
|
|||
|
|
- בדיקות: בונה לתוך כל שלב.
|
|||
|
|
|
|||
|
|
## שאלות פתוחות
|
|||
|
|
|
|||
|
|
- האם עלינו להוסיף תמיכה בסטרימינג לשירות ה-NLP Query גם כן?
|
|||
|
|
- האם עלינו להזרים גם את השלבים הביניים (לדוגמה, "שליפת ישויות...", "שאילתה על הגרף...") או רק את הפלט של ה-LLM?
|
|||
|
|
- האם עלינו לכלול מידע על החלקים בתגובות של RAG (לדוגמה, מספר החלק, מספר כולל צפוי)?
|
|||
|
|
|
|||
|
|
## מקורות
|
|||
|
|
|
|||
|
|
- יישום קיימת: `docs/tech-specs/streaming-llm-responses.md`
|
|||
|
|
- סטרימינג של PromptClient: `trustgraph-base/trustgraph/base/prompt_client.py`
|
|||
|
|
- סטרימינג של סוכן: `trustgraph-flow/trustgraph/agent/react/agent_manager.py`
|