# ElsaWin → RAG: план --- ## 1. Источник данных ### .wi файлы (основной контент) | Язык | Кол-во .wi | Размер на диске | |---|---|---| | **en-GB** | **1,716** | **706 MB** | | de-DE | 1,588 | 688 MB | | ru-RU | 956 | 588 MB | Каждый `.wi` — OLE2-контейнер, внутри XML-файлы (от 1 до ~1500 на .wi). ### Графика SVG/PNG/JPG — ~400K файлов. Технически можно привязать как multimodal, но сложно. --- ## 2. Пайплайн извлечения ``` .wi (OLE2) → olefile → XML-потоки → парсинг SGML → чистый текст → чанки → векторная БД ``` ### Этапы: 1. **Извлечение**: `olefile` — обкатано, работает 2. **Парсинг**: SGML → text (кастомный парсер на Python, т.к. разметка своя: ``, ``, ``, ``, etc.) 3. **Чистка**: удалить мусор (якоря ``, ``-теги, служебные атрибуты) 4. **Чанкинг**: - По `` (заголовкам) — иерархические чанки - Размер: ~500-1000 токенов - Перекрытие: ~100 токенов 5. **Embedding**: `text-embedding-3-small` (OpenAI) или `bge-m3` (локально) 6. **Векторная БД**: ChromaDB (проще всего) или Qdrant (для прода) --- ## 3. Объёмы (en-GB, реальные замеры) | Этап | Размер | |---|---| | **Сырые .wi файлы** (на диске) | **~706 MB** | | XML-потоки внутри (распаковано) | ~10-15 GB | | Чистый текст после парсинга | ~3-5 GB | | Чанки (текст) | ~2-3 GB | | **Векторная БД (ChromaDB)** | **~10-15 GB** | | **Итого на диске** | **~15-20 GB** | ### Расходы | Статья | Бесплатно (локально) | Через API | |---|---|---| | Embedding | **$0** (bge-m3 на 3060) | ~$30 (OpenAI) | | LLM для ответов | **$0** (Ollama) | ~$7 / 10K запросов | | Векторная БД | **$0** (ChromaDB) | — | | **Итого** | **$0** (+ электричество) | ~$30 + операционка | ### Время на RTX 3060 12GB | Этап | Время | |---|---| | Парсинг + чанкинг (1.5 млн XML) | ~1-2 часа | | Embedding (bge-m3, 2 млн чанков) | ~3-5 часов | | Запись в БД | ~30 мин | | **Итого en-GB** | **~5-7 часов** | --- ## 4. Архитектура RAG ``` User → Query → Embedding → Поиск по векторной БД → Топ-K чанков → LLM (с контекстом) → Ответ ``` ### Варианты LLM: | Вариант | Плюсы | Минусы | |---|---|---| | **OpenAI GPT-4o** | Качество, скорость | Дорого, нужен API-ключ | | **Ollama (локально)** | Бесплатно, privacy | Нужна GPU, медленнее | | **Claude API** | Большой контекст | Дорого | ### Стратегия поиска: - **Гибридный**: векторный + keyword (BM25) — лучше для технических терминов - **reranking** по `cross-encoder` для топ-50 результатов --- ## 5. Варианты реализации ### A) Minimal Viable - Только en-GB - ChromaDB на диске - Ollama + llama3 локально - CLI или простой веб-интерфейс (Streamlit/Gradio) ### B) Полноценный - en-GB + ru-RU (билингва) - Qdrant с гибридным поиском - FastAPI бэкенд + React фронтенд - Автообновление при изменении данных ### C) Multimodal - Всё из B - + привязка SVG/PNG иллюстраций к чанкам - Поддержка вопросов с картинками --- ## 6. Риски | Риск | Решение | |---|---| | SGML-парсинг сложнее чем кажется | Написать итеративно, тестировать на разных .wi | | Объём данных больше оценки | Сначала пилот на одном разделе (igg/) | | Качество Russian перевода низкое | Использовать en-GB как primary, ru-RU как fallback | | Производительность поиска на больших данных | Индексация + гибридный поиск | | Юридические ограничения (VW/Audi data) | Использовать только локально | --- ## 7. Первый шаг (пилот) 1. Взять **один .wi файл** (`rl/N.en-GB.000528929.wi`) 2. Извлечь XML → спарсить → зачанковать 3. Залить в ChromaDB 4. Проверить качество ответов через Ollama 5. Если ОК — масштабировать на все en-GB файлы **Оценка времени пилота:** ~2-4 часа на извлечение + парсинг + тест. **Полный пайплайн (en-GB):** ~1-3 дня.