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. Пайплайн извлечения
Этапы:
- Извлечение:
olefile — обкатано, работает
- Парсинг: SGML → text (кастомный парсер на Python, т.к. разметка своя:
<h-kap>, <titel>, <tabelle>, <aufzaehlg>, etc.)
- Чистка: удалить мусор (якоря
<qv-anker>, <g>-теги, служебные атрибуты)
- Чанкинг:
- По
<titel> (заголовкам) — иерархические чанки
- Размер: ~500-1000 токенов
- Перекрытие: ~100 токенов
- Embedding:
text-embedding-3-small (OpenAI) или bge-m3 (локально)
- Векторная БД: 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
Варианты 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. Первый шаг (пилот)
- Взять один .wi файл (
rl/N.en-GB.000528929.wi)
- Извлечь XML → спарсить → зачанковать
- Залить в ChromaDB
- Проверить качество ответов через Ollama
- Если ОК — масштабировать на все en-GB файлы
Оценка времени пилота: ~2-4 часа на извлечение + парсинг + тест.
Полный пайплайн (en-GB): ~1-3 дня.