trustgraph/docs/tech-specs/graphrag-performance-optimization.ru.md
Jenkins, Kenneth Alexander 1f1aaa24ae
second round of translation fixes
Signed-off-by: Jenkins, Kenneth Alexander <kjenkins60@gatech.edu>
2026-04-06 14:50:34 -04:00

14 KiB
Raw Blame History

Техническое задание по оптимизации производительности GraphRAG

Обзор

Данное техническое задание описывает комплексные оптимизации производительности алгоритма GraphRAG (Graph Retrieval-Augmented Generation) в системе TrustGraph. Текущая реализация страдает от существенных проблем с производительностью, которые ограничивают масштабируемость и время отклика. Данное задание охватывает четыре основные области оптимизации:

  1. Оптимизация обхода графа: Устранение неэффективных рекурсивных запросов к базе данных и реализация пакетной обработки графа.
  2. Оптимизация разрешения меток: Замена последовательной выборки меток параллельными/пакетными операциями.
  3. Улучшение стратегии кэширования: Реализация интеллектуального кэширования с вытеснением по алгоритму LRU и предварительной загрузкой.
  4. Оптимизация запросов: Добавление мемоизации результатов и кэширования векторов для повышения скорости отклика.

Цели

  • Сокращение количества запросов к базе данных: Достижение снижения общего количества запросов к базе данных на 50-80% за счет пакетной обработки и кэширования.
  • Улучшение времени отклика: Ускорение построения подграфа в 3-5 раза и ускорение разрешения меток в 2-3 раза.
  • Повышение масштабируемости: Поддержка более крупных графовых баз знаний с улучшением управления памятью.
  • Сохранение точности: Сохранение существующей функциональности GraphRAG и качества результатов.
  • Обеспечение параллельности: Улучшение возможностей параллельной обработки для множества одновременных запросов.
  • Уменьшение занимаемой памяти: Реализация эффективных структур данных и управления памятью.
  • Добавление наблюдаемости: Включение метрик производительности и возможностей мониторинга.
  • Обеспечение надежности: Добавление механизмов обработки ошибок и таймаутов.

Описание проблемы

Текущая реализация GraphRAG, находящаяся в файле trustgraph-flow/trustgraph/retrieval/graph_rag/graph_rag.py, имеет ряд критических проблем с производительностью, которые серьезно влияют на масштабируемость системы:

Текущие проблемы с производительностью

1. Неэффективный обход графа (follow_edges function, строки 79-127)

  • Выполняет 3 отдельных запроса к базе данных для каждой сущности на каждом уровне глубины.
  • Шаблон запроса: запросы на основе субъекта, предиката и объекта для каждой сущности.
  • Отсутствие пакетной обработки: Каждый запрос обрабатывает только одну сущность за раз.
  • Отсутствие обнаружения циклов: Может повторно посещать одни и те же узлы несколько раз.
  • Рекурсивная реализация без мемоизации приводит к экспоненциальной сложности.
  • Временная сложность: O(entities × max_path_length × triple_limit³)

2. Последовательное разрешение меток (get_labelgraph function, строки 144-171)

  • Обрабатывает каждый компонент тройки (субъект, предикат, объект) последовательно.
  • Каждый вызов maybe_label потенциально вызывает запрос к базе данных.
  • Отсутствует параллельное выполнение или пакетная обработка запросов меток.
  • Приводит до 3 × subgraph_size отдельных запросов к базе данных.

3. Примитивная стратегия кэширования (maybe_label function, строки 62-77)

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

4. Субоптимальные шаблоны запросов

  • Запросы на поиск сходства векторов сущностей не кэшируются между похожими запросами.
  • Отсутствует мемоизация результатов для повторяющихся шаблонов запросов.
  • Отсутствует оптимизация запросов для распространенных сценариев доступа.

