Skip to main content
Glama

MEVA

Medical Evidence Verification Agent

Что делает: MEVA оценивает, подкреплены ли утверждения о медицинских записях, сгенерированные ИИ, извлечёнными синтетическими данными FHIR, с помощью детерминированного (не на основе ИИ) верификатора — без диагностики, без медицинских рекомендаций, без реальных данных пациентов.

🧪 Живая песочница

Попробуйте MEVA в браузере — без Ollama, без API-ключа, без установки.

▶ Открыть живую песочницу

  • Только синтетические данные — 21 вымышленный пациент, сгенерированный Synthea

  • Детерминированный верификатор — каждый результат получается из простого сопоставления доказательств на Python, а не из мнения модели

  • В публичной песочнице не запускается ИИ-модель — вы сами формулируете утверждение, и MEVA проверяет его по реальным записанным (синтетическим) данным

Попробовать живую песочницу · Быстрый старт · Методология бенчмарков · Участие

MEVA — это не медицинский чат-бот, не диагностический ИИ, не инструмент поддержки клинических решений, не система рекомендаций по лечению и не медицинское устройство. Она не прошла клиническую валидацию. Все данные пациентов на 100% синтетические. Полное заявление см. в разделе Область применения и безопасность ниже и в файле docs/safety-and-scope.md.

Related MCP server: MediLinkAI

MEVA в действии

Скриншоты из публичной онлайн-песочницы — только синтетические данные, не медицинские рекомендации; в размещённой песочнице не запускается ИИ-модель (каждый результат получен детерминированным верификатором MEVA, а не мнением модели).

Guided Mode

Guided Mode

Guided Mode — выберите вымышленного пациента и проверьте утверждение с помощью простого процесса на обычном английском языке.

Проверка на основе доказательств

Проверка на основе доказательств

MEVA проверяет утверждение на соответствие записанным синтетическим данным FHIR и возвращает SUPPORTED, CONTRADICTED, UNSUPPORTED или UNVERIFIABLE.

Advanced Mode

Advanced Mode

Advanced Mode — технический обозреватель доказательств и структурированные элементы управления утверждениями для разработчиков, исследователей и участников проекта.

Зачем нужен MEVA

Локальные ИИ-агенты могут вызывать инструменты, извлекать реальные данные и генерировать структурированный «ответ» — но ничто не заставляет этот структурированный ответ действительно соответствовать доказательствам, которые агент извлёк. MEVA напрямую измеряет этот разрыв с помощью верификатора, который никогда не доверяет сообщению модели о её собственной правильности.

Архитектура

flowchart TD
    A[Synthetic Synthea FHIR data] --> B[MEVA FHIR layer]
    B --> C[MCP tools]
    C --> D[Local AI model - via Ollama]
    D --> E[Natural-language answer]
    E --> F[Claim extraction]
    F --> G[Deterministic evidence verifier]
    G --> H[Benchmark / report]

MEVA поддерживает два режима оценки, которые сообщаются отдельно и никогда не объединяются в одну оценку (см. docs/decoupled-evaluation.md):

  • END_TO_END — тестируемая модель отвечает на вопрос И одновременно кодирует свой ответ в структурированную схему MedicalClaim MEVA за один проход.

  • DECOUPLED — тестируемая модель отвечает только прозой; отдельная фиксированная модель-экстрактор преобразует сохранённую прозу в структурированные утверждения, которые проверяются тем же способом. Это отделяет вопрос «знала ли модель правильный ответ» от вопроса «правильно ли модель отформатировала JSON».

В обоих режимах финальный шаг проверки — сопоставление утверждения с реальными доказательствами — всегда выполняется простым детерминированным кодом на Python. Ни одна LLM никогда не оценивает правильность своей (или чужой) работы.

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

git clone https://github.com/Tanz2024/meva-health-ai
cd meva-health-ai

python3 -m venv .venv
source .venv/bin/activate

pip install -e .

pytest

