Skip to content

Latest commit

 

History

History
388 lines (280 loc) · 12.1 KB

File metadata and controls

388 lines (280 loc) · 12.1 KB

🤖 LLM Integration Guide - DocMentor 2.1

Интеграция локального LLM с GGUF квантизацией

Документация по интеграции медицинского языкового модели в DocMentor для MacBook M4.


📋 Обзор

DocMentor 2.1 включает интеграцию локального LLM (Large Language Model) для предоставления интеллектуальных ответов на медицинские вопросы студентов.

Ключевые особенности:

  • Локальная работа - все на твоем MacBook M4, никаких API ключей
  • GGUF квантизация - Q4_K_M для оптимального баланса качество/скорость
  • Metal acceleration - использует GPU M4 для ускорения
  • RAG Pipeline - контекст из учебников + AI генерация
  • Медицинская специализация - промпты настроены для медицинского образования
  • Русский язык - отличная поддержка русского через Qwen2.5

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

Шаг 1: Установка зависимостей

# Из корня проекта
python setup_llm.py

Этот скрипт:

  1. Установит llama-cpp-python (с Metal support)
  2. Установит huggingface-hub для скачивания моделей
  3. Предложит скачать рекомендуемую модель

Шаг 2: Выбор модели

При запуске setup_llm.py тебе предложат 3 варианта:

1. Qwen2.5-7B-Instruct (РЕКОМЕНДУЕТСЯ)

  • Размер: 4.5 GB
  • Русский: Отлично
  • Скорость: 25-35 токенов/сек на M4
  • Описание: Лучший баланс для MacBook M4 16GB

2. Qwen2.5-3B-Instruct (Если нужна скорость)

  • Размер: 2.0 GB
  • Русский: Отлично
  • Скорость: 40-60 токенов/сек
  • Описание: Легкая версия, очень быстрая

3. OpenBioLLM-8B (Медицинская специализация)

  • Размер: 5.0 GB
  • Русский: Слабее
  • Скорость: 20-28 токенов/сек
  • Описание: Специально обучена на медицинских данных

Шаг 3: Тестирование

python test_llm.py

Запустит 6 тестов:

  1. ✅ Загрузка модели
  2. ✅ Простая генерация текста
  3. ✅ Чат формат
  4. ✅ Промпт-шаблоны
  5. ✅ RAG Pipeline
  6. ✅ Бенчмарк производительности

💻 Использование в коде

Базовое использование

from core import DocMentorCore

# Инициализация с LLM
docmentor = DocMentorCore(
    storage_path="./data",
    llm_model_path="./models/qwen2.5-7b-instruct-q4_k_m.gguf",
    enable_llm=True
)

# Проверить доступность LLM
if docmentor.is_llm_available():
    print("✅ LLM готов к работе!")

Задать вопрос с RAG

# Вопрос с контекстом из учебников
result = docmentor.ask_ai(
    question="Что такое бронхиальная астма?",
    use_context=True,  # Использовать учебники
    max_tokens=512,
    temperature=0.7
)

if result["status"] == "success":
    print(f"Ответ: {result['answer']}")
    print(f"Источники: {len(result['sources'])} фрагментов")
    print(f"Время: {result['metadata']['time_seconds']:.2f}s")

Объяснить термин

# Объяснение медицинского термина
result = docmentor.explain_term("Тахикардия")

if result["status"] == "success":
    print(result["explanation"])

Прямой доступ к RAG Pipeline

# Для продвинутого использования
from core.llm import PromptTemplates

# Дифференциальная диагностика
symptoms = ["Боль в груди", "Одышка", "Потливость"]

result = docmentor.rag_pipeline.differential_diagnosis(symptoms)

if result["status"] == "success":
    print(result["diagnosis"])

🎨 Интеграция в Streamlit UI

Обновленный app/Home.py будет включать:

import streamlit as st
from core import DocMentorCore

# Initialize with LLM
if 'docmentor' not in st.session_state:
    st.session_state.docmentor = DocMentorCore(
        storage_path="./data",
        enable_llm=True  # Auto-detect model
    )

# AI Mode toggle
use_ai = st.toggle("🤖 AI режим", value=True)

if user_question:
    if use_ai and st.session_state.docmentor.is_llm_available():
        # AI answer
        result = st.session_state.docmentor.ask_ai(user_question)
        st.markdown(result["answer"])
    else:
        # Simple vector search
        results = st.session_state.docmentor.search(user_question)
        # Display chunks...

🔧 Архитектура

Компоненты

core/llm/
├── __init__.py              # Экспорты
├── llm_manager.py           # Управление моделью (загрузка, генерация)
├── prompt_templates.py      # Промпты для медицины
├── rag_pipeline.py          # RAG: поиск + контекст + генерация
└── model_downloader.py      # Скачивание моделей

