280개 이상의 piece를 MCP 서버로 노출하는 오픈소스 AI 워크플로 자동화.
한국어는 runchr 제공 번역입니다. 원문 README는 English tool page.
openmed
OpenMed은 로컬 임상 NER 및 HIPAA PII 비식별화를 위한 Apache-2.0 Python SDK로, 2,200개 이상의 의료 모델, 35개 PII 언어, MLX를 지원합니다.
- Install
- pip install openmed
프로젝트 README (번역)
GitHub ↗Written by the project's own authors, not by runchr. Snapshot taken 2026-10-29.
당신의 데이터. 당신의 모델. 당신의 하드웨어.
통제 가능한 하드웨어에서 임상 텍스트를 구조화되고 비식별화된 인사이트로 전환하세요.
OpenMed의 핵심 로컬 런타임은 필요한 모델 아티팩트가 준비된 후 추출 및 비식별화를 수행합니다. 모델 다운로드, 원격 제공자 어댑터, 텔레메트리가 활성화된 경로, 사용자가 구성한 통합은 네트워크를 사용할 수 있습니다. 각 모델 및 데이터셋의 약관을 검토하세요.
PyPI 패키지 ·
Python 3.10+ ·
모델 카탈로그 ·
연구 논문 ·
Apache-2.0 SDK 소스
OpenMedKit ·
Apple Silicon / MLX ·
Android / ONNX Runtime Mobile ·
브라우저 / Transformers.js ·
문서
2,266개 매니페스트 항목 · 35개 모델 기반 PII 언어 · Apache-2.0 SDK
English ·
简体中文 ·
Español ·
Français ·
Deutsch ·
Italiano ·
Português ·
Nederlands ·
العربية ·
हिन्दी ·
తెలుగు ·
日本語 ·
Türkçe ·
فارسی ·
Kiswahili
실제 동작 확인
이 iPhone 예시는 필요한 모델 아티팩트가 준비된 후 OpenMed의 로컬 런타임을 사용합니다:
iPhone에서 OpenMedKit 사용: 임상 노트를 스캔하고, 비식별화하며, 이 구성에서 Apple MLX 처리를 통해 로컬로 임상 신호를 추출합니다.
실시간 PII 비식별화: 이 구성된 로컬 워크플로에서 Nemotron Privacy Filter는 합성 임상 퇴원 문서에서 이름, 주소, ID, 청구 데이터를 마스킹합니다. (표시된 모든 값은 합성입니다.)
30초 예제
from openmed import analyze_text
result = analyze_text (
"Patient started on imatinib for chronic myeloid leukemia." ,
model_name = "disease_detection_superclinical" ,
)
for entity in result . entities :
print ( f" { entity . label :<12 } { entity . text :<28 } { entity . confidence :.2f } " )
# DISEASE chronic myeloid leukemia 0.98
# DRUG imatinib 0.95
필요한 아티팩트가 준비된 후 로컬 런타임을 사용하는 임상 NER 모델입니다.
30초 만에 보는 임상 브리프
소스 체크아웃에서 CPU 전용 합성 계약 데모를 실행하세요:
python examples/v30_clinical_brief.py
# 선택 사항: --model mlx, Apple silicon에 고정된 모델이 이미 캐시된 경우.
내장된 노트를 비식별화하고, 소견을 추출 및 근거화한 다음,
인용된 브리프, 판정, 값이 없는 검토 패킷을 출력합니다. NER/NLI 제공자는
명시적인 합성 테스트 더블이며, 훈련된 모델이나 임상 검증이 아닙니다.
외부 노트 입력은 허용되지 않습니다. MLX 옵션은 지원되지 않는 출력을 거부할 수 있으며,
가드를 우회하지 않습니다. 경계와 로컬 설정은 브리프 가이드
및 데모 스크립트를 참조하세요.
에이전트로 구축하시나요?
소비자 에이전트 사용 가이드로 시작하거나,
큐레이션된 llms.txt 문서 인덱스를 로드하세요.
호출 가능한 로컬 인터페이스의 경우 MCP 서버,
타입 지정 도구 레지스트리, 또는
명령줄 인터페이스를 사용하세요. 바로 사용 가능한
교차 도구 절차는 저장소 스킬 카탈로그에 있습니다.
OpenMed를 선택하는 이유
배포 고려 사항
OpenMed SDK 경계
핵심 런타임
필요한 아티팩트가 준비된 후 로컬에서 처리
선택적 네트워크 경로
다운로드, 원격 어댑터, 텔레메트리가 활성화된 경로, 사용자 통합은 네트워크를 사용할 수 있음
검증
배포 담당자는 모델 및 데이터셋 약관, 프라이버시 동작, 임상 적합성을 검증
인터페이스
지원되는 경우 Python, Swift, Android, 브라우저, 서비스 표면
큐레이션된 모델 카탈로그: 사용 사례에 맞게 각 모델, 라이선스, 데이터셋을 검증하세요.
Safe Harbor 정렬 구성: 18개 식별자 범주를 대상으로 할 수 있으며, 전문가 배포 검토가 여전히 필요하고, SDK 사용 자체가 HIPAA 준수를 확립하지는 않습니다.
지원되는 실행 경로: CPU, CUDA, MLX, 모바일, 서비스, 브라우저 어댑터는 환경과 아티팩트에 따라 다릅니다.
배포 인터페이스: Python, 컨테이너, 서비스, 배치 워크플로는 구성과 검증이 필요합니다.
SDK 소스: Apache-2.0 라이선스로 배포되며, 모델 및 데이터셋 약관은 다양합니다.
Apple에서 온디바이스: Swift, MLX & iOS
지원되는 Apple 하드웨어에서 OpenMed는 필요한 아티팩트가 준비된 후 로컬 처리를 위해 MLX와 OpenMedKit을 사용할 수 있습니다. 모델 획득과 사용자가 구성한 원격 통합은 별도의 네트워크 경계로 남습니다.
// Add OpenMedKit to your app
dependencies: [
. package ( url : " https://github.com/maziyarpanahi/openmed.git " , from : " 3.1.0 " ) ,
]
예상 결과: Swift Package Manager가 OpenMedKit을 해석하고
import OpenMedKit을 앱 타깃에서 사용할 수 있게 합니다.
PII 토큰 분류, Privacy Filter 제품군, 실험적 GLiNER 제품군 제로샷 작업, Laneformer를 사용한 Python MLX-LM 텍스트 생성을 위한 MLX 런타임; 지원되는 토큰 분류 아티팩트에 대한 CoreML 폴백 경로 포함.
지원되는 경우 이식 가능한 모델 명명: MLX 모델 이름은 해당 매핑과 아티팩트가 비 Apple 하드웨어에서 사용 가능할 때 일치하는 PyTorch 체크포인트로 폴백할 수 있습니다.
Apple Silicon에서도 Python: pip install --upgrade "openmed[mlx]" .
가이드: MLX 백엔드 · OpenMedKit (Swift) · CoreML 내보내기
Apple Silicon의 MLX: Privacy Filter에서 CPU PyTorch보다 24–33배 빠름: 추론 단계당 중앙값 지연 시간, 낮을수록 좋음.
Android에서 온디바이스 — Kotlin & ONNX Runtime Mobile
OpenMedKit은 또한 로컬 문서 수집, OCR 핸드오프, PII 마스킹, 토큰 분류 추론을
ONNX Runtime Mobile을 통해 제공하는 네이티브 Android/Kotlin 라이브러리로 제공됩니다.
모바일 모델 저장소에는 안정적인 텐서 이름, 동적 시퀀스 축, 토크나이저 파일, 레이블, Android용 fp32, fp16, INT8, 선택적 .ort 출력이 포함됩니다.
settings.gradle.kts에 범위가 지정된 JitPack 저장소를 추가하세요:
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
maven {
url = uri( " https://jitpack.io " )
content { includeGroup( " com.github.maziyarpanahi " ) }
}
}
}
그런 다음 변경 불가능한 OpenMed v3.1.0 릴리스를 사용하세요:
dependencies {
implementation( " com.github.maziyarpanahi:openmed:v3.1.0 " )
}
로컬 빌드 및 게시 세부 사항은 Android 설치 가이드를 참조하세요.
val model = OpenMedKit .fromDirectory(modelDir)
val entities = model.analyzeText( " Patient Alice Nguyen was seen in cardiology. " )
Android ONNX 프로필은 model.onnx, model_fp16.onnx,
model_int8.onnx, 토크나이저 자산, 레이블, openmed-onnx.json을 생성합니다.
ORT Mobile 지원은 ONNX Runtime 변환 도구가 설치된 경우
최소 빌드 연산자 구성을 기록합니다.
Kotlin 패리티 테스트는 토크나이저 오프셋, 스팬 경계, 디코더
출력을 Python 런타임과 정렬되게 유지합니다.
가이드: Android ONNX 내보내기 ·
Android 스팬 패리티 ·
OpenMedKit Android
Python CPU에서 동일한 ONNX 모델
from openmed import OnnxModel
model = OnnxModel . from_pretrained (
"OpenMed/OpenMed-PII-ClinicalE5-Small-33M-v1-onnx-android"
)
entities = model ( "Patient Alice Nguyen was seen in cardiology." )
브라우저에서 동일한 ONNX 모델
npm install openmed @huggingface/transformers
import { loadOnnxModel } from "openmed" ;
const model = await loadOnnxModel (
"OpenMed/OpenMed-PII-ClinicalE5-Small-33M-v1-onnx-android" ,
) ;
const entities = await model ( "Patient Alice Nguyen was seen in cardiology." ) ;
작동 방식
flowchart LR
A["Clinical text"] --> B["OpenMed<br/>(local-first)"]
B --> C["Medical entities"]
B --> D["PII detected"]
B --> E["De-identified text"]
style B fill:#0D6E6E,stroke:#0A5656,stroke-width:2px,color:#ffffff
style C fill:#D6EBEB,stroke:#0D6E6E,color:#0E1116
style D fill:#F7DCD8,stroke:#C5453A,color:#0E1116
style E fill:#F5E27A,stroke:#A9A088,color:#0E1116
로딩 중
렌더링 결과: 데이터를 클라우드 API로 전송하지 않고 의료 엔티티,
PII 발견 사항, 비식별화된 텍스트를 반환하는 로컬 임상 텍스트 파이프라인.
Agent Skills — 코딩 에이전트에서 OpenMed로 구축
skills/ 카탈로그는 온디바이스 비식별화, 임상 NER, FHIR 내보내기, 평가 및 이를 둘러싼 헬스케어 워크플로를 위한 이식 가능한 Agent Skills를 제공합니다. 동일한 SKILL.md 폴더가 Claude Code, OpenAI Codex, OpenCode 및 호환 에이전트에서 작동합니다. 설치 프로그램은 각 클라이언트의 skills 디렉터리와 교차 클라이언트 ~/.agents/skills 규칙을 사용합니다.
git clone https://github.com/maziyarpanahi/openmed && cd openmed
./install-skills.sh # installs for Claude Code, Codex, OpenCode, and ~/.agents/skills
그런 다음 합성 플레이스홀더를 사용하여 에이전트에게 파이프라인을 요청하세요:
합성 퇴원 노트를 비식별화하고 약물 엔티티를 추출하는 로컬 OpenMed 파이프라인을 구축해줘.
적절한 스킬을 로드하고 온디바이스 파이프라인(openmed.deidentify(...) → openmed.analyze_text(...))을 생성합니다. 일회성 모델 다운로드 후 실제 노트에서 해당 파이프라인을 로컬로 실행하세요. 실제 PHI를 클라우드 호스팅 에이전트 프롬프트에 붙여넣지 마세요. 스킬 카탈로그 및 30초 예제를 참조하세요.
빠른 시작
# Core + Hugging Face runtime (Linux, macOS, Windows; CPU or CUDA)
pip install --upgrade " openmed[hf] "
# Add the REST service
pip install --upgrade " openmed[hf,service] "
# Apple Silicon acceleration (MLX)
pip install --upgrade " openmed[mlx] "
예상 결과:
Successfully installed openmed-...
Python API
from openmed import analyze_text
result = analyze_text (
"Patient received 75mg "
"clopidogrel for NSTEMI." ,
model_name =
"pharma_detection_superclinical" ,
)
print ([( e . label , e . text ) for e in result . entities ])
예제 출력:
[('DRUG', 'clopidogrel'), ('CONDITION', 'NSTEMI')]
REST 서비스
python -m openmed.service.logging \
--host 0.0.0.0 --port 8080
예제 출력:
INFO: Uvicorn running on http://0.0.0.0:8080
GET /health -> 200 OK
GET /health
POST /analyze
POST /pii/extract
POST /pii/deidentify
배치
from openmed import BatchProcessor
p = BatchProcessor (
model_name =
"disease_detection_superclinical" ,
group_entities = True ,
)
results = p . process_texts ([...])
print ( len ( results ), sum ( len ( r . entities ) for r in results ))
print ([( e . label , e . text ) for e in results [ 0 ]. entities [: 1 ]])
예제 출력:
3 7
[('DISEASE', 'leukemia')]
브라우저 / WebGPU
Transformers.js를 통한 브라우저 내 추론을 위해 ONNX 토큰 분류
내보내기를 패키징하세요:
python -m openmed.onnx.convert \
--model dslim/bert-base-NER \
--output dist/example-onnx \
--include-transformersjs
예제 출력:
Exported Transformers.js bundle to dist/example-onnx
import { pipeline } from "@huggingface/transformers" ;
const detector = await pipeline (
"token-classification" ,
"/models/openmed-pii/transformersjs" ,
{ device : "webgpu" } ,
) ;
const entities = await detector ( "Patient Casey Example called 212-555-0198." ) ;
console . log ( entities . slice ( 0 , 2 ) ) ;
예제 출력:
[
{ entity : "NAME" , word : "Casey Example" , score : 0.99 } ,
{ entity : "PHONE" , word : "212-555-0198" , score : 0.98 } ,
]
Transformers.js 내보내기 가이드
오프라인 / 에어갭 환경? model_name(또는 model_id)을 로컬 디렉터리로 지정하면 OpenMed가 Hugging Face Hub에 접속하지 않고 로드합니다:
from openmed import OpenMedConfig , analyze_text
result = analyze_text (
"Patient presents with chronic myeloid leukemia and Type 2 diabetes." ,
model_id = "./models/OpenMed-NER-DiseaseDetect-SuperClinical-434M" ,
config = OpenMedConfig ( device = "cpu" ),
)
for entity in result . entities :
print ( f" { entity . label :<12 } { entity . text :<28 } { entity . confidence :.2f } " )
예제 출력:
DISEASE chronic myeloid leukemia 0.98
DISEASE Type 2 diabetes 0.96
model_id가 로컬 디렉터리를 가리키므로 이 예제는
Hugging Face Hub나 외부 모델 제공자에 접속하지 않습니다.
모델
전문 의료 NER 모델의 큐레이션된 레지스트리; 전체 카탈로그를 둘러보세요.
모델
전문화
엔티티 유형
크기
disease_detection_superclinical
질병 및 상태
DISEASE, CONDITION, DIAGNOSIS
434M
pharma_detection_superclinical
약물 및 의약품
DRUG, MEDICATION, TREATMENT
434M
pii_superclinical_large
PII 및 비식별화
NAME, DATE, SSN, PHONE, EMAIL, ADDRESS
434M
anatomy_detection_electramed
해부학 및 신체 부위
ANATOMY, ORGAN, BODY_PART
109M
gene_detection_genecorpus
유전자 및 단백질
GENE, PROTEIN
109M
프라이버시: PII 감지 및 비식별화
from openmed import extract_pii , deidentify
text = "Patient: John Doe, DOB: 01/15/1970, SSN: 123-45-6789"
# Extract PII with smart merging (preve…
No comments yet.
to comment.