Content Admin Lite
Tải template Excel mẫu, upload file .xlsx để validate + convert, rồi tải JSON về commit.
🌱 Thông tin phát hành
Website phục vụ tự học cho học sinh tiểu học lớp 3–5, phát hành phiên bản 1.0 ngày 14/02/2026 cho bạn Đỗ Nhật Minh (Lớp SN3A, Trường Tiểu học Ngọc Linh) tự luyện tập.
❓ Liên hệ góp ý, nâng cao chất lượng Website?
Share liên hệ để hoàn thiện, bổ sung chất lượng các bài học:
📧 Email: bach.eps@gmail.com
📱 SĐT: 0969.5969.89 (Bố Nhật Minh)
📘 Math Excel Guideline
Quy tắc nhập liệu marker {{m: ...}} cho KaTeX, ví dụ nhanh, checklist và lỗi thường gặp.
PHASE 3B
📘 Math Excel Guideline
Quy tắc nhập liệu marker {{m: ...}} cho KaTeX, ví dụ nhanh, checklist và lỗi thường gặp.
1) Marker math bắt buộc
- Dùng inline marker:
{{m: ...}} - Bên trong marker là LaTeX chuẩn KaTeX
- Chỉ render phần trong marker, text thường giữ nguyên
- Với
fill_blank: đặt____ngoài marker math
Ví dụ 1: Tính {{m: \frac{3}{4} + \frac{1}{4}}}
Ví dụ 2: Giải: {{m: x + \frac{1}{4} = \frac{9}{4}}}; {{m: x =}} ____
2) Checklist trước khi convert
idkhông trùng trong cùng moduletopickhông rỗng, đặt tên nhất quánleveldùng1|2|3|ALL(thiếu = ALL)- Câu trắc nghiệm:
answer ∈ choices
3) Lỗi thường gặp + chất lượng nội dung
- Quên bọc marker math cho phân số/biểu thức.
- Đặt
____bên trong marker math (không hợp lệ). - LaTeX sai cú pháp (thiếu ngoặc
{}, escape sai). - Câu hỏi lặp mẫu chỉ thay số, gây nhàm chán cho trẻ.
explain_viquá kỹ thuật, khó hiểu với học sinh tiểu học.
Nguồn guideline chi tiết: docs/MATH_EXCEL_GUIDELINE.md
💻 CLI: Convert trực tiếp từ Terminal
Chạy convert .xlsx → JSON trực tiếp từ Terminal (Windows/Mac/Linux) với đầy đủ options.
PHASE 6 Lite
💻 CLI: Convert trực tiếp từ Terminal
Chạy convert .xlsx → JSON trực tiếp từ Terminal (Windows/Mac/Linux) với đầy đủ options.
1) Cú pháp cơ bản
npx tsx tools/content-pipeline/convert_xlsx_to_json.ts \ --input=path/to/file.xlsx \ --output=./content \ --sheets=Grammar,Vocabulary \ --skip-validation=duplicate,blank \ --dry-run
2) Options
--input=<path>— File .xlsx đầu vào (bắt buộc)--output=<dir>— Thư mục output (mặc định: ./content)--sheets=<list>— Danh sách sheet cần convert (mặc định: tất cả)--skip-validation=<list>— Bỏ qua validation rules--dry-run— Chỉ validate, không ghi file--help— Hiển thị hướng dẫn đầy đủ
3) Validation rules có thể skip
duplicate— Bỏ kiểm tra prompt trùng lặpblank— Bỏ kiểm tra blank placement (fill_blank)math— Bỏ kiểm tra marker math (KaTeX)grammar-blank— Bỏ kiểm tra Grammar blank lengthreading-passage— Bỏ kiểm tra Reading passage required
4) Ví dụ thực tế
Convert tất cả sheets:
npx tsx tools/content-pipeline/convert_xlsx_to_json.ts --input=temp/english_v3.xlsx
Convert chỉ Grammar và Vocabulary, bỏ check duplicate:
npx tsx tools/content-pipeline/convert_xlsx_to_json.ts \ --input=temp/english_v3.xlsx \ --sheets=Grammar,Vocabulary \ --skip-validation=duplicate
Dry-run để kiểm tra trước khi ghi file:
npx tsx tools/content-pipeline/convert_xlsx_to_json.ts --input=temp/math_v2.xlsx --dry-run
🔊 English Audio CLI (Azure Speech)
Convert audio cho quiz_grammar.json + quiz_vocabulary.json theo mode incremental bằng manifest hash (engine: Azure Speech).
PHASE 5/6 Lite
🔊 English Audio CLI (Azure Speech)
Convert audio cho quiz_grammar.json + quiz_vocabulary.json theo mode incremental bằng manifest hash (engine: Azure Speech).
1) Quick start (làm theo đúng thứ tự)
set AZURE_SPEECH_KEY=<your_key> và set AZURE_SPEECH_REGION=<your_region> (CMD)
$env:AZURE_SPEECH_KEY="<your_key>" và $env:AZURE_SPEECH_REGION="<your_region>" (PowerShell)
npm run audio:voices — xem voice preset nhanh
npm run audio:gen:dry — chạy thử, không ghi file
npm run audio:gen -- --voice=en-US-GuyNeural --rate=-8% --fill-rate=-20% --retry=4 --retry-delay-ms=2000 --sleep-ms=300 — generate thật toàn bộ pending
Nếu dữ liệu rất lớn, dùng batch: thêm --limit=20. Mỗi lần chạy sẽ lấy 20 câu pending tiếp theo (không lặp 20 câu đầu).
2) Ý nghĩa tham số dễ nhớ
--voice=en-US-GuyNeural: giọng Mỹ nam--rate=-8%: chậm hơn 8% cho câu thường--fill-rate=-20%: chậm hơn 20% cho câufill_blank--limit=20: chạy theo lô 20 câu pending/lần--retry,--retry-delay-ms,--sleep-ms: giảm lỗi 403/rate-limit
3) Nếu gặp lỗi 403
- Đổi voice:
en-US-ChristopherNeuralhoặcen-US-EricNeural - Giảm tải: thêm
--limit=20(batch theo pending) - Chờ 1–3 phút rồi chạy lại
- Dùng retry/backoff:
--retry=4 --retry-delay-ms=2000 --sleep-ms=300 - Khi log báo
Pending generate: 0là đã xong toàn bộ.
4) Output + incremental policy
- Không cần tự tạo thư mục audio (script tự tạo).
- Audio file:
public/audio/english/grammar/<id>.mp3vàpublic/audio/english/vocabulary/<id>.mp3 - Manifest:
content/english/audio_manifest.json - ID mới hoặc hash đổi → generate; hash không đổi + file tồn tại → skip
- Prompt có blank dạng
____hoặc bất kỳ chuỗi_{2,}đều được đọc bằng pause (không đọc "underscore"); riêngfill_blankđọc chậm hơn.
🔍 Tùy chọn kiểm tra chất lượng:
Mặc định: tích hết. Bỏ tích rule không cần để bỏ qua cảnh báo.
Không ghi file lên server. Kết quả dùng để tải JSON về máy.