mirror of
https://github.com/trustgraph-ai/trustgraph.git
synced 2026-07-11 14:22: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
|
|
@ -25,7 +25,11 @@
|
|||
|
||||
1. **Загрузка метаданных один раз:** Метаданные документа должны быть загружены один раз и привязаны к узлу верхнего уровня документа, а не повторяться с каждой партией триплетов.
|
||||
|
||||
<<<<<<< HEAD
|
||||
2. **Разветвленная структура данных о происхождении:** Захватите полную цепочку преобразований от исходного документа через все промежуточные артефакты до извлеченных фактов. Например, преобразование PDF-документа:
|
||||
=======
|
||||
2. **Разветвленная структура происхождения данных:** Захватите полную цепочку преобразований от исходного документа через все промежуточные артефакты до извлеченных фактов. Например, преобразование PDF-документа:
|
||||
>>>>>>> 82edf2d (New md files from RunPod)
|
||||
|
||||
```
|
||||
PDF file (source document with metadata)
|
||||
|
|
@ -40,7 +44,11 @@
|
|||
→ ...
|
||||
```
|
||||
|
||||
<<<<<<< HEAD
|
||||
3. **Унифицированное хранилище:** Граф происхождения хранится в той же базе знаний, что и извлеченные знания. Это позволяет запрашивать происхождение так же, как и знания, прослеживая связи обратно по цепочке от любого факта к его точному источнику.
|
||||
=======
|
||||
3. **Унифицированное хранилище:** Граф происхождения хранится в той же базе знаний, что и извлеченные знания. Это позволяет запрашивать происхождение так же, как и знания, прослеживая связи вверх по цепочке от любого факта к его точному источнику.
|
||||
>>>>>>> 82edf2d (New md files from RunPod)
|
||||
|
||||
4. **Стабильные идентификаторы:** Каждый промежуточный артефакт (страница, фрагмент) имеет стабильный идентификатор в виде узла в графе.
|
||||
|
||||
|
|
@ -57,20 +65,32 @@
|
|||
**Процесс:**
|
||||
1. Пользователь отправляет запрос агенту GraphRAG.
|
||||
2. Агент извлекает соответствующие факты из базы знаний для формирования ответа.
|
||||
<<<<<<< HEAD
|
||||
3. В соответствии со спецификацией происхождения во время запроса, агент сообщает, какие факты внесли вклад в ответ.
|
||||
=======
|
||||
3. В соответствии со спецификацией происхождения для запросов, агент сообщает, какие факты послужили основой для ответа.
|
||||
>>>>>>> 82edf2d (New md files from RunPod)
|
||||
4. Каждый факт связан с его исходным фрагментом через граф происхождения.
|
||||
5. Фрагменты связаны со страницами, страницы связаны с исходными документами.
|
||||
|
||||
**Результат для пользователя:** Интерфейс отображает ответ LLM вместе с указанием источника. Пользователь может:
|
||||
<<<<<<< HEAD
|
||||
Увидеть, какие факты подтверждают ответ.
|
||||
Переходить от фактов к фрагментам, страницам и документам.
|
||||
Просматривать исходные документы для проверки утверждений.
|
||||
Понимать, откуда в документе (на какой странице, в каком разделе) произошел факт.
|
||||
=======
|
||||
Увидеть, какие факты послужили основой для ответа.
|
||||
Переходить от фактов к фрагментам, страницам и документам.
|
||||
Просматривать исходные документы для проверки утверждений.
|
||||
Понимать, откуда в документе (на какой странице, в каком разделе) произошел тот или иной факт.
|
||||
>>>>>>> 82edf2d (New md files from RunPod)
|
||||
|
||||
**Преимущество:** Пользователи могут проверять ответы, сгенерированные ИИ, по сравнению с первичными источниками, что повышает доверие и позволяет проводить проверку фактов.
|
||||
|
||||
### UC2: Отладка качества извлечения
|
||||
|
||||
<<<<<<< HEAD
|
||||
Факт кажется неверным. Проследите обратно через фрагмент, страницу и документ, чтобы увидеть исходный текст. Это была ошибка извлечения, или исходный документ был неверным?
|
||||
|
||||
### UC3: Инкрементное повторное извлечение
|
||||
|
|
@ -84,6 +104,21 @@
|
|||
### UC5: Разрешение конфликтов
|
||||
|
||||
Два факта противоречат друг другу. Проследите оба обратно к их источникам, чтобы понять, почему, и решить, кому доверять (более авторитетному источнику, более свежему и т.д.).
|
||||
=======
|
||||
Факт кажется неверным. Проследите по цепочке от фрагмента к странице и документу, чтобы увидеть исходный текст. Была ли это ошибка извлечения, или исходный текст был неверным?
|
||||
|
||||
### UC3: Инкрементное повторное извлечение
|
||||
|
||||
Исходный документ был обновлен. Какие фрагменты/факты были получены из него? Отмените и перегенерируйте только эти, а не перерабатывайте все.
|
||||
|
||||
### UC4: Удаление данных / Право на забвение
|
||||
|
||||
Исходный документ должен быть удален (GDPR, юридические требования и т.д.). Пройдите по графу, чтобы найти и удалить все производные факты.
|
||||
|
||||
### UC5: Разрешение конфликтов
|
||||
|
||||
Два факта противоречат друг другу. Проследите оба факта до их источников, чтобы понять причину и решить, кому доверять (более авторитетному источнику, более свежему и т.д.).
|
||||
>>>>>>> 82edf2d (New md files from RunPod)
|
||||
|
||||
### UC6: Взвешивание авторитетности источника
|
||||
|
||||
|
|
@ -103,7 +138,11 @@
|
|||
|
||||
**Связывание документов "родитель-потомок":**
|
||||
Поле `parent_id` в `DocumentMetadata` - связывает дочерний документ с родительским документом.
|
||||
<<<<<<< HEAD
|
||||
Поле `document_type` - значения: `"source"` (оригинальный) или `"extracted"` (производный).
|
||||
=======
|
||||
Поле `document_type` - значения: `"source"` (исходный) или `"extracted"` (производный).
|
||||
>>>>>>> 82edf2d (New md files from RunPod)
|
||||
API `add-child-document` - создает дочерний документ с автоматическим `document_type = "extracted"`.
|
||||
API `list-children` - извлекает все дочерние документы родительского документа.
|
||||
Каскадное удаление - удаление родительского документа автоматически удаляет все дочерние документы.
|
||||
|
|
@ -130,12 +169,20 @@ API `list-children` - извлекает все дочерние докумен
|
|||
`trustgraph-flow/trustgraph/tables/library.py` - Хранилище таблиц Cassandra.
|
||||
`trustgraph-base/trustgraph/schema/services/library.py` - Определения схемы.
|
||||
|
||||
<<<<<<< HEAD
|
||||
#### Необходимые улучшения
|
||||
=======
|
||||
#### Проблемы, требующие решения
|
||||
>>>>>>> 82edf2d (New md files from RunPod)
|
||||
|
||||
"Библиотекарь" имеет необходимые компоненты, но в настоящее время:
|
||||
1. Связывание "родитель-потомок" ограничено одним уровнем - отсутствуют вспомогательные функции для обхода многоуровневых графов.
|
||||
2. Отсутствует стандартная терминология для типов отношений (например, `derivedFrom`, `extractedFrom`).
|
||||
<<<<<<< HEAD
|
||||
3. Метаданные происхождения (метод извлечения, уверенность, позиция фрагмента) не стандартизированы.
|
||||
=======
|
||||
3. Метаданные происхождения (метод извлечения, достоверность, позиция фрагмента) не стандартизированы.
|
||||
>>>>>>> 82edf2d (New md files from RunPod)
|
||||
4. Отсутствует API запросов для прослеживания полной цепочки происхождения от факта до исходного источника.
|
||||
|
||||
## Проектирование сквозного потока
|
||||
|
|
@ -289,7 +336,11 @@ activity:pdf-extract-456 tg:componentVersion "1.2.3" .
|
|||
activity:pdf-extract-456 prov:startedAtTime "2024-01-15T10:30:00Z" .
|
||||
```
|
||||
|
||||
<<<<<<< HEAD
|
||||
**Раздел (выдан разделителем):**
|
||||
=======
|
||||
**Раздел (выдан Компоновщиком):**
|
||||
>>>>>>> 82edf2d (New md files from RunPod)
|
||||
```
|
||||
chunk:123-1-1 a prov:Entity .
|
||||
chunk:123-1-1 prov:wasDerivedFrom page:123-1 .
|
||||
|
|
@ -306,7 +357,11 @@ activity:chunk-789 tg:chunkSize 2048 .
|
|||
activity:chunk-789 tg:chunkOverlap 200 .
|
||||
```
|
||||
|
||||
<<<<<<< HEAD
|
||||
**Жирный шрифт (вывод Knowledge Extractor):**
|
||||
=======
|
||||
**Жирный шрифт (выделен извлечением знаний):**
|
||||
>>>>>>> 82edf2d (New md files from RunPod)
|
||||
```
|
||||
# The extracted triple (edge)
|
||||
entity:JohnSmith rel:worksAt entity:AcmeCorp .
|
||||
|
|
@ -324,7 +379,11 @@ activity:extract-999 tg:llmModel "claude-3" .
|
|||
activity:extract-999 tg:ontology <http://example.org/ontologies/business-v1> .
|
||||
```
|
||||
|
||||
<<<<<<< HEAD
|
||||
**Встраивание (хранится в векторной базе данных, а не в тройной базе данных):**
|
||||
=======
|
||||
**Встраивания (хранятся в векторной базе данных, а не в тройной базе данных):**
|
||||
>>>>>>> 82edf2d (New md files from RunPod)
|
||||
|
||||
Встраивания хранятся в векторной базе данных вместе с метаданными, а не в виде RDF-троек. Каждая запись встраивания содержит:
|
||||
|
||||
|
|
@ -336,7 +395,11 @@ activity:extract-999 tg:ontology <http://example.org/ontologies/business-v1> .
|
|||
| model | Используемая модель встраивания | `text-embedding-ada-002` |
|
||||
| component_version | Версия компонента TG | `1.0.0` |
|
||||
|
||||
<<<<<<< HEAD
|
||||
Поле `entity` связывает встраивание с графом знаний (URI узла). Поле `chunk_id` предоставляет информацию о происхождении, указывающую на исходный фрагмент, что позволяет проследить путь до исходного документа.
|
||||
=======
|
||||
Поле `entity` связывает встраивание с графом знаний (URI узла). Поле `chunk_id` предоставляет информацию о происхождении, указывающую на исходный фрагмент, что позволяет проследить путь вверх по DAG к исходному документу.
|
||||
>>>>>>> 82edf2d (New md files from RunPod)
|
||||
|
||||
#### Расширения пространства имен TrustGraph
|
||||
|
||||
|
|
@ -348,7 +411,11 @@ activity:extract-999 tg:ontology <http://example.org/ontologies/business-v1> .
|
|||
| `tg:pageCount` | Документ | Общее количество страниц в исходном документе |
|
||||
| `tg:mimeType` | Документ | MIME-тип исходного документа |
|
||||
| `tg:pageNumber` | Страница | Номер страницы в исходном документе |
|
||||
<<<<<<< HEAD
|
||||
| `tg:chunkIndex` | Фрагмент | Индекс фрагмента внутри родительского фрагмента |
|
||||
=======
|
||||
| `tg:chunkIndex` | Фрагмент | Индекс фрагмента внутри родительского элемента |
|
||||
>>>>>>> 82edf2d (New md files from RunPod)
|
||||
| `tg:charOffset` | Фрагмент | Смещение символов в родительском тексте |
|
||||
| `tg:charLength` | Фрагмент | Длина фрагмента в символах |
|
||||
| `tg:chunkSize` | Действие | Настроенный размер фрагмента |
|
||||
|
|
@ -363,7 +430,11 @@ activity:extract-999 tg:ontology <http://example.org/ontologies/business-v1> .
|
|||
|
||||
#### Начальная загрузка словаря (для каждой коллекции)
|
||||
|
||||
<<<<<<< HEAD
|
||||
Граф знаний является онтологически нейтральным и изначально пуст. При первом добавлении данных о происхождении PROV-O в коллекцию словарь должен быть инициализирован с помощью RDF-меток для всех классов и предикатов. Это обеспечивает удобочитаемое отображение в запросах и пользовательском интерфейсе.
|
||||
=======
|
||||
Граф знаний является онтологически нейтральным и изначально пуст. При записи данных о происхождении PROV-O в коллекцию в первый раз словарь должен быть инициализирован с помощью меток RDF для всех классов и предикатов. Это обеспечивает удобочитаемое отображение в запросах и пользовательском интерфейсе.
|
||||
>>>>>>> 82edf2d (New md files from RunPod)
|
||||
|
||||
**Классы PROV-O:**
|
||||
```
|
||||
|
|
@ -401,11 +472,19 @@ tg:sourceCharOffset rdfs:label "source character offset" .
|
|||
tg:sourceCharLength rdfs:label "source character length" .
|
||||
```
|
||||
|
||||
<<<<<<< HEAD
|
||||
**Примечания по реализации:** Этот механизм начальной загрузки словаря должен быть идемпотентным, то есть его можно безопасно запускать несколько раз без создания дубликатов. Его можно запускать при первой обработке документа в коллекции или как отдельный этап инициализации коллекции.
|
||||
|
||||
#### Происхождение подраздела (желательно)
|
||||
|
||||
Для более детальной информации о происхождении полезно записывать, из какой именно части фрагмента была извлечена тройка. Это позволяет:
|
||||
=======
|
||||
**Примечания по реализации:** Этот начальный набор словаря должен быть идемпотентным - его можно безопасно запускать несколько раз без создания дубликатов. Его можно запускать при первой обработке документа в коллекции или как отдельный этап инициализации коллекции.
|
||||
|
||||
#### Происхождение под-фрагментов (желательно)
|
||||
|
||||
Для более детальной информации о происхождении, было бы полезно записывать, из какой именно части фрагмента была извлечена тройка. Это позволяет:
|
||||
>>>>>>> 82edf2d (New md files from RunPod)
|
||||
|
||||
Выделять точный исходный текст в пользовательском интерфейсе
|
||||
Проверять точность извлечения по отношению к исходному тексту
|
||||
|
|
@ -435,11 +514,16 @@ subgraph:001 tg:sourceText "John Smith has worked at Acme Corp since 2019" .
|
|||
**Соображения по реализации:**
|
||||
|
||||
Извлечение на основе LLM может не всегда предоставлять информацию о позициях символов.
|
||||
<<<<<<< HEAD
|
||||
Можно запросить LLM, чтобы он возвращал исходное предложение/фразу вместе с извлеченными тройками.
|
||||
=======
|
||||
Можно запросить LLM, чтобы она возвращала исходное предложение/фразу вместе с извлеченными тройками.
|
||||
>>>>>>> 82edf2d (New md files from RunPod)
|
||||
Альтернативно, можно выполнить постобработку для сопоставления извлеченных сущностей с исходным текстом.
|
||||
Компромисс между сложностью извлечения и детализацией происхождения.
|
||||
Может быть проще реализовать с использованием структурированных методов извлечения, чем с использованием LLM для извлечения в свободной форме.
|
||||
|
||||
<<<<<<< HEAD
|
||||
Это обозначено как перспективное направление - сначала следует реализовать базовое отслеживание происхождения на уровне фрагментов, а отслеживание подфрагментов следует рассматривать как улучшение в будущем, если это будет возможно.
|
||||
|
||||
### Двухуровневая модель хранения
|
||||
|
|
@ -452,12 +536,30 @@ subgraph:001 tg:sourceText "John Smith has worked at Acme Corp since 2019" .
|
|||
| Граф знаний | Ребра "родитель-потомок" + метаданные | Запросы происхождения, атрибуция фактов |
|
||||
|
||||
Оба хранилища поддерживают одну и ту же структуру графа. Библиотекарь хранит содержимое, а граф хранит отношения и обеспечивает возможности запросов для обхода.
|
||||
=======
|
||||
Это обозначено как перспективное направление - сначала следует реализовать базовое отслеживание происхождения на уровне фрагментов, а отслеживание подфрагментов следует рассматривать как улучшение в будущем, если это возможно.
|
||||
|
||||
### Двухуровневая модель хранения
|
||||
|
||||
Граф происхождения строится постепенно по мере прохождения документов по конвейеру:
|
||||
|
||||
| Хранилище | Что хранится | Назначение |
|
||||
|-------|---------------|---------|
|
||||
| Библиотекарь | Содержимое документа + ссылки родитель-потомок | Извлечение содержимого, каскадное удаление |
|
||||
| Граф знаний | Ребра родитель-потомок + метаданные | Запросы происхождения, атрибуция фактов |
|
||||
|
||||
Оба хранилища поддерживают одну и ту же структуру графа. Библиотекарь хранит содержимое, а граф хранит отношения и обеспечивает возможность выполнения запросов для обхода графа.
|
||||
>>>>>>> 82edf2d (New md files from RunPod)
|
||||
|
||||
### Основные принципы проектирования
|
||||
|
||||
1. **Идентификатор документа как единица потока данных** - Процессоры передают идентификаторы, а не содержимое. Содержимое извлекается из библиотеки, когда это необходимо.
|
||||
|
||||
<<<<<<< HEAD
|
||||
2. **Отправка данных только в исходной точке** - Метаданные записываются в граф только один раз при начале обработки, а не повторяются далее по цепочке.
|
||||
=======
|
||||
2. **Однократная отправка данных в источнике** - Метаданные записываются в граф один раз при начале обработки, а не повторяются далее по цепочке.
|
||||
>>>>>>> 82edf2d (New md files from RunPod)
|
||||
|
||||
3. **Единый шаблон для процессоров** - Каждый процессор следует одному и тому же шаблону: прием/извлечение/создание/сохранение/отправка/передача.
|
||||
|
||||
|
|
@ -473,7 +575,11 @@ subgraph:001 tg:sourceText "John Smith has worked at Acme Corp since 2019" .
|
|||
|
||||
Инициирует обработку документа, отправляя идентификатор документа первому процессору.
|
||||
Нет подключения к хранилищу тройных данных - метаданные добавляются к результатам извлечения.
|
||||
<<<<<<< HEAD
|
||||
`add-child-document` создает одноуровневые ссылки "родитель-потомок".
|
||||
=======
|
||||
`add-child-document` создает одноуровневые ссылки родитель-потомок.
|
||||
>>>>>>> 82edf2d (New md files from RunPod)
|
||||
`list-children` возвращает только непосредственные потомки.
|
||||
|
||||
#### Необходимые изменения
|
||||
|
|
@ -486,7 +592,11 @@ subgraph:001 tg:sourceText "John Smith has worked at Acme Corp since 2019" .
|
|||
|
||||
**2. Словарь типов документов**
|
||||
|
||||
<<<<<<< HEAD
|
||||
Стандартизировать значения `document_type` для дочерних документов:
|
||||
=======
|
||||
Стандартизировать значения `document_type` для документов-потомков:
|
||||
>>>>>>> 82edf2d (New md files from RunPod)
|
||||
`source` - исходный загруженный документ.
|
||||
`page` - страница, извлеченная из источника (PDF и т.д.).
|
||||
`chunk` - текстовый фрагмент, полученный из страницы или источника.
|
||||
|
|
@ -498,7 +608,11 @@ subgraph:001 tg:sourceText "John Smith has worked at Acme Corp since 2019" .
|
|||
| Хранилище тройных данных | Новый исходящий канал - отправка ребер метаданных документа |
|
||||
| Инициация обработки | Отправка метаданных в граф перед передачей идентификатора документа |
|
||||
|
||||
<<<<<<< HEAD
|
||||
### Изменения в извлечении данных из PDF
|
||||
=======
|
||||
### Изменения в извлечении PDF
|
||||
>>>>>>> 82edf2d (New md files from RunPod)
|
||||
|
||||
#### Текущее состояние
|
||||
|
||||
|
|
@ -511,13 +625,22 @@ subgraph:001 tg:sourceText "John Smith has worked at Acme Corp since 2019" .
|
|||
|
||||
**1. Новый интерфейс: Клиент библиотеки**
|
||||
|
||||
<<<<<<< HEAD
|
||||
Извлечение данных из PDF должно сохранять каждую страницу как дочерний документ в библиотеке.
|
||||
Добавить клиент библиотеки в сервис извлечения данных из PDF.
|
||||
=======
|
||||
Извлечение PDF должно сохранять каждую страницу как документ-потомок в библиотеке.
|
||||
Добавить клиент библиотеки в сервис извлечения PDF.
|
||||
>>>>>>> 82edf2d (New md files from RunPod)
|
||||
Для каждой страницы: вызвать `add-child-document` с parent = идентификатор корневого документа.
|
||||
|
||||
**2. Новый интерфейс: Подключение к хранилищу тройных данных**
|
||||
|
||||
<<<<<<< HEAD
|
||||
Извлечение данных из PDF должно отправлять ребра "родитель-потомок" в граф знаний.
|
||||
=======
|
||||
Извлечение PDF должно отправлять ребра родитель-потомок в граф знаний.
|
||||
>>>>>>> 82edf2d (New md files from RunPod)
|
||||
Добавить клиент/публикатор хранилища тройных данных.
|
||||
Для каждой страницы: отправлять ребро, связывающее документ страницы с родительским документом.
|
||||
|
||||
|
|
@ -534,7 +657,11 @@ Chunker будет извлекать содержимое из хранилищ
|
|||
| Тройной магазин | Новый исходящий поток - генерация связей родитель-потомок |
|
||||
| Сообщение вывода | Изменение с содержимого на идентификатор документа |
|
||||
|
||||
<<<<<<< HEAD
|
||||
### Изменения Chunker
|
||||
=======
|
||||
### Изменения в Chunker
|
||||
>>>>>>> 82edf2d (New md files from RunPod)
|
||||
|
||||
#### Текущее состояние
|
||||
|
||||
|
|
@ -576,20 +703,32 @@ Chunker будет извлекать содержимое из хранилищ
|
|||
| Тройной магазин | Новый исходящий поток - генерация связей родитель-потомок |
|
||||
| Сообщение вывода | Изменение с содержимого только на идентификатор + содержимое |
|
||||
|
||||
<<<<<<< HEAD
|
||||
### Изменения Knowledge Extractor
|
||||
=======
|
||||
### Изменения в Knowledge Extractor
|
||||
>>>>>>> 82edf2d (New md files from RunPod)
|
||||
|
||||
#### Текущее состояние
|
||||
|
||||
Получает содержимое фрагмента
|
||||
Извлекает тройки и вложения
|
||||
<<<<<<< HEAD
|
||||
Передает в тройной магазин и хранилище вложений
|
||||
=======
|
||||
Отправляет в тройной магазин и хранилище вложений
|
||||
>>>>>>> 82edf2d (New md files from RunPod)
|
||||
`subjectOf` отношение указывает на верхний уровень документа (а не на фрагмент)
|
||||
|
||||
#### Необходимые изменения
|
||||
|
||||
**1. Изменение обработки входных данных**
|
||||
|
||||
<<<<<<< HEAD
|
||||
Получайте идентификатор фрагмента вместе с содержимым.
|
||||
=======
|
||||
Получайте идентификатор документа фрагмента вместе с содержимым.
|
||||
>>>>>>> 82edf2d (New md files from RunPod)
|
||||
Используйте идентификатор фрагмента для отслеживания происхождения (содержимое уже включено в соответствии с оптимизацией)
|
||||
|
||||
**2. Обновление отслеживания происхождения тройками**
|
||||
|
|
@ -610,7 +749,11 @@ Chunker будет извлекать содержимое из хранилищ
|
|||
|-----------|--------|
|
||||
| Сообщение ввода | Ожидается идентификатор фрагмента + содержимое (а не только содержимое) |
|
||||
| Тройной магазин | Используйте реификацию для отслеживания происхождения тройки → фрагмент |
|
||||
<<<<<<< HEAD
|
||||
| Отслеживание происхождения вложениями | Свяжите идентификатор сущности → идентификатор фрагмента |
|
||||
=======
|
||||
| Отслеживание происхождения вложений | Свяжите идентификатор сущности → идентификатор фрагмента |
|
||||
>>>>>>> 82edf2d (New md files from RunPod)
|
||||
|
||||
## Ссылки
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue