|
|
|
from groq import Groq |
|
from openai import OpenAI |
|
import os |
|
|
|
|
|
GROQ_API_KEY = os.environ.get("GROQ_API_KEY") |
|
OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY") |
|
|
|
|
|
openai_client = OpenAI(api_key=OPENAI_API_KEY) |
|
|
|
|
|
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} |
|
] |
|
) |
|
|
|
|
|
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}" |