# content_generation.py from groq import Groq from openai import OpenAI import os # Lấy API key từ biến môi trường GROQ_API_KEY = os.environ.get("GROQ_API_KEY") OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY") # Khởi tạo client OpenAI openai_client = OpenAI(api_key=OPENAI_API_KEY) # Danh sách loại nội dung và hướng dẫn mặc định cho từng loại CONTENT_TYPES = ["podcast", "giới thiệu", "triết lý sống", "Phổ biến kiến thức thống kê"] CONTENT_TYPE_INSTRUCTIONS = { "podcast": """ Tone giọng: Gần gũi, thân thiện nhưng chuyên sâu, thể hiện sự am hiểu về chủ đề. Cấu trúc: - Bắt đầu bằng một câu hỏi kích thích tư duy hoặc một câu chuyện mở màn gây tò mò. - Triển khai các luận điểm theo từng bước. Sử dụng câu từ mạnh mẽ, ví dụ điển hình hoặc những câu nói nổi tiếng. - Xây dựng các phần chuyển tiếp mượt mà giữa các ý. - Kết thúc podcast với một thông điệp sâu sắc, để lại sự suy ngẫm cho thính giả. Mục tiêu: Mang lại kiến thức giá trị, lôi cuốn thính giả tham gia suy nghĩ và cảm nhận sâu sắc về chủ đề. """, "giới thiệu": """ Tone giọng: Chuyên nghiệp, gãy gọn nhưng vẫn có sự truyền cảm. Cấu trúc: - Bắt đầu với một câu khẳng định mạnh mẽ về đối tượng được giới thiệu. - Giải thích mục tiêu của phần giới thiệu, nhấn mạnh tầm quan trọng hoặc sự khác biệt. - Kết thúc với một lời kêu gọi hành động, khích lệ người nghe tiếp tục lắng nghe hoặc tham gia. Mục tiêu: Đưa ra thông tin cô đọng, hấp dẫn, khiến người nghe cảm thấy bị thu hút và muốn tìm hiểu thêm. """, "triết lý sống": """ Tone giọng: Sâu sắc, truyền cảm hứng, mang tính chiêm nghiệm. Cấu trúc: - Bắt đầu bằng một câu hỏi sâu sắc hoặc ẩn dụ về cuộc sống. - Triển khai các luận điểm chặt chẽ, xen lẫn cảm xúc và những ví dụ đời thực hoặc những câu nói triết lý. - Kết thúc với một thông điệp sâu sắc, khơi dậy suy ngẫm cho người nghe. Mục tiêu: Khơi gợi suy nghĩ sâu sắc về cuộc sống, khiến người nghe tìm thấy ý nghĩa hoặc giá trị trong câu chuyện. """, "Phổ biến kiến thức Thống kê": """ Tone giọng: Thân thiện, dễ hiểu, và mang tính giáo dục. Cấu trúc: - Bắt đầu với một câu hỏi hoặc một tình huống thực tế để thu hút sự chú ý. - Giải thích các khái niệm thống kê cơ bản một cách đơn giản và dễ hiểu, sử dụng ví dụ thực tế để minh họa. - Đưa ra các ứng dụng thực tế của thống kê trong đời sống hàng ngày hoặc trong các lĩnh vực cụ thể. - Kết thúc với một thông điệp khuyến khích người nghe áp dụng kiến thức thống kê vào cuộc sống. Mục tiêu: Giúp người nghe hiểu và yêu thích thống kê, thấy được giá trị và ứng dụng của nó trong cuộc sống. """ } def create_content(prompt, content_type, language): content_type_instructions = CONTENT_TYPE_INSTRUCTIONS.get(content_type, "") general_instructions = f""" Viết một kịch bản dựa trên các ý chính và ý tưởng sáng tạo từ yêu cầu của người dùng... Hãy tuân theo những hướng dẫn cụ thể sau cho thể loại {content_type}: {content_type_instructions} Ngôn ngữ sử dụng: {language} """ try: client = Groq(api_key=GROQ_API_KEY) chat_completion = client.chat.completions.create( model="mixtral-8x7b-32768", messages=[ {"role": "system", "content": general_instructions}, {"role": "user", "content": prompt} ], temperature=0.7, max_tokens=8000 ) return chat_completion.choices[0].message.content except Exception as e: return f"Lỗi khi tạo nội dung: {str(e)}" def extract_key_contents(script, num_contents=30): """ Trích xuất các ý chính từ script. """ try: response = openai_client.chat.completions.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": f"Bạn là một chuyên gia phân tích nội dung. Hãy trích xuất chính xác {num_contents} ý chính quan trọng nhất từ đoạn văn sau, mỗi ý không quá 20 từ."}, {"role": "user", "content": script} ] ) # In response để kiểm tra print("Response từ OpenAI:", response) key_contents = response.choices[0].message.content.split('\n') return key_contents[:num_contents] except Exception as e: print(f"Lỗi khi trích xuất nội dung: {str(e)}") return [] def generate_image_prompt(content): """ Tạo prompt cho hình ảnh từ nội dung. """ try: response = openai_client.chat.completions.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "You are an expert at creating prompts for AI image generation. Create a short, concise prompt in English to visually describe the following content. The content may be in Vietnamese, but your prompt should always be in English."}, {"role": "user", "content": content} ] ) return response.choices[0].message.content.strip() except Exception as e: print(f"Lỗi khi tạo prompt cho hình ảnh: {str(e)}") return f"A visual representation of: {content}" # Fallback prompt nếu có lỗi