mirror of
https://github.com/trustgraph-ai/trustgraph.git
synced 2026-04-25 08:26:21 +02:00
148 lines
7.2 KiB
Markdown
148 lines
7.2 KiB
Markdown
|
|
---
|
|||
|
|
layout: default
|
|||
|
|
title: "Структурированные данные Pulsar: Изменения схемы"
|
|||
|
|
parent: "Russian (Beta)"
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# Структурированные данные Pulsar: Изменения схемы
|
|||
|
|
|
|||
|
|
> **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.
|
|||
|
|
|
|||
|
|
## Обзор
|
|||
|
|
|
|||
|
|
На основе спецификации `STRUCTURED_DATA.md`, этот документ предлагает необходимые дополнения и изменения схемы Pulsar для поддержки возможностей работы со структурированными данными в TrustGraph.
|
|||
|
|
|
|||
|
|
## Необходимые изменения схемы
|
|||
|
|
|
|||
|
|
### 1. Улучшения основной схемы
|
|||
|
|
|
|||
|
|
#### Улучшенное определение поля
|
|||
|
|
Сущность `Field` в файле `core/primitives.py` требует дополнительных свойств:
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
class Field(Record):
|
|||
|
|
name = String()
|
|||
|
|
type = String() # int, string, long, bool, float, double, timestamp
|
|||
|
|
size = Integer()
|
|||
|
|
primary = Boolean()
|
|||
|
|
description = String()
|
|||
|
|
# НОВЫЕ ПОЛЯ:
|
|||
|
|
required = Boolean() # Требуется ли поле
|
|||
|
|
enum_values = Array(String()) # Для полей типа enum
|
|||
|
|
indexed = Boolean() # Нужно ли индексировать поле
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. Новые схемы знаний
|
|||
|
|
|
|||
|
|
#### 2.1 Отправка структурированных данных
|
|||
|
|
Новый файл: `knowledge/structured.py`
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
from pulsar.schema import Record, String, Bytes, Map
|
|||
|
|
from ..core.metadata import Metadata
|
|||
|
|
|
|||
|
|
class StructuredDataSubmission(Record):
|
|||
|
|
metadata = Metadata()
|
|||
|
|
format = String() # "json", "csv", "xml"
|
|||
|
|
schema_name = String() # Ссылка на схему в конфигурации
|
|||
|
|
data = Bytes() # Сырые данные для обработки
|
|||
|
|
options = Map(String()) # Опции, специфичные для формата
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 2.2 Структурированный запрос
|
|||
|
|
|
|||
|
|
#### 3.1 Преобразование NLP в структурированный запрос
|
|||
|
|
Новый файл: `services/nlp_query.py`
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
from pulsar.schema import Record, String, Array, Map, Integer, Double
|
|||
|
|
from ..core.primitives import Error
|
|||
|
|
|
|||
|
|
class NLPToStructuredQueryRequest(Record):
|
|||
|
|
natural_language_query = String()
|
|||
|
|
max_results = Integer()
|
|||
|
|
context_hints = Map(String()) # Дополнительный контекст для генерации запроса
|
|||
|
|
|
|||
|
|
class NLPToStructuredQueryResponse(Record):
|
|||
|
|
error = Error()
|
|||
|
|
graphql_query = String() # Сгенерированный GraphQL запрос
|
|||
|
|
variables = Map(String()) # Переменные GraphQL, если есть
|
|||
|
|
detected_schemas = Array(String()) # Какие схемы затрагивает запрос
|
|||
|
|
confidence = Double()
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 3.2 Структурированный запрос
|
|||
|
|
Новый файл: `services/structured_query.py`
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
from pulsar.schema import Record, String, Map, Array
|
|||
|
|
from ..core.primitives import Error
|
|||
|
|
|
|||
|
|
class StructuredQueryRequest(Record):
|
|||
|
|
query = String() # GraphQL запрос
|
|||
|
|
variables = Map(String()) # Переменные GraphQL
|
|||
|
|
operation_name = String() # Дополнительное имя операции для документов с несколькими операциями
|
|||
|
|
|
|||
|
|
class StructuredQueryResponse(Record):
|
|||
|
|
error = Error()
|
|||
|
|
data = String() # JSON-кодированный формат данных GraphQL
|
|||
|
|
errors = Array(String()) # Ошибки GraphQL, если есть
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 2.2 Вывод извлечения объектов
|
|||
|
|
Новый файл: `knowledge/object.py`
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
from pulsar.schema import Record, String, Map, Double
|
|||
|
|
from ..core.metadata import Metadata
|
|||
|
|
|
|||
|
|
class ExtractedObject(Record):
|
|||
|
|
metadata = Metadata()
|
|||
|
|
schema_name = String() # Какая схема принадлежит этому объекту
|
|||
|
|
values = Map(String()) # Имя поля -> значение
|
|||
|
|
confidence = Double()
|
|||
|
|
source_span = String() # Текстовый фрагмент, где был найден объект
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. Улучшенные схемы знаний
|
|||
|
|
|
|||
|
|
#### 4.1 Улучшение встраивания объектов
|
|||
|
|
Обновите `knowledge/embeddings.py` для лучшей поддержки встраивания структурированных объектов:
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
class StructuredObjectEmbedding(Record):
|
|||
|
|
metadata = Metadata()
|
|||
|
|
vectors = Array(Array(Double()))
|
|||
|
|
schema_name = String()
|
|||
|
|
object_id = String() # Основной ключ
|
|||
|
|
field_embeddings = Map(Array(Double())) # Встраивание для каждого поля
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Точки интеграции
|
|||
|
|
|
|||
|
|
### Интеграция потоков
|
|||
|
|
|
|||
|
|
Схемы будут использоваться в новых модулях потоков:
|
|||
|
|
- `trustgraph-flow/trustgraph/decoding/structured` - Использует StructuredDataSubmission
|
|||
|
|
- `trustgraph-flow/trustgraph/query/nlp_query/cassandra` - Использует схемы запросов NLP
|
|||
|
|
- `trustgraph-flow/trustgraph/query/objects/cassandra` - Использует схемы структурированных запросов
|
|||
|
|
- `trustgraph-flow/trustgraph/extract/object/row/` - Потребляет Chunk, производит ExtractedObject
|
|||
|
|
- `trustgraph-flow/trustgraph/storage/objects/cassandra` - Использует схему Rows
|
|||
|
|
- `trustgraph-flow/trustgraph/embeddings/object_embeddings/qdrant` - Использует схемы встраивания объектов
|
|||
|
|
|
|||
|
|
## Примечания по реализации
|
|||
|
|
|
|||
|
|
1. **Версионирование схемы**: Рассмотрите возможность добавления поля `version` к схеме RowSchema для поддержки будущих миграций.
|
|||
|
|
2. **Система типов**: `Field.type` должна поддерживать все родные типы Cassandra.
|
|||
|
|
3. **Операции пакета**: Большинство сервисов должны поддерживать как одиночные, так и пакетные операции.
|
|||
|
|
4. **Обработка ошибок**: Необходимо обеспечить единообразное сообщение об ошибках во всех новых сервисах.
|
|||
|
|
5. **Совместимость с существующими схемами**: Существующие схемы остаются неизменными, за исключением незначительных улучшений поля.
|
|||
|
|
|
|||
|
|
## Следующие шаги
|
|||
|
|
|
|||
|
|
1. Реализуйте файлы схем в новой структуре.
|
|||
|
|
2. Обновите существующие сервисы для распознавания новых типов схем.
|
|||
|
|
3. Реализуйте модули потоков, использующие эти схемы.
|
|||
|
|
4. Добавьте конечные точки gateway/rev-gateway для новых сервисов.
|
|||
|
|
5. Создайте модульные тесты для проверки схемы.
|