🤖 Продвинутая RAG (Retrieval-Augmented Generation) система для работы с PDF документами и генерации ответов на основе локальной модели YandexGPT через Ollama.
- 📚 Извлечение знаний из PDF: Автоматическая обработка PDF документов с разбивкой на чанки
- 🔍 Семантический поиск: Использование векторных эмбеддингов для поиска релевантной информации
- 🧠 Интеллектуальные ответы: Генерация ответов на основе найденных документов с помощью YandexGPT
- 🌐 Мультиязычность: Поддержка русского и английского языков
- ⚡ Оптимизированная производительность: Батчевая обработка эмбеддингов и таймауты
- 🔧 Гибкие настройки: Различные режимы работы и настройки поиска
git clone https://github.com/kpshinnik/rag_ollama.git
cd rag_ollamapip install -r requirements.txt# Установите Ollama с официального сайта: https://ollama.ai/
# Затем загрузите модель YandexGPT
ollama pull yandexgptrag_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 документов
Класс для создания и управления векторной базой данных:
- Извлечение текста из PDF файлов
- Разбивка на чанки (размер: 1000 символов, пересечение: 200)
- Создание эмбеддингов с использованием
paraphrase-multilingual-MiniLM-L12-v2 - Сохранение в ChromaDB
Основной класс для RAG генерации:
- Семантический поиск по векторной базе
- Генерация ответов через YandexGPT
- Поддержка контекста диалога
- Настраиваемые параметры поиска
- chat_rag.py: Простой чат с командами
- demo_rag.py: Демонстрация возможностей
- main.py: Базовый чат-бот без RAG
Поместите PDF файлы в папку Research/:
mkdir Research
# Скопируйте ваши PDF файлы в эту папкуpython rag_database.pypython chat_rag.py!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()} документов")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 # Пересечение между чанкамиИзменение в rag_assistant.py:
self.model_name = "yandexgpt" # Имя модели Ollama
self.max_tokens = 1000 # Максимальная длина ответа
self.temperature = 0.7 # Креативность ответов# Проверьте установку Ollama
ollama --version
# Убедитесь, что сервис запущен
ollama serve# Загрузите модель
ollama pull yandexgpt
# Проверьте доступные модели
ollama list- Убедитесь, что PDF файлы не повреждены
- Проверьте размер файлов (рекомендуется < 50 МБ)
- Удалите файлы с нестандартным кодированием
- Используйте SSD для хранения базы данных
- Увеличьте batch_size для эмбеддингов
- Уменьшите количество результатов поиска
- Fork репозитория
- Создайте ветку для новой функции:
git checkout -b feature/amazing-feature - Commit изменения:
git commit -m 'Add amazing feature' - Push в ветку:
git push origin feature/amazing-feature - Откройте Pull Request
Этот проект распространяется под лицензией MIT. См. файл LICENSE для подробностей.
- Ollama - для локального запуска LLM
- ChromaDB - для векторной базы данных
- Sentence Transformers - для создания эмбеддингов
- YandexGPT - за мощную языковую модель
Если у вас есть вопросы или предложения:
- Создайте Issue
- Напишите в Discussions
Создано с ❤️ для исследователей и разработчиков