Skip to content

kuzminal/Simple-RAG-System

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📚 RAG-система на основе векторного поиска

Этот проект реализует простую систему 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)
  • Оценка качества ответов и релевантности

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages