Документация по интеграции медицинского языкового модели в 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
# Из корня проекта
python setup_llm.pyЭтот скрипт:
- Установит
llama-cpp-python(с Metal support) - Установит
huggingface-hubдля скачивания моделей - Предложит скачать рекомендуемую модель
При запуске 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 токенов/сек
- Описание: Специально обучена на медицинских данных
python test_llm.pyЗапустит 6 тестов:
- ✅ Загрузка модели
- ✅ Простая генерация текста
- ✅ Чат формат
- ✅ Промпт-шаблоны
- ✅ RAG Pipeline
- ✅ Бенчмарк производительности
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 готов к работе!")# Вопрос с контекстом из учебников
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"])# Для продвинутого использования
from core.llm import PromptTemplates
# Дифференциальная диагностика
symptoms = ["Боль в груди", "Одышка", "Потливость"]
result = docmentor.rag_pipeline.differential_diagnosis(symptoms)
if result["status"] == "success":
print(result["diagnosis"])Обновленный 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 # Скачивание моделей
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)
- Проверка и обратная связь на ответы студента
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 | Медицинское |
# Получить статистику
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)
Qwen2.5-7B если:
- ✅ Приоритет русский язык
- ✅ Нужна универсальность
- ✅ Хочешь лучший баланс
OpenBioLLM-8B если:
- ✅ Работаешь в основном на английском
- ✅ Нужна максимальная медицинская специализация
- ✅ Готов пожертвовать русским
Минимум:
- 8 GB - Qwen2.5-3B
- 16 GB - Qwen2.5-7B (рекомендуется)
- 16 GB+ - OpenBioLLM-8B
Да! use_metal=True включает Metal acceleration на Apple Silicon.
Проверь в логах:
n_gpu_layers: 99 # Все слои на GPU
- Попробуй Qwen2.5-3B (легче)
- Уменьши
n_ctx(меньше контекст) - Уменьши
max_tokens(короче ответы) - Проверь
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 для анализа медицинских изображений
- Распознавание рентгенов, КТ, МРТ
- llama.cpp - C++ библиотека
- llama-cpp-python - Python биндинги
- Qwen2.5 - Документация модели
- GGUF Format - Спецификация формата
Если возникли проблемы:
- Проверь логи:
python test_llm.py - GitHub Issues: DocMentor/issues
- Telegram: @Turayev_Temur
Версия: 2.1.0 Дата: Декабрь 2024 Автор: Temur Turayev Оптимизировано для: MacBook M4 16GB