Skip to content

About

пример RAG для локальной языковой модели, обученной на сайте zerocoder.ru

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

RAG Zerocoder 🚀

Пример системы RAG (Retrieval-Augmented Generation) для локальной языковой модели, обученной на данных сайта zerocoder.ru.

📋 Описание проекта

Этот проект представляет собой полноценную RAG-систему, которая:

  1. Парсит все страницы сайта zerocoder.ru (главная + 1 уровень вглубь)
  2. Создает векторную базу данных из спарсенного контента
  3. Предоставляет AI-ассистента для ответов на вопросы о курсах и услугах Zerocoder
  4. Использует локальную модель qwen2.5vl:7b через Ollama

🛠️ Технический стек

  • Python 3.11+
  • ChromaDB - векторная база данных
  • Ollama - запуск локальных языковых моделей
  • BeautifulSoup4 - парсинг веб-страниц
  • Sentence Transformers - создание эмбеддингов
  • qwen2.5vl:7b - локальная языковая модель

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

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

# Клонируем репозиторий
git clone https://github.com/kpshinnik/rag_zerocoder.git
cd rag_zerocoder

# Устанавливаем Python зависимости
pip install -r requirements.txt

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

# Устанавливаем Ollama (macOS/Linux)
curl -fsSL https://ollama.ai/install.sh | sh

# Запускаем сервер Ollama
ollama serve

# В новом терминале загружаем модель qwen2.5vl:7b
ollama pull qwen2.5vl:7b

# Проверяем список доступных моделей
ollama list

3. Запуск парсера (опционально)

Если хотите обновить данные с сайта zerocoder.ru:

python zerocoder_parser.py

Парсер создаст папку parsed_pages/ с текстовыми файлами страниц сайта.

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

Быстрая версия (рекомендуется для демо):

python fast_rag_assistant.py

Полная версия (высокое качество):

python rag_assistant.py

📚 Подробное описание компонентов

🕷️ Парсер сайта (zerocoder_parser.py)

Функции:

  • Парсит главную страницу zerocoder.ru
  • Извлекает все внутренние ссылки
  • Загружает контент каждой страницы
  • Очищает HTML и сохраняет в текстовые файлы
  • Соблюдает задержки между запросами (1 сек)

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

python zerocoder_parser.py

Результат: Папка parsed_pages/ с ~65 текстовыми файлами

🧠 RAG-Ассистент - Полная версия (rag_assistant.py)

Особенности:

  • Использует sentence-transformers для высококачественных эмбеддингов
  • Обрабатывает все спарсенные документы
  • Создание базы данных: ~5-10 минут
  • Высокое качество поиска и ответов

Компоненты:

  • DocumentProcessor - загрузка и предобработка документов
  • VectorDatabase - работа с ChromaDB и эмбеддингами
  • OllamaClient - интеграция с локальной моделью
  • RAGAssistant - основной класс ассистента

⚡ RAG-Ассистент - Быстрая версия (fast_rag_assistant.py)

Оптимизации:

  • Встроенные эмбеддинги ChromaDB (без sentence-transformers)
  • Ограничение количества документов (по умолчанию 10)
  • Увеличенный размер батчей
  • Создание базы данных: ~10-30 секунд

Идеально для:

  • Быстрого тестирования
  • Демонстраций
  • Разработки и отладки

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

Тест подключения к Ollama:

python test_ollama.py

Быстрый тест RAG-системы:

python test_fast_rag.py

Полный тест RAG-системы:

python test_rag.py

Демонстрация с ограниченными данными:

python 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

# Использование другой модели
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 установлен
ollama --version

# Запустите сервер
ollama serve

# Проверьте, что модель загружена
ollama list

Проблема: Медленная инициализация

Решение:

# Используйте быструю версию
python fast_rag_assistant.py

# Или ограничьте количество документов
assistant = FastRAGAssistant(doc_limit=5)

Проблема: Ошибки при парсинге

Решение:

# Проверьте интернет-соединение
# Убедитесь, что сайт zerocoder.ru доступен
# Попробуйте запустить парсер позже

Проблема: Неточные ответы

Решение:

  • Используйте полную версию (rag_assistant.py)
  • Увеличьте количество релевантных документов в поиске
  • Обновите спарсенные данные

🔧 Расширение проекта

Добавление новых источников данных

  1. Создайте новый парсер по аналогии с zerocoder_parser.py
  2. Сохраните данные в папку parsed_pages/
  3. Пересоздайте векторную базу данных

Использование других моделей

# Замените модель в конфигурации
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
Рекомендуется для Продакшн Демо/разработка

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

  1. Форкните репозиторий
  2. Создайте ветку для новой функции (git checkout -b feature/new-feature)
  3. Внесите изменения и протестируйте
  4. Создайте Pull Request

📄 Лицензия

Этот проект предназначен для демонстрации возможностей RAG-систем с локальными языковыми моделями.

🙋‍♂️ Поддержка

Если у вас возникли вопросы или проблемы:

  1. Проверьте раздел "Возможные проблемы и решения"
  2. Создайте Issue в GitHub репозитории
  3. Убедитесь, что все зависимости установлены корректно

Автор: kpshinnik
Репозиторий: rag_zerocoder

About

пример RAG для локальной языковой модели, обученной на сайте zerocoder.ru

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages