Управление на външен ИИ в болничната система
LOSPOR Hospital поддържа Mistral като незадължителен външен доставчик на ИИ. Водената инсталация пита дали външният ИИ да бъде разрешен, като отговорът по подразбиране е Да. Това е само разрешение на ниво система: ИИ остава недостъпен, докато болничният ИТ екип не въведе ключ за доставчика. Затова има две различни безопасни състояния:
DISABLED_BY_DEPLOYMENT: политиката на болницата не разрешава външен ИИ.PROVIDER_NOT_CONFIGURED: политиката го разрешава, но няма използваем, защитено съхранен ключ за Mistral.
ENABLED се показва само когато и политиката, и ключът са използваеми.
Политиката и ключът са независими. Изключването на ИИ запазва защитения ключ
за евентуално по-късно включване. Премахването на ключа веднага прави всички
функции с ИИ недостъпни, без да променя избраната политика.
Работа през страницата „Състояние“
Само нормална сесия на системния администратор, влязъл с парола, може да
променя политиката, да заменя ключа или да го премахва от /status/control.
Всяко действие отново изисква текущата администраторска парола и причина.
Сесия за аварийно възстановяване през конзолата няма достъп до тези действия.
Промяната в PostgreSQL и одитният запис се записват в една транзакция.
Страницата показва само Mistral, избраната политика, дали доставчикът е настроен и работоспособен, и времената на последните промени. Полето за ключа винаги е празно. Ключът, неговият шифротекст, nonce, автентикационният маркер и ключът за защита никога не се показват в страницата, отговорите, SQLite, одита, описанието на възможностите или журналите.
Модели
Всяка функция използва закрепен модел на Mistral с дата във версията, никога
псевдоним -latest. Така моделът зад клинична функция се сменя само когато
някой го избере.
| Функция | По подразбиране | Предлагат се още |
|---|---|---|
| Предоперативен съветник | mistral-small-2603 | mistral-medium-2508, mistral-large-2512 |
| Разчитане на лабораторни резултати и снимки на монитор | mistral-large-2512 | mistral-medium-2508, mistral-small-2506, ministral-14b-2512 |
Списъкът е от каталога на Mistral, проверен на 13 септември 2026. Добавянето на
модел е промяна във версията. Модели на ИИ в /status/control избира между
тях с причина и администраторска парола, а промяната се одитира като
политиката. Запазено име, което по-късна версия вече не предлага, се заменя с
модела по подразбиране на тази версия.
Mistral спира модели. Когато откаже настроения модел, функцията отговаря с
503 EXTERNAL_AI_MODEL_UNAVAILABLE вместо с обща грешка, а Status записва
AI_PROVIDER_REQUEST_FAILED с причина model-unavailable. Изборът на друг
модел в Status решава проблема; не е нужно обновяване.
Съхранение и възстановяване
Ключът за Mistral преминава еднократно по частния маршрут от „Състояние“ към
API. API веднага го защитава с AES-256-GCM, нов 96-битов nonce и фиксирана
автентикирана връзка local\0MISTRAL\0v1. PostgreSQL съхранява само
шифротекста, nonce, автентикационния маркер, версията на ключа и нетайния
отпечатък на ключа за защита. Този отпечатък открива
несъвпадение след възстановяване, без да се разчита ключът за доставчика. Отделният
32-байтов ключ за защита е достъпен само за API/инструментите чрез
HOSPITAL_EXTERNAL_AI_SEAL_KEY_FILE. Той не се споделя със страницата
„Състояние“ и не е ключът за шифроване на идентификаторите на пациентите.
Файлът съдържа каноничен base64 запис на точно 32 случайни байта. Архивът
съдържа само неговия отпечатък sha256:<hex>. Проверката преди възстановяване
трябва да спре преди промяна на базата данни, ако отпечатъкът липсва или е
различен. При друг ключ възстановената база не може да удостовери и разчете
ключа за доставчика. Истинският ключ се пази и възстановява с останалите
защитени тайни на системата. Той никога не се поставя в архив, манифест,
аргумент на команда, променлива на средата или журнал.
Предаване на незадължителния ключ при първа инсталация
Редът с политиката се създава само ако липсва, според
HOSPITAL_EXTERNAL_AI_DEFAULT (true, освен ако изрично е false, no или
0). Повторното стартиране на началната настройка при обновяване запазва и
политиката, и ключа.
Водената инсталация подава незадължителния ключ само като стандартен вход към еднократната команда. Той никога не е аргумент или променлива на средата:
docker compose --profile tools run --rm -T tools \
./node_modules/.bin/tsx --conditions=react-server \
scripts/configure-hospital-external-ai.ts
Стандартният вход е един ключ за Mistral (до 4096 UTF-8 байта, допуска се един
краен нов ред) или е празен. Празният вход завършва успешно с
{"ok":true,"configured":false,"skipped":true}. При въведен ключ резултатът
съдържа само {"ok":true,"configured":true}. Грешките връщат фиксиран код и
никога не повтарят входа.
Граница преди изпращане на данни
И четирите директни маршрута към доставчика проверяват записаната болнична
политика, пълния защитен набор и съвпадащия отпечатък на ключа за защита, преди
да прочетат клиничното тяло на заявката, да заредят случай за ИИ или да създадат
текст/изображение за изпращане. Те проверяват отново и разчитат ключа за
доставчика едва непосредствено преди връзката с Mistral. Болничният режим никога не използва резервно
MISTRAL_API_KEY. Липсващ, повреден, несъвпадащ или нечетим ключ за защита
води безопасно до PROVIDER_NOT_CONFIGURED.
Публичната безсървърна демонстрация няма маршрут от страницата „Състояние“ и не използва болничната таблица с политика. Нейната съществуваща настройка на доставчика остава отделна от управлението на болничната система.