База знаний с RAG: как LLM меняют подход к работе с информацией

Вводная часть
1. Что такое RAG?
RAG (Retrieval-Augmented Generation) – это метод генерации ответа, при котором LLM получает внешний контекст (из базы знаний), а не отвечает "из головы".

2. Почему RAG дает наиболее точный ответ, который гарантированно не содержит выдуманных фактов?
Потому что LLM не "угадывает" ответ, а генерирует его строго на основе фактов, найденных через поиск по смыслу из базы знаний.
Метод совмещает:
- силу поиска по смыслу векторной БД (Qdrant),
- точность формулировок LLM (Mistral).
Это устраняет "галлюцинации" и даёт достоверный результат.
    

Описание эксперимента
В ходе эксперимента будет один том же запрос к разным источникам:
- запрос к БД Qdrant
- запрос к RAG (БД Qdrant + LLM Mistral)
- только к LLM Mistral 


Вопрос для поиска ответа 
Как создать dblink с использованием FOREIGN DATA WRAPPER 
    примечание: правильный ответ в файлах: 03.txt и 13.txt (наилучшее совпадение)


Архитектура стенда для исследования 
1. Qdrant — векторная база данных
2. SentenceTransformer — компонент ИИ (эмбеддер), который преобразует текст в вектора смыслов. EMBEDDING MODEL: sentence-transformers/paraphrase-multilingual-mpnet-base-v2
3. Mistral — локальная большая языковая модель (LLM)
4. ./texts - каталог с небольшими записками (база знаний)
5. Web-интерфейс LLM Mistral
 

Список файлов 
01.txt;  «Архитектура PostgreSQL: основные компоненты и процессы».
02.txt;  «Расширение PostgreSQL pgsentinel».
03.txt;  «Функциональность FOREIGN DATA WRAPPER для БД MSSQL».
04.txt;  «Утилита формирования диагностического отчета diag».
05.txt;  «Блокировки в PostgreSQL».
06.txt;  «Классы ожиданий в PostgreSQL».
07.txt;  «Ограничения (Constraints) в PostgreSQL».
08.txt;  «Введение в архитетуру PostgreSQL».
09.txt;  «Расширение pg_hint_plan».
10.txt;  «Расширение pg_pathman».
11.txt;  «Секционированные таблиц в PostgreSQL».
12.txt;  «Индексы в PostgreSQL».
13.txt;  «Использование postgres_fdw для dblink между базами PostgreSQL»
14.txt;  «Настройка производительности PostgreSQL»
 

План работ 
Шаг 1. Библиотека SentenceTransformer обрабатывает все тестовые файлы входного каталога.
            Содержимое каждого файлов преобразуется в вектор смысла.
            Формируется коллекция для быстрого поиска по смыслу. 
Шаг 2. Выполнение запроса в базе данных Qdrant, сформированного из вопроса Пользователя.
             Qdrant возвращает наиболее близкие по смыслу фразы. 
Шаг 3. Повторяется выполнение шага 2, найденные фразы объединяются в prompt и направляются в LLM (Mistral).
            Mistral генерирует ответ. Ответ основывается только на найденном контексте. 
Шаг 4. Пользователь задает вопрос и получить ответ напрямую к Mistral.
            Ответ основывается на всей ранее обученной модели LLM. 
Шаг 5. Заключительно слово

Шаг 1. Библиотека SentenceTransformer обрабатывает все тестовые файлы входного каталога. Содержимое каждого файла преобразуется в вектор смыслового представления с помощью модели.

Формируется коллекция для быстрого поиска по смыслу. (см. Рис. 1 приложения):
1. Cчитывается каждый txt-файл целиком, далее передаётся в модель paraphrase-multilingual-mpnet-base-v2, на выходе получаем один вектор размером 768, представляющий общий смысл текста. 
2. Каждый такой вектор - это точка в 768-мерном пространстве, где близкие по смыслу тексты располагаются рядом. 
3. Если файл слишком длинный (более ~1000 слов), модель обрезает его до первых ~512 токенов - часть смысла может быть потеряна.
4. Вектор сохраняется в Qdrant вместе с исходным текстом и именем файла. 

Эти два предложения будут иметь почти идентичные векторы:
- «Как создать подключение между двумя базами PostgreSQL?»
- «Какие есть способы соединить две PostgreSQL базы?»
А следующее предложение будет отдалено от них в векторном пространстве:
- «Вчера было солнечно и жарко

