mirror of
https://github.com/trustgraph-ai/trustgraph.git
synced 2026-04-26 00:46:22 +02:00
175 lines
8.6 KiB
Markdown
175 lines
8.6 KiB
Markdown
|
|
---
|
||
|
|
layout: default
|
||
|
|
title: "مواصفات فنية لدعم التدفق في RAG"
|
||
|
|
parent: "Arabic (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، مما يمكّن من الحصول على استجابات على شكل أجزاء (token-by-token) في الوقت الفعلي للاستعلامات المتعلقة باسترجاع المعرفة ورؤوس المستندات. هذا يوسع البنية المعمارية الحالية للتدفق، والتي تم تنفيذها بالفعل لخدمات إكمال النص، والتعليمات البرمجية، ووكلاء LLM.
|
||
|
|
|
||
|
|
## الأهداف
|
||
|
|
|
||
|
|
- **تجربة تدفق متسقة**: توفير تجربة تدفق متسقة عبر جميع خدمات TrustGraph.
|
||
|
|
- **تغييرات واجهة برمجة تطبيقات (API) قليلة**: إضافة دعم التدفق باستخدام علامة واحدة (`streaming`)، وفقًا للأنماط المتبعة.
|
||
|
|
- **التوافق مع الإصدارات السابقة**: الحفاظ على سلوك غير تدفق بشكل افتراضي.
|
||
|
|
- **استخدام البنية التحتية الحالية**: الاستفادة من تدفق PromptClient المطبق بالفعل.
|
||
|
|
- **دعم البوابة**: تمكين التدفق من خلال بوابة websocket للتطبيقات العميلة.
|
||
|
|
|
||
|
|
## الخلفية
|
||
|
|
|
||
|
|
خدمات التدفق الحالية:
|
||
|
|
- **خدمة إكمال النص للـ LLM**: المرحلة 1 - التدفق من مزودي LLM.
|
||
|
|
- **خدمة التعليمات البرمجية**: المرحلة 2 - التدفق من خلال قوالب التعليمات البرمجية.
|
||
|
|
- **خدمة الوكيل**: المراحل 3-4 - استجابات ReAct مع أجزاء فكرية/ملاحظات/إجابات متزايدة.
|
||
|
|
|
||
|
|
قيود الحالية لخدمات RAG:
|
||
|
|
- GraphRAG و DocumentRAG تدعم فقط الاستجابات المتوقفة.
|
||
|
|
- يجب على المستخدمين الانتظار حتى استلام الرد الكامل من LLM قبل رؤية أي مخرجات.
|
||
|
|
- تجربة مستخدم (UX) سيئة للاستجابات الطويلة من استعلامات الرسم البياني المعرفي أو المستندات.
|
||
|
|
- تجربة غير متسقة مقارنة بـ خدمات 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()`.
|
||
|
|
- تمرير علامة التدفق والوظائف المرجعية إلى `prompt_client.kg_prompt()`.
|
||
|
|
- يجب أن يحتوي مخطط GraphRag على حقل `streaming`.
|
||
|
|
|
||
|
|
الوحدات:
|
||
|
|
- `trustgraph-flow/trustgraph/retrieval/graph_rag/graph_rag.py`
|
||
|
|
- `trustgraph-flow/trustgraph/retrieval/graph_rag/rag.py` (المعالجة)
|
||
|
|
- `trustgraph-base/trustgraph/schema/graph_rag.py` (مخطط الطلب)
|
||
|
|
- `trustgraph-flow/trustgraph/gateway/dispatch/graph_rag.py` (البوابة)
|
||
|
|
|
||
|
|
3. **خدمة DocumentRAG** (تحتاج إلى تمرير معلمة التدفق)
|
||
|
|
- إضافة معلمة `streaming` إلى طريقة `query()`.
|
||
|
|
- تمرير علامة التدفق والوظائف المرجعية إلى `prompt_client.document_prompt()`.
|
||
|
|
- يجب أن يحتوي مخطط DocumentRag على حقل `streaming`.
|
||
|
|
|
||
|
|
الوحدات:
|
||
|
|
- `trustgraph-flow/trustgraph/retrieval/document_rag/document_rag.py`
|
||
|
|
- `trustgraph-flow/trustgraph/retrieval/document_rag/rag.py` (المعالجة)
|
||
|
|
- `trustgraph-base/trustgraph/schema/document_rag.py` (مخطط الطلب)
|
||
|
|
- `trustgraph-flow/trustgraph/gateway/dispatch/document_rag.py` (البوابة)
|
||
|
|
|
||
|
|
### تدفق البيانات
|
||
|
|
|
||
|
|
**غير تدفق (الحالي)**:
|
||
|
|
```
|
||
|
|
Client → Gateway → RAG Service → PromptClient.kg_prompt(streaming=False)
|
||
|
|
↓
|
||
|
|
Prompt Service → LLM
|
||
|
|
↓
|
||
|
|
رد كامل
|
||
|
|
↓
|
||
|
|
Client ← Gateway ← RAG Service ← الرد
|
||
|
|
```
|
||
|
|
|
||
|
|
**تدفق (مقترح)**:
|
||
|
|
```
|
||
|
|
Client → Gateway → RAG Service → PromptClient.kg_prompt(streaming=True, chunk_callback=cb)
|
||
|
|
↓
|
||
|
|
Prompt Service → LLM (streaming)
|
||
|
|
↓
|
||
|
|
جزء → وظيفة مرجعية → رد RAG (جزء)
|
||
|
|
↓ ↓
|
||
|
|
Client ← Gateway ← ────────────────────────────────── رد التدفق
|
||
|
|
```
|
||
|
|
|
||
|
|
### واجهات برمجة التطبيقات (APIs)
|
||
|
|
|
||
|
|
**تغييرات GraphRAG**:
|
||
|
|
|
||
|
|
1. **GraphRag.query()** - إضافة معلمات التدفق
|
||
|
|
```python
|
||
|
|
async def query(
|
||
|
|
self, query, user, collection,
|
||
|
|
verbose=False, streaming=False, chunk_callback=None # NEW
|
||
|
|
):
|
||
|
|
# ... كود موجود ...
|
||
|
|
|
||
|
|
if streaming and chunk_callback:
|
||
|
|
resp = await self.prompt_client.kg_prompt(
|
||
|
|
query, kg,
|
||
|
|
streaming=True,
|
||
|
|
chunk_callback=chunk_callback
|
||
|
|
)
|
||
|
|
else:
|
||
|
|
resp = await self.prompt_client.kg_prompt(query, kg)
|
||
|
|
|
||
|
|
return resp
|
||
|
|
```
|
||
|
|
|
||
|
|
2. **مخطط GraphRagRequest** - إضافة حقل التدفق
|
||
|
|
```python
|
||
|
|
class GraphRagRequest(Record):
|
||
|
|
query = String()
|
||
|
|
user = String()
|
||
|
|
collection = String()
|
||
|
|
streaming = Boolean() # NEW
|
||
|
|
```
|
||
|
|
|
||
|
|
3. **مخطط GraphRagResponse** - إضافة حقول التدفق (اتبع نمط الوكيل)
|
||
|
|
```python
|
||
|
|
class GraphRagResponse(Record):
|
||
|
|
response = String()
|
||
|
|
metadata = dict
|
||
|
|
# ... حقول أخرى ...
|
||
|
|
```
|
||
|
|
|
||
|
|
**تغييرات DocumentRAG**:
|
||
|
|
(نفس التغييرات الموضحة أعلاه)
|
||
|
|
|
||
|
|
### التغييرات في البوابة
|
||
|
|
|
||
|
|
(نفس التغييرات الموضحة أعلاه)
|
||
|
|
|
||
|
|
## خطة النقل
|
||
|
|
|
||
|
|
لا توجد حاجة لنقل:
|
||
|
|
- التدفق هو خيار، وتكون القيمة الافتراضية هي False.
|
||
|
|
- لا تزال العملاء الحالية تعمل بشكل طبيعي.
|
||
|
|
- يمكن للعملاء الجدد اختيار التدفق.
|
||
|
|
|
||
|
|
## الجدول الزمني
|
||
|
|
|
||
|
|
الوقت المقدر للتنفيذ: 4-6 ساعات
|
||
|
|
- المرحلة 1 (2 ساعات): دعم التدفق في GraphRAG
|
||
|
|
- المرحلة 2 (2 ساعات): دعم التدفق في DocumentRAG
|
||
|
|
- المرحلة 3 (1-2 ساعات): تحديثات البوابة وعلامات سطر الأوامر (CLI)
|
||
|
|
- الاختبار: تم تضمينه في كل مرحلة
|
||
|
|
|
||
|
|
## الأسئلة المفتوحة
|
||
|
|
|
||
|
|
- هل يجب إضافة دعم التدفق لخدمة NLP Query أيضًا؟
|
||
|
|
- هل نريد تدفق خطوات وسيطة (مثل "جاري استرداد الكيانات..."، "استعلام عن الرسم البياني") أم فقط مخرجات LLM؟
|
||
|
|
- هل يجب تضمين بيانات وصفية للجزء (مثل رقم الجزء، العدد الإجمالي المتوقع) في استجابات GraphRAG/DocumentRAG؟
|
||
|
|
|
||
|
|
## المراجع
|
||
|
|
|
||
|
|
- التنفيذ الحالي: `docs/tech-specs/streaming-llm-responses.md`
|
||
|
|
- تدفق PromptClient: `trustgraph-base/trustgraph/base/prompt_client.py`
|
||
|
|
- تدفق الوكيل: `trustgraph-flow/trustgraph/agent/react/agent_manager.py`
|