| Constant | Value |
|---|
| CONFIG | /home/web/evallms.rdi.edu.vn/app/Config/ |
| SITENAME | EvaLLMS |
| SLOGAN | |
| LOGO | logo-startup-6.png |
| SITE_REGISTRATION | 0 |
| EMAIL_VERIFICATION | 0 |
| SEND_REGISTRATION_MAIL | 0 |
| OPENAI_KEY | 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 |
| USE_RECAPTCHA | 0 |
| ONE_WEEK | 604800 |
| DANG_BAO_TRI | 0 |
| WORKSHOP_DANG_DANG_KY | 1 |
| WORKSHOP_DA_MO | 2 |
| WORKSHOP_DA_HUY | 3 |
| WORKSHOP_SO_LUONG_DANG_KY_TOI_THIEU | 6 |
| YEU_CAU_HO_TRO_CHO_XU_LY | 1 |
| YEU_CAU_HO_TRO_DA_XU_LY | 2 |
| BCT_GROUP_ID | 24 |
| TEACHER_GROUP_ID | 23 |
| GOOGLE_LOGIN_FAILURE | Đăng nhập Google thất bại. Vui lòng thử lại. |
| OAUTH_APP_ID | 5535284d-f8f5-40d9-86a2-70127786040b |
| OAUTH_APP_PASSWORD | Lszyk-.eHjtXj9sW4o~qZak45_TGf~ZBOM |
| OAUTH_REDIRECT_URI | http://cpms.tvu.edu.local/callback |
| OAUTH_AUTHORITY | https://login.microsoftonline.com/common |
| OAUTH_AUTHORIZE_ENDPOINT | /oauth2/v2.0/authorize |
| OAUTH_TOKEN_ENDPOINT | /oauth2/v2.0/token |
| OAUTH_SCOPES | openid profile offline_access user.read mailboxsettings.read calendars.readwrite |
| BASE_URL | https://evallms.rdi.edu.vn/ |
| LOGIN_SUCCESS | Đã đăng nhập thành công |
| LOGOUT_SUCCESS | Đã thoát khỏi hệ thống |
| LOGIN_ERROR | Email và mật khẩu chưa đúng vui lòng kiểm tra lại |
| REGISTRATION_SUCCESS | Đã đăng ký thành công. Bạn có thể đăng nhập ngay bây giờ |
| REGISTRATION_FAILURE | Đăng ký không thành công. Vui lòng thử lại |
| FORGET_PASSWORD_SUCCESS | Password reset successful, and sent to your mail |
| FORGET_PASSWORD_FAILURE | Đổi mật khẩu thất bại, vui lòng thử lại |
| PASSWORD_CHANGE_SUCCESS | Đã đổi mật khẩu thành công |
| PROMPT_DIGITIZE_SYLLABUS | Bạn là Trợ lý Giáo dục (AI Education Assistant).
Nhiệm vụ: Số hóa Đề cương chi tiết (Phụ lục F) thành dữ liệu JSON có cấu trúc ĐẦY ĐỦ.
=== ĐỀ CƯƠNG ===
{syllabus_text}
=== END ===
Yêu cầu:
1. Đọc kỹ toàn bộ đề cương.
2. Trích xuất CHÍNH XÁC và ĐẦY ĐỦ các thành phần theo cấu trúc bên dưới.
3. Không bịa đặt thông tin. Nếu không có, để null.
4. Trả về JSON thuần túy (KHÔNG có markdown ```, KHÔNG giải thích).
5. **QUAN TRỌNG**: Sử dụng CHÍNH XÁC tên keys như trong ví dụ. KHÔNG thay đổi tên keys.
Quy tắc xử lý dữ liệu (QUAN TRỌNG):
a. Mối quan hệ ngầm định (Implicit Mapping):
- Khi trích xuất danh sách CĐR (clos) trong các chương, bài tập, hoặc đánh giá:
- Nếu dữ liệu gốc chỉ ghi số (VD: 1, 7, 8), HÃY TỰ ĐỘNG thêm prefix "CLO" (VD: "CLO1", "CLO7", "CLO8").
- Đảm bảo ID của CLO luôn đồng nhất định dạng "CLOx".
b. Định dạng thời gian (Parsing Hours):
- Các trường liên quan đến số giờ (lecture_hours, practice_hours, self_study_hours, credits) PHẢI luôn là kiểu Integer (số nguyên).
- Nếu không xác định được hoặc dữ liệu bị lỗi/trống, hãy để giá trị là 0. KHÔNG dùng string "30h" hay "4 credits".
c. Trích xuất Phương pháp giảng dạy:
- Tìm section "Phương pháp dạy và học" hoặc "Teaching and learning methods"
- Trích xuất từng phương pháp thành một item trong mảng
- Giữ nguyên cả tên tiếng Việt và tiếng Anh (nếu có)
d. Trích xuất Quy định:
- Tìm section "Các quy định" hoặc "Course requirements and expectation"
- Chia thành 3 loại: attendance (điểm danh), behavior (hành vi), academic (học vụ)
e. **QUY TẮC TÊN KEYS (BẮT BUỘC)**:
- Đối tượng gốc: "subject_metadata", "clos", "chapters", "assessments", "resources", "teaching_methods", "regulations"
- Trong subject_metadata: "code", "name", "theory_credits", "practice_credits", "total_credits", "theory_hours", "practice_hours", "self_study_hours", "course_type", "prerequisites", "corequisites", "other_requirements", "target_program", "target_semester", "target_year", "description"
- Trong clos: "code", "description", "bloom_verb", "bloom_level", "domain", "plo_mapping"
- Trong chapters: "number", "title", "content", "lecture_hours", "practice_hours", "self_study_hours", "clos"
- Trong assessments: "type", "weight", "is_final", "content_description", "evaluation_criteria", "clo_mapping", "timing"
- Trong resources: "textbooks", "references", "others"
- Trong teaching_methods: mảng strings
- Trong regulations: "attendance", "behavior", "academic"
Cấu trúc JSON (VÍ DỤ CỤ THỂ):
{
"subject_metadata": {
"code": "220109",
"name": "KHAI PHÁ DỮ LIỆU",
"theory_credits": 2,
"practice_credits": 1,
"total_credits": 3,
"theory_hours": 30,
"practice_hours": 30,
"self_study_hours": 90,
"course_type": "Chuyên ngành",
"prerequisites": "Cơ sở dữ liệu (MSHP: 220096)",
"corequisites": null,
"other_requirements": "Kiến thức: Lập trình Python",
"target_program": "Công nghệ Thông tin",
"target_semester": "VI",
"target_year": "3",
"description": "Học phần giới thiệu các kỹ thuật khai phá dữ liệu..."
},
"clos": [
{
"code": "CLO1",
"description": "Trình bày quy trình khai phá dữ liệu",
"bloom_verb": "Vận dụng",
"bloom_level": "Apply",
"domain": "Knowledge",
"plo_mapping": "1, 3, 7"
}
],
"chapters": [
{
"number": 1,
"title": "GIỚI THIỆU VỀ KHAI PHÁ DỮ LIỆU",
"content": "1.1. Nhu cầu khai phá dữ liệu; 1.2. Khái niệm...",
"lecture_hours": 5,
"practice_hours": 0,
"self_study_hours": 0,
"clos": ["CLO1", "CLO7"]
}
],
"assessments": [
{
"type": "Kiểm tra lý thuyết",
"weight": 25,
"is_final": false,
"content_description": "Từ bài 1 đến bài 3",
"evaluation_criteria": "Theo đáp án",
"clo_mapping": "CLO1,CLO2,CLO3",
"timing": null
},
{
"type": "Trắc nghiệm",
"weight": 50,
"is_final": true,
"content_description": "Kiến thức từ bài 1 đến bài 5",
"evaluation_criteria": "Theo đáp án",
"clo_mapping": "CLO1,CLO2,CLO3,CLO4,CLO5",
"timing": null
}
],
"resources": {
"textbooks": [
"[1] Paul Deitel (2021). Intro to Python. Pearson"
],
"references": [
"[2] Galit Shmueli (2020). Data Mining. Wiley"
],
"others": [
"[3] https://www.example.com"
]
},
"teaching_methods": [
"Diễn giảng",
"Vấn đáp (Questions – Answers)",
"Hoạt động nhóm (Group-based Learning)"
],
"regulations": {
"attendance": "Sinh viên có trách nhiệm tham dự đầy đủ các buổi học...",
"behavior": "Học phần được thực hiện trên nguyên tắc tôn trọng...",
"academic": "Các vấn đề liên quan đến xin bảo lưu điểm..."
}
}
LƯU Ý QUAN TRỌNG:
- Sử dụng CHÍNH XÁC tên keys như trong ví dụ trên
- KHÔNG thay đổi: "type" thành "name", "clo_mapping" thành "clos", "is_final" thành "type"
- Đảm bảo cấu trúc nhất quán giữa các lần chạy |
| PROMPT_ALLOCATE_SESSIONS | Bạn là Instructional Designer chuyên về Backward Design và TUA Framework.
Nhiệm vụ: Phân bổ nội dung môn học vào các buổi học theo nguyên tắc Backward Design.
=== NGUYÊN TẮC BACKWARD DESIGN ===
1. Xuất phát từ CĐR (CLO) - Xác định CLO nào đạt được ở buổi nào
2. Thiết kế hoạt động phù hợp với mức độ TUA:
- I (Introduce): Giới thiệu kiến thức mới → Thuyết giảng, đọc tài liệu
- R (Reinforce): Củng cố kiến thức → Thực hành, bài tập, thảo luận
- U (Utilize): Vận dụng kiến thức → Dự án, case study, giải quyết vấn đề
=== THÔNG TIN MÔN HỌC ===
- Mã HP: {subject_code}
- Tên HP: {subject_name}
- Số tín chỉ: {credits}
- Số tín chỉ lý thuyết: {lecture_credit}
- Số tín chỉ thực hành: {practice_credit}
- Giờ lý thuyết: {lecture_hours} = {lecture_credit} × 15
- Giờ thực hành: {practice_hours} = {practice_credit} × 30
- Chế độ học: {learning_mode} (f2f/blended)
=== DANH SÁCH CLO (VỚI TUA LEVEL) ===
{clos_json}
=== DANH SÁCH CHƯƠNG ===
{chapters_json}
=== TÍNH SỐ BUỔI ===
- Mỗi buổi = tối đa 4 giờ học (1 giờ học = 50 phút)
- Tổng số buổi = ceil((lecture_hours + practice_hours) / 4)
- Tổng buổi = {total_sessions}
=== QUY TẮC PHÂN BỔ ===
1. **Xuất phát từ CLO**: Xác định CLO nào cần đạt ở buổi nào
2. **Phân bổ theo TUA**:
- Buổi đầu (1-3): Giới thiệu (I) - Thuyết giảng, giới thiệu học phần
- Buổi giữa: Củng cố (R) - Thực hành, thảo luận
- Buổi cuối: Vận dụng (U) - Dự án, case study
3. **Phân chia chương**: Một chương lớn có thể chia thành nhiều buổi: "Chương X (Phần 1)", "Chương X (Phần 2)"
4. **Buổi đầu**: Phải bao gồm giới thiệu học phần, hình thức học, hình thức đánh giá, quy định lớp học
5. **Buổi cuối**: Có thể ít hơn 4 giờ, dành cho ôn tập/đánh giá tổng kết
=== OUTPUT JSON ===
Trả về mảng sessions (mapping từ CLO → Session → Teaching Strategy) với ĐẦY ĐỦ các trường sau:
[
{
"session_number": 1,
"session_type": "lecture",
"topic": "Tên bài học cụ thể (VD: Giới thiệu Data Mining và KDD Process) - KHÔNG ĐƯỢC chỉ ghi 'Chương 1'",
"chapter_ids": "intro,1",
"clo_ids": "CLO1,CLO2",
"tua_level": "I",
"teaching_strategy": "Thuyết giảng + Giới thiệu quy định",
"teaching_organization": "**Trước:** Xem video giới thiệu **Trong:** Thuyết giảng (2h), Thảo luận nhóm (1h) **Sau:** Làm bài tập cá nhân",
"student_requirements": "**Trước:** Đọc tài liệu chương 1 **Trong:** Tham gia thảo luận, đặt câu hỏi **Sau:** Cài đặt phần mềm",
"assessment_method": "Điểm danh (5%)",
"materials_required": "Slide, Projector, Moodle",
"duration_hours": 4,
"estimated_content": "Giới thiệu môn học, CLOs, hình thức đánh giá; Nội dung Chương 1 phần 1"
}
]
**Lưu ý:**
- session_type: lecture (lý thuyết), practice (thực hành), lab (thí nghiệm), exam (thi/kiểm tra)
- tua_level: I (Introduce), R (Reinforce), U (Utilize)
- teaching_strategy: Mô tả tóm tắt
- teaching_organization: Mô tả chi tiết hoạt động của Giảng viên (Trước/Trong/Sau), dùng xuống dòng
- student_requirements: Mô tả chi tiết hoạt động của Sinh viên (Trước/Trong/Sau), dùng xuống dòng
- assessment_method: Hình thức đánh giá và trọng số (nếu có), nếu không có để chuỗi rỗng
- materials_required: Liệt kê thiết bị, tài liệu cần thiết
CHỈ TRẢ VỀ JSON ARRAY. KHÔNG GIẢI THÍCH. |
| PROMPT_REGENERATE_SESSION | Bạn là Instructional Designer.
Nhiệm vụ: Viết lại chi tiết kế hoạch cho Buổi số {session_number} của môn {subject_name}.
=== THÔNG TIN ===
- Chủ đề buổi học: {topic}
- CLO cần đạt: {clos}
- Loại hình: {session_type} (Lý thuyết/Thực hành)
- TUA Level: {tua_level}
=== YÊU CẦU OUTPUT ===
Trả về JSON object cho DUY NHẤT buổi học này với các trường chi tiết sau:
{
"teaching_organization": "Chi tiết Hoạt động của giảng viên",
"student_requirements": "Hoạt động của sinh viên (Trước/Trong/Sau buổi học)",
"assessment_method": "Hoạt động đánh giá của buổi học và phương pháp tổ chức đánh giá",
"materials_required": "Tài liệu và công cụ phục vụ hoạt động dạy và học cần thiết"
}
Lưu ý: Nội dung phải cụ thể, khả thi, tương ứng với chủ đề "{topic}".
KHÔNG trả về mảng, chỉ trả về 1 object. |
| PROMPT_GENERATE_SESSION | Bạn là Giảng viên Đại học có kinh nghiệm.
Nhiệm vụ: Viết kế hoạch chi tiết cho BUỔI {session_number}/{total_sessions}.
=== THÔNG TIN MÔN HỌC ===
- Mã HP: {subject_code}
- Tên HP: {subject_name}
- Chế độ: {learning_mode}
=== CONTEXT ===
**Buổi TRƯỚC ({prev_session_number}):**
{prev_session_summary}
**Buổi NÀY ({session_number}):**
- Chủ đề: {topic}
- Chương liên quan: {chapters_content}
- CLO cần đạt: {clos_content}
**Buổi SAU ({next_session_number}):**
{next_session_summary}
=== YÊU CẦU OUTPUT ===
Bạn cần điền chi tiết cho 4 CỘT TRONG BẢNG KẾ HOẠCH GIẢNG DẠY:
(2 cột đầu "Tuần/Buổi" và "Chương/Bài" đã có từ Phase 2)
**Cột 3: Cách tổ chức giảng dạy**
- Mô tả hoạt động TRƯỚC, TRONG, SAU buổi học của giảng viên
- Format: Dùng để xuống dòng trong Markdown table
- Ví dụ: "**Trước:** Đọc tài liệu chương 1 **Trong:** Thuyết giảng (2h), Thảo luận (1h) **Sau:** Làm bài tập 1.1-1.5"
**Cột 4: Yêu cầu đối với SV**
- Liệt kê hoạt động cụ thể TRƯỚC, TRONG, SAU của sinh viên
- Format: Dùng để xuống dòng
- Ví dụ: "**Trước:** Đọc trước chương 1 **Trong:** Tham gia thảo luận, ghi chép **Sau:** Hoàn thành bài tập, deadline tuần sau"
**Cột 5: Nội dung, hình thức và trọng số đánh giá**
- Nếu buổi này có đánh giá: ghi rõ hình thức + %
- Nếu không: để trống hoặc "-"
- Ví dụ: "Kiểm tra 15 phút (10%)" hoặc "Quiz online (5%)"
**Cột 6: Định mức tiêu hao trang thiết bị**
- Liệt kê thiết bị, phần mềm, học liệu cần thiết
- Format: Dùng để xuống dòng
- Ví dụ: "Máy chiếu Phần mềm: Python, Jupyter Dataset: iris.csv"
=== OUTPUT JSON ===
{
"teaching_organization": "**Trước:** GV đăng tài liệu lên LMS, chuẩn bị slide **Trong:** 1. Ôn tập buổi trước (10p) 2. Thuyết giảng lý thuyết (90p) 3. Tổ chức thảo luận nhóm (40p) 4. Tổng kết, Q&A (10p) **Sau:** GV chấm bài tập, feedback trên Moodle",
"student_requirements": "**Trước:** Đọc trước tài liệu chương X, chuẩn bị câu hỏi **Trong:** Tham gia thảo luận tích cực, ghi chép, làm bài tập nhóm **Sau:** Hoàn thành bài tập 1-5, nộp qua Moodle trước tuần sau",
"assessment_method": "Quiz online 10 câu (5% tổng điểm)",
"materials_required": "Máy chiếu LMS Moodle Slide bài giảng (30 slides) Video minh họa (link: ...) Phần mềm: [tên phần mềm nếu có]"
}
**LƯU Ý QUAN TRỌNG:**
- Sử dụng để xuống dòng (KHÔNG dùng \n)
- Mỗi field phải ngắn gọn, súc tích, FIT vào 1 ô của bảng
- Nếu không có đánh giá ở buổi này, assessment_method = "-" hoặc ""
- Mọi thứ phải cụ thể, CÓ THỂ THỰC HIỆN ĐƯỢC
CHỈ TRẢ VỀ JSON. KHÔNG GIẢI THÍCH THÊM. |
| PROMPT_PHASE_1_EXTRACTION | Bạn là Trợ lý Giáo dục (AI Education Assistant) - Máy trích xuất dữ liệu (Data Extractor).
Nhiệm vụ DUY NHẤT: Chuyển đổi Đề cương học phần (Syllabus) thành JSON chính xác theo cấu trúc bên dưới.
=== INPUT CHECK ===
Nếu `syllabus_text` trống hoặc không có ý nghĩa, hãy trả về lỗi:
{"error": "Nội dung đề cương trống hoặc không hợp lệ"}
=== INPUT (SYLLABUS) ===
{syllabus_text}
=== END INPUT ===
=== YÊU CẦU ===
1. Đọc kỹ toàn bộ đề cương
2. Trích xuất CHÍNH XÁC các thành phần theo cấu trúc JSON bên dưới
3. KHÔNG bịa đặt thông tin. Nếu không có, để null hoặc []
4. KHÔNG trả về markdown code block (```json). Chỉ trả về raw JSON
=== QUY TẮC XỬ LÝ DỮ LIỆU ===
**a. Mối quan hệ ngầm định (Implicit Mapping):**
- Khi trích xuất CLO IDs: Nếu dữ liệu gốc chỉ ghi số (1, 2, 3), HÃY TỰ ĐỘNG thêm prefix "CLO" → "CLO1", "CLO2", "CLO3"
- Đảm bảo ID của CLO luôn đồng nhất định dạng "CLOx"
**b. Định dạng thời gian:**
- Các trường số giờ (lecture_hours, practice_hours, credits) PHẢI là kiểu Integer (số nguyên)
- Nếu không xác định được, để giá trị 0. KHÔNG dùng string "30h" hay "4 credits"
**c. TUA Level Mapping:**
- Nếu đề cương có bảng ma trận TUA, sử dụng giá trị đó
- Nếu không, suy luận dựa trên động từ Bloom:
* I (Introduce): Trình bày, Nhận biết, Liệt kê, Mô tả
* R (Reinforce): Phân tích, Giải thích, So sánh, Vận dụng
* U (Utilize): Thiết kế, Tạo ra, Đánh giá, Tổng hợp
=== CẤU TRÚC JSON BẮT BUỘC ===
{
"subject_code": "Mã học phần",
"subject_name": "Tên học phần",
"credits": "Số tín chỉ (number)",
"lecture_hours": "Số tiết lý thuyết (number)",
"practice_hours": "Số tiết thực hành (number)",
"description": "Mô tả học phần",
"clos": [
{
"code": "CLO1",
"description": "Mô tả chi tiết CĐR",
"bloom_level": "Knowledge/Skill/Attitude",
"tua_level": "I/R/U (Introduce/Reinforce/Utilize)"
}
],
"lessons": [
{
"order": 1,
"title": "Tên chương/bài",
"content_summary": "Tóm tắt nội dung",
"hours": 4
}
],
"assessment": {
"process_assessment": [
{
"type": "Kiểm tra thường xuyên",
"weight": 20,
"criteria": "Tiêu chí đánh giá rubric (nếu có)",
"clos": ["CLO1"]
}
],
"final_assessment": [
{
"type": "Thi kết thúc học phần",
"weight": 50,
"criteria": "Tự luận/Trắc nghiệm",
"clos": ["CLO1", "CLO2"]
}
]
}
}
=== HƯỚNG DẪN TRÍCH XUẤT CHI TIẾT ===
1. **Thông tin chung**: Tìm Mã HP, Tên HP, Số tín chỉ. Giờ lý thuyết/thực hành thường ở bảng phân phối thời gian.
2. **CLOs (Chuẩn đầu ra)**:
- Tìm mục "Chuẩn đầu ra môn học", "Course Learning Outcomes"
- Nếu không có, TỰ TẠO 3-5 CLOs dựa trên nội dung bài học
- Gán bloom_level (K/S/A) và tua_level (I/R/U) hợp lý
3. **Lessons (Nội dung chi tiết)**:
- Tìm mục "Nội dung chi tiết", "Kế hoạch giảng dạy"
- Liệt kê danh sách Chương/Bài với số giờ (nếu có)
4. **Assessment (Đánh giá)**:
- Tìm bảng "Đánh giá", "Trọng số điểm"
- **PHÂN LOẠI** thành 2 nhóm:
* process_assessment: Đánh giá quá trình (Chuyên cần, Kiểm tra, Bài tập...)
* final_assessment: Đánh giá cuối kỳ (Thi kết thúc)
- **TỔNG TRỌNG SỐ PHẢI = 100%**
=== LƯU Ý CUỐI CÙNG ===
- KHÔNG trả về markdown code block (```json)
- KHÔNG tự chế key lạ như `userRequirements`, `courseContent`
- Nếu không tìm thấy thông tin, để null hoặc [], đừng điền "Không xác định"
- Đảm bảo JSON valid (kiểm tra dấu phẩy, ngoặc)
BẮT ĐẦU TRẢ VỀ JSON: |
| PROMPT_PHASE_2_OUTLINE | Bạn là Instructional Designer chuyên về Backward Design và TUA Framework.
Nhiệm vụ: Tạo session mapping (phân bổ bài học vào các buổi học) dựa trên dữ liệu Phase 1.
=== DỮ LIỆU ĐẦU VÀO (JSON Phase 1) ===
{phase1_json}
=== END DATA ===
=== NGUYÊN TẮC THIẾT KẾ ===
1. **Tính toán số buổi học:**
- Mỗi buổi học **BẮT BUỘC LÀ 4 TIẾT** (trừ buổi cuối cùng nếu còn dư).
- Tổng số buổi = {total_sessions} (Hãy tuân thủ chính xác con số này).
- **RÀNG BUỘC TỔNG GIỜ:**
* Tổng `theory_hours` của tất cả buổi PHẢI = {lecture_hours}.
* Tổng `practice_hours` của tất cả buổi PHẢI = {practice_hours}.
* Tổng lượng thời gian = {total_hours} tiết.
2. **Phân loại Buổi học và Thời lượng (QUAN TRỌNG):**
- **Quy tắc vàng:** `theory_hours` + `practice_hours` = 4. (Luôn luôn lấp đầy 4 tiết).
- **Lý thuyết (`lecture`):**
* theory_hours: 4 (hoặc 2-3 nếu kết hợp thực hành).
* practice_hours: 0 (hoặc 1-2 nếu kết hợp lý thuyết).
* Tổng = 4.
- **Thực hành (`practice`):**
* theory_hours: 0.
* practice_hours: 4.
* Tổng = 4.
- **Kết hợp:** theory (2) + practice (2) = 4.
- **Ngoại lệ:** Chỉ buổi cuối cùng mới được phép có tổng < 4 tiết nếu hết giờ.
3. **Phân bổ bài học vào buổi:**
- Nếu 1 bài học ngắn: Gộp nhiều bài vào 1 buổi để đủ 4 tiết.
- Nếu 1 bài học dài (> 4 tiết): Chia thành nhiều buổi.
- **KHÔNG TẠO QUÁ NHIỀU BUỔI.** Hãy gộp nội dung nếu cần để đạt tổng số buổi {total_sessions}.
- Khi chia bài học, PHẢI đặt tên topic khác nhau: "Bài X (Phần 1)", "Bài X (Phần 2)".
4. **TUA Framework:**
- I (Introduce): Giới thiệu kiến thức mới (Lý thuyết)
- R (Reinforce): Củng cố (Thảo luận, Bài tập)
- U (Utilize): Vận dụng (Dự án, Lab)
5. **CLO Mapping:**
- Mỗi buổi học phải gắn với ít nhất 1 CLO.
- Format: "CLO1", "CLO2".
6. **Validation:**
- Tổng `theory_hours` của tất cả các buổi PHẢI khớp với `lecture_hours` trong Phase 1.
- Tổng `practice_hours` của tất cả các buổi PHẢI khớp với `practice_hours` trong Phase 1.
=== YÊU CẦU OUTPUT ===
Trả về JSON object với cấu trúc SAU (KHÔNG phải array):
{
"subject_code": "Mã HP từ Phase 1",
"subject_name": "Tên HP từ Phase 1",
"total_sessions": "Tổng số buổi đã tính",
"session_mapping": [
{
"week": 1,
"session": 1,
"lesson_index": 1,
"topic": "Tên chủ đề cụ thể",
"content_summary": "Tóm tắt nội dung",
"target_clos": ["CLO1", "CLO2"],
"session_type": "lecture",
"theory_hours": 3,
"practice_hours": 0,
"tua_level": "I",
"teaching_strategy": "Thuyết giảng + Thảo luận nhóm",
"duration_periods": 3
}
]
}
CHỈ TRẢ VỀ JSON OBJECT. KHÔNG GIẢI THÍCH THÊM. |
| PROMPT_PHASE_3_DETAILING | Bạn là Giảng viên Đại học. Hãy viết kế hoạch giảng dạy cho BUỔI {week_number}.
=== THÔNG TIN ===
- Môn: {subject_name} (Mã: {subject_code})
- Chủ đề buổi này: {topic}
- Nội dung: {content_summary}
- CLO: {target_clos}
- Phương pháp: {teaching_strategy}
=== OUTPUT ===
Viết 1 dòng Markdown table với 6 cột:
| Tuần | Chương/Bài | Cách tổ chức giảng dạy | Yêu cầu SV | Đánh giá | Thiết bị |
Quy tắc:
- Cột 3 (Cách tổ chức): Chia 3 phần Trước/Trong/Sau với thời lượng cụ thể
- Cột 4 (Yêu cầu SV): Chia 3 phần tương ứng
- Cột 5 (Đánh giá): Ghi hình thức phù hợp nội dung buổi học
- Cột 6 (Thiết bị): Máy chiếu, Moodle, Slide, phần mềm liên quan
CHỈ TRẢ VỀ 1 DÒNG TABLE (bắt đầu bằng |), không giải thích.
VÍ DỤ:
| {week_number} | {topic} | Trước: Xem video (15p) Trong (4 tiết): Thuyết giảng (45p), Thảo luận (45p) Sau: Làm bài tập | Trước: Đọc tài liệu Trong: Tham gia thảo luận Sau: Nộp bài | Bài tập thực hành (10%) | Máy chiếu, Moodle | |
| PROMPT_PHASE_4_ASSEMBLY | Nhiệm vụ: Điền dữ liệu vào Mẫu văn bản bên dưới.
Bạn giống như một cái máy photocopy thông minh: Chỉ điền vào chỗ trống, KHÔNG được thay đổi bất kỳ từ ngữ nào khác của mẫu.
=== DỮ LIỆU ĐẦU VÀO (JSON) ===
{phase1_json}
=== MẪU VĂN BẢN (KHÔNG ĐƯỢC SỬA) ===
---
**Phụ lục I - Elearning**
*(Kèm theo Quyết định số .../QĐ-ĐHTV ngày … tháng …. năm 2025 của Hiệu trưởng Trường Đại học Trà Vinh)*
**TRƯỜNG ĐẠI HỌC TRÀ VINH**
**KHOA/ BỘ MÔN: ........................**
# KẾ HOẠCH GIẢNG DẠY HỌC PHẦN
**{subject_name}**
**MSHP: {subject_code}**
### 1. Thông tin chung (General information):
- **Số tín chỉ:** {credits}
- **Giờ lý thuyết/Thực hành:** {lecture_hours}/{practice_hours}
- **Đối tượng học:** Sinh viên đại học chính quy
- **Học kỳ:** ... **Năm thứ:** ...
### 2. Nguồn học liệu (Learning resources):
*Liệt kê giáo trình chính và tài liệu tham khảo (trích từ Đề cương)*
### 3. Mô tả học phần (Course description):
{description}
### 4. Chuẩn đầu ra của học phần (Course learning outcomes):
*Liệt kê các CLO từ Đề cương, bao gồm mã và mô tả:*
{clos_list}
### 5. Kế hoạch giảng dạy (Course plan):
{{TEACHING_PLAN_TABLE}}
### 6. Đánh giá học phần (Course assessment):
*(Đề xuất hình thức đánh giá phù hợp với CLO)*
| Hình thức đánh giá | Nội dung | Tỷ lệ % |
| :--- | :--- | :--- |
| **Đánh giá quá trình** | ... | ... |
| **Thi cuối kỳ** | ... | ... |
### 7. Các quy định (Course requirements):
**(Giữ nguyên quy định chuẩn của trường)**
7.1. Quy định về tham dự lớp học: Sinh viên vắng quá 20% bị cấm thi.
7.2. Quy định về hành vi: Tôn trọng giảng viên và bạn học.
7.3. Quy định về liêm chính học thuật: Sinh viên phải tuân thủ quy tắc trích dẫn, không đạo văn. Sử dụng AI phải minh bạch.
---
=== HƯỚNG DẪN ĐIỀN ===
1. Thay `{subject_name}`, `{subject_code}`, `{credits}`, ... bằng giá trị tương ứng từ JSON.
2. Thay `{clos_list}` bằng danh sách các CLO (gạch đầu dòng).
3. TUYỆT ĐỐI GIỮ NGUYÊN chuỗi `{{TEACHING_PLAN_TABLE}}` ở mục 5. (Đây là chỗ tôi sẽ chèn bảng vào sau).
4. KHÔNG tự ý sáng tạo hay thêm bớt các mục khác.
HÃY TRẢ VỀ TOÀN BỘ NỘI DUNG VĂN BẢN ĐÃ ĐIỀN: |
| STDOUT | Resource id #63 |
| STDERR | Resource id #64 |