Модель paraphrase-multilingual-mpnet-base-v2:
- мультиязычная, обучена на более чем 50 языках.
- области применения: сравнение смысловой близости, семантический поиск, кластеризация.
- оптимальный размер обрабатываемого текста: 50–400 слов.
- максимальный рекомендуемый размер: до 1000 слов (≈ 512 токенов), чтобы сохранить смысловую полноту.
- если необходимо обработать большие тексты - рекомендуется разбивать их на абзацы или предложения и индексировать по частям.
Существуют и другие эмбеддеры: англоязычные, узкоспециализированные (для научных текстов, диалогов, кода).

Существуют разные векторные БД:
- Qdrant; Rust + gRPC, поддержка фильтрации, payload, fast
- Pinecone; Облачная, высокоуровневая, простая в использовании
- Weaviate; Встроенный GraphQL + автогенерация embedding'ов
- FAISS (Meta); Быстрая, локальная, но без поддержки метаданных
- Milvus; Распределённая, с масштабируемостью и SQL-интерфейсом
- Chroma; Python-native, simple API, идеально для RAG

Шаг 2. Выполнение запроса в базе данных Qdrant, сформированного из вопроса Пользователя. Qdrant возвращает наиболее близкие по смыслу фразы. (см. Рис. 2 приложения)

Реализуется семантический поиск следующим образом:
1. Пользователь вводит вопрос на естественном языке. Пример: «Как создать dblink между двумя базами PostgreSQL?»
2. Модель SentenceTransformer преобразует вопрос в вектор, отражающий его смысл. 
3. Qdrant получает этот вектор и выполняет поиск по коллекции, где ранее были сохранены векторы для каждого файла. Сравнение происходит по косинусному расстоянию — чем ближе вектора, тем выше score.
4. Фильтрация результатов - отбираются только те фрагменты, у которых `score` выше заданного порога (пример: score ≥ 0.44).
5. Отображение результатов:
- для каждого подходящего фрагмента выводится имя исходного файла, значение score, и первые строки текста.
- в конце выводится агрегированный список файлов, отсортированный по убыванию score.

Score означает:
- score — численная метрика смыслового сходства между вектором запроса и вектором фрагмента текста.
- диапазон: от 0 (нет сходства) до 1 (полное совпадение).
- значения score ≥ 0.7 обычно указывают на высокую релевантность.
 
Краткий вывод:
- на шаге 2 реализуется поиск по смыслу, а не по ключевым словам. 
- Qdrant находит и возвращает фрагменты текста, наиболее подходящие по содержанию к заданному вопросу.
- этот шаг позволяет быстро ориентироваться в больших объёмах неструктурированной информации, находя нужное без точного совпадения слов.


Шаг 3. Повторяется выполнение шага 2, найденные фразы объединяются в prompt и направляются в LLM (Mistral). Модель генерирует числовую оценку релевантности на основе содержимого фрагмента. (см. Рис. 3 приложения)            

Реализуется расширенный семантический анализ найденных фрагментов 
следующим образом:
1. Пользователь вводит вопрос, аналогично шагу 2.
2. Модель SentenceTransformer снова преобразует вопрос в вектор размерности 768.    3. Выполняется поиск в Qdrant - возвращаются фрагменты с наибольшим смысловым сходством (score ≥ 0.3).
4. Для каждого фрагмента текста генерируется prompt — текстовое задание для LLM, включающее:
   - исходный вопрос пользователя,
   - фрагмент текста, найденный в Qdrant,
   - указание LLM: «Оцени, насколько данный фрагмент помогает ответить на вопрос. Ответь числом от 0% до 100%.»
5. Каждый prompt передаётся в локальную LLM Mistral 7B.
        Prompt не должен превысить лимит токенов модели (обычно ~8192 токена, ≈ 24–28 тыс. символов), модель генерирует короткий числовой ответ в процентах
6. Результаты отображаются по каждому фрагменту:
- имя файла,
- score от Qdrant (смысловое сходство),
- оценка от LLM (насколько данный фрагмент полезен для ответа на вопрос).
 
Ответ от Mistral:
   - модель не отвечает на вопрос прямо, а оценивает релевантность конкретного фрагмента - насколько он может быть полезен для ответа.
   - оценка в процентах позволяет отсечь слабые фрагменты и отобрать только те, что действительно содержат ответ.
 
Профит:
- Повышение точности семантического поиска — не только по векторному сходству (Qdrant), но и с участием LLM-эксперта.
- Ранжирование по смыслу, основанное на интерпретации контекста моделью.

