Spaces:
Sleeping
Sleeping
File size: 10,296 Bytes
050ac59 41ab11f 050ac59 5099a0a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 |
---
title: RAG AIEXP 0
emoji: 🔥
colorFrom: blue
colorTo: gray
sdk: gradio
sdk_version: 5.42.0
app_file: app.py
pinned: false
---
# AIEXP — RAG pipeline for normative documents (README)
Кратко: репозиторий содержит конвейер загрузки и подготовки нормативных документов (JSON/CSV/таблицы/изображения), нормализации терминов (марки стали, обозначения соединений), чанкинга, построения векторного индекса и Gradio UI для семантического поиска и ответов.
---
## Содержание README
1. Требования
2. Быстрая установка
3. Переменные окружения / конфигурация
4. Структура данных / куда класть новые документы
5. Процесс подготовки данных (что делает pipeline)
6. Параметры чанкинга и частые ошибки
7. Построение индекса и создание query engine
8. Запуск приложения (локально / Windows)
9. Отладка и полезные утилиты
10. Как добавить новые документы
11. Частые ошибки и их исправления
---
## 1) Требования
- Python 3.10+
- pip, git
- Доступ к Hugging Face dataset (repo_id) для загрузки исходных JSON/CSV
- API-ключи (для LLM / embeddings) при использовании удалённых моделей
Пример зависимостей (создайте requirements.txt):
- llama-index (соответствующая версия)
- gradio>=5
- sentence-transformers
- huggingface-hub
- sentencepiece (если нужно)
- pandas
- cross-encoder
- другие: см. ваш проектный requirements
---
## 2) Быстрая установка
Windows PowerShell:
```powershell
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
```
Bash / Linux:
```bash
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
```
---
## 3) Переменные окружения / конфигурация
Отредактируйте `config.py` или установите переменные окружения:
PowerShell:
```powershell
$env:GOOGLE_API_KEY="your_google_api_key"
$env:OPENAI_API_KEY="your_openai_api_key"
$env:HF_TOKEN="your_hf_token"
```
Bash:
```bash
export GOOGLE_API_KEY="your_google_api_key"
export OPENAI_API_KEY="your_openai_api_key"
export HF_TOKEN="your_hf_token"
```
Основные настройки в `config.py`:
- CHUNK_SIZE (токены/символы для текстов)
- CHUNK_OVERLAP
- MAX_CHARS_TABLE / MAX_ROWS_TABLE — параметры чанкинга таблиц
- HF_REPO_ID, TABLE_DATA_DIR, JSON_FILES_DIR, IMAGE_DATA_DIR
---
## 4) Структура данных и форматы
AIEXP_RAG/
│── app.py # Main entry point (Gradio)
│── requirements.txt # Dependencies
│── data/ # Documents, tables, images
│── notebooks/ # Preprocessing notebooks
│── src/ # Source code (preprocess + rag)
- Текстовые документы: JSON (с полями document_metadata, sections/subsections)
- Таблицы: JSON (sheets → headers, data, table_number, table_title, section, sheet_name)
- Изображения: CSV (строки с полями: Обозначение документа, № Изображения, Название изображения, Описание)
При загрузке pipeline:
- `load_json_documents` — парсит текстовые разделы
- `load_table_documents` — парсит таблицы и запускает `chunk_table_by_content`
- `load_image_documents` — создает описательные чанки
Если вы добавляете новые данные на HF, положите их в соответствующие папки (см. `config.py`).
---
## 5) Что делает pipeline (пошагово)
1. Загрузка файлов с HF (JSON/ZIP/CSV)
2. Извлечение разделов документа (text)
3. Нормализация:
- `normalize_text` — нормализует типы соединений (C/С)
- `normalize_steel_designations` — нормализует марки стали (латиница ↔ кириллица)
4. Чанкинг:
- Текст: SentenceSplitter (CHUNK_SIZE, CHUNK_OVERLAP)
- Таблицы: собираются строки в чанки по правилам (header + строки) до MAX_CHARS_TABLE или MAX_ROWS_TABLE
5. Метаданные: минимальный набор (type, document_id, table_number, table_title, section, connection_type)
6. Построение VectorStoreIndex из всех чанков
---
## 6) Параметры чанкинга и частые ошибки
- Metadata length > chunk size:
- Ошибка: ValueError: Metadata length (...) is longer than chunk size (1024).
- Решение: увеличить CHUNK_SIZE или уменьшить размер поля metadata (не класть большие тексты в metadata).
- Если строки таблиц очень длинные, уменьшение MAX_CHARS_TABLE не даст эффекта — проверяйте длины отдельных строк.
- Рекомендация: комбинировать ограничения по символам и по числу строк (MAX_CHARS_TABLE и MAX_ROWS_TABLE).
---
## 7) Построение индекса и query engine
- create_vector_index(documents) — строит VectorStoreIndex и логирует статистику по типам соединений и таблицам.
- create_query_engine(vector_index, vector_top_k, bm25_top_k, similarity_cutoff, hybrid_top_k) — конфигурируемый гибридный retriever (Vector + BM25 + QueryFusion).
- Ререйтер `rerank_nodes(query, nodes, reranker, top_k, min_score_threshold)` — использует CrossEncoder для финального ранжирования.
Советы:
- Нормализуйте document_id (удалите лишние пробелы, суффиксы года) для точного фильтрования по документу.
- При поиске по типам соединений (C-25 / С-25) всегда нормализуйте символ 'C'/'С' в данных и в запросе.
---
## 8) Запуск приложения (Gradio)
Локально:
```bash
python app.py
```
Важно:
- Вызов `gr.api(...)` должен быть внутри `with gr.Blocks(...) as demo:` блока.
- Функции, которые вы регистрируете как Gradio API, должны иметь полные type-hints (например `def retrieve_chunks(question: str, top_k: int = 20) -> list:`).
---
## 9) Отладка и полезные утилиты
- Логирование: используйте `log_message(...)` — логирование подробностей в stdout/файл.
- Функции для отладки:
- `debug_search_tables(vector_index, search_term="С-25")` — найдет таблицы по вхождению термина.
- В `create_query_engine` можно добавить дополнительный перечисляющий лог (поиск по 'C-25' / 'С-25').
- Частые проверки:
- Сколько чанков получилось: итог в `load_all_documents`.
- Показать примерные превью чанков при отладке (первые 200 символов).
- Дедупликация: `deduplicate_nodes(nodes)` — как формируются идентификаторы.
---
## 10) Как добавить новые документы
1. Подготовьте JSON/CSV в формате, согласованном с pipeline.
2. Загрузите в HF dataset (REPO_ID указанный в config.py) в соответствующую директорию:
- JSON → `JSON_FILES_DIR`
- Таблицы → `TABLE_DATA_DIR`
- Изображения (CSV) → `IMAGE_DATA_DIR`
3. Обновите config (если новые директории)
4. Перезапустите `app.py` — или только шаги подготовки:
- Запустите `load_all_documents(...)` и формирование индекса заново (см. app.initialize_system).
---
## 11) Частые ошибки и быстрые исправления
- Gradio: "Cannot call api() outside of a gradio.Blocks context." → переместить `gr.api(...)` внутрь блока.
- Gradio: "API endpoints must have type hints." → добавить type-hints в сигнатуру.
- Pydantic / Document immutability: "can't set attribute 'text'" → не изменяйте `doc.text` напрямую, создавайте новый `Document(text=..., metadata=doc.metadata)`.
- Метаданные слишком большие → уменьшить metadata или увеличить CHUNK_SIZE.
- Кириллическая/латинская буква 'C' mismatch → нормализуйте и в запросе, и в данных (функция `normalize_text` / `normalize_connection_type`).
---
## Примеры команд (Windows)
Установка env vars (PowerShell):
```powershell
$env:HF_TOKEN="hf_xxx"
$env:GOOGLE_API_KEY="xxx"
$env:OPENAI_API_KEY="xxx"
python app.py
```
---
## Консистентность метаданных (важно)
- Храните в metadata минимально нужные поля:
- type, document_id, table_number, table_title, section, connection_type, chunk_id/row_start/row_end (при табличных чанках)
- Избегайте кладения больших текстов в metadata.
---
## Testing on Huggingface
https://mrsimple01-rag-aiexp-01.hf.space/ |