MEVA предназначена для запуска из клонированной копии этого репозитория (как указано выше — git clone, затем установка в режиме редактирования), а не как отдельный пакет, устанавливаемый откуда-либо ещё. Её синтетические FHIR-фикстуры (data/synthetic/synthea/) и определения бенчмарков (benchmarks/) читаются из путей относительно репозитория, а не поставляются как устанавливаемые данные пакета — pip install собранного wheel/sdist вне клона репозитория не будет иметь доступа к данным пациентов. Это текущая намеренная область применения (исследовательский/инженерный репозиторий, а не распространяемая библиотека) — см. docs/publishing-checklist.md, если это изменится в будущем.

Это запускает весь автономный набор тестов (ИИ-модель не требуется — см. Что работает без ИИ).

Дополнительно — локальный ИИ:

ollama pull qwen3:4b
python3 examples/verify_local.py

Дополнительные выполняемые скрипты см. в examples/, а в docs/local-ai.md — о том, как MEVA взаимодействует с Ollama.

Что работает без ИИ (Ollama не требуется)

Бо́льшая часть MEVA работает вообще без ИИ-модели:

  • Разбор FHIR (src/meva/fhir/)

  • Детерминированная проверка доказательств (src/meva/verification/)

  • Загрузка и валидация набора данных бенчмарка (meva.benchmark.validator)

  • Полный автономный набор тестов (pytest)

  • Примеры проверки верификатора (examples/verify_contradiction_demo.py) — они тестируют собственную логику проверки MEVA на вручную написанном неверном утверждении, без участия живой модели

Ollama нужен только при фактическом запуске локального инференса модели (examples/ask_local.py, examples/chat_local.py) или при извлечении утверждений с помощью модели (examples/run_decoupled_pilot.py, run_decoupled_full.py, run_extractor_fidelity.py).

Синтетические данные

Публичные фикстуры пациентов MEVA (data/synthetic/synthea/patient-01.json ... patient-21.json) генерируются локально, этим проектом, с использованием официального генератора Synthea под лицензией Apache-2.0 (закреплённого за тегом v3.4.0), с фиксированным, документированным и воспроизводимым зерном. Никакие реальные данные пациентов нигде не включены. Полные детали генерации (точная команда, зерно и SHA-256 хэши для каждого файла) приведены в data/synthetic/synthea/PROVENANCE.md. Полную картину, включая причину замены более раннего набора из 18 пациентов (использовавшегося до этапа 8A), см. в docs/synthetic-data.md — тот ранний набор был скопирован из репозитория без указанной лицензии и больше не входит в публичный набор данных (см. docs/historical-sample-data-provenance.md).

Результаты бенчмарков

У MEVA есть два зарегистрированных набора данных бенчмарков, и их нельзя смешивать:

ПУБЛИЧНЫЙ ВОСПРОИЗВОДИМЫЙ НАБОР ДАННЫХ: benchmark v0.4 — полностью построен на локально сгенерированных фикстурах Apache-2.0, указанных выше (53 случая, 16 уникальных пациентов; см. benchmarks/v0.4/manifest.json). Результаты сравнения моделей для v0.4 ожидаются — запуск qwen3:4b/llama3.2:3b против v0.4 ещё не выполнялся.

ИСТОРИЧЕСКИЙ РЕЗУЛЬТАТ РАЗРАБОТКИ: benchmark v0.3 — полные результаты qwen3:4b против llama3.2:3b ниже. Они были измерены на удалённом ранее наборе пациентов (см. выше) — это остаётся корректной исторической записью разработки методологии и результатов, но не является результатом на текущем публичном наборе v0.4, и эти два набора нельзя напрямую сравнивать. Полный отчёт: docs/baseline-results-v0.3.md (числа ниже используют исправленную формулу проверяемого покрытия для этапа 7C2.1 — см. этот документ об истории исправлений; оригинальные, неисправленные числа также там раскрыты, не скрыты).

Победитель не объявляется. Читайте показатель обоснованности вместе с проверяемым покрытием — высокий показатель обоснованности, рассчитанный по очень небольшому числу проверяемых утверждений, выглядит лучше, чем есть на самом деле.

Метрики поиска и структурированного вывода в режиме END_TO_END (v0.3, исторические)

qwen3:4b

llama3.2:3b

Полнота инструментов

1.000

0.981

Точность инструментов

1.000

1.000

Точное совпадение инструментов

1.000

0.962

Полнота доказательств

