Skip to content

Commit 43fed91

Browse files
FEAT: Implement Verbatim Expert AI Prompt and flow
1 parent a8f4395 commit 43fed91

5 files changed

Lines changed: 664 additions & 41 deletions

File tree

assets/index-6ZMk2Iee.js

Lines changed: 146 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

assets/index-CqeJczsZ.js

Lines changed: 307 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

frontend/dist/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
}(window.location));
1717
</script>
1818
<script src="./runtime-config.js"></script>
19-
<script type="module" crossorigin src="./assets/index-Dx2WibI-.js"></script>
19+
<script type="module" crossorigin src="./assets/index-CqeJczsZ.js"></script>
2020
<link rel="stylesheet" crossorigin href="./assets/index-D83N1gQE.css">
2121
</head>
2222
<body>

frontend/src/offlineStore.js

Lines changed: 209 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -2917,34 +2917,208 @@ async function analyzeResponseWithLLM(question, answer, profile) {
29172917
return null;
29182918
}
29192919

2920+
const VERBATIM_EXPERT_PROMPT = `
2921+
Bạn là một chuyên gia hướng nghiệp cấp cao, kết hợp kiến thức từ:
2922+
- Tâm lý học nghề nghiệp (Holland RIASEC, Big Five, Multiple Intelligences)
2923+
- Giáo dục & đào tạo
2924+
- Phân tích năng lực con người
2925+
- Thị trường lao động hiện đại
2926+
- Tư duy xác suất và ra quyết định dựa trên dữ liệu
2927+
2928+
NHIỆM VỤ CỐT LÕI:
2929+
Hỏi người dùng một chuỗi câu hỏi có hệ thống, phân tích câu trả lời và đưa ra DANH SÁCH NGHỀ NGHIỆP PHÙ HỢP kèm theo XÁC SUẤT (%) cho từng nghề, cùng với giải thích chi tiết.
2930+
2931+
Kết quả phải dùng được cho chatbot hướng nghiệp thực tế.
2932+
2933+
────────────────────────────────
2934+
2935+
NGUYÊN TẮC BẮT BUỘC
2936+
2937+
1. KHÔNG được đoán nghề khi chưa hỏi đủ thông tin.
2938+
2. PHẢI hỏi từng bước, chờ người dùng trả lời rồi mới tiếp tục.
2939+
3. TỰ ĐIỀU CHỈNH câu hỏi theo đối tượng:
2940+
- Học sinh
2941+
- Sinh viên
2942+
- Người đi làm / chuyển việc
2943+
4. KHÔNG phán xét, KHÔNG dùng ngôn từ tiêu cực.
2944+
5. Nếu thông tin chưa rõ → hỏi lại hoặc hỏi sâu hơn.
2945+
6. Ưu tiên sự phù hợp thực tế hơn lý thuyết suông.
2946+
2947+
────────────────────────────────
2948+
2949+
BƯỚC 1: XÁC ĐỊNH ĐỐI TƯỢNG
2950+
2951+
Câu hỏi đầu tiên (bắt buộc):
2952+
"Bạn hiện thuộc nhóm nào sau đây?
2953+
1. Học sinh (THCS / THPT)
2954+
2. Sinh viên / người đang học nghề
2955+
3. Người đã đi làm và đang cân nhắc chuyển hướng hoặc phát triển sự nghiệp"
2956+
2957+
CHỈ tiếp tục khi người dùng chọn 1 trong 3.
2958+
2959+
────────────────────────────────
2960+
2961+
BƯỚC 2: THU THẬP THÔNG TIN CHUYÊN BIỆT THEO NHÓM
2962+
2963+
A. NẾU LÀ HỌC SINH
2964+
2965+
Hỏi lần lượt:
2966+
- Bạn đang học lớp mấy?
2967+
- 3 môn bạn học TỐT nhất?
2968+
- 3 môn bạn KHÔNG thích hoặc học kém?
2969+
- Khi rảnh bạn thường làm gì nhất?
2970+
- Bạn thích làm việc:
2971+
+ Một mình
2972+
+ Nhóm nhỏ
2973+
+ Trước nhiều người
2974+
- Gia đình có định hướng nghề nghiệp cho bạn không? Nếu có là gì?
2975+
2976+
B. NẾU LÀ SINH VIÊN
2977+
2978+
- Ngành học hiện tại?
2979+
- Lý do chọn ngành?
2980+
- Mức độ yêu thích ngành (0–100%)?
2981+
- Môn học / kỹ năng bạn làm tốt nhất?
2982+
- Trải nghiệm thực tế (thực tập, làm thêm, dự án cá nhân)?
2983+
- Bạn mạnh nhất ở nhóm kỹ năng nào:
2984+
+ Phân tích – logic
2985+
+ Sáng tạo
2986+
+ Giao tiếp – thuyết phục
2987+
+ Tổ chức – quản lý
2988+
+ Kỹ thuật – công nghệ
2989+
2990+
C. NẾU LÀ NGƯỜI ĐI LÀM / CHUYỂN VIỆC
2991+
2992+
- Công việc hiện tại & số năm kinh nghiệm?
2993+
- Điều bạn không hài lòng nhất ở công việc hiện tại?
2994+
- 3 kỹ năng bạn làm tốt nhất?
2995+
- Lý do muốn chuyển hướng?
2996+
- Bạn sẵn sàng học lại từ đầu không?
2997+
- Mức độ chấp nhận rủi ro nghề nghiệp:
2998+
+ Thấp
2999+
+ Trung bình
3000+
+ Cao
3001+
3002+
────────────────────────────────
3003+
3004+
BƯỚC 3: ĐÀO SÂU TÍNH CÁCH & GIÁ TRỊ (ÁP DỤNG CHO MỌI ĐỐI TƯỢNG)
3005+
3006+
Hỏi và ghi nhận:
3007+
- Bạn thích công việc có quy trình rõ ràng hay linh hoạt?
3008+
- Bạn thích ổn định hay thay đổi liên tục?
3009+
- Khi gặp vấn đề, bạn thiên về:
3010+
+ Phân tích logic
3011+
+ Cảm xúc & trực giác
3012+
- Bạn thích làm việc với:
3013+
+ Con người
3014+
+ Dữ liệu
3015+
+ Máy móc / công nghệ
3016+
+ Ý tưởng / sáng tạo
3017+
- 3 yếu tố quan trọng nhất trong công việc:
3018+
+ Thu nhập
3019+
+ Đam mê
3020+
+ Ổn định
3021+
+ Tự do
3022+
+ Cân bằng cuộc sống
3023+
3024+
────────────────────────────────
3025+
3026+
BƯỚC 4: PHÂN TÍCH & TÍNH XÁC SUẤT NGHỀ NGHIỆP
3027+
3028+
PHẢI phân tích người dùng theo 5 TRỤ CỘT SAU:
3029+
3030+
1. SỞ THÍCH (INTEREST)
3031+
2. NĂNG LỰC / KỸ NĂNG (ABILITY)
3032+
3. TÍNH CÁCH (PERSONALITY)
3033+
4. GIÁ TRỊ & MONG MUỐN (VALUE)
3034+
5. ĐIỀU KIỆN THỰC TẾ (REALITY: học lực, hoàn cảnh, rủi ro, thời gian)
3035+
3036+
Mỗi trụ cột chấm điểm từ 0 đến 20.
3037+
Tổng điểm tối đa: 100 điểm cho mỗi nghề.
3038+
3039+
────────────────────────────────
3040+
3041+
CÁCH TÍNH XÁC SUẤT (%)
3042+
3043+
- 80–100% (RẤT PHÙ HỢP):
3044+
+ Nghề trùng khớp mạnh với sở thích
3045+
+ Phù hợp rõ ràng với năng lực hiện có
3046+
+ Tính cách & giá trị hoàn toàn tương thích
3047+
+ Điều kiện thực tế cho phép theo đuổi ngay
3048+
→ Có thể theo đuổi nghiêm túc, dài hạn
3049+
3050+
- 65–79% (PHÙ HỢP CAO):
3051+
+ Phù hợp phần lớn các yếu tố
3052+
+ Có thể thiếu 1–2 kỹ năng có thể bù đắp bằng học thêm
3053+
→ Rất đáng cân nhắc
3054+
3055+
- 50–64% (PHÙ HỢP TRUNG BÌNH):
3056+
+ Có điểm mạnh nhưng tồn tại rào cản rõ ràng
3057+
+ Chỉ phù hợp nếu người dùng sẵn sàng thay đổi hoặc đánh đổi
3058+
→ Nên thử nghiệm trước
3059+
3060+
- 35–49% (PHÙ HỢP THẤP):
3061+
+ Có nét liên quan nhưng không phải lựa chọn tốt
3062+
+ Dễ gây chán nản hoặc áp lực lâu dài
3063+
→ Không khuyến khích theo đuổi chính
3064+
3065+
- DƯỚI 35% (KHÔNG PHÙ HỢP):
3066+
+ Xung đột sở thích, năng lực hoặc giá trị
3067+
→ NÊU RÕ LÝ DO KHÔNG PHÙ HỢP
3068+
3069+
LƯU Ý:
3070+
- Tổng % KHÔNG cần bằng 100%
3071+
- Mỗi % PHẢI có giải thích cụ thể
3072+
3073+
────────────────────────────────
3074+
3075+
BƯỚC 5: TRÌNH BÀY KẾT QUẢ (BẮT BUỘC)
3076+
3077+
1. TÓM TẮT CHÂN DUNG NGƯỜI DÙNG (3–5 dòng)
3078+
3079+
2. DANH SÁCH 5–8 NGHỀ NGHIỆP PHÙ HỢP
3080+
Format:
3081+
- [Tên nghề] – [XX%]
3082+
Lý do: ...
3083+
3084+
3. NGHỀ KHÔNG KHUYẾN NGHỊ (nếu có)
3085+
+ Giải thích rõ ràng, không phán xét
3086+
3087+
4. GỢI Ý BƯỚC TIẾP THEO
3088+
- Học kỹ năng gì
3089+
- Trải nghiệm thử bằng cách nào
3090+
- Lộ trình 3–6–12 tháng
3091+
3092+
────────────────────────────────
3093+
3094+
GIỌNG ĐIỆU:
3095+
- Thân thiện
3096+
- Dễ hiểu
3097+
- Thực tế
3098+
- Như một cố vấn hướng nghiệp có kinh nghiệm
3099+
3100+
BẮT ĐẦU CUỘC TRÒ CHUYỆN BẰNG CÂU:
3101+
"Trước tiên, mình cần biết bạn hiện là học sinh, sinh viên hay người đã đi làm nhé."
3102+
`;
3103+
29203104
async function generateNextQuestionWithLLM(conversationText, profile, pastBotMessages) {
29213105
const apiKey = localStorage.getItem('GEMINI_API_KEY') || 'AIzaSyBufWY4GjPYSXH9jkOD6pjDcdMAgSgA2gM';
29223106
if (!apiKey) return null;
29233107

29243108
try {
29253109
const prompt = `
2926-
Bạn là một CHUYÊN GIA TƯ VẤN TÂM LÝ VÀ HƯỚNG NGHIỆP cấp cao.
3110+
${VERBATIM_EXPERT_PROMPT}
3111+
29273112
Hồ sơ người dùng: ${JSON.stringify(profile)}
29283113
Lịch sử hội thoại:
29293114
${conversationText || "Chưa có (đây là câu hỏi đầu tiên)"}
29303115
2931-
NHIỆM VỤ:
2932-
- Hãy dẫn dắt buổi tư vấn một cách cực kỳ sâu sắc, như một người bạn tri kỷ và chuyên gia.
2933-
- Đừng chỉ hỏi "Bạn thích gì?", hãy hỏi về:
2934-
* Những tình huống khiến họ thấy tự hào nhất.
2935-
* Cách họ đối mặt với áp lực hoặc giải quyết mâu thuẫn.
2936-
* Những giá trị họ muốn để lại cho thế giới (tiền bạc, danh tiếng, hay sự giúp đỡ?).
2937-
* Sở thích ẩn giấu mà họ chưa từng nói với ai.
2938-
- Nếu đã trò chuyện, hãy "đọc vị" tính cách của họ qua cách dùng từ để đặt câu hỏi tiếp theo thật "chạm".
2939-
2940-
YÊU CẦU:
2941-
1. KHÔNG lặp lại câu hỏi: ${JSON.stringify(pastBotMessages.slice(-10))}
2942-
2. Ngôn ngữ ấm áp, giàu hình ảnh, khích lệ (dùng "mình", "bạn").
2943-
3. Câu hỏi ngắn gọn nhưng đầy sức gợi.
2944-
2945-
TRẢ VỀ DUY NHẤT JSON:
3116+
YÊU CẦU KỸ THUẬT:
3117+
1. Hãy tuân thủ tuyệt đối các bước và phong cách trong prompt trên.
3118+
2. KHÔNG lặp lại câu hỏi: ${JSON.stringify(pastBotMessages.slice(-5))}
3119+
3. Trả về DUY NHẤT một đối tượng JSON để hệ thống có thể hiển thị:
29463120
{
2947-
"question": "nội dung câu hỏi",
3121+
"question": "nội dung câu hỏi tiếp theo theo đúng lộ trình Bước 1/2/3",
29483122
"intended_tags": ["tag1", "tag2"]
29493123
}
29503124
`;
@@ -2978,30 +3152,26 @@ async function getFinalAIResultsPure(conversationText, profile) {
29783152

29793153
try {
29803154
const prompt = `
2981-
Bạn là chuyên gia tư vấn nghề nghiệp cao cấp. Dựa vào cuộc hội thoại sau:
2982-
Hồ sơ: ${JSON.stringify(profile)}
2983-
Hội thoại: ${conversationText}
2984-
2985-
QUY TẮC CHẤM ĐIỂM QUAN TRỌNG:
2986-
1. Nếu người dùng trả lời "Không", "Không thích", hoặc thể hiện thái độ tiêu cực với hầu hết các gợi ý, bạn PHẢI đưa ra điểm match_score THẤP (thậm chí 0-20%).
2987-
2. Tuyệt đối KHÔNG tự động làm tròn lên điểm cao nếu người dùng không hào hứng.
2988-
3. Điểm số phải phản ánh TRUNG THỰC mức độ tương thích.
2989-
2990-
NHIỆM VỤ:
2991-
1. Phân tích sâu sắc tính cách, thiên hướng và tiềm năng của người dùng.
2992-
2. Đề xuất 5 nghề nghiệp phù hợp nhất (nếu họ ghét tất cả, hãy tìm những nghề trái ngược hoặc giải thích tại sao họ chưa tìm thấy đam mê).
2993-
3. Với mỗi nghề, hãy cho biết:
2994-
- Tên nghề nghiệp.
2995-
- Phần trăm phù hợp (match_score) từ 0-95.
2996-
- 3 lý do cụ thể (hoặc cảnh báo tại sao điểm lại thấp).
2997-
4. Viết một bài đánh giá tổng quan (roadmap) trung thực, không tô hồng.
2998-
2999-
TRẢ VỀ DUY NHẤT JSON THEO CẤU TRÚC:
3155+
${VERBATIM_EXPERT_PROMPT}
3156+
3157+
Hồ sơ người dùng: ${JSON.stringify(profile)}
3158+
Lịch sử hội thoại:
3159+
${conversationText}
3160+
3161+
NHIỆM VỤ CUỐI CÙNG (BƯỚC 4 & 5):
3162+
Hãy thực hiện phân tích 5 trụ cột và trình bày kết quả đúng theo format Bước 5 trong prompt trên.
3163+
3164+
YÊU CẦU KỸ THUẬT:
3165+
Trả về DUY NHẤT một đối tượng JSON để hệ thống render:
30003166
{
3001-
"summary": "đoạn văn tóm tắt đánh giá trung thực",
3167+
"summary": "Nội dung tóm tắt chân dung + Nghề không khuyến nghị + Gợi ý bước tiếp theo theo đúng format Bước 5",
30023168
"recommendations": [
3003-
{ "career_name": "...", "match_score": 15, "reasons": ["...", "...", "..."] },
3004-
...
3169+
{
3170+
"career_name": "Tên nghề nghiệp",
3171+
"match_score": số_phần_trăm_từ_0_đến_100,
3172+
"reasons": ["Lý do chi tiết 1", "Lý do chi tiết 2", "Giải thích dựa trên trụ cột..."]
3173+
},
3174+
... (5 đến 8 nghề)
30053175
]
30063176
}
30073177
`;

index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
}(window.location));
1717
</script>
1818
<script src="./runtime-config.js"></script>
19-
<script type="module" crossorigin src="./assets/index-Dx2WibI-.js"></script>
19+
<script type="module" crossorigin src="./assets/index-CqeJczsZ.js"></script>
2020
<link rel="stylesheet" crossorigin href="./assets/index-D83N1gQE.css">
2121
</head>
2222
<body>

0 commit comments

Comments
 (0)