# 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 = ["triết lý sống", "Theo yêu cầu"] CONTENT_TYPE_INSTRUCTIONS = { "Theo yêu cầu": """ Bạn hãy nghe theo yêu cầu của người dùng để viết một kịch bản xuất sắc về văn phong, truyền cảm hứng và có giá trị thông tin. Không bao gồm bất kỳ chỗ giữ chỗ nào trong ngoặc như [Host] hoặc [Guest]. Thiết kế đầu ra của bạn để có thể đọc to -- nó sẽ được chuyển đổi trực tiếp thành âm thanh. Chỉ có một người nói, đó là bạn. Giữ đúng chủ đề và duy trì luồng hấp dẫn. Chú trọng vào việc nhấn mạnh những thông điệp quan trọng bằng ngôn từ mạnh mẽ, ấn tượng. """, "triết lý sống": """ Bạn cần viết một kịch bản xuất sắc, ngắn gọn nhưng súc tích với từng câu từng chữ được sử dụng một cách khéo léo, từ mở đầu đến kết thúc phải để người nghe cảm nhận những giá trị lớn mà kinh nghiệm bạn đang chia sẻ sẽ mang đến cho họ. Sử dụng văn phong văn chậm rãi, giàu cảm xúc, như đang kể một câu chuyện có sức nặng. Văn phong cần có sự kết hợp giữa sự nhẹ nhàng, tĩnh lặng như một lời tâm sự, nhưng cũng đủ sức khơi gợi suy nghĩ sâu xa. Mỗi đoạn nội dung cần có điểm nhấn đáng nhớ, dễ in sâu vào tâm trí người nghe. Độ dài kịch bản này không vượt quá 1000 từ. """ } def create_content(prompt, content_type, language): content_type_instructions = CONTENT_TYPE_INSTRUCTIONS.get(content_type, "") general_instructions = f""" Bạn là một trợ lý viết kịch bản lời thoại cho video với văn phong chuyên nghiệp, sâu sắc và cuốn hút. Nhiệm vụ của bạn là tạo ra nội dung khiến người nghe bị cuốn vào từng câu chữ nhờ thông tin đưa ra có giá trị và truyền cảm hứng. Bạn sẽ chỉ viết nội dung sẽ thu âm thành tiếng mà không cần có thêm các phần chú thích trong ngoặc vuông hay ngoặc tròn hay bất ký giải thích nào khác của bạn. Tuân thủ các hướng dẫn cụ thể cho thể loại {content_type}, như được mô tả dưới đây: {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="llama3-70b-8192", 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: client = Groq(api_key=GROQ_API_KEY) chat_completion = client.chat.completions.create( model="llama3-8b-8192", 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:", 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: client = Groq(api_key=GROQ_API_KEY) chat_completion = client.chat.completions.create( model="mixtral-8x7b-32768", 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