№ 35
AI Lab Simulator là nền tảng giả lập phòng thí nghiệm STEM tương tác hai phía tại Việt Nam, hỗ trợ giáo viên thiết kế bài thí nghiệm bằng prompt tiếng Việt và giúp học sinh thực hành trực quan qua hoạt ảnh 2D cùng đồ thị đồng bộ.
Hệ thống giả lập phòng thí nghiệm STEM (Toán, Vật lý, Hóa học) tương tác hai phía dành cho Giáo viên (Teacher) và Học sinh (Student) tại Việt Nam.
AI Lab Simulator (còn gọi là Aurora Lab) là giải pháp hỗ trợ giảng dạy và thực hành các môn học STEM thông qua các kịch bản mô phỏng trực quan 2D và biểu đồ thời gian thực. Hệ thống giải quyết bài toán lớn về độ chính xác và tin cậy của Trí tuệ nhân tạo (LLM) trong giáo dục tự nhiên:
scipy, numpy, sympy, và pint (quản lý đơn vị đo).blocked: true) kèm theo lời giải thích mang tính giáo dục bằng tiếng Việt.Hệ thống phục vụ ba nhóm đối tượng cốt lõi trong hệ sinh thái giáo dục Việt Nam:
Dự án ra đời nhằm giải quyết trực tiếp 4 nỗi đau (pain points) lớn của các phần mềm thí nghiệm và công cụ AI hiện nay:
ModelSpec chuẩn. Toàn bộ logic động học được giải quyết bởi các thuật toán khoa học tất định (scipy.integrate.solve_ivp). Thêm vào đó, bộ lọc định luật vật lý (Validator) sẽ tự động chặn mọi đầu ra sai lệch định luật bảo toàn.POST /ai/generate-simulation) sẽ tự động dựng và sửa chữa spec mới. Hệ thống được Việt hóa toàn diện và tích hợp sẵn đầy đủ tính năng tạo lớp học, giao bài tập, chấm điểm tự động.Dự án tuân thủ mô hình kiến trúc 3 lớp (Three-Tier Architecture) giúp phân tách rõ ràng trách nhiệm giữa giao diện người dùng, logic xử lý mô phỏng và cơ sở dữ liệu.
flowchart TB
subgraph FE["LỚP HIỂN THỊ (Presentation Layer - React + Vite SPA)"]
tcreate["TeacherCreate.tsx (Giao diện tạo lab bằng prompt)"]
swork["StudentWorkspace.tsx (Không gian thực hành học sinh)"]
plot["SeriesPlot.tsx (Đồ thị Plotly hiển thị chuỗi số thực)"]
canvas["SimulationCanvas (Bộ dựng hình 2D theo vị trí vật thể)"]
auth["AuthProvider.tsx (Quản lý đăng nhập Supabase)"]
end
subgraph API["LỚP ỨNG DỤNG (Application Layer - FastAPI Web Service)"]
create["POST /extract (Trích xuất tham số từ prompt bằng LLM)"]
kernel["POST /labs (Engine giải mô phỏng theo đặc tả)"]
valid["Validator (Kiểm định định luật vật lý và giới hạn miền giá trị)"]
tutor["POST /tutor (Gia sư ảo trả lời kèm trích dẫn SGK)"]
platform["Platform REST APIs (Lớp học, Bài tập, Chấm điểm)"]
end
subgraph SUPA["LỚP DỮ LIỆU (Data Layer - Supabase Managed Services)"]
pg["PostgreSQL DB (Lưu trữ lab, lớp học, bài nộp, nhật ký tương tác)"]
rls["Chính sách RLS (Phân quyền bảo mật cô lập dữ liệu học sinh/giáo viên)"]
pgv["pgvector (Tìm kiếm ngữ nghĩa RAG cho Gia sư AI)"]
end
subgraph EXT["DỊCH VỤ NGOÀI (External APIs)"]
llm["OpenAI / Nvidia API (Xử lý LLM cấu trúc & RAG)"]
bge["DeepInfra Embeddings (BGE-m3 sinh vector mật độ cao)"]
end
tcreate -->|"Yêu cầu phân tích prompt"| create
tcreate -->|"Lưu & Xuất bản"| platform
swork -->|"Giải phương trình mô phỏng"| kernel
kernel --> valid
swork -->|"Hỏi gia sư ảo"| tutor
tutor --> pgv
auth -->|"Xác thực JWT token"| platform
platform --> rls
rls --> pg
create -.-> llm
tutor -.-> llm
tutor -.-> bge
DynamicSim an toàn trong môi trường sandbox.ModelSpec và các tham số đầu vào. Nó tự động chuyển hóa các ký hiệu Sympy thành hàm Python, sau đó dùng scipy.integrate.solve_ivp để giải hệ phương trình vi phân mô tả hệ thống.Học sinh trong quá trình chạy bài lab có thể hỏi gia sư AI qua cửa sổ chat. Endpoint POST /tutor thực hiện tìm kiếm ngữ nghĩa (RAG) sử dụng vector tìm kiếm BGE-m3 trên cơ sở dữ liệu tri thức pgvector (đã import tài liệu Sách giáo khoa Việt Nam). Phản hồi trả về luôn đi kèm trích dẫn nguồn cụ thể (tên sách, chương, trang) để đảm bảo độ tin cậy.
Cấu trúc dự án được phân chia một cách khoa học giữa phần xử lý Backend (Python) và phần giao diện Frontend (React).
ai-lab-simulator/
├── data/
│ └── specs/ # Thư viện đặc tả thí nghiệm có sẵn (Toán/Lý/Hóa) dạng JSON
├── docs/ # Tài liệu kiến trúc, hướng dẫn code chuẩn của dự án
├── frontend/ # Mã nguồn Frontend (React + Vite + TypeScript)
│ ├── api/ # Định nghĩa các hàm fetch gọi lên API backend
│ ├── src/
│ │ ├── components/ # Các component React tái sử dụng (SeriesPlot, Tutor, v.v.)
│ │ │ ├── kit/ # Asset kit dựng hoạt hình 2D các thiết bị thí nghiệm
│ │ │ └── UniversalPhysicsLayout/ # Bố cục thí nghiệm chuẩn hóa đa năng
│ │ ├── pages/ # Các trang chức năng của giáo viên và học sinh
│ │ └── AuthProvider.tsx # Quản lý phiên đăng nhập và định tuyến phân vai
│ └── package.json # Các phụ thuộc Node.js và câu lệnh xây dựng ứng dụng
├── src/ # Mã nguồn Backend (FastAPI + Python Compute Engine)
│ ├── api/ # Các file định nghĩa endpoint API của hệ thống
│ ├── config.py # Cấu hình biến môi trường và thiết lập mặc định của mô hình LLM
│ ├── db/ # Kết nối và thao tác với cơ sở dữ liệu Supabase
│ ├── engine/ # Các thuật toán cốt lõi tính toán mô phỏng vật lý
│ ├── kernels/ # Bộ xử lý giải phương trình vi phân và các phương pháp tính toán khoa học
│ ├── main.py # Điểm khởi chạy FastAPI chính của hệ thống
│ ├── models/ # Khai báo cấu trúc dữ liệu Pydantic dùng cho API
│ ├── specs/ # Logic đọc và xử lý thư viện ModelSpec
│ ├── tutor/ # Logic xử lý RAG và prompt cho Gia sư AI
│ └── validation/ # Logic kiểm định định luật khoa học (Validator)
├── tests/ # Hệ thống kiểm thử tự động (Unit test, Integration test, Contract test)
├── requirements.txt # Các phụ thuộc thư viện Python
└── docker-compose.yml # Cấu hình chạy ứng dụng qua môi trường Container
Dự án hiện tại hỗ trợ 3 môn học STEM cốt lõi với danh mục mô phỏng vô cùng đa dạng, được định cấu hình dưới dạng tệp tin đặc tả tại thư mục data/specs/:
damped_oscillation.json): Mô phỏng sự suy giảm cơ năng của con lắc lò xo đặt trong chất lưu.elastic_collision.json): Va chạm trực diện giữa hai vật thể, bảo toàn động lượng và động năng.free_fall.json): Mô phỏng chuyển động rơi của vật chỉ dưới tác dụng của trọng lực.projectile.json): Chuyển động của vật thể được ném lên với góc $\alpha$, quỹ đạo parabol.projectile_drag.json): Khảo sát sự ảnh hưởng của lực cản không khí (phụ thuộc vào vận tốc) đến tầm xa và độ cao cực đại.simple_pendulum.json): Mô phỏng chuyển động của vật nhỏ treo vào sợi dây không dãn.spring_oscillator.json): Mô phỏng dao động điều hòa của hệ con lắc lò xo không ma sát.bien_co_dong_xu.json): Mô phỏng xác suất thực nghiệm tung đồng xu.cap_so_nhan_lui_vo_han.json): Minh họa trực quan tổng của một chuỗi cấp số nhân lùi vô hạn hội tụ.dao_ham_sin.json) & Đạo hàm hàm bậc hai (dao_ham_x_binh.json): Biểu diễn độ dốc tiếp tuyến chuyển động trực quan trên đồ thị.gioi_han_e.json): Khảo sát sự hội tụ của biểu thức $(1 + 1/n)^n$ tiến tới số Euler $e$.goc_noi_tiep.json): Minh họa tính chất góc nội tiếp bằng nửa góc ở tâm chắn cùng một cung tròn.law_of_large_numbers.json): Mô phỏng thực nghiệm lặp lại nhiều lần để thấy tần suất hội tụ về xác suất lý thuyết.tich_phan_sin.json) & Tích phân hàm bậc hai (tich_phan_x_binh.json): Minh họa diện tích hình phẳng dưới đường cong bằng tổng Riemann.acid_base_indicator.json): Sự thay đổi màu sắc của dung dịch chỉ thị theo giá trị pH.carbonate_acid_reaction.json): Phản ứng giữa muối cacbonat và axit sinh khí CO2.chemical_equilibrium.json): Mô phỏng sự chuyển dịch cân bằng theo nguyên lý Le Chatelier khi thay đổi nồng độ, nhiệt độ.crystallization.json): Quá trình hình thành tinh thể khi hạ nhiệt độ dung dịch bão hòa.decomposition_h2o2.json): Động học phản ứng phân hủy hydro peroxit dưới xúc tác MnO2.electrolysis.json): Quá trình điện phân dung dịch muối dưới tác dụng của dòng điện một chiều.ideal-gas.json): Mối liên hệ giữa áp suất, thể tích và nhiệt độ theo định luật khí lý tưởng.ion-exchange.json): Phản ứng tạo chất kết tủa, chất điện li yếu hoặc chất khí giữa các ion trong dung dịch.metal_acid_reaction.json): Mô phỏng tốc độ thoát khí H2 khi cho kim loại hoạt động mạnh/yếu vào dung dịch axit.titration.json): Xác định nồng độ axit chưa biết bằng dung dịch bazơ chuẩn độ.# Tạo virtual environment
python -m venv .venv
# Kích hoạt môi trường ảo
# Trên Windows:
.venv\Scripts\activate
# Trên macOS/Linux:
source .venv/bin/activate
# Cài đặt thư viện phụ thuộc
pip install -r requirements.txt
cp .env.example .env
uvicorn src.main:app --reload --port 8000
Sau khi chạy, tài liệu Swagger API sẽ có sẵn tại địa chỉ: http://localhost:8000/docs.cd frontend
npm install
npm run dev
Ứng dụng sẽ hoạt động tại địa chỉ mặc định http://localhost:5173. Khi build production, tệp tĩnh sẽ được xuất bản ra thư mục frontend/dist và được FastAPI tự động phân phối tại cổng dịch vụ chính.python -m pytest tests --ignore=tests/contract -q
python -m pytest tests/contract -q
python scripts/smoke-main-flows.py --full-ai
cd frontend
npm run test # Chạy kiểm thử vitest cho frontend
npm run typecheck # Kiểm tra tính toàn vẹn của kiểu dữ liệu TypeScript
cd frontend
npm run e2e