GV-a / content_generation.py
TDN-M's picture
Upload 6 files
b6fccee verified
raw
history blame
6.05 kB
# 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