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.
8 KiB
| layout | title | parent |
|---|---|---|
| default | Especificación Técnica de Soporte de Streaming para RAG | Spanish (Beta) |
Especificación Técnica de Soporte de Streaming para 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.
Visión general
Esta especificación describe la adición de soporte de streaming a los servicios GraphRAG y DocumentRAG, permitiendo respuestas en tiempo real, token por token, para consultas de recuperación de conocimiento y documentos. Esto extiende la arquitectura de streaming existente, ya implementada para servicios de completado de texto, prompts y agentes de LLM.
Objetivos
- Experiencia de usuario consistente: Proporcionar la misma experiencia de streaming en todos los servicios TrustGraph.
- Cambios mínimos en la API: Añadir soporte de streaming con una única bandera
streaming, siguiendo patrones establecidos. - Compatibilidad hacia atrás: Mantener el comportamiento no de streaming existente como predeterminado.
- Reutilizar la infraestructura existente: Aprovechar el streaming ya implementado en PromptClient.
- Soporte de Gateway: Permitir el streaming a través de un gateway websocket para aplicaciones cliente.
Antecedentes
Servicios de streaming actualmente implementados:
- Servicio de completado de texto de LLM: Fase 1 - Streaming desde proveedores de LLM.
- Servicio de prompts: Fase 2 - Streaming a través de plantillas de prompts.
- Servicio de agente: Fase 3-4 - Streaming de respuestas ReAct con fragmentos incrementales de "pensamiento/observación/respuesta".
Limitaciones actuales para servicios RAG:
- GraphRAG y DocumentRAG solo soportan respuestas de bloqueo.
- Los usuarios deben esperar a que la respuesta completa del LLM antes de ver cualquier salida.
- Mala experiencia de usuario para respuestas largas de consultas de conocimiento o documentos.
- Experiencia inconsistente en comparación con otros servicios de TrustGraph.
Esta especificación aborda estas limitaciones añadiendo soporte de streaming a GraphRAG y DocumentRAG. Al permitir respuestas token por token, TrustGraph puede:
- Proporcionar una experiencia de usuario consistente de streaming para todos los tipos de consultas.
- Reducir la latencia percibida para las consultas RAG.
- Facilitar una mejor retroalimentación del progreso para las consultas de ejecución prolongada.
- Soporte para visualización en tiempo real en aplicaciones cliente.
Diseño Técnico
Arquitectura
La implementación de streaming de RAG aprovecha la infraestructura existente:
-
Streaming de PromptClient (Ya implementado)
kg_prompt()ydocument_prompt()ya aceptan los parámetrosstreamingychunk_callback.- Estos llaman
prompt()internamente con soporte de streaming. - No se necesitan cambios en PromptClient.
- Módulo:
trustgraph-base/trustgraph/base/prompt_client.py
-
Servicio GraphRAG (Necesita pasar el parámetro
streaming)- Añadir el parámetro
streamingal métodoquery(). - Pasar la bandera de streaming y los callbacks a
prompt_client.kg_prompt(). - El esquema GraphRagRequest debe incluir el campo
streaming. - Módulos:
trustgraph-flow/trustgraph/retrieval/graph_rag/graph_rag.pytrustgraph-flow/trustgraph/retrieval/graph_rag/rag.py(Procesador)trustgraph-base/trustgraph/schema/graph_rag.py(Esquema de solicitud)trustgraph-flow/trustgraph/gateway/dispatch/graph_rag.py(Gateway)
- Añadir el parámetro
-
Servicio DocumentRAG (Necesita pasar el parámetro
streaming)- Añadir el parámetro
streamingal métodoquery(). - Pasar la bandera de streaming y los callbacks a
prompt_client.document_prompt(). - El esquema DocumentRagRequest debe incluir el campo
streaming. - Módulos:
trustgraph-flow/trustgraph/retrieval/document_rag/document_rag.pytrustgraph-flow/trustgraph/retrieval/document_rag/rag.py(Procesador)trustgraph-base/trustgraph/schema/document_rag.py(Esquema de solicitud)trustgraph-flow/trustgraph/gateway/dispatch/document_rag.py(Gateway)
- Añadir el parámetro
Flujo de datos
No de streaming (actual):
Client → Gateway → RAG Service → PromptClient.kg_prompt(streaming=False)
↓
Prompt Service → LLM
↓
Respuesta completa
↓
Client ← Gateway ← RAG Service ← Respuesta
Streaming (propuesto):
Client → Gateway → RAG Service → PromptClient.kg_prompt(streaming=True, chunk_callback=cb)
↓
Prompt Service → LLM (streaming)
↓
Fragmento → callback → Respuesta RAG (fragmento)
↓ ↓
Client ← Gateway ← ────────────────────────────────── Flujo de respuesta
APIs
Cambios en GraphRAG:
- GraphRag.query() - Añadir parámetros de streaming
async def query(
self, query, user, collection,
verbose=False, streaming=False, chunk_callback=None # NUEVO
):
# ... código existente de recuperación de entidades/triples ...
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
- Esquema GraphRagRequest - Añadir campo de streaming
class GraphRagRequest(Record):
query = String()
user = String()
collection = String()
streaming = Boolean() # NUEVO
- Esquema GraphRagResponse - Añadir campos de streaming (seguir el patrón de Agent)
class GraphRagResponse(Record):
response = String() # LEGADO: respuesta completa
chunk = String() # NUEVO: fragmento de streaming
end_of_stream = Boolean() # NUEVO: indica el último fragmento
- Procesador - Pasar el streaming a través
async def handle(self, msg):
# ... código existente ...
async def send_chunk(chunk):
await self.respond(GraphRagResponse(
chunk=chunk,
end_of_stream=False,
response=None
))
if request.streaming:
resp = await self.prompt_client.kg_prompt(
request.query,
request.context,
streaming=True
)
else:
resp = await self.prompt_client.kg_prompt(
request.query,
request.context
)
# Procesar respuesta
# ...
Plan de migración
No se requiere migración:
- El soporte de streaming es opcional a través del parámetro
streaming(predeterminado a False). - Los clientes existentes siguen funcionando sin cambios.
- Los nuevos clientes pueden optar por habilitar el streaming.
Cronograma
Tiempo estimado de implementación: 4-6 horas.
- Fase 1 (2 horas): Soporte de streaming para GraphRAG.
- Fase 2 (2 horas): Soporte de streaming para DocumentRAG.
- Fase 3 (1-2 horas): Actualizaciones del Gateway y banderas de la CLI.
- Pruebas: Integradas en cada fase.
Preguntas abiertas
- ¿Deberíamos añadir soporte de streaming al servicio NLP Query también?
- ¿Queremos transmitir solo los pasos intermedios (por ejemplo, "Recuperando entidades...", "Consultando el gráfico...") o también la salida del LLM?
- ¿Debería GraphRAG/DocumentRAG incluir metadatos del fragmento (por ejemplo, número de fragmento, número total esperado)?
Referencias
- Implementación existente:
docs/tech-specs/streaming-llm-responses.md - Streaming de PromptClient:
trustgraph-base/trustgraph/base/prompt_client.py - Streaming de Agent:
trustgraph-flow/trustgraph/agent/react/agent_manager.py