Как мы с ИИ сделали локальный ИИ, который учится по моим книгам и пишет за меня отчёты. ai.. ai. chromadb.. ai. chromadb. Claude.. ai. chromadb. Claude. copilot.. ai. chromadb. Claude. copilot. llm.. ai. chromadb. Claude. copilot. llm. nlp.. ai. chromadb. Claude. copilot. llm. nlp. Open source.. ai. chromadb. Claude. copilot. llm. nlp. Open source. python.. ai. chromadb. Claude. copilot. llm. nlp. Open source. python. qwen.. ai. chromadb. Claude. copilot. llm. nlp. Open source. python. qwen. искусственный интеллект.. ai. chromadb. Claude. copilot. llm. nlp. Open source. python. qwen. искусственный интеллект. Машинное обучение.

Предыстория: зачем вообще это нужно

Каждый семестр одна и та же история: кипа учебников, дедлайны, отчёты, которые нужно было сдать «вчера», и презентации, от одного вида которых хочется закрыть ноутбук. ChatGPT и Claude помогают, но:

  1. Они не читали мои учебники — отвечают «в целом», а не по конкретному материалу курса

  2. Конфиденциальность — не все учебные материалы хочется загружать в облако

  3. Зависимость от интернета — в поезде, в общаге с плохим Wi-Fi это критично

  4. Стоимость — подписки на API складываются

Так родилась идея: взять мощную open-source LLM, скормить ей все мои учебники и получить персонального ассистента, который работает полностью на моём компьютере.

А помог мне воплотить эту идею в код — GitHub Copilot (Claude). Да, ирония: я использовал ИИ, чтобы создать другой ИИ. Но об этом подробнее ниже.

Что получилось

Lama Loca (да, название — отсылка к «безумной ламе» 🦙) — это десктопное приложение с веб-интерфейсом, которое:

  • 📖 Индексирует книги — PDF, EPUB, DOCX, TXT, FB2, HTML

  • 🔍 Ищет релевантные фрагменты при запросе (RAG)

  • 🎯 Переранжирует результаты через Cross-Encoder

  • 🤖 Генерирует тексты через локальную LLM (Qwen2.5)

  • 📝 Экспортирует в DOCX, PPTX, Markdown

Весь стек: Python + Gradio + ChromaDB + llama-cpp-python + sentence-transformers.

GitHub: emil-a-dev/lama-loca

Архитектура

Система построена по принципу RAG (Retrieval-Augmented Generation) — модель не пытается “вспомнить” ответ, а сначала находит нужные фрагменты в ваших книгах, потом формулирует ответ на их основе.

Книги → Парсер → Чанкинг → Эмбеддинги → ChromaDB
                                              │
Запрос → Эмбеддинг → Поиск Top-15 → Реранкинг Top-8 → LLM → Документ
Как мы с ИИ сделали локальный ИИ, который учится по моим книгам и пишет за меня отчёты - 1

Почему RAG, а не fine-tuning?

Первое, что приходит в голову — дообучить модель на своих книгах. Но для учебных задач это плохая идея:

Fine-tuning

RAG

Добавление новой книги

Переобучение (часы)

Индексация (минуты)

Ссылки на источники

Нет

Да, с указанием книги и фрагмента

Галлюцинации

Много

Мало (ответ привязан к контексту)

Требования к GPU

Высокие

Минимальные

Актуальность

Замороженные знания

Всегда свежие данные

С RAG достаточно бросить новый PDF в папку, нажать «Индексировать» — и модель уже «знает» материал.

Выбор компонентов

LLM: Qwen2.5 через llama-cpp-python

Я перебрал несколько вариантов:

  • LLaMA 3 — хорошая, но слабо работает с русским

  • Mistral/Mixtral — отличный английский, средний русский

  • Qwen2.5 — 🏆 лучший русский среди open-source моделей

Qwen2.5 доступна от 1.5B до 72B параметров. Я использую GGUF-квантизацию (Q4_K_M) через llama-cpp-python — это позволяет запускать модели на обычном железе:

Модель

RAM

Качество русского

Qwen2.5-3B

4 GB

Приемлемое

Qwen2.5-7B

8 GB

Хорошее

Qwen2.5-14B

12 GB

Отличное

Qwen2.5-32B

24 GB

Близко к GPT-4

Ключевые настройки инференса:

LLM_CONTEXT_SIZE = 32768    # 32K контекст — помещается много текста
LLM_TEMPERATURE = 0.3       # Низкая температура = точные ответы
LLM_TOP_P = 0.9             # Фильтрация маловероятных токенов
LLM_REPEAT_PENALTY = 1.15   # Борьба с повторами
Как мы с ИИ сделали локальный ИИ, который учится по моим книгам и пишет за меня отчёты - 2

Низкая температура критична для учебных текстов — модель должна оперировать фактами, а не «фантазировать».

Эмбеддинги: E5-Large Multilingual

Для семантического поиска нужна модель эмбеддингов, которая хорошо понимает русский. Сравнение:

Модель

Размер

Качество RU

Скорость

all-MiniLM-L6-v2

80 MB

❌ Только EN

Быстро

paraphrase-multilingual-MiniLM-L12

420 MB

👍 Среднее

Средне

multilingual-e5-large

1.1 GB

⭐ Отличное

Средне

E5-Large от Microsoft — однозначный выбор для русскоязычного RAG. Важная деталь: E5 модели требуют префиксы query: и passage: — без них качество поиска падает на 15-20%:

# При индексации
batch_with_prefix = [f"passage: {chunk}" for chunk in batch]
embeddings = self.embeddings.embed_documents(batch_with_prefix)

# При поиске
query_embed = self.embeddings.embed_query(f"query: {query}")
Как мы с ИИ сделали локальный ИИ, который учится по моим книгам и пишет за меня отчёты - 3

Реранкинг: Cross-Encoder

Обычный векторный поиск находит «похожие» фрагменты, но не всегда «релевантные». Например, запрос «причины Первой мировой войны» может найти фрагмент про Вторую мировую, потому что они семантически близки.

Cross-Encoder решает эту проблему — он берёт пару (запрос, документ) и оценивает именно релевантность, а не похожесть:

# 1. Находим 15 кандидатов через ChromaDB (быстро, но грубо)
results = collection.query(query_embeddings=, n_results=15)

# 2. Переранжируем через Cross-Encoder (медленнее, но точнее)
reranked = reranker.rerank(query, documents, top_k=8)
Как мы с ИИ сделали локальный ИИ, который учится по моим книгам и пишет за меня отчёты - 4

Это двухстадийная система: ChromaDB быстро отсеивает 99% базы, а Cross-Encoder точно ранжирует оставшиеся кандидаты. На практике это убирает 2-3 нерелевантных фрагмента из контекста LLM, что заметно повышает качество ответов.

ChromaDB: хранение и поиск

ChromaDB выбрана за простоту — встраивается прямо в приложение, не нужен отдельный сервер:

client = chromadb.PersistentClient(path="data/chromadb")
collection = client.get_or_create_collection(
    name="study_books",
    metadata={"hnsw:space": "cosine"}
)
Как мы с ИИ сделали локальный ИИ, который учится по моим книгам и пишет за меня отчёты - 5

Данные персистентны: проиндексировали книги один раз — они остаются в базе между перезапусками.

GUI: Gradio

Выбор стоял между Gradio, Streamlit и PyQt:

  • PyQt — мощный, но много кода на UI

  • Streamlit — простой, но перерисовывает страницу при каждом действии

  • Gradio — 🏆 оптимальный баланс: красивый UI, поддержка стриминга, минимум кода

Весь интерфейс с 6 вкладками, чатом со стримингом и drag & drop загрузкой файлов — это один файл на ~300 строк.

Как ИИ помогал создавать ИИ: процесс разработки с GitHub Copilot

Этот проект — результат совместной работы человека и ИИ. Я использовал GitHub Copilot на базе Claude прямо в VS Code, и хочу честно рассказать, как это происходило.

Что делал я (человек):

  • 🧠 Идея и архитектура — определил, что нужна RAG-система с GUI, выбрал стек

  • 🎯 Постановка задач — формулировал, что именно нужно: «сделай GUI на Gradio», «добавь реранкинг»

  • 🔍 Ревью и тестирование — проверял код, находил баги, просил исправления

  • 📐 Продуктовые решения — какие типы документов поддерживать, как организовать UX

  • ✍️ Итерации — «мне нужна не CLI, а GUI», «добавь поддержку FB2»

Что делал ИИ (GitHub Copilot / Claude):

  • 💻 Написание кода — вся кодовая база написана при помощи Copilot

  • 🏗️ Проектирование модулей — структура файлов, классы, интерфейсы

  • 🔧 Конфигурация — подбор параметров LLM, размеров чанков, промптов

  • 📝 Документация — README, эта статья, комментарии в коде

  • 🚀 Деплой — настройка git, создание репозитория, CI

Как выглядел процесс

Не было такого, что я написал один промпт и получил готовый проект. Это был итеративный диалог:

  1. Я: «Создай локальную ИИ-модель для учёбы по книгам» → получил CLI-версию

  2. Я: «Мне нужен GUI, не терминал» → переделка на Gradio

  3. Я: «Сделай деплой на GitHub» → автоматизация git + GitHub

  4. Я: «Напиши статью для Хабра» → эта статья

Каждый шаг — это ревью, правки, уточнения. ИИ не заменяет разработчика, он усиливает его. Я бы потратил неделю на то, что мы сделали за вечер, но без моего видения и контроля качества ИИ написал бы совсем другой (и скорее всего, худший) проект.

Честная оценка

Аспект

Без ИИ

С ИИ

Время разработки

~1 неделя

~3 часа

Качество кода

Выше (мой стиль)

Хорошее (но нужен ревью)

Документация

Минимальная

Подробная

Покрытие граничных случаев

По опыту

По шаблонам

Архитектурные решения

Мои

Мои (ИИ выполняет)

Главный вывод: ИИ — это инструмент, не автор. Проект работает, потому что я знал, чего хочу, и направлял процесс. Но скорость реализации выросла в разы.

Главные грабли

1. Чанкинг — всё решает размер

Первая версия использовала чанки по 500 символов. Результат: модель получала обрывки предложений и генерировала бессвязный текст.

Оптимальный размер для учебных текстов — 1500 символов с перекрытием 300. Это примерно 1-2 абзаца — достаточно, чтобы сохранить смысл.

CHUNK_SIZE = 1500
CHUNK_OVERLAP = 300
Как мы с ИИ сделали локальный ИИ, который учится по моим книгам и пишет за меня отчёты - 6

2. Промпт-инжиниринг решает

Разница между «напиши отчёт» и структурированным промптом с ролью, требованиями к структуре и форматом вывода — колоссальная. Я потратил много времени на итерации промптов:

SYSTEM_PROMPT = """Ты — высокоинтеллектуальный учебный ассистент...
Твои принципы:
1. ТОЧНОСТЬ — используй только факты из контекста
2. ГЛУБИНА — анализируй многосторонне
3. СТРУКТУРА — чёткие логичные тексты
4. КРИТИЧЕСКОЕ МЫШЛЕНИЕ — сравнивай точки зрения
5. ЯЗЫК — грамотный русский, академический стиль"""
Как мы с ИИ сделали локальный ИИ, который учится по моим книгам и пишет за меня отчёты - 7

Также важен формат промпта: Qwen2.5 обучена на ChatML формате (<|im_start|>system, <|im_start|>user, <|im_start|>assistant). Использование правильного формата даёт заметный прирост качества.

3. GPU — не обязательно, но сильно ускоряет

На CPU (Ryzen 5 3600) генерация 1000 токенов 7B-моделью занимает ~45 секунд. На GPU (RTX 3060) — ~8 секунд. Для интерактивного чата разница критична, для генерации документов — терпимо.

Для NVIDIA GPU нужна специальная сборка llama-cpp-python:

pip install llama-cpp-python --force-reinstall 
    -C cmake.args="-DGGML_CUDA=ON"
Как мы с ИИ сделали локальный ИИ, который учится по моим книгам и пишет за меня отчёты - 8

Что реально может эта система

Буду честен — это не ChatGPT. Локальная модель на 7-14B параметров не сравнится с 175B+ коммерческими моделями в общих знаниях и reasoning.

Но для конкретной задачи — работа с вашими учебниками — система работает отлично:

Плюсы:

  • ✅ Ответы привязаны к конкретным книгам — минимум галлюцинаций

  • ✅ Указывает источники — можно проверить

  • Офлайн — работает без интернета

  • ✅ Генерирует готовые файлы (DOCX, PPTX)

  • Бесплатно — после начальной настройки

Минусы:

  • ❌ Медленнее облачных решений (особенно на CPU)

  • ❌ Качество рассуждений ниже GPT-4/Claude

  • ❌ Нужно 4-24 GB RAM в зависимости от модели

  • ❌ Первый запуск долгий (скачивание моделей)

Как развивать дальше

У меня в планах:

  1. Мультимодальность — индексация изображений и таблиц из PDF

  2. Adaptive RAG — автоматический выбор количества контекста

  3. Цитирование — точные ссылки на страницы книг

  4. Fine-tuning адаптеры — LoRA на стиле конкретного предмета

  5. Коллаборация — расшаривание базы знаний между студентами

Попробовать

git clone https://github.com/emil-a-dev/lama-loca.git
cd lama-loca
chmod +x setup.sh && ./setup.sh
source venv/bin/activate
python main.py
Как мы с ИИ сделали локальный ИИ, который учится по моим книгам и пишет за меня отчёты - 9

Скрипт установки определит RAM вашей системы и предложит оптимальную модель. После запуска откроется GUI в браузере.

GitHub: emil-a-dev/lama-loca — буду рад звёздам ⭐ и обратной связи.


Какие open-source модели вы используете для работы с русским текстом? Используете ли ИИ-ассистентов в своей разработке? Делитесь опытом в комментариях.


Автор: Emi_Dev

Источник

Rambler's Top100