Пример системы RAG (Retrieval-Augmented Generation) для локальной языковой модели, обученной на данных сайта zerocoder.ru.
Этот проект представляет собой полноценную RAG-систему, которая:
- Парсит все страницы сайта zerocoder.ru (главная + 1 уровень вглубь)
- Создает векторную базу данных из спарсенного контента
- Предоставляет AI-ассистента для ответов на вопросы о курсах и услугах Zerocoder
- Использует локальную модель qwen2.5vl:7b через Ollama
- Python 3.11+
- ChromaDB - векторная база данных
- Ollama - запуск локальных языковых моделей
- BeautifulSoup4 - парсинг веб-страниц
- Sentence Transformers - создание эмбеддингов
- qwen2.5vl:7b - локальная языковая модель
# Клонируем репозиторий
git clone https://github.com/kpshinnik/rag_zerocoder.git
cd rag_zerocoder
# Устанавливаем Python зависимости
pip install -r requirements.txt# Устанавливаем Ollama (macOS/Linux)
curl -fsSL https://ollama.ai/install.sh | sh
# Запускаем сервер Ollama
ollama serve
# В новом терминале загружаем модель qwen2.5vl:7b
ollama pull qwen2.5vl:7b
# Проверяем список доступных моделей
ollama listЕсли хотите обновить данные с сайта zerocoder.ru:
python zerocoder_parser.pyПарсер создаст папку parsed_pages/ с текстовыми файлами страниц сайта.
python fast_rag_assistant.pypython rag_assistant.pyФункции:
- Парсит главную страницу zerocoder.ru
- Извлекает все внутренние ссылки
- Загружает контент каждой страницы
- Очищает HTML и сохраняет в текстовые файлы
- Соблюдает задержки между запросами (1 сек)
Использование:
python zerocoder_parser.pyРезультат: Папка parsed_pages/ с ~65 текстовыми файлами
Особенности:
- Использует sentence-transformers для высококачественных эмбеддингов
- Обрабатывает все спарсенные документы
- Создание базы данных: ~5-10 минут
- Высокое качество поиска и ответов
Компоненты:
DocumentProcessor- загрузка и предобработка документовVectorDatabase- работа с ChromaDB и эмбеддингамиOllamaClient- интеграция с локальной модельюRAGAssistant- основной класс ассистента
Оптимизации:
- Встроенные эмбеддинги ChromaDB (без sentence-transformers)
- Ограничение количества документов (по умолчанию 10)
- Увеличенный размер батчей
- Создание базы данных: ~10-30 секунд
Идеально для:
- Быстрого тестирования
- Демонстраций
- Разработки и отладки
python test_ollama.pypython test_fast_rag.pypython test_rag.pypython quick_demo.pyПосле запуска ассистента вы можете задавать вопросы:
❓ Ваш вопрос: Какие курсы есть у Zerocoder?
🤖 Ответ:
У Zerocoder есть множество курсов по искусственному интеллекту и программированию:
1. **Курсы по нейросетям:**
- "Нейросети для жизни и карьеры"
- "Российские нейросети без границ"
- "Нейросети для инвестиций"
2. **Программирование:**
- "Python разработчик с нуля"
- "Разработчик чат-ботов"
- "Мобильные приложения на FlutterFlow"
3. **Специализированные курсы:**
- "Промпт-инжиниринг"
- "Веб-дизайн"
- "1С-разработчик"
И многие другие...
from fast_rag_assistant import FastRAGAssistant
# Создание ассистента
assistant = FastRAGAssistant(doc_limit=10)
# Инициализация
assistant.initialize()
# Задание вопроса
response = assistant.ask("Есть ли курсы по Python?")
print(response)# Быстрая версия с 5 документами
assistant = FastRAGAssistant(doc_limit=5)
# Полная версия со всеми документами
assistant = RAGAssistant()# Использование другой модели
ollama_client = FastOllamaClient(model_name="llama2:7b")# Больше релевантных документов в ответе
relevant_docs = vector_db.search(question, n_results=5)rag_zerocoder/
├── zerocoder_parser.py # Парсер сайта zerocoder.ru
├── rag_assistant.py # Полная RAG-система
├── fast_rag_assistant.py # Быстрая RAG-система
├── test_ollama.py # Тест подключения к Ollama
├── test_rag.py # Тест полной RAG-системы
├── test_fast_rag.py # Тест быстрой RAG-системы
├── quick_demo.py # Быстрая демонстрация
├── requirements.txt # Python зависимости
├── README.md # Документация
├── .gitignore # Git ignore правила
└── parsed_pages/ # Спарсенные страницы (создается автоматически)
Решение:
# Убедитесь, что Ollama установлен
ollama --version
# Запустите сервер
ollama serve
# Проверьте, что модель загружена
ollama listРешение:
# Используйте быструю версию
python fast_rag_assistant.py
# Или ограничьте количество документов
assistant = FastRAGAssistant(doc_limit=5)Решение:
# Проверьте интернет-соединение
# Убедитесь, что сайт zerocoder.ru доступен
# Попробуйте запустить парсер позжеРешение:
- Используйте полную версию (
rag_assistant.py) - Увеличьте количество релевантных документов в поиске
- Обновите спарсенные данные
- Создайте новый парсер по аналогии с
zerocoder_parser.py - Сохраните данные в папку
parsed_pages/ - Пересоздайте векторную базу данных
# Замените модель в конфигурации
ollama_client = FastOllamaClient(model_name="ваша_модель")Добавьте Flask/FastAPI для создания веб-интерфейса:
from flask import Flask, request, jsonify
from fast_rag_assistant import FastRAGAssistant
app = Flask(__name__)
assistant = FastRAGAssistant()
assistant.initialize()
@app.route('/ask', methods=['POST'])
def ask():
question = request.json['question']
response = assistant.ask(question)
return jsonify({'response': response})| Характеристика | Полная версия | Быстрая версия |
|---|---|---|
| Время инициализации | 5-10 минут | 10-30 секунд |
| Качество ответов | Высокое | Хорошее |
| Количество документов | Все (~65) | Ограниченное (10) |
| Память | ~4GB | ~1GB |
| Рекомендуется для | Продакшн | Демо/разработка |
- Форкните репозиторий
- Создайте ветку для новой функции (
git checkout -b feature/new-feature) - Внесите изменения и протестируйте
- Создайте Pull Request
Этот проект предназначен для демонстрации возможностей RAG-систем с локальными языковыми моделями.
Если у вас возникли вопросы или проблемы:
- Проверьте раздел "Возможные проблемы и решения"
- Создайте Issue в GitHub репозитории
- Убедитесь, что все зависимости установлены корректно
Автор: kpshinnik
Репозиторий: rag_zerocoder