RAG Pipeline Flow

1. Студент задает вопрос
   ↓
2. Векторный поиск → топ-K релевантных фрагментов из учебников
   ↓
3. Формирование промпта: system + контекст + вопрос
   ↓
4. LLM генерация → умный ответ
   ↓
5. Возврат ответа + источники + метаданные

Промпт-шаблоны

1. Question Answering (question_answering)

  • Ответы на вопросы студентов с контекстом

2. Term Explanation (explain_term)

  • Объяснение медицинских терминов

3. Differential Diagnosis (differential_diagnosis)

  • Дифференциальная диагностика по симптомам

4. Virtual Patient (virtual_patient_response)

  • Симуляция диалога с пациентом

5. Answer Checking (check_answer)

  • Проверка и обратная связь на ответы студента

⚙️ Оптимизация для M4

Рекомендуемые настройки

llm = LLMManager(
    model_path="models/qwen2.5-7b-instruct-q4_k_m.gguf",
    n_ctx=4096,        # Контекстное окно
    n_threads=8,       # M4 имеет 10 ядер (8 для LLM)
    use_metal=True,    # GPU acceleration
    temperature=0.7,   # Баланс креативность/точность
    max_tokens=512     # Длина ответа
)

Квантизация

Мы используем Q4_K_M квантизацию:

  • Q4 = 4-bit weights (меньше размер, быстрее)
  • K_M = K-quants medium (средний баланс)

Другие варианты:

  • Q5_K_M - чуть лучше качество, медленнее
  • Q8_0 - почти как fp16, но большой размер
  • Q2_K - очень быстрая, но низкое качество

Ожидаемая производительность

MacBook Air M4 16GB:

Модель Размер RAM Usage Скорость Качество
Qwen2.5-3B Q4 2 GB ~3.5 GB 40-60 t/s Хорошее
Qwen2.5-7B Q4 4.5 GB ~6 GB 25-35 t/s Отличное
OpenBioLLM-8B Q4 5 GB ~7 GB 20-28 t/s Медицинское

📊 Мониторинг

Статистика LLM

# Получить статистику
stats = docmentor.get_llm_stats()

print(f"Всего запросов: {stats['total_requests']}")
print(f"Токенов сгенерировано: {stats['total_tokens_generated']}")
print(f"Средняя скорость: {stats['average_tokens_per_second']:.1f} t/s")

Логирование

import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("core.llm")

Увидишь:

INFO - Model loaded successfully!
INFO - Context window: 4096
INFO - Threads: 8
INFO - Metal acceleration: True
INFO - Generated 150 tokens in 5.2s (28.8 t/s)

❓ FAQ

Как выбрать между Qwen и OpenBioLLM?

Qwen2.5-7B если:

  • ✅ Приоритет русский язык
  • ✅ Нужна универсальность
  • ✅ Хочешь лучший баланс

OpenBioLLM-8B если:

  • ✅ Работаешь в основном на английском
  • ✅ Нужна максимальная медицинская специализация
  • ✅ Готов пожертвовать русским

Сколько RAM нужно?

Минимум:

  • 8 GB - Qwen2.5-3B
  • 16 GB - Qwen2.5-7B (рекомендуется)
  • 16 GB+ - OpenBioLLM-8B

Можно ли использовать GPU?

Да! use_metal=True включает Metal acceleration на Apple Silicon.

Проверь в логах:

n_gpu_layers: 99  # Все слои на GPU

Модель генерирует медленно?

  1. Попробуй Qwen2.5-3B (легче)
  2. Уменьши n_ctx (меньше контекст)
  3. Уменьши max_tokens (короче ответы)
  4. Проверь use_metal=True

Как обновить модель?

# Скачай новую модель
python setup_llm.py

# Укажи путь при инициализации
docmentor = DocMentorCore(
    llm_model_path="./models/новая-модель.gguf"
)

🔮 Будущие улучшения

Планируется добавить:

Phase 4.1: Расширенные промпты

  • Промпты для каждой специальности (Педиатрия, Терапия, Хирургия)
  • Генерация тестовых вопросов
  • Создание клинических сценариев

Phase 4.2: Fine-tuning

  • Файнтюнинг на русских медицинских данных
  • Создание датасета из учебников
  • LoRA адаптеры для специализаций

Phase 4.3: Multimodal

  • Интеграция LLaVA для анализа медицинских изображений
  • Распознавание рентгенов, КТ, МРТ

📚 Ресурсы

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

HuggingFace Repos


🤝 Поддержка

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

  1. Проверь логи: python test_llm.py
  2. GitHub Issues: DocMentor/issues
  3. Telegram: @Turayev_Temur

Версия: 2.1.0 Дата: Декабрь 2024 Автор: Temur Turayev Оптимизировано для: MacBook M4 16GB