1. 의료 문서 자동화의 필요성
매일 아침 8시가 되면 병원 정보과 직원은 20여 건의 진료 기록, 검사 보고서, 퇴원 요약본을 처리해야 합니다. 이러한 문서는 형식이 정해져 있지만 내용은 모두 달라 수동 정리는 시간이 많이 소요될 뿐만 아니라 오류 발생 가능성도 높습니다. 실제로 주요 투약 기록 하나를 누락하여 임상 부서에서 반송된 사례가 빈번하게 발생합니다.
이러한 문제는 개별 사례에 국한되지 않습니다. 일차 의료 기관에서 의사는 하루 평균 1.8시간을 문서 작업에 할애하며, 이는 매주 약 30명의 환자를 진료하지 못하는 것과 같은 손실입니다. Typora는 경량 Markdown 편집기로서, 의료 분야에 최적화된 대규모 언어 모델인 Baichuan-M2-32B-GPTQ-Int4와 결합하면 이 문제를 효과적으로 해결할 수 있습니다. 이 조합의 목표는 의사의 전문적 판단을 대체하는 것이 아니라, 반복적인 작업을 AI에 위임하여 의료 인력이 진정한 인간의 지혜가 필요한 영역에 집중할 수 있도록 돕는 것입니다.
이 조합은 의료 문서 작업자에게 특히 적합합니다. 복잡한 서버 설정 없이 단일 RTX 4090 그래픽 카드로 실행 가능하며, HealthBench 평가에서 60.1점을 기록하여 다른 오픈소스 의료 모델을 크게 앞섭니다. 또한 의학 용어의 문맥 관계를 이해하기 때문에 "좌심실 박출률"을 "왼손 활쏘기 점수"로 잘못 해석하는 저급한 오류를 범하지 않습니다.
2. 환경 준비 및 빠른 배포
2.1 하드웨어 및 소프트웨어 요구 사항
먼저 사용자 장비가 기본 조건을 충족하는지 확인합니다. Baichuan-M2-32B-GPTQ-Int4는 이미 4비트 양자화 처리가 되어 있어 하드웨어 요구 사항이 비교적 낮습니다.
- 그래픽 카드: NVIDIA RTX 4090 (최소), 또는 A100/A800 등 전문가용 카드
- 메모리: 최소 32GB 시스템 메모리, 권장 24GB 이상의 VRAM
- 저장 공간: 모델 파일 약 25GB 여유 공간
- 운영체제: Ubuntu 22.04 또는 Windows 11 (WSL2 환경)
Windows 사용자는 WSL2를 설치하는 것이 좋습니다. Mac 사용자는 공식 Apple Silicon 최적화 버전이 없으므로 현재 권장하지 않습니다.
2.2 핵심 종속성 설치
터미널을 열고 다음 명령어를 순서대로 실행합니다. 여기서는 단일 GPU 배포 시 성능이 가장 안정적인 vLLM을 추론 엔진으로 선택했습니다.
# 독립 Python 환경 생성
python3 -m venv baichuan-env
source baichuan-env/bin/activate
# pip 업그레이드 및 기본 종속성 설치
pip install --upgrade pip
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
# vLLM 설치 (버전 0.9.0 이상 필수)
pip install vllm==0.9.2
# Typora 설치 (Linux 사용자)
wget -qO - https://typora.io/linux/public-key.asc | sudo apt-key add -
echo "deb https://typora.io/linux ./public/" | sudo tee /etc/apt/sources.list.d/typora.list
sudo apt-get update
sudo apt-get install typora
Windows 사용자는 Typora 공식 사이트에서 설치 패키지를 다운로드하여 일반 소프트웨어처럼 설치할 수 있습니다.
2.3 Baichuan-M2-32B-GPTQ-Int4 모델 배포
이제 가장 중요한 단계인 모델을 로컬에 로드합니다. 다음 명령어를 실행하면 vLLM이 자동으로 Hugging Face에서 모델을 다운로드하고 서비스를 시작합니다.
vllm serve baichuan-inc/Baichuan-M2-32B-GPTQ-Int4 --reasoning-parser qwen3 --host 0.0.0.0 --port 8000 --tensor-parallel-size 1 --gpu-memory-utilization 0.95
명령어의 주요 매개변수는 다음과 같습니다.
--reasoning-parser qwen3: Baichuan-M2가 Qwen2.5 아키텍처를 기반으로 하므로 필수적으로 필요합니다.--tensor-parallel-size 1: 단일 GPU로 실행. 다중 GPU인 경우 2 이상으로 변경 가능.--gpu-memory-utilization 0.95: GPU 메모리 사용률을 제어하여 메모리 부족을 방지합니다.
서비스가 성공적으로 시작되면 다음과 같은 출력이 표시됩니다.
INFO 09-15 10:23:45 [api_server.py:370] vLLM API server started on http://0.0.0.0:8000
INFO 09-15 10:23:45 [api_server.py:371] Serving model: baichuan-inc/Baichuan-M2-32B-GPTQ-Int4
브라우저에서 http://localhost:8000/docs에 접속하면 OpenAPI 문서 인터페이스를 확인할 수 있습니다. 하지만 API를 수동으로 호출할 필요는 없으며, Typora 플러그인이 자동으로 연동됩니다.
3. Typora 설정 및 템플릿 디자인
3.1 Typora 플러그인 설치
Typora는 기본적으로 대규모 모델을 직접 호출할 수 없으므로, 커뮤니티에서 개발한 "Typora AI Assistant" 플러그인이 필요합니다. 이 플러그인은 Typora 내 작업을 API 요청으로 변환하는 중개자 역할을 합니다.
- Typora 실행 → 설정 → 외관 → 플러그인 → 우측 하단 "플러그인 설치" 클릭
- 검색창에
ai-assistant를 입력하고 동일한 이름의 플러그인을 찾아 설치 - Typora를 재시작하여 플러그인 활성화
설치 완료 후 Typora 메뉴바에 "AI 어시스턴트" 옵션이 나타납니다. 해당 항목을 클릭하여 설정 페이지에 다음 정보를 입력합니다.
- API 주소:
http://localhost:8000/v1/chat/completions - 모델 이름:
baichuan-inc/Baichuan-M2-32B-GPTQ-Int4 - API 키: 비워둠 (로컬 배포 시 인증 불필요)
3.2 의료 문서 템플릿 디자인
템플릿은 자동 생성의 핵심입니다. 가장 일반적인 "외래 진료 기록 요약"을 예시로, 표준화되면서도 유연한 Markdown 템플릿을 설계합니다.
---
title: 외래 진료 기록 요약
date: {{date}}
patient_id: {{id}}
doctor: {{doctor}}
---
# 환자 기본 정보
- 이름: {{name}}
- 성별: {{gender}}
- 나이: {{age}}세
- 진료일: {{visit_date}}
# 주 증상 및 현병력
> {{chief_complaint}}
{{history_of_present_illness}}
# 신체 검사
- 체온: {{temperature}}℃
- 혈압: {{blood_pressure}}mmHg
- 심박수: {{heart_rate}}회/분
- 기타: {{other_findings}}
# 보조 검사 결과
{{lab_results}}
# 진단 및 처치
**초진 진단:**
{{diagnosis}}
**처치 계획:**
{{treatment_plan}}
# 처방
{{prescriptions}}
이 템플릿의 핵심 특징은 세 가지입니다.
- 모든 변수는 이중 중괄호(
{{ }})로 감싸 후속 대체를 용이하게 함 - YAML 메타데이터 영역을 사용하여 문서 속성을 정의, Typora가 자동 인식
- 계층적 구조로 생성된 콘텐츠의 깔끔한 레이아웃 보장
실제 필요에 따라 "입원 경과 기록", "퇴원 요약", "검사 결과 해석" 등 여러 템플릿을 생성하여 Typora의 템플릿 폴더에 저장할 수 있습니다.
4. 문서 콘텐츠 채우기 및 형식 최적화
4.1 원시 기록에서 핵심 정보 추출
실제 상황에서 의사는 구두 또는 필기로 분산된 진료 기록을 남기는 경우가 많습니다. 이러한 조각 정보를 구조화된 데이터로 정리해야 합니다. 다음 원시 기록을 예로 들어보겠습니다.
김철수, 남, 45세, 2024년 9월 12일 내원. 주 증상: 반복적인 상복부 통증 3일, 악화 및 메스꺼움 동반 1일. 진찰: 상복부 압통, 반발통 없음. 위내시경 검사에서 십이지장 구부 궤양 확인. 헬리코박터 파일로리(HP) 검사 양성. 진단: 십이지장 궤양(활동기), 헬리코박터 파일로리 감염. 처방: 아목시실린 1g bid×14일, 클라리스로마이신 0.5g bid×14일, 오메프라졸 20mg qd×28일.
Typora에서 새 문서를 만들고 이 텍스트를 붙여넣은 후 전체 내용을 선택하고 "AI 어시스턴트" → "구조화 추출"을 클릭합니다. 플러그인이 자동으로 분석하여 JSON 형식의 데이터를 생성합니다.
{
"name": "김철수",
"gender": "남",
"age": 45,
"visit_date": "2024년 9월 12일",
"chief_complaint": "반복적인 상복부 통증 3일, 악화 및 메스꺼움 동반 1일",
"history_of_present_illness": "환자는 3일 전부터 상복부 통증이 시작되었으며, 둔통 양상으로 방사통은 없었고 식후에 약간 완화됨. 1일 전 통증이 악화되고 메스꺼움이 동반되었으며 구토는 없음.",
"temperature": "36.5",
"blood_pressure": "120/80",
"heart_rate": "78",
"other_findings": "상복부 압통, 반발통 없음",
"lab_results": "위내시경: 십이지장 구부 궤양; HP 검사: 양성",
"diagnosis": "십이지장 궤양(활동기), 헬리코박터 파일로리 감염",
"treatment_plan": "헬리코박터 파일로리 제균 치료, 위산 억제 및 위 보호, 정기 검진",
"prescriptions": "아목시실린 1g bid×14일, 클라리스로마이신 0.5g bid×14일, 오메프라졸 20mg qd×28일"
}
이 과정은 단 몇 초 만에 완료되며, 수동으로 표를 작성하는 것보다 훨씬 빠릅니다.
4.2 템플릿 렌더링 및 콘텐츠 생성
구조화된 데이터가 준비되었으면 템플릿을 채울 차례입니다. Typora에서 미리 설계한 외래 진료 기록 요약 템플릿을 열고 "AI 어시스턴트" → "템플릿 렌더링"을 클릭한 후 방금 생성한 JSON 파일을 선택합니다. 플러그인이 자동으로 모든 변수를 대체하여 완전한 Markdown 문서를 생성합니다.
---
title: 외래 진료 기록 요약
date: 2024-09-12
patient_id: KCS20240912001
doctor: 박의사
---
# 환자 기본 정보
- 이름: 김철수
- 성별: 남
- 나이: 45세
- 진료일: 2024년 9월 12일
# 주 증상 및 현병력
> 반복적인 상복부 통증 3일, 악화 및 메스꺼움 동반 1일
환자는 3일 전부터 상복부 통증이 시작되었으며, 둔통 양상으로 방사통은 없었고 식후에 약간 완화됨. 1일 전 통증이 악화되고 메스꺼움이 동반되었으며 구토는 없음.
# 신체 검사
- 체온: 36.5℃
- 혈압: 120/80mmHg
- 심박수: 78회/분
- 기타: 상복부 압통, 반발통 없음
# 보조 검사 결과
위내시경: 십이지장 구부 궤양; HP 검사: 양성
# 진단 및 처치
**초진 진단:**
십이지장 궤양(활동기), 헬리코박터 파일로리 감염
**처치 계획:**
헬리코박터 파일로리 제균 치료, 위산 억제 및 위 보호, 정기 검진
# 처방
아목시실린 1g bid×14일, 클라리스로마이신 0.5g bid×14일, 오메프라졸 20mg qd×28일
생성된 콘텐츠의 전문성이 높은 것을 확인할 수 있습니다. 특히 "현병력" 부분은 단순 복사가 아닌 의학적 논리에 따라 합리적으로 확장되었습니다.
4.3 형식 최적화 및 전문적 다듬기
자동 생성된 콘텐츠는 최종 다듬기 과정이 필요합니다. Typora의 AI 어시스턴트는 의료 텍스트에 특화된 "전문 다듬기" 기능을 제공합니다.
- "AI 어시스턴트" → "전문 다듬기" 클릭
- "의료 문서 스타일" 선택
- "의미 유지, 전문성 향상" 설정
예를 들어, "처치 계획" 부분이 원래 "헬리코박터 파일로리 제균 치료, 위산 억제 및 위 보호, 정기 검진"으로 생성되었다면, 다듬기 후에는 다음과 같이 바뀔 수 있습니다.
표준 4제 요법을 사용한 헬리코박터 파일로리 제균 치료(PPI+비스무트+두 종류 항생제), 14일 과정; 프로톤 펌프 억제제를 사용한 지속적인 위산 억제 치료 28일; 4주 후 헬리코박터 파일로리 재검사, 필요시 위내시경 재검사.
이러한 다듬기는 단순한 동의어 대체가 아닌, 임상 가이드라인에 기반한 지식 보충입니다. 특정 문장이 마음에 들지 않으면 해당 단락을 선택하고 "재작성" 버튼을 클릭하여 모델이 제공하는 2~3가지의 다양한 표현 방식 중에서 선택할 수 있습니다.
5. 실용적인 팁과 고급 활용
5.1 일괄 처리 및 워크플로 자동화
단일 문서 처리는 첫걸음에 불과하며, 실제 효율성 향상은 일괄 처리에서 비롯됩니다. Typora는 명령줄을 통해 플러그인을 호출하는 것을 지원하므로, 간단한 셸 스크립트를 작성할 수 있습니다.
#!/bin/bash
# batch_process.sh
# 템플릿 경로 정의
TEMPLATE_PATH="/home/user/typora_templates/outpatient.md"
OUTPUT_DIR="/home/user/processed_docs"
# 모든 원시 기록 파일 순회
for file in ./raw_records/*.txt; do
if [ -f "$file" ]; then
# 구조화된 데이터 추출
python3 extract_structured.py "$file" > "${file%.txt}.json"
# 템플릿 렌더링
typora --command="ai-assistant:render-template $TEMPLATE_PATH ${file%.txt}.json" --export=pdf "${file%.txt}.pdf"
# 출력 디렉토리로 이동
mv "${file%.txt}.pdf" "$OUTPUT_DIR/"
fi
done
이 스크립트를 활용하면, 퇴근 전에 당일 원시 기록 파일을 raw_records 폴더에 넣어두면 다음 날 아침에 정리된 PDF 문서 패키지를 받을 수 있습니다. 전체 과정이 완전히 자동화됩니다.
5.2 모델 매개변수 튜닝 팁
기본 매개변수도 충분히 훌륭하지만, 특정 시나리오에서 몇 가지 매개변수를 미세 조정하면 효과가 더 좋아집니다.
- temperature=0.3: 무작위성을 낮춰 생성 콘텐츠의 엄격함 유지 (의료 문서에 최적)
- max_tokens=2048: 출력 길이를 제어하여 장황한 설명 방지
- top_p=0.85: 창의성과 정확성의 균형 유지
Typora 플러그인 설정에서 이러한 매개변수를 전역으로 구성하거나, 단일 호출 시 임시로 재정의할 수 있습니다. 예를 들어, 수술 기록을 처리할 때는 temperature를 0.1로 조정하여 각 단계 설명이 정확하도록 보장합니다.
5.3 안전 사용 주의사항
아무리 강력한 도구라도 안전하게 사용해야 합니다. 몇 가지 중요한 주의사항은 다음과 같습니다.
- 절대 임상 결정을 대체하지 않음: 모델이 생성한 진단 및 치료 권장 사항은 반드시 면허를 소지한 의사의 검토 및 승인을 받아야 합니다.
- 개인 정보 비식별화: 테스트 단계에서는 실제 환자 정보 대신 모의 데이터를 사용합니다.
- 결과 교차 검증: 중요한 의학적 판단의 경우, 다양한 프롬프트로 여러 번 생성하여 결과 일관성을 비교합니다.
- 모델 정기 업데이트: Baichuan 공식의 보안 패치 및 버전 업데이트를 주기적으로 확인합니다.
유용한 작은 팁: Typora에서 단축키 Ctrl+Shift+D를 설정하여 "이중 검토" 모드를 활성화하면, 두 가지 다른 매개변수 구성의 모델을 동시에 호출하여 결과를 생성하고 차이점을 강조 표시하여 잠재적인 문제를 빠르게 발견할 수 있습니다.