trustgraph/docs/tech-specs/rag-streaming-support.ru.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

10 KiB
Raw Blame History

layout title parent
default Техническая спецификация поддержки потоковой передачи для RAG Russian (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-сервисов для завершения текста, запросов и агентов.

Цели

  • Консистентный UX потоковой передачи: Обеспечить одинаковый опыт потоковой передачи для всех сервисов TrustGraph.
  • Минимальные изменения API: Добавить поддержку потоковой передачи с помощью одного флага streaming, следуя установленным шаблонам.
  • Совместимость со старыми версиями: Поддерживать существующее поведение без потоковой передачи по умолчанию.
  • Использование существующей инфраструктуры: Использовать существующую функциональность потоковой передачи PromptClient.
  • Поддержка Gateways: Включить потоковую передачу через websocket Gateway для клиентских приложений.

Предыстория

Текущие сервисы, поддерживающие потоковую передачу:

  • Сервис завершения текста LLM: Фаза 1 - потоковая передача от LLM-провайдеров.
  • Сервис запросов: Фаза 2 - потоковая передача через шаблоны запросов.
  • Сервис агента: Фазы 3-4 - потоковая передача ReAct с последовательными частями/данными/ответами.

Текущие ограничения для сервисов RAG:

  • GraphRAG и DocumentRAG поддерживают только не потоковые ответы.
  • Пользователям необходимо ждать полного ответа LLM, прежде чем видеть какой-либо результат.
  • Плохой UX для длинных ответов из запросов к графу знаний или документам.
  • Несогласованный опыт по сравнению с другими сервисами TrustGraph.

Эта спецификация решает эти проблемы, добавляя поддержку потоковой передачи для GraphRAG и DocumentRAG. Благодаря потоковой передаче по частям, TrustGraph может:

  • Обеспечить консистентный UX потоковой передачи для всех типов запросов.
  • Снизить воспринимаемую задержку для запросов RAG.
  • Обеспечить лучший прогресс для длительных запросов.
  • Поддерживать отображение в реальном времени в клиентских приложениях.

Технический дизайн

Архитектура

Реализация потоковой передачи для RAG использует существующую инфраструктуру:

  1. PromptClient Streaming (Уже реализовано)

    • kg_prompt() и document_prompt() уже принимают параметры streaming и chunk_callback.
    • Эти вызывают prompt() с поддержкой потоковой передачи.
    • Изменения не требуются для PromptClient.

    Модуль: trustgraph-base/trustgraph/base/prompt_client.py

  2. Сервис GraphRAG (Требуется передача параметра streaming)

    • Добавить параметр streaming к методу query().
    • Передавать флаг streaming и обратные вызовы в prompt_client.kg_prompt().
    • Схема GraphRagRequest должна иметь поле 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 (Gateway)
  3. Сервис DocumentRAG (Требуется передача параметра streaming)

    • Добавить параметр streaming к методу query().
    • Передавать флаг streaming и обратные вызовы в prompt_client.document_prompt().
    • Схема DocumentRagRequest должна иметь поле 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 (Gateway)

Поток данных

Не потоковая передача (текущая):

Клиент → Gateway → Сервис RAG → PromptClient.kg_prompt(streaming=False)
                                   ↓
                                Сервис запросов → LLM
                                   ↓
                                Полный ответ
                                   ↓
Клиент ← Gateway ← Сервис RAG ←  Ответ

Потоковая передача (предлагаемая):

Клиент → Gateway → Сервис RAG → PromptClient.kg_prompt(streaming=True, chunk_callback=cb)
                                   ↓
                                Сервис запросов → LLM (streaming)
                                   ↓
                                Часть → обратный вызов → Ответ RAG (часть)
                                   ↓                       ↓
Клиент ← Gateway ← ────────────────────────────────── Поток ответа

API

Изменения для GraphRAG:

  1. GraphRag.query() - Добавлены параметры потоковой передачи
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
  1. GraphRagRequest schema - Добавлен параметр streaming
class GraphRagRequest(Record):
    query = String()
    user = String()
    collection = String()
    streaming = Boolean()  # NEW
  1. GraphRagResponse schema - Добавлены поля для потоковой передачи (следовать паттерну Agent)
class GraphRagResponse(Record):
    response = String()    # Legacy: полный ответ
    chunk = String()       # NEW: часть для потоковой передачи
    end_of_stream = Boolean()  # NEW: указывает, что это последняя часть
  1. Обработчик - Передача потоковой передачи
async def handle(self, ...):
    # ... существующий код ...
    response = await self.query(...)
    if response and streaming:
        # ... логика для отправки части
    else:
        # ... логика для отправки полного ответа

Изменения для DocumentRAG: Аналогично GraphRAG.

График миграции

Не требуется миграция:

  • Поддержка потоковой передачи является опцией (по умолчанию отключена)
  • Существующие клиенты продолжают работать без изменений.
  • Новые клиенты могут включить поддержку потоковой передачи.

Сроки

Оценка времени реализации: 4-6 часов

  • Фаза 1 (2 часа): Поддержка потоковой передачи для GraphRAG.
  • Фаза 2 (2 часа): Поддержка потоковой передачи для DocumentRAG.
  • Фаза 3 (1-2 часа): Обновления Gateway и флаги командной строки.
  • Тестирование: Встроено в каждую фазу.

Открытые вопросы

  • Должна ли также поддерживаться потоковая передача для сервиса NLP Query?
  • Хотим ли мы передавать только выход LLM (например, "Извлечь сущности...", "Запрос к графу...") или только его?
  • Должны ли ответы GraphRAG/DocumentRAG содержать метаданные части (например, номер части, общее количество)?

Ссылки

  • Существующая реализация: docs/tech-specs/streaming-llm-responses.md
  • Потоковая передача LLM: trustgraph-flow/trustgraph/agent/react/agent_manager.py
  • Потоковая передача PromptClient: trustgraph-base/trustgraph/base/prompt_client.py