0.810

0.738

Структурная валидность E2E

0.917

0.087

Проверяемое покрытие E2E

0.656

0.120

Обоснованность E2E

83%

70%

Оценка DECOUPLED (v0.3, историческая; отдельный фиксированный экстрактор qwen3:4b)

qwen3:4b

llama3.2:3b

Проверяемое покрытие DECOUPLED

0.990

0.987

Обоснованность DECOUPLED

89%

80%

Оценка DECOUPLED использует qwen3:4b в качестве фиксированного экстрактора утверждений для сохранённых ответов обеих моделей, включая ответы самого qwen3:4b, — это вносит потенциальное смещение, зависящее от экстрактора, что явно задокументировано в docs/decoupled-evaluation.md. END_TO_END и DECOUPLED отвечают на разные вопросы, и их никогда не следует интерпретировать как «модель стала лучше».

Валидация экстрактора — экстрактор не идеален

Разработка (10 фикстур)

Отложенная выборка (14 неиспользованных фикстур)

Точность

1.000

0.929

Полнота

1.000

0.813

F1

1.000

0.867

Точное совпадение набора утверждений

1.000

0.857

Сохранение отрицательных утверждений

1.000

1.000

Точность атрибутов

1.000

0.750

Не воспринимайте приведённые выше числа покрытия DECOUPLED ~99% как «точность извлечения 99%». Покрытие показывает, какую часть выходных данных экстрактора верификатор смог проверить; числа на отложенной выборке здесь показывают, действительно ли эти выходные данные соответствуют тому, что было сказано в исходном ответе.

Вывод по категории наблюдений

Обе модели набрали необычно низкие баллы на вопросах категории наблюдений: обоснованность qwen3:4b — 20%, llama3.2:3b — 0% (n=10 случаев для каждой). Этап 7D2.2 независимо проверил каждый случай наблюдений на реальных данных FHIR и инструментальном слое MEVA и не обнаружил ни инфраструктурной ошибки, ни ошибки оценки, которые делали бы эти результаты недействительными — 18 из 20 пар «модель-случай» являются подлинными ошибками обоснованности модели. Полный аудит: docs/observation-audit.md. Это описывает поведение бенчмарка, а не клиническую эффективность.

Попробуйте MEVA (только детерминированная проверка, без ИИ-модели)

Четыре способа опробовать детерминированный верификатор MEVA на 21 публичном синтетическом пациенте v0.4 — ни один из них не требует ИИ-модели:

Публичная онлайн-песочница (без установки): Открыть живую песочницу

Локальная браузерная песочница:

pip install -e ".[playground]"
streamlit run streamlit_app.py

Локальный CLI-плейграунд:

python3 examples/playground.py demo
python3 examples/playground.py list-patients
python3 examples/playground.py verify --patient-id <id> --category allergy --assertion present --value "Peanut"

Полный локальный режим ИИ (необязательно, требует Ollama — см. Что работает без ИИ ниже).

Все четыре способа используют один и тот же сервисный слой (meva.playground) и вызывают настоящий, неизменённый верификатор MEVA — вы сами формулируете утверждение (категория/утверждение/значение); MEVA проверяет его по реальным записанным данным и возвращает SUPPORTED/CONTRADICTED/UNSUPPORTED/UNVERIFIABLE с полной информацией о происхождении. Подробности, включая различия между четырьмя режимами: docs/playground.md.

Скриншоты размещённой песочницы (Guided Mode, результат проверки и Advanced Mode) см. в разделе MEVA в действии в начале этого README.

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

Документ

Описание

docs/safety-and-scope.md

Что такое MEVA и чем она не является — прочтите в первую очередь

docs/synthetic-data.md

Происхождение синтетических данных пациентов

docs/mcp-server.md

Слой инструментов MCP

docs/local-ai.md

Как MEVA взаимодействует с локальными моделями Ollama

docs/evidence-verification.md

Детерминированный верификатор

docs/reproducibility.md

Что гарантируют и не гарантируют настройки воспроизводимости

docs/benchmarking.md

Движок бенчмарков

docs/benchmark-dataset.md

Построение и валидация набора данных

docs/model-comparison.md

