Этот проект реализует простую систему Retrieval-Augmented Generation (RAG) — архитектуру, сочетающую поиск релевантной информации и генерацию ответов с помощью языковой модели.
Данная реализация позволяет:
- Загружать и обрабатывать текстовые документы
- Преобразовывать текст в векторные представления (эмбеддинги)
- Хранить векторы в локальной базе знаний
- Находить наиболее релевантные фрагменты по запросу
- Генерировать ответы на вопросы, опираясь на найденные фрагменты
Проект состоит из нескольких компонентов:
DataPreparation— подготовка документов: разбиение на чанки, получение эмбеддингов и сохранение в базу знаний.SearchSystem— поиск наиболее похожих фрагментов к запросу с использованием косинусного сходства.AnswerGenerator— генерация ответа с помощью LLM, используя вопрос и найденные фрагменты.RAGSystem— основной класс, объединяющий поиск и генерацию.
- Python 3.8+
langchain_ollama— для локальной генерации ответовnumpy— для работы с векторамиsentence_transformers— преобразования в векторы целых предложения/абзацы с целью их дальнейшей обработки
Для локального запуска проекта предусмотрен docker-compose:
services:
ollama:
image: ollama/ollama
container_name: ollama
ports:
- "11434:11434"
volumes:
- ./ollama:/root/.ollama
entrypoint: >
/bin/sh -c "
ollama serve &
sleep 2 &&
ollama pull gemma3:12b &&
wait
"
restart: unless-stoppedПосле запуска нужно немного подождать до загрузки модели.
Можно заменить модель на другую.
После этого можно запускать:
python main.pyПример вывода:
Разбиваем документы на фрагменты...
Создано 1 фрагментов
Создаём векторные представления...
Создано 1 векторов размерности 384
Создано 2 фрагментов
Создаём векторные представления...
Создано 2 векторов размерности 384
Создано 3 фрагментов
Создаём векторные представления...
Создано 3 векторов размерности 384
База знаний сохранена в файлы knowledge_base_*
Загружена база знаний: 3 фрагментов
Обрабатываем вопрос: Кто создал Python?
Найденные фрагменты:
1. Сходство 62%: Python – высокоуровневый язык программирования общего назначения. Создан в 1991 году Гвидо ван Россу...
2. Сходство 41%: RAG, или генерация с дополненной выборкой, – это архитектурный подход в обработке естественного язык...
3. Сходство 38%: Векторные базы данных специально разработаны для хранения и поиска высокомерных векторов.Они использ...
Вопрос: Кто создал Python?
Ответ: Python создал Гвидо ван Россум в Центре математики и информатики в Нидерландах. (Уверенность: 100%)
------------------------------------------------------------
Обрабатываем вопрос: Что такое RAG?
Найденные фрагменты:
1. Сходство 58%: RAG, или генерация с дополненной выборкой, – это архитектурный подход в обработке естественного язык...
2. Сходство 31%: Векторные базы данных специально разработаны для хранения и поиска высокомерных векторов.Они использ...
3. Сходство 25%: Python – высокоуровневый язык программирования общего назначения. Создан в 1991 году Гвидо ван Россу...
Вопрос: Что такое RAG?
Ответ: RAG – это архитектурный подход в обработке естественного языка, который объединяет поиск информации с генерацией текста. (Уверенность: 100%)
------------------------------------------------------------
Обрабатываем вопрос: Как работают векторные базы данных?
Найденные фрагменты:
1. Сходство 54%: Векторные базы данных специально разработаны для хранения и поиска высокомерных векторов.Они использ...
2. Сходство 51%: RAG, или генерация с дополненной выборкой, – это архитектурный подход в обработке естественного язык...
3. Сходство 38%: Python – высокоуровневый язык программирования общего назначения. Создан в 1991 году Гвидо ван Россу...
Вопрос: Как работают векторные базы данных?
Ответ: Векторные базы данных используют специальные алгоритмы индексирования для быстрого поиска похожих векторов. (Уверенность: 100%)
------------------------------------------------------------
- Поддержка загрузки документов из файлов (PDF, TXT, DOCX)
- Веб-интерфейс (например, через Streamlit)
- Поддержка разных моделей эмбеддингов (например, Sentence-Transformers)
- Оценка качества ответов и релевантности