Smart Study Buddy là ứng dụng web hỗ trợ sinh viên hỏi đáp dựa trên tài liệu môn học. Hệ thống cho phép quản lý tài liệu, upload và index nội dung, tìm kiếm ngữ cảnh liên quan bằng cơ chế RAG, sau đó dùng Gemini để sinh câu trả lời tiếng Việt có trích dẫn nguồn.
Admin, Teacher, Student.PDF, DOCX, PPTX, TXT, MD, CSV hoặc nhập nội dung thủ công.ass2/
├── ass2/ # Web app: Razor Pages, Blazor components, SignalR hub
│ ├── Components/ # Blazor components
│ ├── Hubs/ # SignalR hub
│ ├── Pages/ # Razor Pages
│ └── Program.cs # Cấu hình DI, auth, database, routing
├── BLL/ # Business logic layer
│ ├── Models/ # DTO/record models
│ └── Services/ # Auth, knowledge base, Gemini, benchmark
├── DAL/ # Data access layer
│ └── Data/
│ └── AppDbContext.cs
├── ERD.md # Sơ đồ ERD bằng Mermaid
└── ass2.slnx
Ứng dụng sử dụng SQL Server LocalDB với database mặc định:
Ass2RagChatbot

Các bảng chính:
Documents: lưu tài liệu đã upload/index.DocumentChunks: lưu các đoạn nội dung đã chia nhỏ từ tài liệu.ChatTurns: lưu lịch sử hỏi đáp.SourceMatches: lưu nguồn tài liệu được truy xuất cho từng câu trả lời.Users: lưu tài khoản demo.Subjects: lưu danh mục môn học.TeacherSubjects: bảng trung gian phân công giáo viên với môn học.ERD chi tiết nằm trong file ERD.md.
Khi chạy lần đầu, hệ thống tự seed dữ liệu mẫu:
| Username | Password | Vai trò | Ghi chú |
|---|---|---|---|
admin | 123 | Admin | Quản lý user, môn học, phân quyền |
gv_prn | 123 | Teacher | Trưởng bộ môn PRN222 |
gv_ai | 123 | Teacher | Trưởng bộ môn AI |
gv_thuong | 123 | Teacher | Giáo viên thường |
hocsinh | 123 | Student | Sinh viên demo |
Yêu cầu:
Kiểm tra .NET:
dotnet --version
Connection string mặc định nằm trong ass2/appsettings.json và ass2/appsettings.Development.json:
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=Ass2RagChatbot;Trusted_Connection=True;Encrypt=False;TrustServerCertificate=True;MultipleActiveResultSets=true"
}
}
Nên cấu hình Gemini API key bằng User Secrets hoặc biến môi trường thay vì commit trực tiếp lên GitHub.
Ví dụ dùng User Secrets:
cd ass2
dotnet user-secrets init --project ass2/ass2.csproj
dotnet user-secrets set "Gemini:ApiKey" "YOUR_GEMINI_API_KEY" --project ass2/ass2.csproj
dotnet user-secrets set "Gemini:Model" "gemini-flash-latest" --project ass2/ass2.csproj
Hoặc dùng biến môi trường:
set Gemini__ApiKey=YOUR_GEMINI_API_KEY
set Gemini__Model=gemini-flash-latest
Restore package:
dotnet restore
Build project:
dotnet build
Chạy web app:
dotnet run --project ass2/ass2.csproj
Sau đó mở URL được in ra trong terminal, thường là:
https://localhost:xxxx
http://localhost:xxxx
Khi ứng dụng khởi động, Program.cs sẽ gọi:
authService.EnsureReady() để tạo/kiểm tra bảng user, subject và phân quyền.knowledgeBase.SeedAsync() để tạo database, schema và tài liệu mẫu nếu chưa có dữ liệu.Admin: quản lý role, môn học, phân công giáo viên.Teacher: xem tài liệu theo môn được phân công.Teacher là trưởng bộ môn: có quyền upload tài liệu cho bộ môn đang quản lý.Student: hỏi đáp và xem nội dung học tập được cung cấp.Pipeline xử lý tài liệu nằm trong BLL/Services/KnowledgeBaseService.cs:
Repository không nên public API key, password thật hoặc connection string production. Trước khi đưa lên GitHub, hãy:
appsettings.json và appsettings.Development.json.DAL/Data/AppDbContext.cs: định nghĩa DbContext và entity.BLL/Services/KnowledgeBaseService.cs: xử lý tài liệu, RAG và chat.BLL/Services/DemoAuthService.cs: xử lý tài khoản, role, môn học.BLL/Services/GeminiAiService.cs: gọi Gemini API.Smart Study Buddy là ứng dụng web hỗ trợ sinh viên hỏi đáp dựa trên tài liệu môn học. Hệ thống cho phép quản lý tài liệu, upload và index nội dung, tìm kiếm ngữ cảnh liên quan bằng cơ chế RAG, sau đó dùng Gemini để sinh câu trả lời tiếng Việt có trích dẫn nguồn.
Admin, Teacher, Student.PDF, DOCX, PPTX, TXT, MD, CSV hoặc nhập nội dung thủ công.ass2/
├── ass2/ # Web app: Razor Pages, Blazor components, SignalR hub
│ ├── Components/ # Blazor components
│ ├── Hubs/ # SignalR hub
│ ├── Pages/ # Razor Pages
│ └── Program.cs # Cấu hình DI, auth, database, routing
├── BLL/ # Business logic layer
│ ├── Models/ # DTO/record models
│ └── Services/ # Auth, knowledge base, Gemini, benchmark
├── DAL/ # Data access layer
│ └── Data/
│ └── AppDbContext.cs
├── ERD.md # Sơ đồ ERD bằng Mermaid
└── ass2.slnx
Ứng dụng sử dụng SQL Server LocalDB với database mặc định:
Ass2RagChatbot

Các bảng chính:
Documents: lưu tài liệu đã upload/index.DocumentChunks: lưu các đoạn nội dung đã chia nhỏ từ tài liệu.ChatTurns: lưu lịch sử hỏi đáp.SourceMatches: lưu nguồn tài liệu được truy xuất cho từng câu trả lời.Users: lưu tài khoản demo.Subjects: lưu danh mục môn học.TeacherSubjects: bảng trung gian phân công giáo viên với môn học.ERD chi tiết nằm trong file ERD.md.
Khi chạy lần đầu, hệ thống tự seed dữ liệu mẫu:
| Username | Password | Vai trò | Ghi chú |
|---|---|---|---|
admin | 123 | Admin | Quản lý user, môn học, phân quyền |
gv_prn | 123 | Teacher | Trưởng bộ môn PRN222 |
gv_ai | 123 | Teacher | Trưởng bộ môn AI |
gv_thuong | 123 | Teacher | Giáo viên thường |
hocsinh | 123 | Student | Sinh viên demo |
Yêu cầu:
Kiểm tra .NET:
dotnet --version
Connection string mặc định nằm trong ass2/appsettings.json và ass2/appsettings.Development.json:
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=Ass2RagChatbot;Trusted_Connection=True;Encrypt=False;TrustServerCertificate=True;MultipleActiveResultSets=true"
}
}
Nên cấu hình Gemini API key bằng User Secrets hoặc biến môi trường thay vì commit trực tiếp lên GitHub.
Ví dụ dùng User Secrets:
cd ass2
dotnet user-secrets init --project ass2/ass2.csproj
dotnet user-secrets set "Gemini:ApiKey" "YOUR_GEMINI_API_KEY" --project ass2/ass2.csproj
dotnet user-secrets set "Gemini:Model" "gemini-flash-latest" --project ass2/ass2.csproj
Hoặc dùng biến môi trường:
set Gemini__ApiKey=YOUR_GEMINI_API_KEY
set Gemini__Model=gemini-flash-latest
Restore package:
dotnet restore
Build project:
dotnet build
Chạy web app:
dotnet run --project ass2/ass2.csproj
Sau đó mở URL được in ra trong terminal, thường là:
https://localhost:xxxx
http://localhost:xxxx
Khi ứng dụng khởi động, Program.cs sẽ gọi:
authService.EnsureReady() để tạo/kiểm tra bảng user, subject và phân quyền.knowledgeBase.SeedAsync() để tạo database, schema và tài liệu mẫu nếu chưa có dữ liệu.Admin: quản lý role, môn học, phân công giáo viên.Teacher: xem tài liệu theo môn được phân công.Teacher là trưởng bộ môn: có quyền upload tài liệu cho bộ môn đang quản lý.Student: hỏi đáp và xem nội dung học tập được cung cấp.Pipeline xử lý tài liệu nằm trong BLL/Services/KnowledgeBaseService.cs:
Repository không nên public API key, password thật hoặc connection string production. Trước khi đưa lên GitHub, hãy:
appsettings.json và appsettings.Development.json.DAL/Data/AppDbContext.cs: định nghĩa DbContext và entity.BLL/Services/KnowledgeBaseService.cs: xử lý tài liệu, RAG và chat.BLL/Services/DemoAuthService.cs: xử lý tài khoản, role, môn học.BLL/Services/GeminiAiService.cs: gọi Gemini API.