AI-агенты и фоновые воркеры¶
Концепция¶
В MedInsight «агенты» — это Celery-задачи и сервисы, выполняющие автономную работу: парсинг, прогнозы, DICOM, бэкапы.
sequenceDiagram
participant API as FastAPI
participant Redis as Redis
participant Worker as Celery Worker
participant GPT as ProxyAPI
API->>Redis: enqueue task
Worker->>Redis: consume
Worker->>Worker: parse / process
Worker->>GPT: prediction (optional)
Worker->>API: update DB + notify WS
Celery-приложение¶
Файл: app/celery_app.py
celery_app = Celery("medinsight")
celery_app.conf.include = [
"app.tasks.document_task",
"app.tasks.prediction_task",
"app.tasks.dicom_task",
"app.tasks.backup_task",
"app.tasks.self_heal_task",
]
Задачи¶
document_task — парсинг документов¶
- Расшифровать файл (age).
- Извлечь текст (PDF/DOCX).
- NLP: диагнозы, лекарства (
app/services/document_parser.py). - Сохранить
ParsedData, статусparsed. - WebSocket-уведомление.
prediction_task — прогнозы¶
- Собрать контекст пациента + parsed data.
- Вызвать GPT через ProxyAPI (
app/services/gpt_service.py). - При ошибке — rule-based fallback.
- Сохранить
Prediction, уведомить.
dicom_task — DICOM¶
- Расшифровать
.dcm. - Парсинг метаданных (
app/services/dicom_parser.py). - Генерация PNG-кадров (
app/services/dicom_viewer.py). - Шифрование и сохранение.
backup_task — бэкап¶
Архив БД + storage → age → backups/.
self_heal_task — самовосстановление¶
Проверка Redis, перезапуск зависших задач (см. Self-healing).
GPT-сервис¶
app/services/gpt_service.py:
- промпт с клиническим контекстом;
- парсинг JSON-ответа (риски + explanation);
- таймаут и retry.
Запуск локально¶
# Terminal 1
uvicorn app.main:app --reload
# Terminal 2
celery -A app.celery_app worker -l info
# Terminal 3 (опционально)
celery -A app.celery_app beat -l info
Docker:
docker compose up app worker beat redis
Мониторинг задач¶
celery -A app.celery_app inspect active
celery -A app.celery_app inspect registered
Добавление новой задачи¶
- Создать
app/tasks/my_task.pyс@celery_app.task. - Добавить в
celery_app.conf.include. - Вызвать
.delay()или.apply_async()из route/service. - Добавить тест в
scripts/.