Заключение:
LLM (Mistral 7B) используется как оценщик качества найденных фрагментов, обеспечивая более точный отбор информации. 
Результат — оценка релевантности, позволяющая ранжировать фрагменты с учётом как сходства по эмбеддингу, так и смысловой насыщенности контекста.



Шаг 4. Пользователь задаёт вопрос и получает ответ напрямую от модели Mistral через веб-интерфейс (API). Ответ формируется исключительно на основе знаний, полученных моделью в процессе предварительного обучения.

Общий процесс:
1. Пользователь вручную открывает веб-интерфейс Mistral в браузере и вводит свой вопрос в текстовое поле. 
    Пример: «Как создать dblink между двумя базами PostgreSQL?»
2. Вопрос обрабатывается моделью mistral-small-latest, размещённой на сервере Mistral.ai. 
    Модель использует свой предобученный контекст, внутренние знания, полученные на большом массиве текстов.
3. Ответ формируется в реальном времени, на основе языковых закономерностей и знаний, содержащихся в модели. 
    Результат — связный, полный и осмысленный ответ, не зависящий от локальной базы или внешнего источника.
 
Шаг 4 позволяет:
    - Проверить, насколько полно и корректно LLM отвечает без доступа к базе знаний.
    - Сравнить качество zero-shot-ответа с результатами шагов 2 и 3, где использовался дополнительный контекст.
    - Выявить границы применения чистой модели без retrieval-этапа.
 
Шаг 4 демонстрирует режим работы языковой модели Mistral в условиях полной автономии. 
Пользователь получает ответ, сформулированный исключительно на основе внутренней памяти модели, без доступа к локальной информации. 
Этот шаг является ключевым для оценки качества ответов LLM в изолированном режиме и сравнения с результатами на базе retrieval-augmented generation (RAG).

 

Шаг 5. Заключительное слово
В рамках эксперимента были протестированы три режима генерации ответов:
1. Qdrant-only:
- cистема возвращает фрагменты исходных текстов, наиболее близкие по смыслу к пользовательскому запросу. 
- пользователь самостоятельно анализирует эти фрагменты и находит ответ. 
- этот режим не использует генерацию, но даёт высокую прозрачность и контроль над источником информации.
2. RAG (Retrieval-Augmented Generation):
- найденные в Qdrant фрагменты объединяются в единый контекст, который передаётся в языковую модель Mistral 7B. 
   – модель получает строгую инструкцию использовать только предоставленный контекст для генерации ответа. 
   – это позволяет минимизировать риск искажений и получить точный, фактологически обоснованный результат. 
   – данный режим показал наивысшую точность и достоверность.
3. LLM-only:
- запрос направляется напрямую в языковую модель (через веб-интерфейс Mistral), без использования внешнего контекста. 
- ответ строится исключительно на базе знаний, полученных в ходе обучения. 
- такой режим демонстрирует высокую связность, но подвержен риску генерации недостоверной информации (галлюцинаций), особенно при недостатке специфических данных в обучающей выборке.
 
Важность выбора модели для векторизации:
- ключевым компонентом всей системы является эмбеддер - модель, преобразующая тексты в смысловые векторы. 
- правильно подобранный эмбеддер обеспечивает точное смысловое сопоставление запросов и документов, что критично для качества поиска.
- неподходящая модель векторизации может привести к снижению релевантности, и, как следствие, к ухудшению итогового ответа даже при использовании LLM.
 
Наиболее надёжным и точным решением является система класса RAG, сочетающая:
- эффективность семантического поиска по базе знаний (через Qdrant и SentenceTransformer),
- и генеративные возможности LLM (Mistral 7B), строго ограниченной внешним контекстом.
 
Такой подход позволяет использовать проверенную информацию из базы знаний, устраняя домыслы и повышая доверие к результату. 
RAG-модель в этом эксперименте доказала свою пригодность для задач, требующих интерпретируемых, обоснованных и достоверных ответов.


Приложение

Рисунок 1. Пример отчета работы скриптов удаления и создания коллекции векторов файлов


Итого: загружено в Qdrant 14 файлов за 0.06 минут


Рисунок 2. Пример отчета работы скрипты скрипта поиска по БД Qdrant


Итого: Qdrant в ответ на запрос вернул 8 файлов, которые с разным Score подходят под наш запрос


 Рисунок 3. Пример отчета работы скрипты скрипта поиска по RAG (Qdrant+LLM Mistral)


Итого: LLM Mistral в первом случае с 80% точной подтвердила релевантность ответа, а в двух последних ответах – не подтвердила.

 


No comments:

Post a Comment