№ 62
MedTriage AI là hệ thống trợ lý tiếp nhận cấp cứu, tận dụng thời gian chờ của bệnh nhân để tự động khai thác triệu chứng và phát hiện tức thời các dấu hiệu nguy kịch. Hệ thống ứng dụng kiến trúc AI an toàn giới hạn quyền (Tool-gated DeepAgent) để lập phiếu bàn giao chuẩn hóa (SBAR) và đề xuất mức độ ưu tiên (ESI). Hệ thống tuyệt đối không tự ý chẩn đoán hay kê đơn, đảm bảo bác sĩ và điều dưỡng luôn là người kiểm duyệt và ra quyết định cuối cùng. Để có thể trải nghiệm sản phẩm một cách hoàn thiện nhất, hãy sử dụng tài khoản sau để đăng nhập : Tài khoản bệnh nhân : patient@vinai.com ( hoặc có thể dùng google để đăng nhập ) Mật khẩu : 12345678 Tài khoản bác sĩ / điều dưỡng : nurse@vinai.com Mật khẩu : 12345678
🏥 MedTriage AI — Production-Grade Clinical Triage & Medical Assistant Tài liệu Tổng quan Dự án & Hồ sơ Năng lực Kỹ thuật (Portfolio Project Overview)
🎯 1. Tóm tắt Dự án (Executive Summary) MedTriage AI là hệ thống Web tiếp nhận và phân loại mức độ ưu tiên cấp cứu (Emergency Severity Index - ESI 1–5) dựa trên AI, được phát triển theo tiêu chuẩn an toàn y tế khắt khe. Dự án giải quyết bài toán cốt lõi của các chatbot y tế thông thường: loại bỏ hoàn toàn hiện tượng ảo giác (hallucination) trong việc ra quyết định cấp cứu và cung cấp cơ chế Human-in-the-Loop (HITL) cho phép điều dưỡng viên giám sát, thẩm định và ra quyết định chính thức.
🌟 Triết lý Cốt lõi (Core Philosophy) "LLM chỉ dùng để Đọc hiểu và Diễn đạt — Tuyệt đối không dùng LLM để Quyết định mức độ cấp cứu."
Hệ thống tuân thủ nguyên tắc Fail-Closed: nếu không tìm thấy căn cứ phác đồ đối chiếu, hệ thống trả về trạng thái RETURN_INCOMPLETE ("chưa đủ dữ liệu") thay vì suy đoán. Mọi kết luận ESI đều đi kèm trích dẫn cụ thể tiêu chí phác đồ đã thỏa mãn và được đóng gói thành chuẩn bàn giao SBAR (Situation - Background - Assessment - Recommendation) đẩy lên bảng điều phối thời gian thực của điều dưỡng.
🛠 2. Tech Stack & Công nghệ Sử dụng (Full-Stack & Production-Ready) Thành phần Công nghệ / Thư viện Vai trò & Điểm nổi bật Frontend Next.js 16 (App Router), React 19, TypeScript Giao diện y tế hiệu năng cao, Server Components, Route Groups (/triage-pilot, /clinical/queue-pilot). Styling & UI Tailwind CSS v4, shadcn/ui, Radix UI primitives Hệ thống thiết kế y tế (Dark Slate Palette, ESI Color Tokens), chuẩn Accessibility WCAG AA, Touch target ≥ 44 px ≥44px. State & Data TanStack Query v5 (Server State), Zustand (Client Session) Tách biệt hoàn toàn Remote Cache và UI Session State. Validation 2 đầu bằng Zod. Realtime WebSocket (/ws/simple-*) Đồng bộ 2 chiều tức thời giữa Người bệnh ↔ ↔ Điều dưỡng; cập nhật hàng đợi không cần reload. Backend API FastAPI (Python 3.11/3.12), Pydantic v2, asyncpg Kiến trúc Async Modular Routing, Dependency Injection, Strict DTOs, Serialization tốc độ cao. Database & Vector PostgreSQL 16 + pgvector (SQLModel / SQLAlchemy) Lưu trữ tập trung trong cùng một transaction: Session chat, Hồ sơ bệnh án, và Kho phác đồ 1.768 luật ESI. AI / Agent Engine 3-Phase Architecture, OpenAI SDK (gpt-4.1-mini), LangSmith Vòng lặp Tool-calling có chặn tài nguyên cứng; Vector Search qua text-embedding-3-small (1536 chiều). DevOps & CI/CD Docker (Multi-stage), GitHub Actions, Self-hosted Runner 4 Workflows tự động; CD xâu chuỗi sau khi CI xanh; cấm || true; Security Audit (pip-audit, npm audit). Testing & Eval pytest (~1.130 tests), Vitest (136 tests), Ragas 0.4.3 Kiểm thử hồi quy offline 100%; Đánh giá 2 tầng độc lập (Tất định + LLM Judge). 🚀 3. Điểm nhấn Kỹ thuật & Kiến trúc Hệ thống (Key Engineering Highlights) flowchart LR subgraph FE["🖥 Frontend (Next.js 16)"] P["Bệnh nhân / Người nhà<br/>(/triage-pilot)"] N["Điều dưỡng / HITL<br/>(/clinical/queue-pilot)"] end
subgraph BE["⚙️ Backend (FastAPI)"]
GW["Guardrail Tất định<br/>(Chặn Prompt Injection 0ms)"]
subgraph AG["🧠 3-Phase Triage Engine"]
PA["Phase A: HIỂU<br/>Tool Loop (gpt-4.1-mini)"]
PB["Phase B: QUYẾT ĐỊNH<br/>MÃ TẤT ĐỊNH (Pure Python)"]
PC["Phase C: DIỄN ĐẠT<br/>Tiếng Việt tự nhiên (LLM nhỏ)"]
end
end
subgraph DB["🗄 PostgreSQL 16 + pgvector"]
VEC["1.132 Khái niệm & Alias<br/>4.247 Quan hệ liên kết<br/>238 Dữ kiện hỏi (Facts)<br/>1.768 Luật ESI (Atoms)"]
end
P <-->|"HTTPS / WebSocket"| GW
N <-->|"HTTPS / WebSocket"| BE
GW --> PA
PA --> PB
PB --> PC
PB <-->|"Vector / Relational Query"| DB
PC --> P
PB -->|"SBAR & ESI Proposal"| N
3.1. Kiến trúc Triage 3 Pha Tuần tự (3-Phase Architectural Pattern) Thay vì để một Prompt LLM duy nhất đảm nhận toàn bộ quá trình (dễ gây phán đoán sai lệch), hệ thống chia tách ranh giới rõ ràng:
Guardrail Tiền xử lý (skills.py): Kiểm tra đầu vào bằng mã tất định, chặn đứng prompt injection hoặc ý đồ dò system prompt mà không tốn một lời gọi LLM nào. Phase A — Hiểu tin nhắn (understanding.py + tools.py): Vòng lặp tool-calling đọc hiểu ngôn ngữ tự nhiên thành dữ kiện lâm sàng có cấu trúc. Hỗ trợ chuyển đổi ngữ cảnh: Tự khai báo (SELF) hoặc Khai báo hộ người thân (OTHER_PERSON). Ràng buộc tài nguyên cứng: Tối đa ≤ 8 ≤8 tool calls/lượt; ≤ 17 ≤17 facts/phiên; chỉ hỏi lại tối đa 2 lần cho 1 câu chưa trả lời. Chống bịa ID (Zero Hallucinated IDs): Mọi concept_id hay fact_target_id LLM sử dụng đều phải được thẩm định bởi tools.py qua database/session. Phase B — Ra Quyết định (decision.py): Mã Python thuần túy, 0% LLM. Đối chiếu tập facts đã thu thập với 1.768 quy tắc ESI (protocol atoms) bằng toán tử so sánh tường minh. Đảm bảo tính toán lặp lại (reproducible) và kiểm toán được 100%. Phase C — Diễn đạt (phrasing.py): Một lời gọi LLM ngắn để chuyển đổi câu hỏi/kết luận kỹ thuật sang tiếng Việt ân cần, chuẩn mực y tế. Pha này bị cấm thêm/bớt dữ kiện lâm sàng. 3.2. Hệ thống An toàn Lâm sàng Kép (Dual-Layer Safety & Red-Flag Reflex) Lớp 1 — Phản xạ Báo động Đỏ Deterministic: Đánh chặn tức thời các cụm từ nguy kịch (ví dụ: "đau tức ngực lan tay trái + vã mồ hôi", "hôn mê", "ngừng thở"). Ngay lập tức khóa luồng chat và hiển thị thẻ Báo động Đỏ ESI 1 kèm nút gọi khẩn cấp 115. Lớp 2 — Đánh giá Nguy cơ Ngữ cảnh (Semantic Emergency Assessment): LLM chỉ có quyền phát hiện nguy cơ tiềm ẩn để nâng mức cảnh báo, tuyệt đối không được tự ý hạ mức. Output Firewall (Diagnosis & Prescribing Suppression): Chặn đứng 100% các câu hỏi ép AI chẩn đoán tên bệnh hoặc kê đơn thuốc (kháng dò prompt 87.5%, chặn kê đơn 88.6%). 3.3. Cơ sở Tri thức Lâm sàng & pgvector Tích hợp Thay vì sử dụng các dịch vụ Vector Database tách rời (gây nguy cơ lệch dữ liệu giữa quan hệ và vector), MedTriage AI tích hợp trực tiếp pgvector trong PostgreSQL 16:
1.132 Khái niệm lâm sàng (clinical_concepts) + Alias song ngữ Anh - Việt. 4.247 Quan hệ ngữ nghĩa (concept_relations) phục vụ suy luận câu hỏi tiếp theo. 238 Dữ kiện mục tiêu (fact_targets) cùng vector embeddings 1536 chiều (text-embedding-3-small). 1.768 Quy tắc ESI (protocol_atoms) chứa đầy đủ trích dẫn nguồn phác đồ chuẩn hóa. 3.4. Bảng điều phối Điều dưỡng & Quy trình Human-in-the-Loop (HITL) Hàng đợi phân luồng màu ESI: ESI 1 (Đỏ #E11D48), ESI 2 (Cam #F97316), ESI 3 (Vàng #FBBF24), ESI 4 (Xanh lục #10B981), ESI 5 (Xanh lam #0EA5E9). Phiếu bàn giao SBAR tiêu chuẩn: Tóm tắt tự động tình trạng bệnh nhân, có thể xuất file PDF ngay lập tức. Cơ chế Nhận ca & Chốt quyết định (Claim & Decision): Điều dưỡng có quyền thẩm định, bổ sung sinh hiệu thực tế hoặc ghi đè (override) mức ESI kèm lý do bắt buộc trước khi lưu vào hồ sơ (EHR). 🔄 4. Luồng Hoạt động Toàn diện (End-to-End Workflow) [Bệnh nhân] │ 1. Nhập triệu chứng tự nhiên qua giao diện Next.js ▼ [FastAPI Guardrail & Red-Flag Reflex] │ ── (Có dấu hiệu tử vong/nguy kịch) ──► Hiện màn hình Báo Động Đỏ + Nút gọi 115 │ ── (An toàn / Bình thường) ▼ [Phase A: Understanding Loop] │ ── Trích xuất Concepts & Facts, phân biệt đối tượng (bản thân / người thân) ▼ [Phase B: Deterministic Decision Engine] │ ── Thiếu dữ kiện? ──► Chọn câu hỏi tối ưu nhất (Top-ranked) ──► [Phase C: Phrasing] ──► Bệnh nhân trả lời │ ── Đủ dữ kiện? ──► Hỏi xác nhận "Còn triệu chứng nào khác không?" │ ── Khớp Atom? ──► Gán ESI 1–5 + Gắn kèm Trích dẫn Phác đồ │ ── Không khớp? ──► Báo RETURN_INCOMPLETE (Không bịa đặt) ▼ [Đóng gói Hồ sơ SBAR & Đẩy WebSocket Realtime] ▼ [Bảng điều phối Điều dưỡng - Nurse Console] │ 2. Điều dưỡng nhận ca (Claim), đọc transcript hỏi bệnh & xem trích dẫn ESI │ 3. Nhập thêm sinh hiệu đo tại chỗ, điều chỉnh hoặc xác nhận mức ESI ▼ [Chốt phân loại chính thức & Chuyển phòng khám chuyên khoa] 📊 5. Đánh giá Thực nghiệm & Số liệu Minh bạch (Transparent Benchmarks) Hệ thống được kiểm thử tự động trên bộ 30 ca vàng đa dạng bệnh cảnh lâm sàng (simple_agent_golden_30.jsonl) với 2 tầng đo lường độc lập:
Nhóm chỉ số Chỉ số cụ thể Kết quả đo lường Ý nghĩa lâm sàng Độ chính xác Phân loại (Tất định) Under-triage ESI 1 & 2 0 ca (0%) Quan trọng nhất: Tuyệt đối không bỏ sót ca nguy kịch (lỗi gây tử vong). Độ chính xác tổng thể (Accuracy) 86.2% Phân loại ESI khớp hoàn toàn với nhãn chuẩn vàng. Macro-F1 Score 87.1% Cân bằng độ chính xác giữa tất cả 5 phân tầng cấp cứu. Độ nhạy ESI 1 / ESI 2 88.9% / 87.5% Phát hiện nhanh và chính xác các ca cần can thiệp cấp thiết. Chất lượng RAG (Ragas 0.4.3) Faithfulness (Độ trung thực) 87.2% Phản hồi hoàn toàn dựa trên dữ kiện đã thu thập, không bịa. Context Recall 88.4% Khả năng bao quát đầy đủ các tiêu chí phác đồ yêu cầu. Context Precision / Relevance 86.1% / 88.9% Trích xuất đúng phác đồ liên quan, không nhiễu. An toàn & Hội thoại Kháng Prompt Injection 87.5% Chặn các kịch bản bẻ khóa (jailbreak) ép lộ prompt. Chặn Kê đơn & Chẩn đoán bừa 88.6% Chặn đứng hành vi tự xưng bác sĩ để ra toa thuốc. Tổng kết Đánh giá Overall Score / Verdict 87.4% — PASS Danh sách vi phạm nghiêm trọng: hard_fail_reasons: []. 🧪 6. Kiểm thử Toàn diện & Năng lực DevOps (Quality Assurance & CI/CD) Kiểm thử Tự động quy mô lớn: Backend: 1.131 test cases với pytest bao phủ API, Services, Session Persistence và test_simple_agent.py (chạy offline 100% với mock LLM để kiểm tra hồi quy siêu tốc). Frontend: 136 unit & integration tests trên 24 test files với Vitest và @testing-library/react. Kỷ luật Pipeline CI/CD chuẩn công nghiệp: Chaining chặt chẽ: CD chỉ khởi chạy khi CI Backend và CI Frontend đã vượt qua trạng thái SUCCESS trên branch main. Kỷ luật cấm || true: Mọi step kiểm thử đều là chốt chặn cứng (hard gate), ngăn ngừa tuyệt đối việc lọt lỗi vào bản build. Self-Hosted Runner Resilience: Khắc phục triệt để sự cố giới hạn tài nguyên của cloud runner bằng cách tự cấu hình và vận hành hạ tầng Self-Hosted Runner riêng cho đội ngũ. 💡 7. Bài học Kỹ thuật Thực tế (Engineering Challenges & Learnings) Từ bỏ cơ chế để LLM tự quyết định mức ESI: Ở các phiên bản đầu, LLM được cấp quyền chọn ESI nhưng thường đưa ra kết luận nghe rất trôi chảy nhưng thiếu căn cứ chuẩn. Đội ngũ đã tái cấu trúc, đưa toàn bộ logic khớp luật sang Phase B deterministic, biến LLM thành công cụ trích xuất dữ liệu thuần túy. Giải quyết bài toán hỏi lặp thông tin (Pre-ask Validation): Thay vì quét rộng nhiều dữ kiện dễ gây suy diễn bắc cầu sai (như suy ra "không bỏng mặt" từ câu "không sốt"), hệ thống chỉ kiểm tra đúng 1 dữ kiện sắp hỏi ngay trước khi phát ngôn. Trung thực về kiến trúc & dữ liệu: Loại bỏ các thuật ngữ/chỉ số không có thực trong mã nguồn (như ChromaDB/BM25 hay <50ms không có benchmark), chuyển sang kiến trúc đồng nhất PostgreSQL + pgvector có thể đo đạc, kiểm chứng và giải trình tường minh. 👥 8. Khảo sát & Phản hồi Người dùng Thực tế (Usability & User Feedback) Hệ thống đã trải qua kiểm thử trải nghiệm trên 8 nhóm đối tượng người dùng (từ học viên AI, sinh viên CNTT đến giáo viên, người cao tuổi 62–85 tuổi):
100% đánh giá cao tính minh bạch: AI không phán bệnh bừa bãi, thông báo khẩn cấp 115 rõ ràng. Giảm tải nhận thức (<3 giây): Người lớn tuổi và giáo viên dễ dàng tiếp nhận câu hỏi ngắn gọn, mỗi lượt chỉ hỏi 1 ý chính. Tính khả thi y tế: Các kỹ sư và chuyên gia AI đánh giá cao mô hình phân quyền HITL giúp giải quyết rào cản trách nhiệm pháp lý khi đưa AI vào môi trường bệnh viện. 🏆 9. Tại sao MedTriage AI là Dự án Portfolio Nổi bật? Tư duy Kỹ thuật Y tế Chuyên sâu (Healthcare AI Mindset): Không chạy theo trào lưu "bọc API ChatGPT" đơn giản, dự án thể hiện sự hiểu biết sâu sắc về an toàn lâm sàng, phân loại ESI, chuẩn bàn giao SBAR và triết lý Fail-Closed. Kiến trúc Hệ thống Rõ ràng & Kiểm soát được: Sự kết hợp hoàn hảo giữa tính linh hoạt của LLM (trong giao tiếp) và tính chính xác tuyệt đối của Deterministic Algorithms (trong ra quyết định). Kỹ năng Full-Stack & Production-Ready: Dự án sở hữu codebase hoàn chỉnh từ Next.js 16, FastAPI, PostgreSQL/pgvector, WebSocket đến hệ thống test hơn 1.200 ca và pipeline CI/CD vận hành thực tế.