TDN-M commited on
Commit
ea473e3
·
verified ·
1 Parent(s): 1e23c4b

Update content_generation.py

Browse files
Files changed (1) hide show
  1. content_generation.py +65 -22
content_generation.py CHANGED
@@ -11,38 +11,83 @@ OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY")
11
  openai_client = OpenAI(api_key=OPENAI_API_KEY)
12
 
13
  # Danh sách loại nội dung và hướng dẫn mặc định cho từng loại
14
- CONTENT_TYPES = ["triết lý sống", "Theo yêu cầu"]
15
 
16
  CONTENT_TYPE_INSTRUCTIONS = {
17
- "Theo yêu cầu": """
18
- 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 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 để thể đọc to -- sẽ được chuyển đổi trực tiếp thành âm thanh. Chỉ một người nói, đó bạn. Giữ đúng chủ đề duy trì luồng hấp dẫn.
19
-
20
- 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.
21
-
 
 
 
 
 
 
 
 
 
22
  """,
23
  "triết lý sống": """
24
- 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.
25
-
26
- Văn phong cần 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 điểm nhấn đáng nhớ, dễ in sâu vào tâm trí người nghe.
27
-
28
- Độ dài kịch bản này không vượt quá 1000 từ.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  """
30
  }
31
 
32
  def create_content(prompt, content_type, language):
33
  content_type_instructions = CONTENT_TYPE_INSTRUCTIONS.get(content_type, "")
34
  general_instructions = f"""
35
- Bạn một trợ 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 cuốn hút. Nhiệm vụ của bạn 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 giá trị truyền cảm hứng.
36
- Bạn sẽ chỉ viết nội dung sẽ thu âm thành tiếng mà không cần thêm các phần chú thích trong ngoặc vuông hay ngoặc tròn hay bất 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 tả dưới đây:
 
 
 
 
 
 
37
  {content_type_instructions}
38
-
39
  Ngôn ngữ sử dụng: {language}
40
  """
41
 
42
  try:
43
  client = Groq(api_key=GROQ_API_KEY)
