Spaces:
Sleeping
Sleeping
description: | |
globs: | |
alwaysApply: true | |
# Project description | |
Данный проект представляет собой библиотеку, предоставляющую возможности для чанкинга и сборки | |
инъекций в промпт LLM для дальнейшего использования в RAG-системах. Основная логика описана в README.md и в architectures, если они не устарели. Ядро системы представляют классы LinkerEntity, Destructurer, EntityRepository, InjectionBuilder, ChunkingStrategy. | |
- LinkerEntity – основная сущность, от которой затем наследуются Chunk и DocumentAsEntity. Реализует триплетный подход, при котором один и тот же класс задаёт и сущности, и связи, и при этом сущности-ассоциации реализуются одним экземпляром, а не множеством. | |
- Destructurer – реализует логику разбиения документа на множество LinkerEntity, во многом делегируя работу различным ChunkingStrategy (но не всю). | |
- EntityRepository – интерфейс. Предполагается, что после извлечения всех сущностей посредством Destructurer пользователь библиотеки сохранит все свои сущности некоторым произвольным образом, например, в csv-файл или PostgreSQL. Библиотека не знает, как работать с пользовательскими хранилищами данных, поэтому пользователь должен сам написать реализацию EntityRepository для своего решения, и предоставить её в InjectionBuilder | |
- InjectionBuilder – сборщик промпт-инъекции. Принимает на вход отфильтрованный и (в отдельных случаях) оценённый некоторым скором набор сущностей, сортирует их, распределяет по документам и собирает всё в единый текст, пользуясь EntityRepository, чтобы достать связанные полезные сущности | |
Данная библиотека ориентируется на ParsedDocument из библиотеки ntr_fileparser, структура которого примерно соответствует следующему: | |
@dataclass | |
class ParsedDocument(ParsedStructure): | |
""" | |
Документ, полученный в результате парсинга. | |
""" | |
name: str = "" | |
type: str = "" | |
meta: ParsedMeta = field(default_factory=ParsedMeta) | |
paragraphs: list[ParsedTextBlock] = field(default_factory=list) | |
tables: list[ParsedTable] = field(default_factory=list) | |
images: list[ParsedImage] = field(default_factory=list) | |
formulas: list[ParsedFormula] = field(default_factory=list) | |
def to_string() -> str: | |
... | |
def to_dict() -> dict: | |
... | |
@dataclass | |
class ParsedTextBlock(DocumentElement): | |
""" | |
Текстовый блок документа. | |
""" | |
text: str = "" | |
style: TextStyle = field(default_factory=TextStyle) | |
anchors: list[str] = field(default_factory=list) # Список идентификаторов якорей (закладок) | |
links: list[str] = field(default_factory=list) # Список идентификаторов ссылок | |
# Технические метаданные о блоке | |
metadata: list[dict[str, Any]] = field(default_factory=list) # Для хранения технической информации | |
# Примечания и сноски к тексту | |
footnotes: list[dict[str, Any]] = field(default_factory=list) # Для хранения сносок | |
title_of_table: int | None = None | |
def to_string() -> str: | |
... | |
def to_dict() -> dict: | |
... | |
@dataclass | |
class ParsedTable(DocumentElement): | |
""" | |
Таблица из документа. | |
""" | |
title: str | None = None | |
note: str | None = None | |
classified_tags: list[TableTag] = field(default_factory=list) | |
index: list[str] = field(default_factory=list) | |
headers: list[ParsedRow] = field(default_factory=list) | |
subtables: list[ParsedSubtable] = field(default_factory=list) | |
table_style: dict[str, Any] = field(default_factory=dict) | |
title_index_in_paragraphs: int | None = None | |
def to_string() -> str: | |
... | |
def to_dict() -> dict: | |
... | |
(Дальнейшую информацию о вложенных классах ты можешь уточнить у пользователя, если это будет нужно) |