update more languages

Signed-off-by: Alex Jenkins <kjenkins60@gatech.edu>
This commit is contained in:
Alex Jenkins 2026-04-11 01:08:44 +00:00
parent 835acaa70e
commit 16c2f12a54
249 changed files with 117186 additions and 186 deletions

View file

@ -16,7 +16,11 @@
**Повышение масштабируемости**: Поддержка более крупных графов знаний с улучшением управления памятью.
**Сохранение точности**: Сохранение существующей функциональности GraphRAG и качества результатов.
**Обеспечение параллельности**: Улучшение возможностей параллельной обработки для нескольких одновременных запросов.
<<<<<<< HEAD
**Уменьшение объема памяти**: Реализация эффективных структур данных и управления памятью.
=======
**Уменьшение объема используемой памяти**: Реализация эффективных структур данных и управления памятью.
>>>>>>> 82edf2d (New md files from RunPod)
**Добавление возможностей мониторинга**: Включение показателей производительности и возможностей мониторинга.
**Обеспечение надежности**: Добавление надлежащей обработки ошибок и механизмов таймаута.
@ -38,7 +42,11 @@
Обрабатывает каждый компонент тройки (субъект, предикат, объект) последовательно.
Каждый вызов `maybe_label` потенциально вызывает запрос к базе данных.
Без параллельного выполнения или пакетной обработки запросов меток.
<<<<<<< HEAD
В результате получается до 3 × subgraph_size отдельных вызовов базы данных.
=======
Приводит до 3 × subgraph_size отдельных вызовов базы данных.
>>>>>>> 82edf2d (New md files from RunPod)
**3. Примитивная стратегия кэширования (функция `maybe_label`, строки 62-77)**
Простой кэш в виде словаря без ограничений размера или TTL.
@ -49,14 +57,23 @@
**4. Субоптимальные шаблоны запросов**
Запросы на сравнение векторного сходства сущностей не кэшируются между похожими запросами.
Без мемоизации результатов для повторяющихся шаблонов запросов.
<<<<<<< HEAD
Отсутствие оптимизации запросов для распространенных шаблонов доступа.
=======
Отсутствует оптимизация запросов для распространенных шаблонов доступа.
>>>>>>> 82edf2d (New md files from RunPod)
**5. Критические проблемы с жизненным циклом объектов (`rag.py:96-102`)**
**Объект GraphRag создается для каждого запроса**: Новый экземпляр создается для каждого запроса, что приводит к потере всех преимуществ кэша.
**Объект запроса имеет очень короткий срок службы**: Создается и уничтожается в течение выполнения одного запроса (строки 201-207).
**Кэш меток сбрасывается для каждого запроса**: Подогрев кэша и накопленные знания теряются между запросами.
<<<<<<< HEAD
**Накладные расходы на повторное создание клиента**: Клиенты базы данных потенциально повторно устанавливаются для каждого запроса.
**Без оптимизации между запросами**: Невозможно извлечь выгоду из шаблонов запросов или совместного использования результатов.
=======
**Накладные расходы на повторное создание клиента**: Клиенты базы данных потенциально пересоздаются для каждого запроса.
**Отсутствие оптимизации между запросами**: Невозможно извлечь выгоду из шаблонов запросов или обмена результатами.
>>>>>>> 82edf2d (New md files from RunPod)
### Анализ влияния на производительность
@ -65,10 +82,17 @@
**Обход графа**: entities × max_path_length × 3 × triple_limit запросов.
**Разрешение меток**: subgraph_size × 3 отдельных запросов на разрешение меток.
<<<<<<< HEAD
Для параметров по умолчанию (50 сущностей, длина пути 2, ограничение в 30 тройки, размер подграфа 150):
**Минимальное количество запросов**: 1 + (50 × 2 × 3 × 30) + (150 × 3) = **9451 запрос к базе данных**
**Время отклика**: 15-30 секунд для графов среднего размера
**Использование памяти**: Неограниваемый рост кэша со временем
=======
Для параметров по умолчанию (50 сущностей, длина пути 2, ограничение в 30 троек, размер подграфа 150):
**Минимальное количество запросов**: 1 + (50 × 2 × 3 × 30) + (150 × 3) = **9451 запрос к базе данных**
**Время отклика**: 15-30 секунд для графов среднего размера
**Использование памяти**: Неограниченный рост кэша со временем
>>>>>>> 82edf2d (New md files from RunPod)
**Эффективность кэша**: 0% - кэши сбрасываются при каждом запросе
**Накладные расходы на создание объектов**: Объекты GraphRag + Query создаются/удаляются для каждого запроса
@ -76,7 +100,11 @@
Поддерживать графы знаний корпоративного уровня с миллионами сущностей
Обеспечивать время отклика менее 1 секунды для типичных запросов
Обрабатывать сотни одновременных запросов GraphRAG
<<<<<<< HEAD
Эффективно масштабироваться в зависимости от размера и сложности графа
=======
Эффективно масштабироваться с увеличением размера и сложности графа
>>>>>>> 82edf2d (New md files from RunPod)
## Технический дизайн
@ -85,17 +113,30 @@
Оптимизация производительности GraphRAG требует следующих технических компонентов:
#### 1. **Архитектурная реорганизация жизненного цикла объектов**
<<<<<<< HEAD
**Сделать GraphRag долгоживущим**: Переместить экземпляр GraphRag на уровень Processor для сохранения между запросами
**Сохранять кэши**: Поддерживать кэш меток, кэш вложений и кэш результатов запросов между запросами
**Оптимизировать объект Query**: Переработать Query как легковесный контекст выполнения, а не контейнер данных
**Сохранять подключения к базе данных**: Поддерживать подключения к базе данных между запросами
=======
**Сделать GraphRag долгоживущим**: Переместить экземпляр GraphRag на уровень Processor для сохранения данных между запросами
**Сохранять кэши**: Поддерживать кэш меток, кэш вложений и кэш результатов запросов между запросами
**Оптимизировать объект Query**: Переработать Query как легковесный контекст выполнения, а не контейнер данных
**Сохранять соединения с базой данных**: Поддерживать соединения с базой данных между запросами
>>>>>>> 82edf2d (New md files from RunPod)
Модуль: `trustgraph-flow/trustgraph/retrieval/graph_rag/rag.py` (изменен)
#### 2. **Оптимизированный движок обхода графа**
<<<<<<< HEAD
Заменить рекурсивную `follow_edges` на итеративный поиск в ширину
Реализовать пакетную обработку сущностей на каждом уровне обхода
Добавить обнаружение циклов с помощью отслеживания посещенных узлов
=======
Заменить рекурсивную функцию `follow_edges` на итеративный поиск в ширину
Реализовать пакетную обработку сущностей на каждом уровне обхода
Добавить обнаружение циклов с использованием отслеживания посещенных узлов
>>>>>>> 82edf2d (New md files from RunPod)
Включить раннее завершение при достижении лимитов
Модуль: `trustgraph-flow/trustgraph/retrieval/graph_rag/optimized_traversal.py`
@ -110,8 +151,13 @@
#### 4. **Консервативный слой кэширования меток**
Кэш LRU с коротким TTL только для меток (5 минут) для баланса между производительностью и согласованностью
<<<<<<< HEAD
Мониторинг метрик кэша и коэффициента попадания
**Без кэширования вложений**: Уже кэшируются для каждого запроса, нет преимуществ для межзапросных данных
=======
Мониторинг метрик кэша и коэффициента попаданий
**Без кэширования вложений**: Уже кэшируются для каждого запроса, нет преимуществ для межзапросных операций
>>>>>>> 82edf2d (New md files from RunPod)
**Без кэширования результатов запросов**: Из-за проблем согласованности изменений графа
Модуль: `trustgraph-flow/trustgraph/retrieval/graph_rag/cache_manager.py`
@ -119,7 +165,11 @@
#### 5. **Фреймворк оптимизации запросов**
Анализ шаблонов запросов и предложения по оптимизации
Пакетный координатор запросов для доступа к базе данных
<<<<<<< HEAD
Управление пулами соединений и временем ожидания запросов
=======
Управление пулом соединений и временем ожидания запросов
>>>>>>> 82edf2d (New md files from RunPod)
Мониторинг производительности и сбор метрик
Модуль: `trustgraph-flow/trustgraph/retrieval/graph_rag/query_optimizer.py`
@ -481,11 +531,16 @@ async def execute_with_timeout(self, query_func, timeout: int = 30):
**Компромиссы между актуальностью данных:**
**Кэш меток (TTL 5 минут):** Риск предоставления устаревших меток сущностей (удаленных или переименованных).
<<<<<<< HEAD
**Отсутствие кэширования вложений:** Не требуется, так как вложения уже кэшируются для каждого запроса.
=======
**Отсутствие кэширования вложений:** Не требуется - вложения уже кэшируются для каждого запроса.
>>>>>>> 82edf2d (New md files from RunPod)
**Отсутствие кэширования результатов:** Предотвращает получение устаревших результатов подграфов из-за удаленных сущностей/связей.
**Стратегии смягчения:**
**Консервативные значения TTL:** Баланс между приростом производительности (10-20%) и актуальностью данных.
<<<<<<< HEAD
**Хуки для аннулирования кэша:** Необязательная интеграция с событиями изменения графа.
**Панели мониторинга:** Отслеживание показателей попадания в кэш по сравнению с инцидентами устаревания данных.
**Настраиваемые политики кэширования:** Возможность тонкой настройки для каждого развертывания в зависимости от частоты изменений.
@ -494,6 +549,16 @@ async def execute_with_timeout(self, query_func, timeout: int = 30):
**Высокая частота изменений (>100 изменений/час):** TTL=60 секунд, меньшие размеры кэша.
**Средняя частота изменений (10-100 изменений/час):** TTL=300 секунд (по умолчанию).
**Низкая частота изменений (<10 изменений/час):** TTL=600 секунд, большие размеры кэша.
=======
**Механизмы аннулирования кэша:** Необязательная интеграция с событиями изменения графа.
**Информационные панели мониторинга:** Отслеживание показателей попадания в кэш по сравнению с инцидентами устаревания данных.
**Настраиваемые политики кэширования:** Возможность тонкой настройки для каждого развертывания в зависимости от частоты изменений.
**Рекомендуемая конфигурация кэша в зависимости от скорости изменений графа:**
**Высокая скорость изменений (>100 изменений/час):** TTL=60 секунд, меньшие размеры кэша.
**Средняя скорость изменений (10-100 изменений/час):** TTL=300 секунд (по умолчанию).
**Низкая скорость изменений (<10 изменений/час):** TTL=600 секунд, большие размеры кэша.
>>>>>>> 82edf2d (New md files from RunPod)
## Соображения безопасности
@ -514,11 +579,19 @@ async def execute_with_timeout(self, query_func, timeout: int = 30):
## Соображения производительности
<<<<<<< HEAD
### Ожидаемые улучшения производительности
**Сокращение количества запросов:**
Сейчас: ~9000+ запросов для типичного запроса.
Оптимизировано: ~50-100 пакетных запросов (снижение на 98%).
=======
### Ожидаемое повышение производительности
**Сокращение количества запросов:**
Текущее: ~9000+ запросов для типичного запроса.
Оптимизированное: ~50-100 пакетных запросов (снижение на 98%).
>>>>>>> 82edf2d (New md files from RunPod)
**Улучшение времени отклика:**
Обход графа: 15-20 секунд → 3-5 секунд (в 4-5 раза быстрее).
@ -528,7 +601,11 @@ async def execute_with_timeout(self, query_func, timeout: int = 30):
**Эффективность использования памяти:**
Ограниченные размеры кэша предотвращают утечки памяти.
Эффективные структуры данных уменьшают объем используемой памяти примерно на 40%.
<<<<<<< HEAD
Улучшен сбор мусора благодаря правильной очистке ресурсов.
=======
Улучшенная сборка мусора благодаря правильной очистке ресурсов.
>>>>>>> 82edf2d (New md files from RunPod)
**Реалистичные ожидания производительности:**
**Кэш меток:** Уменьшение количества запросов на 10-20% для графов с общими связями.
@ -570,7 +647,11 @@ async def execute_with_timeout(self, query_func, timeout: int = 30):
### Тестирование производительности
Тестирование производительности по сравнению с текущей реализацией
<<<<<<< HEAD
Тестирование нагрузки с различными размерами и сложностью графов
=======
Тестирование нагрузки с графами различного размера и сложности
>>>>>>> 82edf2d (New md files from RunPod)
Стресс-тестирование для проверки лимитов памяти и соединений
Регрессионное тестирование для проверки улучшений производительности
@ -587,13 +668,21 @@ async def execute_with_timeout(self, query_func, timeout: int = 30):
1. **Замените метод `follow_edges`**: Перепишите с использованием пакетного итеративного обхода
2. **Оптимизируйте `get_labelgraph`**: Реализуйте параллельное разрешение меток
3. **Добавьте долгоживущий GraphRag**: Измените Processor для поддержания постоянной инстанции
<<<<<<< HEAD
4. **Реализуйте кэширование меток**: Добавьте кэш LRU с TTL в класс GraphRag
=======
4. **Реализуйте кэширование меток**: Добавьте кэш LRU со сроком действия TTL в класс GraphRag
>>>>>>> 82edf2d (New md files from RunPod)
### Область изменений
**Класс запроса**: Замените ~50 строк в `follow_edges`, добавьте ~30 строк для обработки пакетов
**Класс GraphRag**: Добавьте слой кэширования (~40 строк)
**Класс Processor**: Измените для использования постоянной инстанции GraphRag (~20 строк)
<<<<<<< HEAD
**Всего**: ~140 строк целенаправленных изменений, в основном в существующих классах
=======
**Всего**: ~140 строк изменений, в основном в существующих классах
>>>>>>> 82edf2d (New md files from RunPod)
## Временная шкала
@ -606,12 +695,17 @@ async def execute_with_timeout(self, query_func, timeout: int = 30):
**Неделя 2: Тестирование и интеграция**
Модульные тесты для новой логики обхода и кэширования
Бенчмаркинг производительности по сравнению с текущей реализацией
<<<<<<< HEAD
Интеграционное тестирование с реальными данными графа
=======
Интеграционное тестирование с реальными графовыми данными
>>>>>>> 82edf2d (New md files from RunPod)
Проверка кода и оптимизация
**Неделя 3: Развертывание**
Разверните оптимизированную реализацию
Отслеживайте улучшения производительности
<<<<<<< HEAD
Тонкая настройка TTL кэша и размеров пакетов на основе реального использования
## Открытые вопросы
@ -620,10 +714,24 @@ async def execute_with_timeout(self, query_func, timeout: int = 30):
**Постоянство кэша**: Должны ли кэши меток и внедрений сохраняться после перезапуска службы?
**Распределенное кэширование**: Для развернутых в нескольких экземплярах систем следует ли нам реализовать распределенное кэширование с использованием Redis/Memcached?
**Формат результата запроса**: Следует ли нам оптимизировать внутреннее представление тройки для повышения эффективности использования памяти?
=======
Тонкая настройка срока действия TTL кэша и размеров пакетов на основе реального использования
## Открытые вопросы
**Пул соединений с базой данных**: Следует ли нам реализовывать собственный пул соединений или использовать существующий пул соединений от клиента базы данных?
**Постоянство кэша**: Должны ли кэши меток и вложений сохраняться после перезапуска сервиса?
**Распределенное кэширование**: Для развернутых в нескольких инстанциях систем следует ли реализовывать распределенное кэширование с использованием Redis/Memcached?
**Формат результата запроса**: Следует ли оптимизировать внутреннее представление тройки для повышения эффективности использования памяти?
>>>>>>> 82edf2d (New md files from RunPod)
**Интеграция мониторинга**: Какие метрики следует предоставлять существующим системам мониторинга (Prometheus и т. д.)?
## Ссылки
<<<<<<< HEAD
[Оригинальная реализация GraphRAG](trustgraph-flow/trustgraph/retrieval/graph_rag/graph_rag.py)
=======
[Исходная реализация GraphRAG](trustgraph-flow/trustgraph/retrieval/graph_rag/graph_rag.py)
>>>>>>> 82edf2d (New md files from RunPod)
[Принципы архитектуры TrustGraph](architecture-principles.md)
[Спецификация управления коллекциями](collection-management.md)