Перейти к содержанию

Архитектура

Обзор

AI Medical Assistant — монолитное FastAPI-приложение с асинхронными задачами Celery, PostgreSQL (или SQLite в dev), Redis, Chroma (RAG) и статическим фронтендом (Vanilla JS). Кодовая база развивалась из клинического SaaS-стека; поверх него добавлены модули обучения и RAG.

flowchart TB
    subgraph Client
        Browser[Browser]
    end

    subgraph Docker
        App[app :8001 FastAPI]
        Worker[celery worker]
        Beat[celery beat]
        Redis[(redis host :6380)]
        Chroma[(Chroma)]
    end

    subgraph Data
        DB[(PostgreSQL / SQLite)]
        Storage[storage/ age + DICOM]
    end

    subgraph External
        ProxyAPI[ProxyAPI / OpenAI]
        SMTP[SMTP]
        TG[Telegram]
    end

    Browser -->|HTTP/WS| App
    App --> DB
    App --> Redis
    App --> Chroma
    App --> Storage
    App --> ProxyAPI
    Worker --> Redis
    Worker --> DB
    Worker --> Storage
    Worker --> ProxyAPI
    Beat --> Redis
    App --> SMTP
    App --> TG

Слои приложения

Слой Каталог Ответственность
Routes app/routes/ HTTP API, валидация
Services app/services/ Бизнес-логика (tutor, cases, exam, RAG, clinical)
Models app/models/ SQLAlchemy ORM
Tasks app/tasks/ Celery (парсинг, DICOM, бэкап)
Static app/static/ HTML/JS/CSS (tutor, cases, exam, progress)
Auth app/auth.py JWT, регистрация
Access app/services/access.py RBAC

Модули обучения и RAG

Модуль Назначение
Tutor Чат-сессии (ChatSession / ChatMessage), ответы с контекстом RAG
Cases Интерактивные ClinicalCase
Exam Тесты (Test) и проверка ответов
Progress Записи Progress по модулям
RAG Chroma + embeddings; режимы local / external / hybrid

Мультитенантность

Каждая клиника — Tenant с уникальным subdomain. Все запросы фильтруются по tenant_id из JWT.

RBAC

Роли: student, resident, admin, head_of_department, doctor, nurse, researcher, viewer, superadmin.

Проверки в app/services/access.py:

  • can_read_patient, can_write_patient
  • can_upload_document, can_delete_user
  • анонимизация для researcher

Асинхронные задачи

Задача Файл Назначение
parse_document document_task.py PDF/DOCX → текст, диагнозы
process_dicom dicom_task.py DICOM → серии, PNG
run_prediction prediction_task.py GPT / fallback
run_backup backup_task.py age-архив
self_heal self_heal_task.py Redis/Celery health

Шифрование

Файлы документов и DICOM шифруются age перед записью на диск (app/services/encryption.py).

WebSocket

/ws/notifications — push о готовности документов, прогнозов, DICOM.

Frontend

SPA-подобные страницы без фреймворка:

  • обучение: pages/tutor.html, cases.html, exam.html, progress.html
  • клинические: index.html + dashboard.js, login.html, admin.html
  • dicom.html, dicom-viewer.html

CI/CD

GitHub Actions → SSH VPS → deploy.sh production.

Связанные документы