Spaces:
Runtime error
Runtime error
| 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: | |
| ... | |
| (Дальнейшую информацию о вложенных классах ты можешь уточнить у пользователя, если это будет нужно) |