5. Критические проблемы с временем жизни объектов (rag.py:96-102)

  • Объект GraphRag пересоздается для каждого запроса: Новый экземпляр создается для каждого запроса, что приводит к потере всех преимуществ кэширования.
  • Объект Query имеет очень короткое время жизни: Создается и уничтожается в рамках выполнения одного запроса (строки 201-207).
  • Кэш меток сбрасывается для каждого запроса: "Прогрев" кэша и накопленные знания теряются между запросами.
  • Накладные расходы на повторное создание клиента: Клиенты базы данных потенциально переподключаются для каждого запроса.
  • Отсутствует оптимизация между запросами: Невозможно воспользоваться преимуществами шаблонов запросов или совместного использования результатов.

Анализ влияния на производительность

Текущий наихудший сценарий для типичного запроса:

  • Извлечение сущности: 1 запрос на поиск сходства векторов.
  • Обход графа: entities × max_path_length × 3 × triple_limit запросов.
  • Разрешение меток: subgraph_size × 3 отдельных запросов на метки.

Для параметров по умолчанию (50 сущностей, глубина 2, лимит 30 троек, размер подграфа 150):

  • Минимальное количество запросов: 1 + (50 × 2 × 3 × 30) + (150 × 3) = 9,451 запросов к базе данных.
  • Время отклика: 15-30 секунд для графов умеренного размера.
  • Использование памяти: Неограниченный рост кэша со временем.
  • Эффективность кэша: 0% - кэш сбрасывается при каждом запросе.
  • Накладные расходы на создание объектов: Объекты GraphRag + Query создаются/уничтожаются для каждого запроса.

Данное техническое задание решает эти проблемы путем реализации пакетных запросов, интеллектуального кэширования и параллельной обработки. Оптимизируя шаблоны запросов и доступ к данным, TrustGraph может:

  • Поддерживать графовые базы знаний предприятия с миллионами сущностей.
  • Обеспечивать время отклика менее 1 секунды для типичных запросов.
  • Обрабатывать сотни одновременных запросов GraphRAG.
  • Эффективно масштабироваться с ростом размера и сложности графа.

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

Архитектура

Оптимизация производительности GraphRAG требует следующих технических компонентов:

1. Архитектурная реорганизация для управления временем жизни объектов

  • Сделать GraphRag долгоживущим: Перенести экземпляр GraphRag на уровень Processor для сохранения данных между запросами.
  • Сохранить кэши: Поддерживать кэш меток, кэш векторов и кэш результатов запросов между запросами.
  • Оптимизировать объект Query: Рефакторинг Query как легковесного контекста выполнения, а не контейнера данных.
  • Сохранение подключений: Поддерживать подключения к базе данных между запросами.

Модуль: trustgraph-flow/trustgraph/retrieval/graph_rag/rag.py (изменен)

2. Оптимизированный движок обхода графа

  • Заменить рекурсивный follow_edges итеративным поиском в ширину.
  • Реализовать пакетную обработку сущностей на каждом уровне обхода.
  • Добавить обнаружение циклов с отслеживанием посещенных узлов.
  • Включить раннее завершение при достижении лимитов.

Модуль: trustgraph-flow/trustgraph/retrieval/graph_rag/optimized_traversal.py

3. Параллельная система разрешения меток

  • Пакетная обработка запросов меток для нескольких сущностей одновременно.
  • Реализация паттернов async/await для параллельного доступа к базе данных.
  • Добавление интеллектуальной предварительной загрузки для распространенных шаблонов меток.
  • Включение стратегий "прогрева" кэша меток.

Модуль: trustgraph-flow/trustgraph/retrieval/graph_rag/label_resolver.py

4. Консервативный слой кэширования меток

  • Кэш LRU с коротким TTL только для меток (5 минут) для баланса между производительностью и согласованностью.
  • Мониторинг метрик кэша и коэффициента попадания.
  • Без кэширования векторов: Уже кэшируются на уровне запроса, нет пользы для между запросами.
  • Без кэширования результатов запросов: Из-за проблем согласованности данных в графе.

Модуль: trustgraph-flow/trustgraph/retrieval/graph_rag/cache_manager.py

5. Фреймворк оптимизации запросов

  • Анализ шаблонов запросов и предложения по оптимизации.
  • Координатор пакетных запросов для доступа к базе данных.
  • Пулинг подключений и управление таймаутами запросов.
  • Мониторинг производительности.