trustgraph/docs/tech-specs/structured-data-schemas.ru.md

148 lines
7.2 KiB
Markdown
Raw Normal View History

---
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. Создайте модульные тесты для проверки схемы.