№ 65
Nền tảng quản lý sức khỏe cho người đái tháo đường Tuýp 2 tích hợp trợ lý AI
VDiab là hệ thống quản lý và hỗ trợ theo dõi sức khỏe dành cho bệnh nhân đái tháo đường típ 2, bác sĩ điều trị và quản trị viên. Hệ thống tập trung dữ liệu sức khỏe hằng ngày, phát hiện sớm các chỉ số cần chú ý, hỗ trợ bác sĩ theo dõi bệnh nhân giữa hai kỳ tái khám và cung cấp trợ lý AI trả lời câu hỏi về lối sống dựa trên nguồn y khoa đã được phê duyệt.
VDiab được định vị là công cụ hỗ trợ theo dõi và ra quyết định, không phải thiết bị chẩn đoán và không thay thế bác sĩ. Hệ thống không tự kê đơn, thay đổi liều thuốc/insulin, đặt mục tiêu điều trị mới hoặc cam kết giám sát cấp cứu 24/7.
Các nhóm người dùng chính:
Đái tháo đường típ 2 là bệnh mạn tính cần theo dõi liên tục trong đời sống hằng ngày. Ngoài các lần tái khám, bệnh nhân phải tự đo và ghi nhận nhiều thông tin như đường huyết, thời điểm đo, bối cảnh bữa ăn, vận động và việc sử dụng thuốc. Khoảng cách giữa hai lần khám thường kéo dài từ một đến ba tháng, trong khi phần lớn thay đổi của bệnh lại diễn ra tại nhà.
Trong thực tế, dữ liệu thường bị phân tán giữa sổ tay, máy đo, tin nhắn và nhiều ứng dụng khác nhau. Các bản ghi có thể thiếu đơn vị, thời gian hoặc bối cảnh; bệnh nhân khó biết một chỉ số có bất thường so với mục tiêu cá nhân hay không; còn bác sĩ phải dành nhiều thời gian hỏi lại và tổng hợp lịch sử tại thời điểm tái khám.
| Vấn đề | Nguyên nhân | Hệ quả |
|---|---|---|
| Nhật ký sức khỏe thiếu và không nhất quán | Nhập liệu thủ công, dữ liệu phân tán, thiếu nhắc nhở và kiểm tra hợp lệ | Dữ liệu không đủ tin cậy để đánh giá diễn biến |
| Khó nhận biết bất thường | Bệnh nhân chỉ nhìn từng số đo, không có ngưỡng cá nhân và ngữ cảnh theo thời gian | Có thể bỏ qua tình trạng cần chú ý hoặc phản ứng không phù hợp |
| Thiếu tư vấn đáng tin cậy | Thông tin trên Internet chung chung, mâu thuẫn hoặc không rõ nguồn | Bệnh nhân có thể áp dụng lời khuyên sai hoặc tự thay đổi điều trị |
| Bác sĩ thiếu dữ liệu giữa các kỳ khám | Không có kênh theo dõi tập trung và bản tóm tắt có cấu trúc | Khó ưu tiên bệnh nhân và mất thời gian tổng hợp lịch sử |
| Cảnh báo chung chưa phù hợp từng người | Cùng một ngưỡng áp dụng cho các hồ sơ có tuổi, HbA1c, BMI và mức rủi ro khác nhau | Dễ tạo cảnh báo quá nhiều hoặc bỏ lỡ dấu hiệu sớm |
Hệ thống cần giải quyết đồng thời bốn yêu cầu:
VDiab sử dụng kiến trúc modular monolith: các miền nghiệp vụ được tách thành module rõ ràng nhưng cùng chạy trong một backend FastAPI. Cách tiếp cận này phù hợp với giai đoạn MVP vì dễ triển khai, kiểm thử và truy vết giao dịch, đồng thời vẫn cho phép tách thành dịch vụ độc lập khi tải hệ thống tăng.
flowchart LR
U[Patient / Doctor / Admin] --> FE[Next.js Web App]
FE -->|HTTPS + JWT| API[FastAPI Backend]
API --> AUTH[Auth & RBAC]
API --> HEALTH[Health Records]
API --> MED[Medication & Care Plan]
API --> APPT[Appointments]
API --> NOTI[Notifications]
API --> AGENT[LangGraph AI Agent]
HEALTH --> RULE[Danger Rules]
HEALTH --> WATCH[Personalized WATCH Model]
RULE --> DB[(PostgreSQL)]
WATCH --> DB
NOTI --> ZALO[Zalo Bot]
AGENT --> DB
AGENT --> RAG[ChromaDB / Approved Knowledge]
AGENT --> LLM[OpenAI LLM]
Frontend được xây dựng bằng Next.js 16, React 19, TypeScript, Tailwind CSS và Ant Design. Giao diện được phân theo vai trò:
Backend sử dụng FastAPI, SQLModel và PostgreSQL 16. API được tổ chức theo các module:
| Module | Chức năng chính |
|---|---|
auth | Đăng nhập, JWT, thông tin tài khoản, đổi mật khẩu và phân quyền theo vai trò |
admin | Tạo người dùng, đặt lại mật khẩu, phân công bác sĩ–bệnh nhân |
health | Ghi và truy vấn đường huyết, huyết áp, bữa ăn, vận động; đánh giá ngưỡng |
medications | Quản lý thuốc đang dùng, lịch sử thay đổi/ngừng thuốc và ghi chú |
appointments | Tạo, cập nhật trạng thái và quản lý lịch tái khám |
patients | Danh sách bệnh nhân của bác sĩ, ghi chú lâm sàng và phiên bản mục tiêu chăm sóc |
notifications | Thông báo trong ứng dụng, tùy chọn nhận tin, liên kết và gửi Zalo |
agent | Chat AI, AI Summary, lịch sử phiên chat và gợi ý câu hỏi |
insights | Lưu và cung cấp insight dài hạn cho bác sĩ |
Dữ liệu sức khỏe được kiểm tra ngay tại schema và service. Ví dụ, bản ghi đường huyết hỗ trợ mg/dL và mmol/L, kiểm tra thời gian tương lai, giá trị âm, đơn vị sai và giới hạn sinh lý bất hợp lệ. Quan hệ phân công được kiểm tra trước khi bác sĩ truy cập dữ liệu bệnh nhân.
VDiab tách cảnh báo khỏi LLM để tránh việc một lỗi AI làm mất cảnh báo y tế:
Mô hình WATCH hiện sử dụng hướng tiếp cận dữ liệu bảng với HistGradientBoosting, có Logistic Regression làm baseline đối chiếu. Lựa chọn này phù hợp hơn deep learning trong bối cảnh số bệnh nhân còn nhỏ và nhãn WATCH được tạo từ luật. Hệ thống lưu ngưỡng dự đoán thấp/cao cùng phiên bản mô hình để truy vết.
Khi một bản ghi được đánh giá là WATCH, hệ thống tạo thông báo trong ứng dụng theo khóa idempotent để tránh gửi trùng. Nếu bệnh nhân đã liên kết Zalo và bật nhận tin, thông báo được đẩy qua Zalo theo cơ chế best-effort; lỗi Zalo không làm rollback bản ghi sức khỏe chính. Hệ thống cũng giới hạn số cảnh báo mỗi ngày nhằm giảm mệt mỏi vì thông báo.
Một AI Agent duy nhất được xây dựng bằng LangGraph/LangChain để phục vụ hai luồng:
Luồng xử lý được kiểm soát theo graph:
flowchart TD
A[Request] --> B[Resolve identity and patient access]
B --> C[Classify intent and plan response]
C -->|Jailbreak| D[Refuse safely]
C -->|High risk| E[Return emergency guidance]
C -->|Out of scope| F[Decline and hand off]
C -->|Summary / Personal data| G[Fetch authorized patient data]
C -->|Knowledge question| H[Retrieve approved knowledge]
G --> I[Check data quality]
H --> I
I --> J[Synthesize grounded answer]
J --> K[Verify citations]
K --> L[Output guardrail]
L --> M[Response + sources + limitations]
Các lớp bảo vệ chính gồm:
data_used, sources và limitations để tăng khả năng giải thích.Kho tri thức được lưu trong ChromaDB và tạo từ các tài liệu chuyên môn đã chọn, gồm hướng dẫn của Bộ Y tế, bệnh viện và nguồn quốc tế. Pipeline ingestion chia tài liệu thành đoạn, gắn metadata như tên tài liệu, tổ chức, mục/section, trang, URL nguồn, phiên bản corpus và hash nội dung.
Thiết kế hai tầng giúp cân bằng độ tin cậy và độ phủ:
Hash nội dung và manifest giúp ingestion có tính idempotent, hỗ trợ cập nhật tài liệu mà không tạo vector trùng. Khi các nguồn mâu thuẫn, hệ thống ưu tiên thể hiện sự khác biệt và chuyển cho người có chuyên môn xem xét thay vì tự lựa chọn một kết luận y khoa.
Để triển khai với dữ liệu bệnh nhân thật, hệ thống vẫn cần hoàn thiện consent, mã hóa dữ liệu lưu trữ và truyền tải, quản lý vòng đời dữ liệu, nhật ký audit bất biến, quy trình phản ứng sự cố và đánh giá tuân thủ pháp luật về dữ liệu sức khỏe.
Hệ thống hỗ trợ Docker/Docker Compose:
GitHub Actions, pytest, coverage và bộ evaluation riêng hỗ trợ kiểm soát chất lượng. Kiến trúc hiện tại đủ đơn giản để chạy pilot trên một máy chủ, nhưng vẫn có đường tách worker nền, vector database và dịch vụ AI khi quy mô tăng.
Mức khả thi kỹ thuật của MVP là cao vì các thành phần cốt lõi đã có mã triển khai và dùng công nghệ phổ biến:
Repo có bộ dữ liệu demo được xây dựng từ NHANES và dữ liệu mô phỏng 60 ngày. Pipeline WATCH ghi nhận 489 bệnh nhân đái tháo đường típ 2 và 100.470 phép đo glucose synthetic, đủ để xây dựng prototype, kiểm tra pipeline và mô phỏng cảnh báo.
Tuy nhiên, dữ liệu này không phải dữ liệu lâm sàng thực tế tại Việt Nam. Nhãn WATCH phần lớn là weak label sinh từ luật; một số đặc trưng tĩnh chỉ có một snapshot; dữ liệu tự đo khoảng 3,4 lần/ngày không tương đương CGM liên tục. Vì vậy mô hình hiện phù hợp cho nghiên cứu, demo và shadow mode, chưa đủ bằng chứng để tự động tác động đến điều trị thực tế.
Bằng chứng gần nhất được lưu trong repo ngày 27/08/2026 ghi nhận:
Cần lưu ý artifact evaluation tổng hợp ngày 27/08 vẫn ghi F2 production rule engine là chưa triển khai, trong khi mã nguồn hiện tại đã có threshold_service, đánh giá WATCH/DANGER và test tương ứng. Đây là dấu hiệu artifact đánh giá chưa được tái sinh sau thay đổi mã nguồn, không nên dùng artifact cũ để tuyên bố nghiệm thu F2. Trước khi demo hoặc phát hành, cần chạy lại toàn bộ test/evaluation và tạo báo cáo thống nhất từ cùng một commit.
Pilot 5–10 bệnh nhân và 1–2 bác sĩ có thể vận hành với một backend, một PostgreSQL và vector store cục bộ. Chi phí biến đổi chủ yếu đến từ:
Có thể kiểm soát chi phí bằng cache, giới hạn context, chỉ gọi LLM khi cần, dùng rule deterministic cho tình huống an toàn và tách STT/TTS thành tính năng tùy chọn.
Giải pháp phù hợp để pilot có giám sát, nhưng chưa nên triển khai đại trà như một công cụ y tế đã được xác nhận. Các điều kiện tối thiểu trước pilot gồm:
| Khía cạnh | Đánh giá | Nhận định |
|---|---|---|
| MVP kỹ thuật | Cao | Luồng chính, API, giao diện, AI/RAG và hạ tầng đã có |
| Pilot có giám sát | Trung bình–cao | Khả thi sau khi đồng bộ evaluation, duyệt lâm sàng và hoàn thiện consent/audit |
| Mô hình WATCH | Trung bình | Đủ cho prototype/shadow mode; cần dữ liệu thật và đánh giá theo nhóm bệnh nhân |
| Triển khai y tế diện rộng | Chưa đủ bằng chứng | Cần validation lâm sàng, bảo mật, pháp lý, SLO và quy trình vận hành |
| Giai đoạn | Thời gian tham khảo | Kết quả chính |
|---|---|---|
| 1. Hardening | 2–4 tuần | Evaluation đồng bộ, sửa citation/latency, hoàn thiện audit và màn hình care plan |
| 2. Pilot chuẩn bị | 2–3 tuần | Corpus và ngưỡng được bác sĩ duyệt, consent, runbook, đào tạo người dùng |
| 3. Pilot có giám sát | 6 tuần | Đo mức tuân thủ ghi nhận, độ chính xác cảnh báo, thời gian bác sĩ và phản hồi người dùng |
| 4. Đánh giá sau pilot | 2 tuần | Phân tích an toàn, hiệu quả, chi phí; quyết định tiếp tục, điều chỉnh hoặc dừng |
| 5. Mở rộng có kiểm soát | Theo bằng chứng | Shadow/canary, tích hợp thiết bị và mở rộng số người dùng |
Điểm khác biệt của VDiab không nằm ở việc thêm một chatbot vào ứng dụng sức khỏe, mà ở cách kết hợp bốn lớp thành một luồng thống nhất:
Nhờ đó, hệ thống có thể tạo giá trị ngay ở quy mô MVP, đồng thời duy trì ranh giới an toàn cần thiết cho một sản phẩm xử lý dữ liệu sức khỏe. Hướng đi phù hợp nhất là triển khai pilot có giám sát, đo lường bằng dữ liệu thực và chỉ mở rộng các chức năng dự báo hoặc tự động hóa sau khi có đủ bằng chứng lâm sàng, bảo mật và pháp lý.