№ 74
MedSafe là trợ lý AI tra cứu tương tác thuốc–thuốc, thuốc–thực phẩm và thuốc–bệnh nền tự khai bằng tiếng Việt, mỗi cảnh báo đều kèm trích dẫn nguyên văn và link tờ hướng dẫn sử dụng gốc. Không đủ bằng chứng thì hệ thống trả "chưa có dữ liệu" thay vì tự suy luận — thông tin tham khảo, không thay thế bác sĩ.
Buổi khám quá ngắn để dặn kỹ. Phòng khám quá tải, mỗi bệnh nhân chỉ có vài phút; bác sĩ kịp chẩn đoán và kê đơn, nhưng không đủ thời gian tư vấn chi tiết cho từng người rằng thuốc này kỵ thuốc nào, kiêng ăn uống gì và cần lưu ý gì với bệnh nền sẵn có. Phần lớn câu hỏi chỉ nảy sinh sau khi người bệnh cầm đơn về nhà — lúc không còn ai để hỏi.
Người bệnh thường mang nhiều bệnh nền cùng lúc. Đặc biệt là người cao tuổi: tăng huyết áp, đái tháo đường, rối loạn mỡ máu, dạ dày… mỗi bệnh một đơn, nhiều khi từ nhiều chuyên khoa hoặc nhiều đợt khám khác nhau. Số việc phải đối chiếu tăng theo cấp số: n thuốc sinh ra C(n,2) cặp thuốc–thuốc, cộng thêm mọi cặp thuốc–bệnh nền và thuốc–thực phẩm. Với 8 thuốc là 28 cặp, không ai tự rà tay nổi.
Không có công cụ tra cứu dùng được. Danh mục thuốc của bệnh viện không đi kèm dữ liệu tương tác, nên muốn tự kiểm tra thì phải mở từng tờ hướng dẫn sử dụng dạng PDF và đọc thủ công — chậm, dễ bỏ sót và gần như không thể tự đánh giá mức độ nghiêm trọng. Công cụ nước ngoài thì dùng tiếng Anh, không khớp biệt dược lưu hành tại Việt Nam; còn chatbot phổ thông thì trả lời trôi chảy nhưng không hiển thị nguồn, nên không dùng được cho quyết định liên quan tới thuốc.
MedSafe là AI agent tra cứu tương tác đặt trong bối cảnh cổng thông tin bệnh viện — trả lời đúng những câu hỏi phát sinh sau buổi khám, cho cả người đang dùng nhiều thuốc vì nhiều bệnh nền. Sản phẩm phục vụ cả người bệnh lẫn nhân viên y tế, qua ba luồng:
Ba nguyên tắc an toàn được ràng buộc ngay trong kiến trúc, không chỉ nằm ở prompt:
Ranh giới quan trọng nhất — đúng cơ chế cho đúng loại câu hỏi:
| Loại tra cứu | Cơ chế | Lý do |
|---|---|---|
| Thuốc–thuốc, thuốc–bệnh nền (endpoint tra cứu) | Exact key trên PostgreSQL | Similarity search có thể trả bản ghi của một cặp gần giống — nguồn thật nhưng sai cặp, nguy hiểm hơn là không trả gì |
| Thuốc–thực phẩm | Semantic retrieval trên nội dung leaflet | Không tồn tại bảng quan hệ có cấu trúc cho thực phẩm |
| Chatbot | Qdrant semantic + Google whitelist | Tăng độ phủ nhưng luôn hiển thị provider của từng nguồn để người dùng phân biệt bản ghi database với kết quả web |
| Người dùng gõ sai tên thuốc | Fuzzy matching (rapidfuzz + unidecode) | Hợp với tên riêng tiếng Việt hơn embedding; xử lý được cả có dấu lẫn không dấu |
Pipeline dữ liệu (offline): PDF tờ HDSD → OCR → proofread → chunking giữ nguyên văn → embedding BGE-M3 1024 chiều → Qdrant Cloud. Text gốc được giữ nguyên ở bước lưu trữ để mọi trích dẫn đều truy vết được về đúng trang PDF.
Stack: Next.js 16 (App Router, React 19, strict TypeScript, Tailwind v4, shadcn/ui) · FastAPI + Python 3.11 phân tầng api / services / domain / repositories, domain thuần không I/O · LangGraph cho workflow agent · Supabase PostgreSQL + private Storage · Qdrant Cloud · Gemini cho OCR đơn thuốc và chat · Serper.dev cho tầng web whitelist · Langfuse để trace và chấm chất lượng.
Vận hành: Docker Compose trên một VPS, Caddy reverse proxy lo HTTPS tự gia hạn, CI/CD bằng GitHub Actions theo mô hình build-once-deploy-that-artifact, rollback đã diễn tập và đo được 92 giây với site trả 200 xuyên suốt. Giám sát bằng Uptime Kuma, UptimeRobot và Umami analytics.
Sản phẩm đang chạy thật trên production với LLM thật, không mock.