⚔️🤖
Как собрать локальный RAG: мультимодальная модель + BGE-M3 + TurboVecВ качестве основной можно выбрать
любую локальную мультимодальную LLM, способную работать с текстом и изображениями. Главное – чтобы она поддерживалась выбранной средой запуска, например
Ollama, llama.cpp или LM Studio.
📌
1. Выбираем основную модельНапример, в Ollama команда запуска будет зависеть от выбранной модели:
ollama run <название-модели>
Если позднее появится более подходящая модель, её можно заменить без повторного построения всей поисковой системы.
🔻
2. Устанавливаем BGE-M3Для поиска по документам используется отдельная модель:
ollama pull bge-m3
BGE-M3 не пишет ответы. Её задача – определить смысл каждого фрагмента документа и пользовательского запроса, чтобы затем найти материалы, максимально близкие по содержанию. Это позволяет искать сведения даже тогда, когда формулировки в вопросе и документе различаются.
🔻
3. Устанавливаем TurboVecСоздаём рабочую среду Python.
Устанавливаем библиотеки:
pip install turbovec numpy pymupdf ollama
TurboVec будет использоваться как компактный локальный поисковый индекс.
Отдельно поднимать сервер векторной БД для базовой системы не требуется.
🔻
4. Загружаем документыНапример, создаём папку:
C:\Projects\local-rag\documents
В неё можно помещать:
report.pdf
tender.pdf
article.txt
notes.mdКаждый документ разбивается на небольшие смысловые фрагменты. Это необходимо, чтобы позже система могла не просто написать ответ, а показать,
откуда конкретно получены сведения.
🔻
5. Создаём поисковую базуТекстовые фрагменты передаются BGE-M3. После этого полученные векторы сохраняются через TurboVec. В результате создаётся локальный индекс всей коллекции.
🔻
6. Что происходит после вопроса пользователяДопустим, в архиве находятся тысячи страниц документов, а запрос выглядит так:
«Какие компании в сентябре получили контракты на производство беспилотных систем?»Сначала BGE-M3 анализирует смысл вопроса.
TurboVec просматривает индекс и выбирает несколько фрагментов, наиболее близких по содержанию. Например, из 100 тыс. фрагментов могут быть отобраны только материалы, где говорится о конкретных компаниях, контрактах, суммах и сроках поставок. После этого именно эти материалы передаются локальной языковой модели. Она сопоставляет данные и готовит нормальный ответ.Так, модель работает не со всем архивом сразу, а только с заранее отобранными материалами.
🔻
7. Как обрабатываются сканыЕсли PDF содержит обычный текст, его лучше извлекать напрямую через PyMuPDF или другой парсер.
Если это отсканированный документ, страница преобразуется в изображение:
page_001.png
и отправляется основной мультимодальной модели.
После распознавания полученный текст индексируется точно так же, как обычный документ.
Это важно:
OCR и RAG являются отдельными этапами.
Мультимодальная модель сначала превращает скан в пригодный для поиска текст, а затем BGE-M3 и TurboVec включают этот материал в общую базу.
🔵
Главное преимущество такой архитектуры –
модель не привязана к базе документов.Сегодня можно поставить сравнительно небольшую 8–12B модель.
На более мощной видеокарте – перейти на 27B или 32B.
Позднее – заменить её на новую модель с лучшим OCR, более длинным контекстом или более качественным анализом. При этом
BGE-M3, TurboVec и уже созданный индекс документов можно сохранить, если формат эмбеддингов не меняется.