Spaces:
Runtime error
Runtime error
| #!/usr/bin/env python3 | |
| """ | |
| Generate synthetic training data for fine-tuning | |
| Uses GPT-4o-mini to create high-quality conversations | |
| """ | |
| import json | |
| import os | |
| from pathlib import Path | |
| from openai import OpenAI | |
| # Initialize OpenAI client | |
| client = OpenAI( | |
| api_key=os.getenv('OPENAI_API_KEY', 'sk--PC8FIAvV01G7aUyZsJD7Q'), | |
| base_url=os.getenv('OPENAI_BASE_URL', 'https://aiportalapi.stu-platform.live/jpe') | |
| ) | |
| # System prompts for each agent | |
| SYSTEM_PROMPTS = { | |
| 'nutrition': """Bạn là chuyên gia dinh dưỡng chuyên nghiệp với 10 năm kinh nghiệm. | |
| NHIỆM VỤ: Tư vấn dinh dưỡng, lập kế hoạch ăn uống, tính toán calo và macro. | |
| PHONG CÁCH: | |
| - Chuyên nghiệp nhưng thân thiện | |
| - Đưa ra con số cụ thể (calo, protein, carb, fat) | |
| - Thực tế, dễ áp dụng | |
| - Cá nhân hóa theo thông tin user | |
| KHÔNG: | |
| - Kê đơn thuốc | |
| - Chẩn đoán bệnh | |
| - Tạo lịch tập luyện (đó là việc của exercise_agent)""", | |
| 'symptom': """Bạn là bác sĩ tư vấn chuyên nghiệp. | |
| NHIỆM VỤ: Thu thập thông tin triệu chứng theo phương pháp OPQRST, đánh giá mức độ nghiêm trọng. | |
| PHONG CÁCH: | |
| - Hỏi từng câu một, tự nhiên | |
| - KHÔNG hỏi mãi theo template | |
| - Tối đa 3-4 câu hỏi | |
| - Đưa khuyến nghị sau khi có đủ thông tin | |
| KHÔNG: | |
| - Chẩn đoán bệnh chính xác | |
| - Kê đơn thuốc | |
| - Tạo lịch tập luyện""", | |
| 'exercise': """Bạn là huấn luyện viên thể hình (Personal Trainer) chuyên nghiệp. | |
| NHIỆM VỤ: Tạo lịch tập, hướng dẫn kỹ thuật, tư vấn tập luyện. | |
| PHONG CÁCH: | |
| - Nhiệt huyết, động viên | |
| - Thực tế, dễ hiểu, dễ làm theo | |
| - Hài hước nhẹ nhàng | |
| - TỰ NHIÊN, MẠCH LẠC | |
| KHÔNG: | |
| - Kê đơn thuốc | |
| - Tư vấn dinh dưỡng chi tiết (đó là việc của nutrition_agent) | |
| - Chẩn đoán chấn thương""", | |
| 'mental_health': """Bạn là chuyên gia tâm lý với chuyên môn về CBT và mindfulness. | |
| NHIỆM VỤ: Hỗ trợ stress, lo âu, trầm cảm, cải thiện giấc ngủ, quản lý cảm xúc. | |
| PHONG CÁCH: | |
| - Ấm áp, đồng cảm | |
| - Validate cảm xúc | |
| - Không phán xét | |
| - Khuyến khích tìm kiếm sự hỗ trợ chuyên môn khi cần | |
| CRISIS DETECTION: | |
| - Ý định tự tử → Hotline khẩn cấp | |
| - Tự gây thương tích → Cần hỗ trợ ngay | |
| KHÔNG: | |
| - Chẩn đoán rối loạn tâm thần | |
| - Kê đơn thuốc | |
| - Thay thế liệu pháp chuyên môn""" | |
| } | |
| # Scenarios for each agent | |
| SCENARIOS = { | |
| 'nutrition': [ | |
| "Tôi muốn giảm cân nhưng không biết bắt đầu từ đâu", | |
| "Làm sao để tăng cân lành mạnh?", | |
| "Chế độ ăn cho người tập gym là gì?", | |
| "Thực đơn cho người tiểu đường", | |
| "Ăn gì để tăng cơ giảm mỡ?", | |
| "Protein là gì? Tôi cần bao nhiêu protein mỗi ngày?", | |
| "TDEE là gì và cách tính như thế nào?", | |
| "Carb có làm béo không?", | |
| "Chế độ ăn keto có tốt không?", | |
| "Intermittent fasting là gì?", | |
| "Ăn chay có đủ dinh dưỡng không?", | |
| "Tôi đã giảm cân nhưng bị plateau, phải làm sao?", | |
| "Ăn bao nhiêu bữa một ngày là tốt nhất?", | |
| "Thực phẩm nào giúp giảm mỡ bụng?", | |
| "Uống whey protein có tốt không?", | |
| "Chế độ ăn cho người muốn có bầu", | |
| "Ăn gì để tăng chiều cao?", | |
| "Thực đơn cho người tập gym buổi sáng", | |
| "Cách tính macro cho mục tiêu giảm cân", | |
| "Ăn trước hay sau khi tập?", | |
| "Thực phẩm nào giàu protein?", | |
| "Chế độ ăn low carb là gì?", | |
| "Ăn nhiều trứng có tốt không?", | |
| "Thực đơn cho người muốn tăng cơ", | |
| "Cách ăn để có múi bụng", | |
| "Thực phẩm nào nên tránh khi giảm cân?", | |
| "Chế độ ăn cho người cao huyết áp", | |
| "Ăn gì để tăng sức đề kháng?", | |
| "Thực đơn cho người ăn chay", | |
| "Cách tính calo trong thức ăn", | |
| "Ăn gì sau khi tập gym?", | |
| "Thực phẩm giúp ngủ ngon", | |
| "Chế độ ăn cho người gầy muốn tăng cân", | |
| "Ăn gì để giảm cholesterol?", | |
| "Thực đơn cho người bận rộn", | |
| "Cách meal prep cho cả tuần", | |
| "Ăn gì để tăng năng lượng?", | |
| "Thực phẩm giúp giảm stress", | |
| "Chế độ ăn cho người tập cardio", | |
| "Ăn gì để da đẹp?", | |
| "Thực đơn cho người muốn detox", | |
| "Cách ăn để tăng testosterone tự nhiên", | |
| "Ăn gì để tăng trí nhớ?", | |
| "Thực phẩm giúp giảm viêm", | |
| "Chế độ ăn cho người tập yoga", | |
| "Ăn gì để tăng cơ mà không béo?", | |
| "Thực đơn cho người muốn giảm mỡ bụng", | |
| "Cách ăn để tăng vòng 3", | |
| "Ăn gì để tăng sức bền?", | |
| "Thực phẩm giúp phục hồi sau tập" | |
| ], | |
| 'symptom': [ | |
| "Tôi bị đau đầu từ 3 ngày nay", | |
| "Đau bụng và buồn nôn, có sao không?", | |
| "Ho khan kéo dài 2 tuần", | |
| "Đau ngực khi thở sâu", | |
| "Chóng mặt khi đứng dậy", | |
| "Mệt mỏi cả ngày dù ngủ đủ", | |
| "Đau lưng dưới kéo dài", | |
| "Sốt cao 39 độ từ hôm qua", | |
| "Đau họng và khó nuốt", | |
| "Nổi mẩn đỏ trên da", | |
| "Tiêu chảy kéo dài 3 ngày", | |
| "Đau khớp gối khi đi lên xuống cầu thang", | |
| "Khó thở khi nằm", | |
| "Đau bụng kinh dữ dội", | |
| "Chảy máu cam thường xuyên", | |
| "Đau răng nhức nhối", | |
| "Mắt đỏ và ngứa", | |
| "Tai ù và giảm thính lực", | |
| "Đau vai gáy kéo dài", | |
| "Buồn nôn khi đói", | |
| "Đau bụng trên rốn sau khi ăn", | |
| "Ho có đờm vàng", | |
| "Đau đầu một bên", | |
| "Tê tay chân khi ngủ dậy", | |
| "Đau ngực trái lan ra tay", | |
| "Khó tiêu và đầy hơi", | |
| "Đau lưng sau khi tập gym", | |
| "Sưng phù chân vào buổi tối", | |
| "Đau bụng dưới bên phải", | |
| "Ho ra máu", | |
| "Đau đầu kèm buồn nôn", | |
| "Khó ngủ và hay tỉnh giấc", | |
| "Đau cổ khi quay đầu", | |
| "Nôn mửa sau khi ăn", | |
| "Đau bụng kinh không đều", | |
| "Chảy nước mũi và hắt hơi", | |
| "Đau ngực khi gắng sức", | |
| "Mệt mỏi và chán ăn", | |
| "Đau đầu gối khi chạy bộ", | |
| "Khó thở khi gắng sức", | |
| "Đau lưng lan xuống chân", | |
| "Sốt nhẹ kéo dài", | |
| "Đau bụng và táo bón", | |
| "Chóng mặt và buồn nôn", | |
| "Đau ngực và hồi hộp", | |
| "Ho khan về đêm", | |
| "Đau bụng dưới khi đi tiểu", | |
| "Mệt mỏi và đau cơ", | |
| "Đau đầu sau khi thức khuya", | |
| "Khó thở và đau ngực" | |
| ], | |
| 'exercise': [ | |
| "Tôi mới bắt đầu tập gym, nên tập gì?", | |
| "Tập bao nhiêu ngày một tuần là đủ?", | |
| "Cardio hay tạ tốt hơn để giảm cân?", | |
| "Tôi muốn có bụng 6 múi", | |
| "Làm sao để tăng vòng 3?", | |
| "Bài tập cho người đau lưng", | |
| "Cách squat đúng kỹ thuật", | |
| "Tôi tập deadlift bị đau lưng", | |
| "Push-up chuẩn như thế nào?", | |
| "Lịch tập cho người mới bắt đầu", | |
| "Tập tạ có làm lùn không?", | |
| "Bài tập giảm mỡ bụng hiệu quả", | |
| "Cách tập để tăng cơ nhanh", | |
| "Tập gym bao lâu thì thấy kết quả?", | |
| "Bài tập cho người gầy muốn tăng cân", | |
| "Cách tập ngực to", | |
| "Lịch tập 3 ngày một tuần", | |
| "Tập cardio bao lâu để giảm cân?", | |
| "Bài tập cho người béo phì", | |
| "Cách tập vai to", | |
| "Lịch tập full body", | |
| "Tập tạ có giúp giảm cân không?", | |
| "Bài tập cho người cao tuổi", | |
| "Cách tập tay to", | |
| "Lịch tập upper/lower", | |
| "Tập yoga có giảm cân không?", | |
| "Bài tập cho người ngồi nhiều", | |
| "Cách tập chân to", | |
| "Lịch tập push/pull/legs", | |
| "Tập plank bao lâu là đủ?", | |
| "Bài tập cho người muốn săn chắc", | |
| "Cách tập lưng rộng", | |
| "Lịch tập cho người bận rộn", | |
| "Tập HIIT có tốt không?", | |
| "Bài tập cho người muốn tăng sức bền", | |
| "Cách tập bụng múi", | |
| "Lịch tập 5 ngày một tuần", | |
| "Tập thể dục buổi sáng hay tối?", | |
| "Bài tập cho người muốn giảm mỡ", | |
| "Cách tập để có body đẹp", | |
| "Lịch tập cho nữ", | |
| "Tập gym có ảnh hưởng chiều cao không?", | |
| "Bài tập cho người muốn tăng cơ giảm mỡ", | |
| "Cách tập để có vòng 3 đẹp", | |
| "Lịch tập cho người trung niên", | |
| "Tập bao lâu thì nên nghỉ?", | |
| "Bài tập cho người muốn săn chắc vòng 3", | |
| "Cách tập để tăng testosterone", | |
| "Lịch tập cho người muốn giảm cân nhanh", | |
| "Tập gym có cần uống whey không?" | |
| ], | |
| 'mental_health': [ | |
| "Tôi hay lo âu về mọi thứ", | |
| "Stress công việc quá nhiều", | |
| "Cách giảm căng thẳng hiệu quả", | |
| "Tôi bị mất ngủ kéo dài", | |
| "Ngủ không sâu giấc, hay tỉnh giấc", | |
| "Làm sao để ngủ ngon hơn?", | |
| "Tôi cảm thấy buồn chán cả ngày", | |
| "Không có động lực làm gì", | |
| "Hay khóc không lý do", | |
| "Cách vượt qua stress", | |
| "Tôi hay suy nghĩ tiêu cực", | |
| "Làm sao để tự tin hơn?", | |
| "Cách quản lý cảm xúc", | |
| "Tôi hay lo lắng về tương lai", | |
| "Làm sao để bình tĩnh hơn?", | |
| "Cách giảm lo âu", | |
| "Tôi cảm thấy cô đơn", | |
| "Làm sao để vui vẻ hơn?", | |
| "Cách đối phó với áp lực", | |
| "Tôi hay cáu gắt", | |
| "Làm sao để kiểm soát tức giận?", | |
| "Cách thư giãn sau giờ làm", | |
| "Tôi hay nghĩ quá nhiều", | |
| "Làm sao để tập trung hơn?", | |
| "Cách cải thiện tâm trạng", | |
| "Tôi cảm thấy mệt mỏi tinh thần", | |
| "Làm sao để có năng lượng tích cực?", | |
| "Cách vượt qua nỗi buồn", | |
| "Tôi hay lo lắng về sức khỏe", | |
| "Làm sao để ngừng lo lắng?", | |
| "Cách thiền để giảm stress", | |
| "Tôi cảm thấy áp lực từ gia đình", | |
| "Làm sao để đối phó với áp lực xã hội?", | |
| "Cách cải thiện giấc ngủ", | |
| "Tôi hay mơ ác mộng", | |
| "Làm sao để ngủ sâu hơn?", | |
| "Cách xây dựng thói quen tích cực", | |
| "Tôi cảm thấy không được trân trọng", | |
| "Làm sao để yêu bản thân?", | |
| "Cách vượt qua thất bại", | |
| "Tôi hay so sánh mình với người khác", | |
| "Làm sao để chấp nhận bản thân?", | |
| "Cách đối phó với chỉ trích", | |
| "Tôi cảm thấy quá tải", | |
| "Làm sao để cân bằng cuộc sống?", | |
| "Cách xây dựng sự tự tin", | |
| "Tôi hay trì hoãn công việc", | |
| "Làm sao để có động lực?", | |
| "Cách vượt qua nỗi sợ hãi", | |
| "Tôi cảm thấy bất an" | |
| ] | |
| } | |
| def generate_conversation(agent_name, scenario, system_prompt): | |
| """Generate a conversation using GPT-4o-mini""" | |
| try: | |
| response = client.chat.completions.create( | |
| model='gpt-4o-mini', | |
| messages=[ | |
| {"role": "system", "content": system_prompt}, | |
| {"role": "user", "content": scenario} | |
| ], | |
| temperature=0.7, | |
| max_tokens=800 | |
| ) | |
| return { | |
| "messages": [ | |
| {"role": "system", "content": system_prompt}, | |
| {"role": "user", "content": scenario}, | |
| {"role": "assistant", "content": response.choices[0].message.content} | |
| ] | |
| } | |
| except Exception as e: | |
| print(f" ❌ Error generating conversation: {e}") | |
| return None | |
| def generate_training_data(): | |
| """Generate training data for all agents""" | |
| print("🤖 Generating synthetic training data...") | |
| print() | |
| # Create output directory | |
| output_dir = Path("fine_tuning/training_data") | |
| output_dir.mkdir(parents=True, exist_ok=True) | |
| total_generated = 0 | |
| for agent_name, scenarios in SCENARIOS.items(): | |
| print(f"📝 Generating data for {agent_name}_agent...") | |
| print(f" Scenarios: {len(scenarios)}") | |
| conversations = [] | |
| system_prompt = SYSTEM_PROMPTS[agent_name] | |
| for i, scenario in enumerate(scenarios, 1): | |
| conv = generate_conversation(agent_name, scenario, system_prompt) | |
| if conv: | |
| conversations.append(conv) | |
| print(f" ✅ {i}/{len(scenarios)}", end='\r') | |
| print() # New line after progress | |
| # Save to JSONL | |
| output_file = output_dir / f"{agent_name}_training.jsonl" | |
| with open(output_file, 'w', encoding='utf-8') as f: | |
| for conv in conversations: | |
| f.write(json.dumps(conv, ensure_ascii=False) + '\n') | |
| print(f"✅ Generated {len(conversations)} conversations for {agent_name}") | |
| print(f" Saved to: {output_file}") | |
| print() | |
| total_generated += len(conversations) | |
| print(f"🎉 Total: {total_generated} conversations generated!") | |
| print() | |
| return total_generated | |
| if __name__ == "__main__": | |
| generate_training_data() | |