Skip to content

About

Пример развертывания локальной модели и обучение RAG с локальной векторной базой данных

Resources

Contributing

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

RAG Система с YandexGPT через Ollama

🤖 Продвинутая RAG (Retrieval-Augmented Generation) система для работы с PDF документами и генерации ответов на основе локальной модели YandexGPT через Ollama.

🚀 Возможности

  • 📚 Извлечение знаний из PDF: Автоматическая обработка PDF документов с разбивкой на чанки
  • 🔍 Семантический поиск: Использование векторных эмбеддингов для поиска релевантной информации
  • 🧠 Интеллектуальные ответы: Генерация ответов на основе найденных документов с помощью YandexGPT
  • 🌐 Мультиязычность: Поддержка русского и английского языков
  • ⚡ Оптимизированная производительность: Батчевая обработка эмбеддингов и таймауты
  • 🔧 Гибкие настройки: Различные режимы работы и настройки поиска

📦 Установка

1. Клонирование репозитория

git clone https://github.com/kpshinnik/rag_ollama.git
cd rag_ollama

2. Установка зависимостей

pip install -r requirements.txt

3. Установка и настройка Ollama

# Установите Ollama с официального сайта: https://ollama.ai/
# Затем загрузите модель YandexGPT
ollama pull yandexgpt

🗂️ Структура проекта

rag_ollama/
├── main.py                  # Основной чат-бот без RAG
├── rag_database.py         # Создание векторной базы данных
├── rag_assistant.py        # RAG ассистент с YandexGPT
├── chat_rag.py            # Интерактивный RAG чат
├── demo_rag.py            # Демонстрационный скрипт
├── test_rag_system.py     # Тесты системы
├── requirements.txt       # Зависимости Python
├── README.md             # Документация
├── .gitignore           # Исключения для Git
└── Research/            # Папка для PDF документов

🛠️ Основные компоненты

1. RAGDatabase (rag_database.py)

Класс для создания и управления векторной базой данных:

  • Извлечение текста из PDF файлов
  • Разбивка на чанки (размер: 1000 символов, пересечение: 200)
  • Создание эмбеддингов с использованием paraphrase-multilingual-MiniLM-L12-v2
  • Сохранение в ChromaDB

2. RAGAssistant (rag_assistant.py)

Основной класс для RAG генерации:

  • Семантический поиск по векторной базе
  • Генерация ответов через YandexGPT
  • Поддержка контекста диалога
  • Настраиваемые параметры поиска

3. Интерактивные интерфейсы

  • chat_rag.py: Простой чат с командами
  • demo_rag.py: Демонстрация возможностей
  • main.py: Базовый чат-бот без RAG

🚀 Быстрый старт

1. Подготовка данных

Поместите PDF файлы в папку Research/:

mkdir Research
# Скопируйте ваши PDF файлы в эту папку

2. Создание векторной базы данных

python rag_database.py

3. Запуск RAG ассистента

python chat_rag.py

4. Использование команд в чате

  • !help - список команд
  • !search [запрос] - поиск в базе знаний
  • !stats - статистика базы данных
  • !toggle_rag - включить/отключить RAG режим
  • !quit - выход

📝 Примеры использования

Создание базы знаний

from rag_database import RAGDatabase

# Создание базы данных из PDF файлов
db = RAGDatabase("./chroma_db")
db.create_database_from_pdfs("./Research")
print(f"База данных создана: {db.get_collection_count()} документов")

Использование RAG ассистента

from rag_assistant import RAGAssistant

# Инициализация ассистента
assistant = RAGAssistant("./chroma_db")

# Задать вопрос
question = "Что такое GPT?"
answer = assistant.get_answer(question)
print(f"Ответ: {answer}")

Настройка параметров поиска

assistant = RAGAssistant(
    db_path="./chroma_db",
    model_name="yandexgpt",
    search_results=5,  # Количество результатов поиска
    max_tokens=1000    # Максимальная длина ответа
)

🧪 Тестирование

Запуск полного набора тестов:

python test_rag_system.py

Тесты включают:

  • ✅ Проверка создания базы данных
  • ✅ Тестирование поиска документов
  • ✅ Валидация генерации ответов
  • ✅ Проверка обработки ошибок
  • ✅ Тестирование производительности

⚙️ Конфигурация

Модель эмбеддингов

По умолчанию используется paraphrase-multilingual-MiniLM-L12-v2 для поддержки множественных языков. Можно изменить в rag_database.py:

self.model = SentenceTransformer('your-preferred-model')

Параметры чанкирования

Настройка в rag_database.py:

chunk_size = 1000      # Размер чанка
chunk_overlap = 200    # Пересечение между чанками

Настройки YandexGPT

Изменение в rag_assistant.py:

self.model_name = "yandexgpt"  # Имя модели Ollama
self.max_tokens = 1000         # Максимальная длина ответа
self.temperature = 0.7         # Креативность ответов

🔧 Устранение неполадок

Проблема: Ollama не найдена

# Проверьте установку Ollama
ollama --version

# Убедитесь, что сервис запущен
ollama serve

Проблема: Модель YandexGPT не найдена

# Загрузите модель
ollama pull yandexgpt

# Проверьте доступные модели
ollama list

Проблема: Ошибки при обработке PDF

  • Убедитесь, что PDF файлы не повреждены
  • Проверьте размер файлов (рекомендуется < 50 МБ)
  • Удалите файлы с нестандартным кодированием

Проблема: Медленная работа

  • Используйте SSD для хранения базы данных
  • Увеличьте batch_size для эмбеддингов
  • Уменьшите количество результатов поиска

🤝 Вклад в проект

  1. Fork репозитория
  2. Создайте ветку для новой функции: git checkout -b feature/amazing-feature
  3. Commit изменения: git commit -m 'Add amazing feature'
  4. Push в ветку: git push origin feature/amazing-feature
  5. Откройте Pull Request

📄 Лицензия

Этот проект распространяется под лицензией MIT. См. файл LICENSE для подробностей.

🙏 Благодарности

  • Ollama - для локального запуска LLM
  • ChromaDB - для векторной базы данных
  • Sentence Transformers - для создания эмбеддингов
  • YandexGPT - за мощную языковую модель

📞 Поддержка

Если у вас есть вопросы или предложения:


Создано с ❤️ для исследователей и разработчиков

About

Пример развертывания локальной модели и обучение RAG с локальной векторной базой данных

Resources

Contributing

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages