4.7 KiB
4.7 KiB
ElsaWin → RAG: план
1. Источник данных
.wi файлы (основной контент)
| Язык | Кол-во .wi | Статей (XML-потоков) |
|---|---|---|
| en-GB | 1,716 | ~1M+ (в среднем 500-700 XML на .wi) |
| ru-RU | 956 | ~500K+ |
Каждый .wi — OLE2-контейнер, внутри от 1 до ~1500 XML-файлов.
Общий объём сырого XML — десятки GB.
Графика
SVG/PNG/JPG — ~400K файлов. Технически можно привязать как multimodal, но сложно.
2. Пайплайн извлечения
.wi (OLE2) → olefile → XML-потоки → парсинг SGML → чистый текст → чанки → векторная БД
Этапы:
- Извлечение:
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 файлов | ~1,716 |
| Всего XML-статей | ~1,000,000 - 1,500,000 |
| Средний размер статьи | ~30-70 KB XML |
| Сырой XML (en-GB) | ~30-50 GB |
| Чистый текст после парсинга | ~5-10 GB |
| Чанков по ~750 токенов | ~2,000,000 - 4,000,000 |
| Векторное хранилище (dim 1536) | ~15-30 GB |
| Время обработки (один поток) | ~10-30 часов |
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. Первый шаг (пилот)
- Взять один .wi файл (
rl/N.en-GB.000528929.wi) - Извлечь XML → спарсить → зачанковать
- Залить в ChromaDB
- Проверить качество ответов через Ollama
- Если ОК — масштабировать на все en-GB файлы
Оценка времени пилота: ~2-4 часа на извлечение + парсинг + тест. Полный пайплайн (en-GB): ~1-3 дня.