trustgraph/docs/tech-specs/rag-streaming-support.hi.md
Alex Jenkins 8954fa3ad7 Feat: TrustGraph i18n & Documentation Translation Updates (#781)
Native CLI i18n: The TrustGraph CLI has built-in translation support
that dynamically loads language strings. You can test and use
different languages by simply passing the --lang flag (e.g., --lang
es for Spanish, --lang ru for Russian) or by configuring your
environment's LANG variable.

Automated Docs Translations: This PR introduces autonomously
translated Markdown documentation into several target languages,
including Spanish, Swahili, Portuguese, Turkish, Hindi, Hebrew,
Arabic, Simplified Chinese, and Russian.
2026-04-14 12:08:32 +01:00

296 lines
21 KiB
Markdown

---
layout: default
title: "RAG स्ट्रीमिंग सपोर्ट तकनीकी विनिर्देश"
parent: "Hindi (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.
## अवलोकन
यह विनिर्देश ग्राफआरएजी और डॉक्यूमेंटआरएजी सेवाओं में स्ट्रीमिंग सपोर्ट जोड़ने का वर्णन करता है, जो नॉलेज ग्राफ और डॉक्यूमेंट रिट्रीवल क्वेरी के लिए वास्तविक समय में टोकन-दर-टोकन प्रतिक्रियाएं सक्षम करता है। यह एलएलएम टेक्स्ट-कंप्लीशन, प्रॉम्प्ट और एजेंट सेवाओं के लिए पहले से लागू किए गए मौजूदा स्ट्रीमिंग आर्किटेक्चर का विस्तार करता है।
## लक्ष्य
**संगत स्ट्रीमिंग यूएक्स**: सभी ट्रस्टग्राफ सेवाओं में समान स्ट्रीमिंग अनुभव प्रदान करें।
**न्यूनतम एपीआई परिवर्तन**: एक ही `streaming` फ़्लैग के साथ स्ट्रीमिंग सपोर्ट जोड़ें, स्थापित पैटर्न का पालन करें।
**पिछड़ा संगतता**: मौजूदा गैर-स्ट्रीमिंग व्यवहार को डिफ़ॉल्ट के रूप में बनाए रखें।
**मौजूदा बुनियादी ढांचे का पुन: उपयोग**: पहले से लागू प्रॉम्प्टक्लाइंट स्ट्रीमिंग का लाभ उठाएं।
**गेटवे सपोर्ट**: क्लाइंट एप्लिकेशन के लिए वेबसॉकेट गेटवे के माध्यम से स्ट्रीमिंग सक्षम करें।
## पृष्ठभूमि
वर्तमान में लागू की गई स्ट्रीमिंग सेवाएं:
**एलएलएम टेक्स्ट-कंप्लीशन सेवा**: चरण 1 - एलएलएम प्रदाताओं से स्ट्रीमिंग।
**प्रॉम्प्ट सेवा**: चरण 2 - प्रॉम्प्ट टेम्प्लेट के माध्यम से स्ट्रीमिंग।
**एजेंट सेवा**: चरण 3-4 - इंक्रीमेंटल थॉट/ऑब्जर्वेशन/एन्सर चंक्स के साथ रीएक्ट प्रतिक्रियाओं को स्ट्रीमिंग करना।
आरएजी सेवाओं के लिए वर्तमान सीमाएं:
ग्राफआरएजी और डॉक्यूमेंटआरएजी केवल ब्लॉकिंग प्रतिक्रियाओं का समर्थन करते हैं।
उपयोगकर्ताओं को किसी भी आउटपुट को देखने से पहले एलएलएम प्रतिक्रिया पूरी होने तक इंतजार करना होगा।
नॉलेज ग्राफ या डॉक्यूमेंट क्वेरी से लंबी प्रतिक्रियाओं के लिए खराब यूएक्स।
अन्य ट्रस्टग्राफ सेवाओं की तुलना में असंगत अनुभव।
यह विनिर्देश ग्राफआरएजी और डॉक्यूमेंटआरएजी में स्ट्रीमिंग सपोर्ट जोड़कर इन कमियों को दूर करता है। टोकन-दर-टोकन प्रतिक्रियाओं को सक्षम करके, ट्रस्टग्राफ:
सभी क्वेरी प्रकारों में संगत स्ट्रीमिंग यूएक्स प्रदान कर सकता है।
आरएजी क्वेरी के लिए कथित विलंबता को कम कर सकता है।
लंबी अवधि की क्वेरी के लिए बेहतर प्रगति प्रतिक्रिया प्रदान कर सकता है।
क्लाइंट एप्लिकेशन में वास्तविक समय प्रदर्शन का समर्थन कर सकता है।
## तकनीकी डिजाइन
### आर्किटेक्चर
आरएजी स्ट्रीमिंग कार्यान्वयन मौजूदा बुनियादी ढांचे का लाभ उठाता है:
1. **प्रॉम्प्टक्लाइंट स्ट्रीमिंग** (पहले से लागू)
`kg_prompt()` और `document_prompt()` पहले से ही `streaming` और `chunk_callback` पैरामीटर स्वीकार करते हैं।
ये आंतरिक रूप से स्ट्रीमिंग सपोर्ट के साथ `prompt()` को कॉल करते हैं।
प्रॉम्प्टक्लाइंट में कोई बदलाव आवश्यक नहीं है।
मॉड्यूल: `trustgraph-base/trustgraph/base/prompt_client.py`
2. **ग्राफआरएजी सेवा** (स्ट्रीमिंग पैरामीटर पास-थ्रू की आवश्यकता है)
`query()` विधि में `streaming` पैरामीटर जोड़ें।
`prompt_client.kg_prompt()` और कॉलबैक को `prompt_client.kg_prompt()` में पास करें।
ग्राफआरैग रिक्वेस्ट स्कीमा में `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. **डॉक्यूमेंटआरएजी सेवा** (स्ट्रीमिंग पैरामीटर पास-थ्रू की आवश्यकता है)
`query()` विधि में `streaming` पैरामीटर जोड़ें।
`prompt_client.document_prompt()` और कॉलबैक को `prompt_client.document_prompt()` में पास करें।
डॉक्यूमेंटआरैग रिक्वेस्ट स्कीमा में `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
Complete response
Client ← Gateway ← RAG Service ← Response
```
**स्ट्रीमिंग (प्रस्तावित):**
```
Client → Gateway → RAG Service → PromptClient.kg_prompt(streaming=True, chunk_callback=cb)
Prompt Service → LLM (streaming)
Chunk → callback → RAG Response (chunk)
↓ ↓
Client ← Gateway ← ────────────────────────────────── Response stream
```
### एपीआई (APIs)
**ग्राफआरएजी (GraphRAG) में बदलाव**:
1. **GraphRag.query()** - स्ट्रीमिंग पैरामीटर जोड़े गए।
```python
async def query(
self, query, user, collection,
verbose=False, streaming=False, chunk_callback=None # NEW
):
# ... existing entity/triple retrieval ...
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. **ग्राफराग रिक्वेस्ट स्कीमा** - स्ट्रीमिंग फ़ील्ड जोड़ें।
```python
class GraphRagRequest(Record):
query = String()
user = String()
collection = String()
streaming = Boolean() # NEW
```
3. **ग्राफराग रिस्पांस स्कीमा** - स्ट्रीमिंग फ़ील्ड जोड़ें (एजेंट पैटर्न का पालन करें)।
```python
class GraphRagResponse(Record):
response = String() # Legacy: complete response
chunk = String() # NEW: streaming chunk
end_of_stream = Boolean() # NEW: indicates last chunk
```
4. **प्रोसेसर** - डेटा को लगातार प्रवाहित करें।
```python
async def handle(self, msg):
# ... existing code ...
async def send_chunk(chunk):
await self.respond(GraphRagResponse(
chunk=chunk,
end_of_stream=False,
response=None
))
if request.streaming:
full_response = await self.rag.query(
query=request.query,
user=request.user,
collection=request.collection,
streaming=True,
chunk_callback=send_chunk
)
# Send final message
await self.respond(GraphRagResponse(
chunk=None,
end_of_stream=True,
response=full_response
))
else:
# Existing non-streaming path
response = await self.rag.query(...)
await self.respond(GraphRagResponse(response=response))
```
**डॉक्यूमेंटआरएजी में परिवर्तन**:
ग्राफआरएजी के समान पैटर्न:
1. `streaming` और `chunk_callback` पैरामीटर को `DocumentRag.query()` में जोड़ें।
2. `streaming` फ़ील्ड को `DocumentRagRequest` में जोड़ें।
3. `chunk` और `end_of_stream` फ़ील्ड को `DocumentRagResponse` में जोड़ें।
4. प्रोसेसर को कॉलबैक के साथ स्ट्रीमिंग को संभालने के लिए अपडेट करें।
**गेटवे में परिवर्तन**:
गेटवे/डिस्पैच में `graph_rag.py` और `document_rag.py` दोनों को वेबसॉकेट पर स्ट्रीमिंग चंक्स को अग्रेषित करने के लिए अपडेट की आवश्यकता है:
```python
async def handle(self, message, session, websocket):
# ... existing code ...
if request.streaming:
async def recipient(resp):
if resp.chunk:
await websocket.send(json.dumps({
"id": message["id"],
"response": {"chunk": resp.chunk},
"complete": resp.end_of_stream
}))
return resp.end_of_stream
await self.rag_client.request(request, recipient=recipient)
else:
# Existing non-streaming path
resp = await self.rag_client.request(request)
await websocket.send(...)
```
### कार्यान्वयन विवरण
**कार्यान्वयन क्रम**:
1. स्कीमा फ़ील्ड जोड़ें (RAG सेवाओं दोनों के लिए अनुरोध + प्रतिक्रिया)
2. GraphRag.query() और DocumentRag.query() विधियों को अपडेट करें
3. प्रोसेसर को स्ट्रीमिंग को संभालने के लिए अपडेट करें
4. गेटवे डिस्पैच हैंडलर को अपडेट करें
5. `--no-streaming` ध्वज `tg-invoke-graph-rag` और `tg-invoke-document-rag` में जोड़ें (डिफ़ॉल्ट रूप से स्ट्रीमिंग सक्षम, एजेंट CLI पैटर्न का अनुसरण करते हुए)
**कॉलबैक पैटर्न**:
एजेंट स्ट्रीमिंग में स्थापित समान एसिंक्रोनस कॉल बैक पैटर्न का पालन करें:
प्रोसेसर `async def send_chunk(chunk)` कॉल बैक को परिभाषित करता है
कॉल बैक को RAG सेवा को पास करता है
RAG सेवा कॉल बैक को PromptClient को पास करती है
PromptClient प्रत्येक LLM टुकड़े के लिए कॉल बैक को लागू करता है
प्रोसेसर प्रत्येक टुकड़े के लिए स्ट्रीमिंग प्रतिक्रिया संदेश भेजता है
**त्रुटि प्रबंधन**:
स्ट्रीमिंग के दौरान होने वाली त्रुटियों को `end_of_stream=True` के साथ त्रुटि प्रतिक्रिया भेजनी चाहिए
एजेंट स्ट्रीमिंग से मौजूदा त्रुटि प्रसार पैटर्न का पालन करें
## सुरक्षा संबंधी विचार
मौजूदा RAG सेवाओं से परे कोई नया सुरक्षा संबंधी विचार नहीं:
स्ट्रीमिंग प्रतिक्रियाएं समान उपयोगकर्ता/संग्रह अलगाव का उपयोग करती हैं
प्रमाणीकरण या प्राधिकरण में कोई बदलाव नहीं
टुकड़े की सीमाएं संवेदनशील डेटा को उजागर नहीं करती हैं
## प्रदर्शन संबंधी विचार
**लाभ**:
कथित विलंबता में कमी (पहले टोकन तेजी से आते हैं)
लंबे उत्तरों के लिए बेहतर UX
कम मेमोरी उपयोग (पूरे उत्तर को बफर करने की आवश्यकता नहीं है)
**संभावित चिंताएं**:
स्ट्रीमिंग प्रतिक्रियाओं के लिए अधिक Pulsar संदेश
टुकड़ा करने/कॉल बैक ओवरहेड के लिए थोड़ा अधिक CPU
स्ट्रीमिंग वैकल्पिक है, डिफ़ॉल्ट गैर-स्ट्रीमिंग रहता है, जिससे इसे कम किया जा सकता है
**परीक्षण संबंधी विचार**:
बड़ी नॉलेज ग्राफ (कई त्रिगुण) के साथ परीक्षण करें
कई पुनर्प्राप्त दस्तावेज़ों के साथ परीक्षण करें
स्ट्रीमिंग बनाम गैर-स्ट्रीमिंग के ओवरहेड को मापें
## परीक्षण रणनीति
**इकाई परीक्षण**:
streaming=True/False के साथ GraphRag.query() का परीक्षण करें
streaming=True/False के साथ DocumentRag.query() का परीक्षण करें
कॉल बैक कार्यान्वयन को सत्यापित करने के लिए PromptClient को मॉक करें
**एकीकरण परीक्षण**:
पूर्ण GraphRAG स्ट्रीमिंग प्रवाह का परीक्षण करें (मौजूदा एजेंट स्ट्रीमिंग परीक्षणों के समान)
पूर्ण DocumentRAG स्ट्रीमिंग प्रवाह का परीक्षण करें
गेटवे स्ट्रीमिंग अग्रेषण का परीक्षण करें
CLI स्ट्रीमिंग आउटपुट का परीक्षण करें
**मैन्युअल परीक्षण**:
`tg-invoke-graph-rag -q "What is machine learning?"` (डिफ़ॉल्ट रूप से स्ट्रीमिंग)
`tg-invoke-document-rag -q "Summarize the documents about AI"` (डिफ़ॉल्ट रूप से स्ट्रीमिंग)
`tg-invoke-graph-rag --no-streaming -q "..."` (गैर-स्ट्रीमिंग मोड का परीक्षण करें)
सत्यापित करें कि स्ट्रीमिंग मोड में वृद्धिशील आउटपुट दिखाई दे रहा है
## माइग्रेशन योजना
माइग्रेशन की आवश्यकता नहीं:
`streaming` पैरामीटर (डिफ़ॉल्ट रूप से False) के माध्यम से स्ट्रीमिंग वैकल्पिक है
मौजूदा क्लाइंट अपरिवर्तित रहते हैं
नए क्लाइंट स्ट्रीमिंग को अपना सकते हैं
## समयरेखा
अनुमानित कार्यान्वयन: 4-6 घंटे
चरण 1 (2 घंटे): GraphRAG स्ट्रीमिंग समर्थन
चरण 2 (2 घंटे): DocumentRAG स्ट्रीमिंग समर्थन
चरण 3 (1-2 घंटे): गेटवे अपडेट और CLI ध्वज
परीक्षण: प्रत्येक चरण में शामिल
## खुले प्रश्न
क्या हमें NLP क्वेरी सेवा में भी स्ट्रीमिंग समर्थन जोड़ना चाहिए?
क्या हम केवल LLM आउटपुट या मध्यवर्ती चरणों (जैसे, "इकाइयों को पुनर्प्राप्त करना...", "ग्राफ को क्वेरी करना...") को स्ट्रीम करना चाहते हैं?
क्या GraphRAG/DocumentRAG प्रतिक्रियाओं में टुकड़े मेटाडेटा (जैसे, टुकड़े संख्या, कुल अपेक्षित) शामिल होना चाहिए?
## संदर्भ
मौजूदा कार्यान्वयन: `docs/tech-specs/streaming-llm-responses.md`
एजेंट स्ट्रीमिंग: `trustgraph-flow/trustgraph/agent/react/agent_manager.py`
PromptClient स्ट्रीमिंग: `trustgraph-base/trustgraph/base/prompt_client.py`