mirror of
https://github.com/trustgraph-ai/trustgraph.git
synced 2026-07-09 05:12:12 +02:00
update more languages
Signed-off-by: Alex Jenkins <kjenkins60@gatech.edu>
This commit is contained in:
parent
835acaa70e
commit
16c2f12a54
249 changed files with 117186 additions and 186 deletions
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue