Hướng dẫn Nhân viên Chuẩn bị Nội dung cho VIVA AI
Đối tượng: Ops, HR, Content Manager, Moderator Mục đích: AI VIVA trả lời chính xác phụ thuộc 80% vào chất lượng dữ liệu nhân viên nạp vào. Tài liệu này liệt kê 7 loại nội dung cần chuẩn, checklist cụ thể, và ví dụ Đúng/Sai. Cập nhật: 2026-04-27
Tại sao chất lượng dữ liệu quan trọng
VIVA AI không có wiki tĩnh. AI lấy thông tin theo 3 đường:
- Function tools → Laravel realtime — query DB live (worker_profile, job_search, job_detail, commission_history…)
- System prompt — text "luật chơi" do dev curate
- LLM general knowledge — Gemini/Claude biết tiếng Việt nhưng KHÔNG biết KCN Bắc Ninh, Samsung Yên Phong, lương CNC
→ Nếu data trong Laravel sai/thiếu, AI hallucinate (bịa). Vietnam slang, tên KCN viết tắt, lương đặc thù = AI bí.
→ Nhân viên là knowledge anchor: nạp data sạch + đúng = AI giỏi. Data bẩn = AI ngu, blame back.
7 loại nội dung cần chuẩn
| # | Loại | Người chuẩn bị | Chu kỳ update | Ưu tiên |
|---|---|---|---|---|
| A | Tin tuyển dụng (Job postings) | HR nhà tuyển dụng + Mod | Mỗi tin mới | 🔴 Cao nhất |
| B | Hồ sơ công nhân (Worker profile) | CTV + Worker tự nhập | Lúc onboard + cập nhật | 🔴 Cao |
| C | Từ điển KCN (KCN ontology) | Content Manager | Quý 1 lần | 🟡 Trung |
| D | Chính sách HR ops (Reply policies) | HR Manager | Khi đổi chính sách | 🟡 Trung |
| E | Bảng lương chuẩn (Salary norms) | Data team | Quý 1 lần | 🟡 Trung |
| F | Mẫu trả lời FAQ (Reply templates) | HR + Content | Tháng 1 lần | 🟢 Thấp |
| G | Moderation tin scrape (Scraped content review) | Mod team | Hàng ngày | 🔴 Cao nhất |
A — Tin tuyển dụng (Job postings)
Vì sao quan trọng: AI dùng để search, summarize 5-bullet, explain match. Tin viết cẩu thả → AI tóm tắt sai → công nhân click vào thấy khác → mất uy tín.
Checklist mỗi tin
- [ ] Tiêu đề: Tên việc + công ty + KCN. Tối đa 80 ký tự.
- ✅ "CN đứng máy CNC — Samsung Yên Phong, lương 11.5–14.2tr"
- ❌ "TUYỂN GẤP!!! LƯƠNG CAO!!!" (clickbait, ALL CAPS)
-
❌ "Việc làm tốt" (chung chung, AI không match được)
-
[ ] Mức lương: Khoảng cụ thể, ghi rõ thực lĩnh hay cơ bản.
- ✅ "Cơ bản 9tr + tăng ca 2.5tr + thưởng 1tr = thực lĩnh 12.5tr/tháng"
- ❌ "Lương cao thoả thuận" (AI không filter được)
-
❌ "Lương 20tr" (không khả thi → AI flag salary anomaly)
-
[ ] Tên KCN chính xác: Dùng tên chuẩn từ KCN ontology.
- ✅ "KCN Yên Phong" / "VSIP Bắc Ninh" / "KCN Quế Võ I"
- ❌ "Bắc Ninh" (quá rộng) / "KCN Bắc Ninh" (không tồn tại tên đó)
-
❌ "Khu công nghiệp gần TP Bắc Ninh" (mơ hồ)
-
[ ] Yêu cầu công việc: List rõ.
- ✅ "Nam 18–35, biết đọc bản vẽ kỹ thuật, có thể làm ca đêm"
-
❌ "Yêu cầu chăm chỉ, trung thực" (AI không filter ra ai phù hợp)
-
[ ] Thông tin KTX: Free/Có phí, khoảng cách công ty.
- ✅ "KTX miễn phí trong KCN, đi bộ 5 phút"
- ✅ "KTX 500k/tháng, cách 2km, có xe đưa đón"
-
❌ "Có chỗ ở" (AI không biết miễn phí hay không)
-
[ ] Liên hệ HR: SĐT thật + tên người + giờ làm việc.
- ✅ "Chị Hằng HR — 0987 654 321, 8h–17h"
-
❌ "Liên hệ công ty" (AI không thể đề xuất action)
-
[ ] Phúc lợi cụ thể: BHXH/BHYT/thưởng tháng 13/khám sức khỏe…
- ✅ "BHXH/BHYT theo lương cơ bản, thưởng tháng 13 = 1.5 tháng lương"
- ❌ "Phúc lợi đầy đủ" (AI không citation được)
Ví dụ tin chuẩn
Tiêu đề: CN đứng máy CNC — Samsung Yên Phong, lương 11.5–14.2tr
KCN: KCN Yên Phong (Bắc Ninh)
Mô tả công việc:
- Vận hành máy CNC theo quy trình
- Làm 12 tiếng/ca, 4 ca/tuần (2 ngày 2 đêm)
- Có thể làm tăng ca cuối tháng
Yêu cầu:
- Nam, 18–35 tuổi
- Đọc được bản vẽ kỹ thuật cơ bản
- Có thể làm ca đêm
Phúc lợi:
- KTX miễn phí trong KCN, đi bộ 5 phút
- BHXH/BHYT/BHTN theo lương cơ bản (9tr)
- Thưởng tháng 13 = 1.5 tháng lương
- Khám sức khỏe định kỳ 6 tháng
- Xe đưa đón từ Bắc Giang/Bắc Ninh trung tâm
Lương: Cơ bản 9tr + tăng ca 2.5tr + thưởng 1tr = thực lĩnh ~12.5tr/tháng
Bắt đầu: Phỏng vấn 02/05, đi làm 05/05
HR: Chị Hằng — 0987 654 321 (8h–17h)
B — Hồ sơ công nhân (Worker profile)
Vì sao quan trọng: AI inject profile vào system prompt mỗi lần chat. Profile thiếu → AI hỏi lại liên tục, không gợi ý chính xác. Profile sai → AI gợi ý job sai khả năng worker.
Field bắt buộc (CTV nhập khi onboard)
- [ ] Họ tên đầy đủ: Viết hoa chữ cái đầu, đúng theo CCCD.
- ✅ "Nguyễn Văn Tâm"
-
❌ "nguyễn văn tâm" / "NGUYỄN VĂN TÂM" / "Tâm"
-
[ ] SĐT: Format VN chuẩn, có verify OTP.
- ✅ "0987654321" hoặc "+84987654321"
-
❌ "098 7654321" (có space)
-
[ ] Quê quán: Tỉnh + huyện, không cần xã.
- ✅ "Nam Định / Trực Ninh"
-
❌ "Nam Định" (thiếu huyện) / "Hà Nội" (mơ hồ — quận nào?)
-
[ ] Tuổi/giới tính: từ CCCD.
-
[ ] Trình độ: THPT / Trung cấp / Cao đẳng / Đại học / Chưa học hết THCS.
Field quan trọng (cần điền sớm — improve match score)
- [ ] Kỹ năng (skills): Chọn từ danh sách chuẩn (controlled vocab).
- ✅ ["CNC operator", "đóng gói", "kiểm tra chất lượng QC"]
-
❌ ["chăm chỉ", "tốt", "biết làm"] (vô nghĩa cho AI match)
-
[ ] Lịch sử công ty: Tên + tháng + vị trí.
- ✅ "Samsung Yên Phong / 14 tháng / CN lắp ráp"
-
❌ "Có làm 1 năm" (AI không match KCN)
-
[ ] Lương kỳ vọng: Khoảng cụ thể.
- ✅ "12–14tr/tháng"
-
❌ "Lương cao thoả thuận"
-
[ ] Vị trí mong muốn (KCN): Top 3 KCN ưu tiên.
-
✅ ["KCN Yên Phong", "KCN Quế Võ", "VSIP Bắc Ninh"]
-
[ ] Khoảng cách tối đa từ chỗ ở → KCN: km hoặc thời gian.
- ✅ "20km hoặc 30 phút xe máy"
Field khuyến khích
- [ ] Có thể làm ca đêm? (yes/no)
- [ ] Đã có thẻ BHXH? (yes/no — nếu yes thì transfer được)
- [ ] Bằng lái A1/B1? (yes/no)
- [ ] Tay nghề đặc biệt (welding, electrical…)
- [ ] Ngày có thể đi làm sớm nhất
Ví dụ profile chuẩn (AI dùng tốt)
{
"full_name": "Nguyễn Văn Tâm",
"phone": "0987654321",
"phone_verified": true,
"home_province": "Nam Định",
"home_district": "Trực Ninh",
"age": 26,
"gender": "male",
"education": "THPT",
"skills": ["CNC operator", "đọc bản vẽ kỹ thuật", "ca đêm"],
"experience": [
{"company": "Foxconn Vân Trung", "months": 14, "role": "CN lắp ráp"}
],
"salary_expectation": "12-14tr",
"kcn_preferences": ["KCN Yên Phong", "VSIP Bắc Ninh"],
"max_distance_km": 20,
"can_night_shift": true,
"has_bhxh_card": true,
"available_at": "2026-05-01"
}
C — Từ điển KCN (KCN ontology)
Vì sao quan trọng: AI thấy "VSIP" không tự biết = "Vietnam Singapore Industrial Park Bắc Ninh". Cần seed data để AI hiểu alias + biên giới hành chính.
Schema mỗi KCN
| Field | Bắt buộc | Ví dụ |
|---|---|---|
canonical_name |
✅ | "KCN Yên Phong" |
aliases |
✅ | ["KCN Yên Phong I", "Yên Phong", "Samsung Yên Phong"] |
province |
✅ | "Bắc Ninh" |
district |
✅ | "Yên Phong" |
coordinates |
✅ | {lat: 21.157, lng: 105.998} |
key_employers |
✅ | ["Samsung Electronics Vietnam", "Samsung Display", "Hansol Electronics"] |
total_workers_estimated |
recommended | 60000 |
roles_common |
recommended | ["CNC", "lắp ráp", "QC", "đóng gói"] |
salary_avg_by_role |
recommended | {"CNC": "10-13tr", "lắp ráp": "8-11tr"} |
nearby_kcn |
recommended | ["KCN Quế Võ", "VSIP Bắc Ninh"] |
transport |
optional | "Cách Hà Nội 35km, có xe bus 54" |
Top 10 KCN cần seed ngay
| # | KCN | Tỉnh | Aliases hay gặp |
|---|---|---|---|
| 1 | KCN Yên Phong | Bắc Ninh | "Samsung Yên Phong", "Yên Phong I" |
| 2 | KCN Quế Võ | Bắc Ninh | "Quế Võ I", "Canon Quế Võ" |
| 3 | VSIP Bắc Ninh | Bắc Ninh | "VSIP", "Vietnam Singapore", "Tân Hồng" |
| 4 | KCN Tiên Sơn | Bắc Ninh | "Tiên Sơn", "Hanaka" |
| 5 | KCN Đại Đồng-Hoàn Sơn | Bắc Ninh | "Đại Đồng", "Hoàn Sơn" |
| 6 | KCN Vân Trung | Bắc Giang | "Foxconn Vân Trung", "Vân Trung" |
| 7 | KCN Đình Trám | Bắc Giang | "Đình Trám" |
| 8 | KCN Quang Châu | Bắc Giang | "Quang Châu", "Luxshare-ICT" |
| 9 | KCN Phúc Thắng | Vĩnh Phúc | "Honda Phúc Thắng" |
| 10 | KCN Đồng Mai | Quảng Ninh | "Đồng Mai" |
→ Action: Content Manager tạo bảng kcn_ontology (Laravel migration), seed 10 KCN trên đầu Q1, thêm dần khi gặp.
D — Chính sách HR ops (Reply policies)
Vì sao quan trọng: Endpoint /v1/content/draft-reply cho HR ops gợi ý 3 mẫu trả lời, citation theo policy_id. Nếu policy không rõ → AI bịa quy định → HR gửi sai → worker khiếu nại.
Mỗi policy có
id: "advance_policy_2026"
title: "Chính sách ứng tiền"
version: "1.2"
effective_from: "2026-01-01"
effective_to: null
content_md: |
## Quy định ứng tiền
- Tối đa **2 lần ứng/tháng**, mỗi lần ≤ 5tr
- Lần thứ 3 trong tháng: chỉ duyệt ≤ 3tr nếu có lý do đặc biệt (ốm đau, gia đình)
- Trừ vào lương kỳ tiếp theo, không tính lãi
- Ứng quá 50% lương cơ bản → cần giám đốc duyệt
## Ngoại lệ
- Worker có VIVA Save ≥ 5tr → có thể rút từ Save thay vì ứng (lãi 6%/năm)
- Tết Nguyên Đán: cho phép ứng trước 3 tháng (đã có chương trình riêng)
keywords: ["ứng tiền", "advance", "ứng lương", "tiền ăn"]
related_policies: ["viva_save", "tet_advance"]
audience: ["worker", "hr", "ctv"]
Policy cần seed ngay (10 cái)
- advance_policy — ứng tiền
- bhxh_bhyt_policy — bảo hiểm xã hội/y tế
- overtime_policy — tăng ca, lương OT
- maternity_policy — thai sản
- resignation_policy — nghỉ việc, báo trước, hoàn ký quỹ
- absence_policy — xin nghỉ, lý do hợp lệ
- ktx_policy — quy định KTX, vi phạm
- complaint_handling — khiếu nại quy trình
- referral_bonus — giới thiệu bạn bè
- viva_save — tiết kiệm VIVA Save
→ Action: HR Manager viết content_md cho 10 policies, ưu tiên 5 cái đầu trong tuần này.
Format viết policy (4 phần)
- Tóm tắt 1 câu (cho AI quote)
- Quy định cụ thể (bullet, có số liệu)
- Ngoại lệ (edge cases)
- Tham chiếu (luật lao động, hợp đồng)
E — Bảng lương chuẩn (Salary norms)
Vì sao quan trọng: AI có sanity check — nếu tin tuyển dụng ghi 30tr cho công nhân lắp ráp → flag anomaly → mod review. Cần baseline để compare.
Schema
role: "CNC operator"
kcn: "KCN Yên Phong"
period: "2026-Q2"
salary_basic_range: [8500000, 10500000]
salary_total_range: [11500000, 14200000] # incl OT + bonuses
sample_size: 184
source: "VIVA worker self-report Q1 2026"
notes: "Range cao hơn ~10% vs Q4 2025 do thiếu hụt nhân lực"
Tần suất update
- Quý 1 lần
- Source: worker self-report (Q&A khi đăng ký) + scrape average từ tin tuyển dụng đã verify
- Filter outliers (>2 std deviation)
Top 5 roles cần seed cho mỗi KCN
- CNC operator
- CN lắp ráp (assembly)
- QC kiểm tra chất lượng
- Đóng gói (packaging)
- Bảo vệ (security)
→ Action: Data team chạy report quý 4/2025 + seed bảng salary_norms (10 KCN × 5 roles = 50 rows).
F — Mẫu trả lời FAQ (Reply templates)
Vì sao quan trọng: Câu hỏi thường gặp lặp lại 80%. HR có template chuẩn → AI gợi ý đúng tone + citation.
Top 20 FAQ cần template (workers)
- "Mức lương thực lĩnh là bao nhiêu?"
- "Có KTX không, miễn phí không?"
- "Làm ca đêm có phụ cấp không?"
- "Bao giờ nhận lương đầu?"
- "Ứng tiền được không, mấy lần?"
- "Đóng BHXH bao nhiêu, đóng từ tháng nào?"
- "Nghỉ Tết bao nhiêu ngày?"
- "Hợp đồng bao lâu, có cần ký không?"
- "Khám sức khỏe ở đâu, ai trả tiền?"
- "Đi làm bằng gì, có xe đưa đón không?"
- "Có thể chuyển KCN khác không?"
- "Nghỉ việc cần báo trước bao lâu?"
- "CCCD/CMND chưa có, có làm được không?"
- "Tay nghề chưa có, có đào tạo không?"
- "Lỡ nghỉ vài ngày có bị đuổi không?"
- "Mang theo người yêu/vợ chồng được không?"
- "Tăng ca có bắt buộc không?"
- "Lễ Tết được nhận thưởng gì?"
- "Có thể giới thiệu bạn không, được thưởng gì?"
- "Trách nhiệm khi bỏ việc giữa chừng?"
Format template
id: "faq_advance_request"
question_keywords: ["ứng tiền", "ứng trước", "tạm ứng"]
audience: "worker"
answer_template: |
Em ơi, theo chính sách công ty [#policy:advance_policy_2026]:
- Tối đa 2 lần/tháng, mỗi lần ≤ 5tr
- Lần 3 chỉ duyệt nếu có lý do đặc biệt
Em có thể nộp request qua app, HR duyệt trong 8 phút.
fallback_action: "Nếu cần gấp, liên hệ HR trực tiếp tại [#hotline]"
→ Action: Content team viết 20 templates đầu tiên trong 2 tuần.
G — Moderation tin scrape (Scraped content review)
Vì sao quan trọng: Scrape tự động đẩy 100+ tin/ngày từ Zalo/Facebook/Telegram. Mod cần review trước khi publish — AI training/quality phụ thuộc vào.
Workflow mỗi tin scrape
[Scraper external] → POST /api/v1/internal/ingest/jobs (HMAC)
↓
[Laravel] → store with moderation_status='pending'
↓
[Mod queue UI] → mod review (Approve / Edit / Reject)
↓
[Approved] → moderation_status='approved' → AI search/match được
[Edited] → mod fix typo/thiếu info → approve
[Rejected] → flag reason → exclude khỏi search
Checklist mỗi tin (mod review)
- [ ] Spam check: Có phải tin thật?
- ❌ Reject: "Việc làm tại nhà 50tr/tháng" (scam)
- ❌ Reject: Số điện thoại lạ, không thuộc danh sách HR đã verify
-
❌ Reject: Trùng 100% tin đã có (dedup miss)
-
[ ] Đủ thông tin? Tiêu chí tối thiểu:
- Có công ty + KCN + lương range + HR contact
-
Nếu thiếu 1/4 → Edit thêm vào (gọi HR xác nhận) hoặc Reject
-
[ ] Salary sanity check: So với salary_norms
- Vượt 50% baseline → ⚠️ Flag → kiểm tra lại
-
Dưới 70% baseline → ⚠️ Flag (có thể bóc lột)
-
[ ] TOS source check: Tin từ nguồn nào?
- ✅ HR fanpage chính thức công ty
- ⚠️ Group Zalo/Facebook private — confirm được không?
-
❌ Tin re-post 5+ lần qua nhiều CTV — có thể fake
-
[ ] Vietnamese tone: Có dịch máy không?
- ✅ "Tuyển công nhân lắp ráp linh kiện điện tử"
-
❌ "Tuyển dụng nhân viên hoạt động trên dây chuyền lắp ráp" (Google translate từ tiếng Anh)
-
[ ] KCN normalization: Map về canonical name
- ✅ "KCN Yên Phong" (canonical)
- ❌ "Yên Phong khu CN" (raw — cần convert)
Mod metrics theo dõi
| Metric | Target |
|---|---|
| Approve rate | > 60% |
| Edit-then-approve rate | 25-30% |
| Reject rate | 5-10% |
| Time-to-approve p50 | < 30 phút |
| Re-flag sau approve (false positive) | < 2% |
Auto-approve threshold
Hệ thống có confidence score (extraction quality). Tin với score ≥ 0.85 + source trusted (đã whitelisted) → auto-approve, mod chỉ random sample 10%.
→ Action: Mod team định nghĩa source whitelist (10 HR fanpage trusted) trong tuần này.
QC quy trình (trước khi publish)
Mỗi loại content qua 3 lớp:
- Layer 1 — Self-check: Người nhập tự dùng checklist trên
- Layer 2 — Peer review: 1 đồng nghiệp khác duyệt (4-mắt nguyên tắc)
- Layer 3 — AI sanity: Hệ thống tự check (salary anomaly, KCN normalize, dedup)
→ Có conflict ở Layer 3 (AI flag mà human không thấy) → escalate Senior HR Manager.
Common mistakes (tránh)
❌ Sai 1: Copy-paste từ tin cũ không edit
Tin cũ ghi "Lương 9-12tr". Copy sang tin mới mà không update → AI tóm tắt sai → worker apply nhầm → khiếu nại.
✅ Đúng: Mỗi tin redo từ template, fill số liệu mới.
❌ Sai 2: Để trống field optional rồi quên
Field kcn_aliases để trống → AI không match khi worker gõ "VSIP" trong khi tin ghi "Vietnam Singapore Industrial Park".
✅ Đúng: Optional field cũng phải fill khi có data, hoặc đánh dấu null rõ ràng.
❌ Sai 3: Tone tiếng Việt không tự nhiên
"Vị trí công việc của Anh/Chị sẽ liên quan đến hoạt động lắp ráp linh kiện điện tử trong khu vực dây chuyền sản xuất."
→ Quá formal, công nhân Việt không hiểu. AI bê nguyên về trả lời → fail.
✅ Đúng: "Anh chị làm CN lắp ráp linh kiện điện tử trong dây chuyền."
❌ Sai 4: Ghi salary "thoả thuận"
AI không filter được, không sanity check được, không gợi ý cho worker đúng tier.
✅ Đúng: Luôn ghi range cụ thể [min, max]. Nếu thật sự thoả thuận → ghi range industry baseline + note.
❌ Sai 5: Citation không link đến policy thật
HR draft-reply gõ "theo chính sách" mà không citation [#policy:advance_policy_2026] → AI không học được pattern → bịa policy.
✅ Đúng: Mọi reply tham chiếu policy phải có ID rõ ràng.
Update cadence
| Loại | Tần suất | Trigger update |
|---|---|---|
| Job postings | Per-tin | New job hoặc fix typo |
| Worker profile | Lần đầu + bổ sung | Chat AI hỏi thêm field thiếu |
| KCN ontology | Quý 1 lần | KCN mới mở, tên đổi, employer mới |
| HR policies | Khi đổi quy định | Luật lao động update, công ty đổi chính sách |
| Salary norms | Quý 1 lần | Q-end report |
| FAQ templates | Tháng 1 lần | Mod thấy câu hỏi mới lặp ≥ 5 lần/tháng |
| Scraped tins | Real-time | Mỗi tin từ scraper |
KPI đo chất lượng (cho team)
Hàng tuần báo cáo:
| KPI | Target |
|---|---|
| % job postings đầy đủ 8 field bắt buộc | ≥ 95% |
| % worker profile có ≥ 5 field optional | ≥ 70% |
| Mod approve rate | 60-70% |
| AI hallucination flagged (người dùng report sai) | < 3% |
| Time-to-fix khi flag | < 24h |
Câu hỏi thường gặp (cho nhân viên)
Q: AI không hiểu tên KCN tôi gõ?
A: Add vào aliases của KCN ontology. Báo Content Manager.
Q: Worker complaint AI gợi ý lương không khớp? A: Check 2 chỗ: (1) tin tuyển dụng ghi đúng không, (2) salary_norms có outdated không.
Q: Tin scrape lặp 100% nhưng auto-approved? A: Dedup logic miss. Báo Mod Lead — set scrape_dedup_key thủ công + thêm rule pattern.
Q: HR policy đổi giữa quý, làm sao update gấp? A: Tăng version policy (1.2 → 1.3), set effective_from. AI tự pickup trong vòng 5 phút (cache TTL).
Q: Worker không chịu cập nhật profile? A: AI sẽ proactive ask trong chat — "Để gợi ý chính xác hơn, bạn cho biết kỹ năng chính?". Nếu vẫn skip → CTV nhập giúp khi gặp mặt.
Checklist cuối cùng: nhân viên onboard mới (tuần 1)
- [ ] Đọc xong tài liệu này
- [ ] Quiz 10 câu (HR Manager đánh giá)
- [ ] Pair-mod 5 tin scrape với senior
- [ ] Tự nạp 3 tin job postings test → senior duyệt
- [ ] Update 1 worker profile + 1 policy (sửa typo)
- [ ] Đọc
docs/ai-service/cd-deploy-guide.md(biết về deploy nếu cần liên hệ dev)
References
- VIVA AI service architecture:
docs/ai-service/01-architecture.md - Cross-service auth:
docs/ai-service/16-integration-laravel.md - Active LEAN PIVOT plan:
plans/260426-2010-viva-lean-pivot/plan.md - Function tools available:
docs/ai-service/05-function-tools.md - System prompt curation: liên hệ Senior Dev (file
app/llm/prompts.py)