44
  chat_completion = client.chat.completions.create(
45
- model="llama3-70b-8192",
46
  messages=[
47
  {"role": "system", "content": general_instructions},
48
  {"role": "user", "content": prompt}
@@ -59,9 +104,8 @@ def extract_key_contents(script, num_contents=30):
59
  Trích xuất các ý chính từ script.
60
  """
61
  try:
62
- client = Groq(api_key=GROQ_API_KEY)
63
- chat_completion = client.chat.completions.create(
64
- model="llama3-8b-8192",
65
  messages=[
66
  {"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ừ."},
67
  {"role": "user", "content": script}
@@ -69,7 +113,7 @@ def extract_key_contents(script, num_contents=30):
69
  )
70
 
71
  # In response để kiểm tra
72
- print("Response:", response)
73
 
74
  key_contents = response.choices[0].message.content.split('\n')
75
  return key_contents[:num_contents]
@@ -82,9 +126,8 @@ def generate_image_prompt(content):
82
  Tạo prompt cho hình ảnh từ nội dung.
83
  """
84
  try:
85
- client = Groq(api_key=GROQ_API_KEY)
86
- chat_completion = client.chat.completions.create(
87
- model="mixtral-8x7b-32768",
88
  messages=[
89
  {"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."},
90
  {"role": "user", "content": content}
 
11
  openai_client = OpenAI(api_key=OPENAI_API_KEY)
12
 
13
  # Danh sách loại nội dung và hướng dẫn mặc định cho từng loại
14
+ CONTENT_TYPES = ["podcast", "giới thiệu", "triết lý sống", "phổ biến kiến thức thống kê"]
15
 
16
  CONTENT_TYPE_INSTRUCTIONS = {
17
+ "podcast": """
18
+ Viết một đoạn hội thoại podcast dài chi tiết, hấp dẫn nhiều thông tin, dựa trên các điểm chínhý tưởng sáng tạo bạn đã nảy ra trong buổi động não. Hãy làm cho cuộc trò chuyện trở nên thú vị cuốn hút, đồng thời bao gồm các bối cảnh giải thích cần thiết để đảm bảo nội dung dễ hiểu cho khán giả đại chúng.
19
+ Tone giọng: Giữ giọng điệu tự nhiên, như một cuộc trò chuyện giữa bạn bè, với sự tương tác linh hoạt giữa người dẫn chương trình và khách mời. Sử dụng giọng văn đàm thoại, tránh sự cứng nhắc hoặc quá hàn lâm. Tạo cảm giác như bạn đang nói chuyện trực tiếp với khán giả, giúp họ dễ dàng theo dõi.
20
+ Bối cảnh giải thích: Khi đề cập đến các khái niệm phức tạp, hãy luôn đưa ra những dụ thực tế hoặc giải thích đơn giản để làm rõ vấn đề. Đảm bảo rằng tất cả các thuật ngữ và từ vựng chuyên ngành được giải thích một cách dễ hiểu để không tạo rào cản cho người nghe.
21
+ Cấu trúc: Bắt đầu bằng một câu hỏi hoặc một câu chuyện mở màn để thu hút sự chú ý ngay từ đầu, khơi gợi tò mò của người nghe. Dẫn dắt cuộc trò chuyện qua các chủ đề chính, triển khai các luận điểm thông qua các tình huống hoặc ví dụ thực tế, từ đó tạo sự liên kết giữa các phần của podcast. Đan xen các yếu tố giải trí, những câu chuyện hài hước hoặc những bình luận cá nhân thú vị từ người dẫn chương trình hoặc khách mời để giữ nhịp độ tươi mới, không bị đơn điệu.
22
+ Tương tác tự nhiên: Khuyến khích người dẫn chương trình và khách mời đặt câu hỏi cho nhau, xây dựng cuộc trò chuyện một cách mượt mà, không ngắt quãng hoặc gượng ép. Đừng quá nghiêm túc hoặc bám vào một kịch bản quá chặt chẽ, hãy để cuộc trò chuyện có không gian cho sự ngẫu nhiên và phản ứng tự nhiên.
23
+ Không sử dụng tên bịa đặt: Tránh việc sử dụng tên giả cho người dẫn chương trình và khách mời. Hãy tập trung vào nội dung và sự tương tác giữa họ thay vì phải tạo ra các nhân vật giả.
24
+ Không chừa chỗ trống trong ngoặc vuông: Nội dung được tạo ra sẽ không bao gồm bất kỳ chỗ trống nào như [Người dẫn chương trình] hoặc [Khách mời]. Kịch bản cần được viết liên tục, rõ ràng để dễ dàng chuyển đổi thành âm thanh.
25
+ Độ dài và chi tiết: Mục tiêu là tạo ra một tập podcast dài nhất có thể, khoảng 20.000 từ, nhưng vẫn giữ được sự lôi cuốn và duy trì nhịp độ tự nhiên của cuộc trò chuyện.Đảm bảo rằng podcast không chỉ kéo dài mà còn phong phú về nội dung, kết hợp giữa thông tin và giải trí, giữ cho khán giả luôn cảm thấy bị cuốn hút.
26
+ Kết thúc tự nhiên: Ở cuối đoạn hội thoại, để người dẫn chương trình và khách mời tóm tắt lại một cách tự nhiên các hiểu biết sâu sắc và bài học rút ra từ cuộc thảo luận của họ. Điều này nên diễn ra một cách mượt mà từ cuộc trò chuyện, nhắc lại các điểm chính mà không khiến nó trở nên quá rõ ràng hoặc như một bản tóm tắt bắt buộc. Mục tiêu là củng cố lại những thông tin chính theo cách tự nhiên và thoải mái, tạo cảm giác như một cuộc trò chuyện gần gũi.
27
+ """,
28
+ "giới thiệu": """
29
+ Tone giọng: Chuyên nghiệp, ngắn gọn, lôi cuốn nhưng chính xác.
30
+ Cấu trúc: Bắt đầu kịch bản của bạn bằng cách nêu rằng đây là bài đánh giá có tham chiếu đến tiêu đề hoặc các tiêu đề phụ trong văn bản đầu vào. Nếu văn bản đầu vào không có tiêu đề, hãy đưa ra bản tóm tắt ngắn gọn về nội dung sẽ đề cập. Bao gồm các định nghĩa và thuật ngữ rõ ràng, cũng như ví dụ về tất cả các vấn đề chính. Không bao gồm bất kỳ chỗ giữ chỗ trong ngoặc nào như [Chủ nhà] hoặc [Khách]. Thiết kế nội dung đầu ra của bạn để có thể đọc to -- nội dung 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ữ chủ đề và duy trì mạch lạc. Tóm tắt một cách tự nhiên những hiểu biết sâu sắc và thông tin chính từ bản tóm tắt. Phần này phải diễn ra một cách tự nhiên từ cuộc trò chuyện, nhắc lại các điểm chính theo cách thông thường, đàm thoại. Bản tóm tắt nên có khoảng 1024 từ.
31
  """,
32
  "triết lý sống": """
33
+ Tone giọng: Sâu sắc, truyền cảm hứng, mang tính triết chiêm nghiệm.
34
+ Cấu trúc:
35
+ - Mở đầu bằng một câu hỏi hoặc ẩn dụ sâu sắc về cuộc sống, đánh thức sự mời gọi người nghe suy ngẫm.
36
+ - Phát triển các luận điểm theo cách gắn kết, thông qua việc sử dụng những ví dụ từ đời thực, câu chuyện cá nhân hoặc những triết lý cổ điển.
37
+ - Xen lẫn các câu nói triết lý, ngôn từ truyền cảm hứng giúp người nghe kết nối cảm xúc.
38
+ - Kết thúc bằng một thông điệp mạnh mẽ, gợi mở suy ngẫm và khuyến khích người nghe nhìn nhận lại bản thân và cuộc sống.
39
+ Mục tiêu: Truyền đạt những bài học sâu sắc, giúp người nghe chiêm nghiệm và tìm thấy ý nghĩa mới trong cuộc sống.
40
+ """,
41
+ "phổ biến kiến thức thống kê": """
42
+ Mục đích: Trình bày và phổ biến thông tin thống kê chính thống, dựa trên Báo cáo tình hình kinh tế - xã hội Việt Nam, giúp người nghe hiểu và sử dụng hiệu quả các số liệu thống kê.
43
+ Tone giọng:
44
+ - Thân thiện, truyền cảm, rõ ràng, dễ hiểu.
45
+ - Mang tính phổ biến thông tin, thể hiện sự chính thống.
46
+ - Giọng nữ, chuẩn Hà Nội, tạo sự dễ chịu và tiếp cận dễ dàng cho người nghe.
47
+ Thời lượng: Khoảng 7 phút.
48
+ Cấu trúc:
49
+ 1. **Mở đầu**:
50
+ - Bắt đầu bằng một câu hỏi hoặc tình huống thực tế để thu hút sự chú ý, ví dụ:
51
+ "Bạn có biết rằng Báo cáo tình hình kinh tế - xã hội Việt Nam là nguồn thông tin chính thống giúp các cơ quan và chính quyền các cấp đánh giá, dự báo tình hình và hoạch định chiến lược?"
52
+ 2. **Triển khai nội dung chính**:
53
+ - Khái quát các động thái, xu hướng kinh tế - xã hội của Việt Nam dựa trên các số liệu trong báo cáo.
54
+ - Chia nhỏ thông tin theo từng lĩnh vực, như:
55
+ - (1) Sản xuất nông, lâm nghiệp và thủy sản.
56
+ - (2) Sản xuất công nghiệp.
57
+ - (3) Tình hình đăng ký doanh nghiệp.
58
+ - (4) Đầu tư.
59
+ - (5) Thu, chi ngân sách Nhà nước.
60
+ - (6) Thương mại, giá cả, vận tải và du lịch.
61
+ - (7) Một số tình hình xã hội.
62
+ - Minh họa bằng các biểu đồ, đồ thị và bảng số liệu cụ thể.
63
+
64
+ 3. **Kết thúc**:
65
+ - Kết thúc bằng một thông điệp khuyến khích người nghe sử dụng thông tin thống kê, ví dụ:
66
+ "Báo cáo tình hình kinh tế - xã hội cung cấp bức tranh tổng thể, giúp bạn đưa ra các quyết định thông minh và hiệu quả hơn."
67
+
68
+ Mục tiêu: Giúp người nghe hiểu rõ giá trị của báo cáo thống kê kinh tế - xã hội, cũng như khuyến khích họ sử dụng thông tin chính thống để hỗ trợ quá trình ra quyết định đúng đắn.
69
  """
70
  }
71
 
72
  def create_content(prompt, content_type, language):
73
  content_type_instructions = CONTENT_TYPE_INSTRUCTIONS.get(content_type, "")
74
  general_instructions = f"""
75
+ Hãy nghiên cứu kỹ lưỡng yêu cầu của người dùng để tạo ra một kịch bản sáng tạohiệu quả. Sử dụng giọng điệu tự nhiên, trò chuyện cung cấp bối cảnh hoặc giải thích cần thiết để làm cho nội dung dễ tiếp cận với khán giả.
76
+ Bắt đầu bằng cách giới thiệu chủ đề một cách tự nhiên, dẫn dắt người nghe vào nội dung chính mà không cần phải nói đây tóm tắt. Nếu văn bản đầu vào không tiêu đề cụ thể, hãy mở đầu bằng cách khéo léo tóm lược ý chính để thu hút sự chú ý của khán giả.
77
+ Bao gồm các định nghĩa và thuật ngữ rõ ràng cùng với ví dụ minh họa cho tất cả các vấn đề chính được đề cập.
78
+ Không sử dụng bất kỳ placeholder nào trong ngoặc vuông như [Host] hoặc [Guest]. Kịch bản của bạn sẽ được chuyển thành âm thanh, vì vậy hãy thiết kế nó để phù hợp với việc đọc to, giữ nhịp điệu tự nhiên và liền mạch.
79
+ Chỉ có một người nói duy nhất: chính bạn. Giữ đúng chủ đề và đảm bảo mạch câu chuyện hấp dẫn xuyên suốt.
80
+ Kết thúc bằng việc tóm tắt tự nhiên những bài học và hiểu biết chính từ nội dung đã thảo luận. Hãy nhắc lại các điểm chính một cách thoải mái, giống như trong một cuộc trò chuyện thông thường.
81
+ Kịch bản podcast nên có độ dài khoảng 4000 từ, còn kịch bản giới thiệu là 3000 từ, kịch bản triết lý sống là khoảng 1000 từ, kịch bản Phổ biến kiến thức thống kê là 3500 từ.
82
+ Tuân thủ các hướng dẫn cụ thể cho thể loại {content_type}, như được mô tả dưới đây:
83
  {content_type_instructions}
 
84
  Ngôn ngữ sử dụng: {language}
85
  """
86
 
87
  try:
88
  client = Groq(api_key=GROQ_API_KEY)
89
  chat_completion = client.chat.completions.create(
90
+ model="mixtral-8x7b-32768",
91
  messages=[
92
  {"role": "system", "content": general_instructions},
93
  {"role": "user", "content": prompt}
 
104
  Trích xuất các ý chính từ script.
105
  """
106
  try:
107
+ response = openai_client.chat.completions.create(
108
+ model="gpt-3.5-turbo",
 
109
  messages=[
110
  {"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ừ."},
111
  {"role": "user", "content": script}
 
113
  )
114
 
115
  # In response để kiểm tra
116
+ print("Response từ OpenAI:", response)
117
 
118
  key_contents = response.choices[0].message.content.split('\n')
119
  return key_contents[:num_contents]
 
126
  Tạo prompt cho hình ảnh từ nội dung.
127
  """
128
  try:
129
+ response = openai_client.chat.completions.create(
130
+ model="gpt-3.5-turbo",
 
131
  messages=[
132
  {"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."},
133
  {"role": "user", "content": content}