Smart Lab Platform
Nền tảng chuyển đổi số và AI cho cả một tổ chức: từ test engineer, test automation group đến purchasing, planning, warehouse và operations.
- Module API
- 52
- Thiết bị IoT
- 200+
- Pull request
- 1.070
- Test tự động
- 3.000+
Bài toán và cách giải
Smart Lab Platform là nền tảng chuyển đổi số và AI cho cả một tổ chức. Khoảng 150 người đang dùng nền tảng này, từ test engineer, test automation group đến purchasing, planning, warehouse và operations.
Nền tảng ra đời ở một lab kiểm thử. Lab từng chạy trên nhiều công cụ và bảng tính rời nhau: kế hoạch test và nhân lực, fixture, hiệu chuẩn thiết bị, vật tư, hướng dẫn công việc, đánh giá 7S, phản hồi của khách tham quan, theo dõi mua hàng, và các thiết bị IoT gắn trên chamber, trên máy. Smart Lab Platform gom chúng vào một web app, dùng chung một lần đăng nhập và một mô hình phân quyền. Trợ lý AI trả lời câu hỏi trên mọi module.
Kết quả: toàn bộ quy trình của lab chuyển từ làm thủ công sang tự động.
Ghi chú kỹ thuật đầy đủ
Hệ thống gồm những gì
Backend có 52 module API, frontend có 41 nhóm trang. README chia chúng thành 13 mảng chức năng, từ kế hoạch test trên Gantt 3 cấp tới đánh giá 7S và mua hàng. Phân quyền gồm 129 quyền trong 35 nhóm. Cây phân quyền cho biết mỗi quyền của một người đến từ đâu. Khách tham quan có role chỉ gửi được phản hồi. Role Viewer chỉ xem được, không sửa được dữ liệu.
Một job định kỳ chép dữ liệu kế hoạch và mua hàng từ Lab Management System. Đây là hệ thống của công ty mà Khoa khởi xướng khi làm Senior Lab Automation Engineer. Trạng thái test plan lấy từ hệ thống đó và chỉ đọc trên nền tảng. Mục tiêu là cả ba cấp kế hoạch dùng chung một nguồn dữ liệu gốc.
Thiết bị và OTA
Hơn 200 thiết bị đang chạy production. Chúng thuộc bốn họ, dùng chung một bảng thiết bị:
- Cảm biến nhiệt độ, độ ẩm trên board ESP32-S3, mỗi cái có cấu hình hiệu chuẩn riêng.
- Chamber kiểm thử nhiệt ẩm, bụi và bụi kim loại. Nền tảng lưu bản đồ thanh ghi Modbus của chúng.
- Máy, ví dụ máy hút bụi và máy rung.
- Edge gateway công nghiệp chạy ESP32-S3. Gateway có 16 chân cấu hình được với 11 chế độ, lọc Kalman và scale riêng cho từng chân, và Modbus RTU. Mặc định cứ 60 giây nó gửi một lô số đo qua MQTT.
Thiết bị tự đăng ký với API bằng device API key, rồi tải cấu hình về. Key này chỉ đọc và ghi được dữ liệu thiết bị và firmware. Từ tháng 7/2026, cấu hình gateway là một hộp thoại có ba tab Pins, Modbus và Raw JSON. Trước đó người dùng phải sửa JSON bằng tay.
OTA là kéo về qua HTTP. Admin tải lên file firmware cho từng họ thiết bị và từng cỡ màn hình. Cứ 5 phút, mỗi thiết bị hỏi nền tảng xem có bản mới hơn không. Nếu có, thiết bị tải bản đó qua HTTP, flash, khởi động lại và báo phiên bản mới. Lệnh “update” qua MQTT bắt thiết bị kiểm tra ngay. File firmware không bao giờ đi qua broker. Mỗi họ thiết bị luôn nhận bản mới nhất.
Trạng thái online của thiết bị lấy từ sự kiện connect và disconnect của broker, không phải hỏi vòng từng thiết bị. Trình duyệt xem dữ liệu thiết bị trực tiếp qua MQTT trên WebSocket, đi qua Nginx.
AI chỉ được đọc dữ liệu
Một model router chuyển mỗi câu hỏi tới một trong 5 agent chuyên trách: kho và tài sản, báo cáo, hướng dẫn công việc, kế hoạch bảo trì, và tư vấn kiểm thử. Mỗi agent có tool riêng và chỉ nạp skill khi cần. Tháng 9/2026, skill được tách từ 5 file lớn thành 22 file nhỏ. Giờ mỗi agent chỉ nạp khoảng 20 dòng thay vì khoảng 100. Câu trả lời stream về trình duyệt qua Server-Sent Events.
Model là một tham số đổi được lúc chạy. Tên model có chữ “claude” thì đi tới Claude chạy trên Azure, còn lại đi tới Azure OpenAI.
Trợ lý chỉ đọc database qua 33 view chỉ đọc. Role database của nó chỉ được SELECT trên các view đó, mỗi câu lệnh có timeout 10 giây. Ràng buộc nằm ngay trong database, điều mà một danh sách từ khoá cấm không làm được. Tháng 8/2026, một lần kiểm tra lại tìm ra 13 tool có sẵn vẫn query bảng gốc, và cả 13 được chuyển sang view. Sau đó các cột giá bị bỏ khỏi view. API ẩn giá với người không có quyền xem giá. Luồng AI và MCP thì không biết người dùng là ai để kiểm tra quyền đó.
Azure AI Content Understanding đọc hướng dẫn công việc, rồi Azure AI Search lập chỉ mục. Tìm kiếm kết hợp từ khoá, vector 3.072 chiều và semantic ranking. Từ tháng 8/2026, agentic retrieval tách một câu hỏi phức tạp thành nhiều truy vấn con.
Model tự ghi chú cho từng người dùng bằng tool call vào PostgreSQL. 10 ghi chú mới nhất được đưa vào prompt. Cách này thay cho Mem0 và Neo4j.
MCP server cung cấp 18 tool chỉ đọc và 5 prompt qua Streamable HTTP, trên cùng các view đó. Nó nhận API key hoặc HTTP Basic, cả hai lưu dưới dạng hash. Có Basic vì connector của Power Apps và Copilot Studio hỗ trợ sẵn kiểu này.
Phản hồi của khách đi qua một pipeline có chốt chặn. Bước phân loại chạy trước. Phản hồi tích cực chuyển cho agent ghi nhận điểm mạnh, mục rủi ro thấp bỏ qua bước lập kế hoạch hành động. Nhờ vậy AI thôi bịa nguyên nhân gốc và thôi gán sai mức độ cho phản hồi tích cực. AI còn mô tả hình trong hướng dẫn công việc và soạn BOM. Nó cũng viết tóm tắt bảo trì dự đoán hằng tuần và phân loại issue người dùng báo.
Dự án được làm thế nào
Smart Lab Platform bắt đầu từ tháng 7/2025, là một hệ thống quản lý IoT nhỏ cho cảm biến ESP32 và chamber. Cập nhật firmware có ngay trong tài liệu yêu cầu đầu tiên. Từ đó nền tảng lớn dần theo từng module, thành nền tảng chính của lab. Bỏ commit merge và commit trùng thì repo có hơn 2.900 commit. Khoa viết 73%, tài khoản của một nhóm AI coding agent viết 12%.
Từ tháng 7/2026, mọi thay đổi đều đi qua pull request: 1.070 PR tính tới 25/10/2026, trong đó 1.062 PR đã merge. Từ giữa tháng 8, test trên CI phải qua thì mới merge được. Repo có 1.873 hàm test backend và 1.152 test case frontend.
Từ tháng 10/2026, Khoa làm nền tảng cùng nhóm AI coding agent đó và điều phối công việc của nhóm. Nhóm chạy trên Claude Code, trong một agent swarm. Riêng tháng 10, nhóm mở 468 trong 483 PR của tháng. Reviewer agent để lại kết luận bằng văn bản trên 369 PR trong số đó. Kết luận thường là chặn, sau đó có commit sửa và review lại. Khoa duyệt các lần merge. Tính trên toàn bộ lịch sử, 44% commit ghi Claude là đồng tác giả, bắt đầu từ tháng 3/2026.
Nền tảng chạy trên một server on-prem bằng Docker Compose. Nginx phục vụ React app, đứng cạnh API, MCP server, Redis, MQTT broker và một container solver riêng. Solver đó dùng cho bộ xếp lịch kế hoạch, hiện vẫn đang phát triển. PostgreSQL và InfluxDB là dịch vụ bên ngoài.
Deploy chạy theo lịch. Từ 15/10/2026, một pipeline riêng deploy hai lần mỗi ngày và bỏ qua ngày không có commit mới. Thay đổi schema chỉ thêm, không xoá, và chạy lúc app khởi động, không có bước migration riêng. Chỉ có một đường deploy, trên một host.
Mã nguồn nằm trong repo công việc riêng tư, nên trang này không có link mã nguồn.
Dữ liệu đi qua hệ thống thế nào
Vẽ lại từ file compose, cấu trúc thư mục và config trong repo.
- edgeThiết bị ESP32Cảm biến, bộ điều khiển chamber và máy, edge gateway 16 chân
- brokerMQTT brokerEMQX, QoS 2
- apiAPI của nền tảngFlask-RESTX, Gunicorn + gevent, 52 module
- dataDữ liệuPostgreSQL, Redis 8, InfluxDB
- aiLớp AIAzure OpenAI, Claude, Azure AI Search
- uiWeb appReact 19, MUI 9, Nginx
Các thư mục chính trong repo
- 01Đọc repo
- 02Phân tích README, docs, compose, package
- 03Viết nội dung, bỏ thông tin nội bộ
- 04Reviewer agent đối chiếu với nguồn
- 05Khoa duyệt trang, rồi deploy