CoolFace
Apppublic

cave87/medical-agent

sourceHugging Facemitupdated 3d agoView on Hugging Face
0likes
App README

Medical-Agent

바이브 논문(vibe paper) 코파일럿 — 사람이 의학 논문을 써내려가는 흐름을 AI가 실시간으로 거든다. KYRBS/KNHANES 공중보건 데이터 → 실시간 통계(survey-weighted) → Figure → Word/EndNote 풀셋.

![Tests](scripts/testragsmoke.py) ![UI Eval](scripts/uieval.py) [![Function E2E](https://img.shields.io/badge/E2E-10%2F10-brightgreen)](scripts/e2efunctions.py)

✨ 핵심 기능 (2026-06-15 현재)

  • —🗨 채팅 우선 UX — 좌측 대화 + 우측 실시간 docx 프리뷰. assistant 응답마다 📌 핀 → 9 sections 박기 → 양방향 binding (다음 turn에 LLM이 본문 snapshot 보고 응답).
  • —🧰 Native tool-use 디스패치 — Anthropic tooluse 블록으로 patchpreview / kyrbsstat / pubmedsearch / strobecheck / ragsearch 등 18 tool 자동 호출 (regex 파싱 0).
  • —📎 컴포저 (30+ 확장자) — PDF/DOCX/PPTX/XLSX/SPSS .sav/STATA .dta/이미지(Vision LLM)/노트북/CSV. markitdown + 전용 fallback.
  • —🤖 모델 picker — Haiku(빠름) / Sonnet(균형, 기본) / Opus(최고품질) 칩 선택. LLM_MODEL_OVERRIDE 환경변수로 라우팅.
  • —📊 KNHANES domain (KYRBS 동격) — 12 wave (2013-2024) + FLI/HSI/MASLD/MetALD/ALD 2023 신정의 자동 분류 + IDF MetSx + eGFR CKD-EPI 2021 + Asian BMI cat + study phase (IV-IX) + survey-weighted preset (kstrata/psu/wt_itvex).
  • —🔍 라이브 PubMed novelty — NCBI eutils 라이브 호출 (evidence_reader). 검색 0편이면 검증 query를 chat에 제시.
  • —🧠 단일 정본 ResearchState (RESEARCH_STATE_SPEC) — manuscript.sections 유일 진실원본 + provenance에 dataset_version + registry_version 핀 = 결정적 재실행. events.db 기반 checkpoint/restore/branch/resume — "git for research".
  • —🌐 3-Lane streaming — HOT(<300ms status) / STREAM(tool 이벤트+토큰) / BACKGROUND(confidence/provenance 사후 배지). 빈 spinner 0.
  • —🔐 F5 / 핸드오프 안전 — ?pid= URL query param + Supabase mirror + auto-scroll. 새로고침해도 같은 대화 복원.

🚀 빠른 시작 (Docker · 권장)

bash
docker compose up -d --build
# 메인:                            http://localhost:8501
# Lovable 양식 (Sapphire Glass):  http://localhost:8501/lovable_home
# 프로젝트 워크스페이스:           http://localhost:8501/project_workspace
# 로그: docker compose logs -f

두 모드 단일 entry 동거 (2026-05-27): Streamlit 자동 멀티페이지로 /lovable_home 및 /project_workspace URL 라우팅. 기존 단위 기능 화면(메인)은 그대로 유지되며 Lovable 모드 개발 시 참고/폴백용으로 살아있음. Streamlit Cloud 배포도 동일 URL 양식 (/lovable_home)으로 접근.

⚠️ Lovable 모드는 현재 UX/UI 디테일 + e2e 기능 미완성 — 점진 개선 중. 안정 동작이 필요한 작업은 메인 페이지 사용 권장.

API 키는 .env에 (admin 전역 키로 모든 사용자에 적용):

env
ANTHROPIC_API_KEY=sk-ant-...
OPENAI_API_KEY=sk-proj-...
GOOGLE_API_KEY=AIzaSy...   # Gemini (무료 폴백)

3중 자동 폴백 (Claude → OpenAI → Gemini), 예산 80% 도달 시 Gemini로 강제 다운그레이드.


🏗️ 아키텍처 (한눈에)

┌─────────────────────────────────────────────────────────────┐
│  UI Layer        app/streamlit_app.py                       │
│                  ↳ 논문 작업실 · 통계 코드 · 인용/레퍼런스   │
├─────────────────────────────────────────────────────────────┤
│  Tool Registry   src/tools/__init__.py                      │
│                  ↳ TOOLS dict + render_result(st.dialog)    │
├─────────────────────────────────────────────────────────────┤
│  Domain Logic    src/data/      ↳ KYRBS/KNHANES loader      │
│                  src/research/  ↳ paper_writer, peer review │
│                  src/export/    ↳ figure/table/citation     │
│                  src/llm/       ↳ failover client + budget  │
├─────────────────────────────────────────────────────────────┤
│  Runtime Layer   src/runtime/   ↳ events/tasks/idempotency/ │
│                                   heartbeat (SQLite WAL)    │
│                  src/memory/    ↳ router/scorer/lifecycle/  │
│                                   gate/conversation         │
├─────────────────────────────────────────────────────────────┤
│  Persistence     data/raw/      ↳ KYRBS 2005~2025 .sav      │
│                  data/runtime/  ↳ events.db/tasks.db/...    │
│                  data/exports/  ↳ Figure*.png/.docx/.xml    │
│                  data/chromadb/ ↳ 10k+ paper chunks (RAG)   │
├─────────────────────────────────────────────────────────────┤
│  MCP Server      mcp_server.py — Claude Desktop·외부 agent  │
│                  공통 backend (memory/task/events/budget)   │
└─────────────────────────────────────────────────────────────┘

자세한 모듈 레지스트리 → ARCHITECTURE.md 디자인 토큰 (색·폰트·spacing) → DESIGN.md


📐 핵심 원칙 (CLAUDE.md 규칙)

  1. 1.사람이 주인공 — AI 자동 생성은 보조, 메인은 직접 쓰는 흐름
  2. 2.장기 메모리 자가 진화 — src/memory/router.py가 단일 진입점, lifecycle decay/충돌해결 자동
  3. 3.모델 하드코딩 금지 — src/config/models.py 경유
  4. 4.LLM 호출은 failover 경유 — get_llm_client() 만 사용, 직접 client 생성 금지
  5. 5.로컬 + 클라우드 — 항상 로컬 먼저, Supabase는 선택
  6. 6.데이터 무결성 잠금 — 환각 차단 (memory_gate.assess), 숫자/통계 토큰 보존

전체 11 규칙 → CLAUDE.md


🧪 검증 (다층)

레이어명령무엇
① 임포트 + RAGpython scripts/test_rag_smoke.py모든 모듈 import + ChromaDB 절대기준
② 코드 무결성python scripts/e2e_diagnose.pyLLM 무관 정적 분석 + code_graph
③ 함수 E2Epython scripts/e2e_functions.py10/10 핵심 함수 실데이터 검증
④ 통계 회귀python scripts/prove_stata_e2e.py실 KYRBS → StatBridge → ZCB aOR 재현
⑤ UI 회귀python scripts/ui_eval.pyPlaywright 49 assertion · 실 브라우저
⑥ 인용 워크플로python scripts/e2e_citation.py9/9 PubMed + EndNote 풀셋

📊 ZCB ↔ 우울 논문 재현 (대표 사례)

bash
# 1. 실 KYRBS 2025 → 모든 분석 데이터 계산
docker compose exec learner python scripts/compute_all_figure_data.py

# 2. 4 figure 생성 (Stata v2.4 캐노니컬 매칭)
docker compose exec learner python scripts/build_paper_figures.py

# 3. EndNote CWYW 필드 임베드 Word docx
docker compose exec learner python scripts/build_endnote_docx.py \
    data/exports/ZCB_paper_v2.4_FINAL.md ZCB_paper_endnote

산출 → data/exports/:

  • —Figure{1,2,3}_*.{png,pdf} — 13단계 sample flow / 성별 예측확률 / forest plot
  • —ZCB_paper_v2.4_FINAL.md — 논문 본문 (paired with ZCB_v2.4_canonical.do)
  • —ZCB_paper_v2.4_yoosun_deep_endnote.docx — EN.CITE 필드 28개 임베드

🤖 외부 agent 연동 (MCP)

mcp_server.py로 Claude Desktop / Cursor / 다른 AI agent가 같은 backend 사용:

bash
python mcp_server.py --port 8765

Claude Desktop 설정 (~/.config/claude/claude_desktop_config.json):

json
{
  "mcpServers": {
    "medical-agent": {
      "url": "http://localhost:8765/mcp",
      "headers": { "Authorization": "Bearer ma-YOUR_API_KEY" }
    }
  }
}

노출 도구 (15+):

  • —분석: search_papers, check_novelty, generate_research_topics
  • —메모리: memory_write, memory_recall, memory_lifecycle_tick
  • —작업: task_list_unfinished, task_status
  • —감사: events_recent, events_replay
  • —예산: budget_status, budget_set_caps

🛡️ 안전 + 품질 레이어 (12번 섹션 of ARCHITECTURE.md)

모든 LLM 출력은 다음을 자동 통과:

단계모듈차단/검증
Prompt 합성prompts/*.md + prompt_loader + build_base_systemmedical_core/safety/yoosun v1.0.0 자동 주입
Truth 분류safety/truth_hierarchy + memory/routerPROJECT_FACT 이상만 LLM 컨텍스트 주입 가능
환각 차단memory/memory_gate.assessquarantine 자동 + audit_trail 기록
임상 키워드safety/physician_review처방/진단/복용량 → 검토 큐 자동 격리
인용 groundingsafety/citation_groundingDOI CrossRef 검증 + orphan ref 감지
본문 일관성safety/consistency_checkern/OR-CI/p값/연도 모순 정규식 검출
Figure 검증safety/figure_validatorClaude Vision으로 axis/CI/legend 재확인
Reportingresearch/reporting_checklistSTROBE 22항목 자동 체크 → peer_reviewer 흡수
Tool-use loopllm/claude_client.generate_with_toolsfunction calling agentic loop (events 기록)
Multi-stage RAGrag/pipeline.search_multistagedense + Jaccard rerank + recency_boost
Citation graphknowledge/citation_graphPubMed eLink co-citation/bridging/missing seminal
Self-consistencyllm/self_consistencyn-sample 다수결 (critical output에서)
Cost/latencyllm/budget.latency_summaryp50/p95 provider별 + events 기반
Prompt A/Bdiagnostics/prompt_abepsilon-greedy variant 선택 + eval 점수 누적
Eval→Prompteval_benchmark + capability_bench.get_improvement_context5축 점수의 fail 항목이 다음 LLM에 자동 주입
Replayscripts/replay_task.pyevents.db 사후 시간순 재구성
Wiring auditscripts/audit_wiring.py새 심볼 호출부 검증 — dead code 차단

📄 Word 표준 양식 (zcbdepv5)

모든 논문 docx는 동일 양식으로 출력 — data/templates/manuscript_template.json 단일 진실원본.

python
from src.export.word_exporter import WordExporter
WordExporter().export(
    topic={"title": "...", "authors": [...], "affiliations": [...]},
    sections={"Abstract": {"Background": "...", "Methods": "...", ...},
              "Introduction": "...", "Methods": {...subsection...}, ...},
    keywords=["zero-calorie beverage", "depression", ...],
    figures=[{"bytes": ..., "caption": "...", "n": 1}, ...],
    tables=[{"type": "baseline", "data": [...], "caption": "...", "n": 1}],
    references=[{"authors": "...", "title": "...", "journal": "...",
                 "year": "2025", "volume": "385", "pages": "445-449"}],
    back_matter={"Ethics approval": "...", "Funding": "...", ...},
)

자동 적용: Times New Roman / double-spaced / Abstract inline label / Vancouver [1] 인라인 / italic P / 학술지 세 줄 표 (NEJM 양식).


🔄 자동 동기화 (선택)

bash
python scripts/auto_sync.py
# 또는 Windows hidden: wscript scripts/run_sync_hidden.vbs

v3 commit-first 패턴 — stash 0 의존, 60초 디바운스, 분 단위 polling.


📊 자가발전 자산 현황 (2026-05-29)

자산누적비고
OA 풀텍스트12,258편 (695M chars)Europe PMC OA Subset, 180 의학 도메인 시드
ComponentLibrary131K componentshedging 78K / transition 24K / mechanism 12K / stat_report 6.9K / citation 6.4K
medical_graph19.6K nodes / 84K edgespaper + concept + dataset 통합 그래프 (NetworkX)
ChromaDB papers20K chunkshierarchical chunker + sentence-transformers
memory/feedback rules13개feedbackorganismflow / feedbacknolies / feedbackproactiveto_be 등
agentic tools23개runplan / dispatchrole / findcomponents / slashrun / consensus_search 등
mcp_server tools30+triggeranalyze / cognitiveactivate / memoryrecall5layers / slash_command 등
heartbeat jobs7개 (taskrecover/budgetsnapshot/idempotencygc/lifecycletick/trendlearn/backlogdrain/notify_drain)

🧠 핵심 컴포넌트 (ARCHITECTURE 14 sections)

영역주요 모듈
Multi-orchestratorknowledge/orchestrator.py (graph+vector+ontology+citation+component 동시 등록) + agent/writing_orchestrator.py (A2A)
Planner DAG + 7 rolesagent/planner.py (TaskNode/ExecutionGraph + pacemode) + `agent/roles.py` (researcher/writer/stylist/critic/statistician/citationauditor/planner)
5-layer memorymemory/__init__.py facade (Working/Episodic/Semantic/Procedural/Goal) + memory/schemas.py (Pydantic versioned)
Cognitive activationagent/cognitive_activation.py (5-layer fragments→propagation→routing→flow→policy) + agent/trigger_analyzer.py
Component pipelinelibrary/components.py (CONTENTKINDS + STYLEKINDS 2-layer) + library/component_extractor.py (정규식 v2)
Slash commandsagent/slash_commands.py (/research-question /study-design /run-analysis /draft-section /strobe-review /submit-journal /research-pulse)
Safety 7-gatecitationgrounding · truthhierarchy · physicianreview · audittrail · consistencychecker · causalchecker · figure_validator
Self-evolutioncapabilitybench + longitudinaleval + promptab + selfconsistency + tool_consensus
Backlog + heartbeatruntime/backlog.py (JobKind + budget-aware drain) + runtime/heartbeat.py (7 jobs)
UI (Sapphire Glass)app/styles/sapphire_glass.py + /ez_home + /project_workspace + /backlog + /dashboard + /memory_explorer

📁 디렉토리

.
├── app/                    Streamlit UI + Sapphire Glass theme
│   ├── pages/              ez_home·project_workspace·backlog·dashboard·memory_explorer
│   ├── styles/             sapphire_glass (Lovable-style 글래스모피즘)
│   ├── agentic_loop.py     23 tools agentic loop
│   ├── sapphire_actions.py 부가기능 모달 (10 actions)
│   └── streamlit_app.py
├── src/
│   ├── data/               KYRBS/KNHANES loader, StatBridge
│   ├── research/           paper_writer, peer_reviewer, pipeline
│   ├── export/             figure_builder, citation_workflow, table_builder
│   ├── llm/                failover client (Claude/OpenAI/Gemini), budget
│   ├── memory/             router, scorer, lifecycle, gate, conversation
│   ├── runtime/            events, tasks, idempotency, heartbeat
│   ├── tools/              TOOLS registry + render_result
│   ├── agent/              persona, MedicalAgent
│   ├── knowledge/          medical_seed, trend_learner, research_wiki
│   ├── rag/                ChromaDB pipeline
│   └── config/             models, env, logging
│   ├── library/            ComponentLibrary (CONTENT/STYLE kinds) + extractor v2
│   ├── ingestion/          OA bulk fetcher (Europe PMC) + hierarchical chunker
│   ├── safety/             7-gate (citation_grounding/truth_hierarchy/physician_review/
│   │                        audit_trail/consistency/causal/figure_validator)
│   └── diagnostics/        capability_bench + longitudinal_eval + prompt_ab + self_consistency
├── prompts/                medical_core / safety_constraints / yoosun_style (versioned md)
├── scripts/
│   ├── test_rag_smoke.py   ① 임포트 + RAG · audit_wiring.py · e2e_diagnose.py
│   ├── eval_benchmark.py   5축 metric (memory/hallucination/stat/figure/citation)
│   ├── replay_task.py      events 시간순 재구성
│   ├── bootstrap_oa_learning.py  180 시드 query (5만편 cover 가능)
│   ├── rebuild_components.py     기존 12K paper 재추출 (정규식 v2)
│   ├── enrich_assets.py    ontology mapping + citation graph + seed enrichment
│   └── auto_sync.py        v3 commit-first 데몬
├── data/
│   ├── raw/                KYRBS/KNHANES .sav (gitignore)
│   ├── runtime/            SQLite (events/tasks/idempotency/lifecycle/procedural/notifications)
│   ├── oa_papers/          12K+ Europe PMC OA 풀텍스트 + manifest
│   ├── library/            components.db (131K+ reusable microcomponent)
│   ├── exports/            논문 산출물 (zcb_dep_v5 양식)
│   ├── chromadb/           RAG 벡터 인덱스 (20K+ chunks)
│   ├── knowledge_graph/    medical_graph.json (19K+ nodes)
│   ├── templates/          manuscript_template.json (단일 진실원본)
│   ├── agent_self/         persona, insights, change_log
│   └── author_profiles/    yoosun_cho + oa_curated_top{N} (auto)
├── mcp_server.py           MCP backend (30+ tools 공통)
├── docker-compose.yml      medical-agent + learner + sapphire-ui
├── AGENTS.md               에이전트 책임 맵 + EstreGenesis pace_mode
├── ARCHITECTURE.md         14 sections 모듈 레지스트리 (★새 모듈 전 필독)
├── DESIGN.md               디자인 토큰 + Sapphire Glass v2
└── CLAUDE.md               작업 표준 12 규칙 + 단일 코어 공유 원칙

🛠️ 기술 스택

  • —UI: Streamlit 1.30+ · Sapphire Glass theme (Lovable-style glassmorphism)
  • —LLM: Anthropic Claude · OpenAI GPT · Google Gemini (3중 failover + budget downgrade)
  • —통계: statsmodels (svy weighted logistic + GEE), pingouin, lifelines, pyreadstat (KYRBS .sav)
  • —시각화: matplotlib (출판 figure 300dpi + TNR), seaborn, plotly
  • —RAG: sentence-transformers (all-MiniLM-L6-v2) + ChromaDB (multi-stage rerank)
  • —Memory: SQLite WAL (events/tasks/procedural) + ChromaDB (semantic/episodic) + JSON (working/goal)
  • —Knowledge: NetworkX (medical_graph) + Europe PMC OA Subset (풀텍스트 12K+)
  • —Schema: Pydantic v2 versioned (MemoryRecord/ProceduralRule/A2AMessage)
  • —문서: python-docx (Word zcbdepv5 양식), reportlab (PDF), python-pptx
  • —인프라: Docker (medical-agent + learner + sapphire-ui) · FastMCP · auto_sync v3

📚 자세한 문서

  • —CLAUDE.md — 작업 표준 11 규칙
  • —ARCHITECTURE.md — 모듈 레지스트리 (11 섹션)
  • —DESIGN.md — 디자인 토큰 (YAML + body)
  • —memory/ — 세션 간 영속 컨텍스트
  • —data/change_log/history.json — 모든 의미있는 변경 이력

라이선스 / 사용자

연구용 · 환자 진료 결정에 직접 사용 금지 (의료 안전 레이어는 별도 검토 필요).