Методология сравнения нескольких моделей

docs/decoupled-evaluation.md

Почему существуют и END_TO_END, и DECOUPLED

docs/claim-extraction-contract.md

Контракт схемы извлечения утверждений

docs/observation-audit.md

Контрольная проверка категорий наблюдений

docs/baseline-results-v0.3.md

Полный отчёт бенчмарка v0.3 (исторический)

data/synthetic/synthea/PROVENANCE.md

Происхождение генерации публичных фикстур

docs/historical-sample-data-provenance.md

Почему и как был заменён прежний набор пациентов

docs/playground.md

Публичная песочница детерминированного верификатора (CLI)

Область применения и безопасность

MEVA использует только синтетические данные пациентов (сгенерированные Synthea) — никакие реальные данные пациентов не включены и никогда не должны добавляться. Она не выполняет диагностику и не даёт рекомендаций по лечению, а также не имеет клинической валидации. Её метрики (Evidence Grounding Score, Verifiable Claim Coverage и т. д.) — это инженерные/исследовательские бенчмарк-метрики, которые измеряют, соответствуют ли утверждения модели извлечённым доказательствам, а не медицинскую корректность, точность диагностики или безопасность пациентов. Весь ИИ-инференс выполняется только локально через Ollama — MEVA никогда не обращается к платным или облачным ИИ-API. Полное заявление: docs/safety-and-scope.md.

Участие

  1. Выберите issue (или предложите свою)

  2. Сделайте форк репозитория

  3. Создайте ветку

  4. Внесите изменения

  5. Запустите pytest

  6. Откройте pull request

Полная настройка, детали тестирования, а также инструкции по добавлению поддержки FHIR, бенчмарк-кейсов (только синтетические данные), тестов верификатора или модельных адаптеров: CONTRIBUTING.md. Пожалуйста, также прочтите CODE_OF_CONDUCT.md.

Ищете, с чего начать первый вклад?

Посмотрите открытые issues на GitHub: https://github.com/Tanz2024/meva-health-ai/issues

Хорошая отправная точка — issue с меткой good first issue или help wanted.

Дополнительные предлагаемые направления для вклада см. в docs/contributor-issues.md, а инструкции по настройке и отправке — в CONTRIBUTING.md.

Лицензия

Исходный код MEVA и локально сгенерированные синтетические данные распространяются под лицензией Apache License 2.0. Сторонние зависимости и модели имеют собственные лицензии — см. THIRD_PARTY_NOTICES.md. Ранее возникший вопрос о лицензировании публичного распространения (прежний набор пациентов, скопированный из репозитория без объявленной лицензии) был решён на этапе Stage 8A.1 заменой этих данных на локально сгенерированные фикстуры под лицензией Apache-2.0 — полную историю см. в docs/historical-sample-data-provenance.md.

Цитирование

Метаданные для цитирования MEVA v0.1.0 см. в CITATION.cff.

A
license - permissive license
-
quality - not tested
A
maintenance

Maintenance

Maintainers
Response time
Release cycle
1Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    -
    quality
    C
    maintenance
    A clean-room SHARP-on-MCP compliant FHIR R4 MCP server that enables AI agents to interact with any FHIR R4 endpoint using SHARP context headers, without server-side OAuth. It provides clinical tools, lab results, imaging, and interactive MCP-UI dashboards.
    MIT
  • A
    license
    -
    quality
    D
    maintenance
    Clinical decision-support MCP server that lets AI agents reason over live FHIR patient data for medication review, appointment scheduling, and care gap identification.
    7,813
    MIT
  • A
    license
    -
    quality
    C
    maintenance
    A neutral verification court for AI tools that ranks MCP servers by executing them against ground truth and recording results. Enables agents to consult execution records, contribute verdicts, and challenge claims.
    Apache 2.0

View all related MCP servers

Related MCP Connectors

  • Hosted MCP endpoint with realistic fake data for prototyping agents. 12 tools, no setup.

  • Deterministic fact verification for AI agents — checksums & curated data, not guesses.

  • Read-only MCP over an agentic SLR workspace with per-claim citation verification

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Tanz2024/meva-health-ai'

If you have feedback or need assistance with the MCP directory API, please join our Discord server