73 lines
2.4 KiB
Python
73 lines
2.4 KiB
Python
import json
|
||
from json import JSONDecodeError
|
||
|
||
from database.database import get_session
|
||
from database.tvideoscript.video_script import get_today_video_script, update_video_script
|
||
from llm.local.ollama import Ollama
|
||
from log.log_manager import log
|
||
from task.manager_task import execute_task
|
||
|
||
|
||
def ai_script_task():
|
||
with get_session() as db:
|
||
# 1. 获取今日的热点话题列表
|
||
video_scripts = get_today_video_script(db)
|
||
if len(video_scripts) == 0:
|
||
log("ai_script_task finish, task size 0")
|
||
return
|
||
log(f"ai script task size {len(video_scripts)}")
|
||
|
||
ollama = Ollama()
|
||
if not ollama.is_service_running():
|
||
log("ai_script_task finish, ollama service not running")
|
||
return
|
||
|
||
for video_script in video_scripts:
|
||
topic = video_script.title
|
||
log(f'generate script for topic: {topic}')
|
||
# 2. 获取话题内容
|
||
content = video_script.content
|
||
input_message = (
|
||
"""
|
||
## 角色
|
||
- 你是一个资深编辑。
|
||
|
||
## 目标
|
||
- 从输入的素材中选取有用的信息。
|
||
|
||
## 任务描述
|
||
- 从contents中选取最能吸引人的段落或句子,使读者产生兴趣和共鸣。请确保这些内容具有情感张力、戏剧性、趣味性或引发思考的价值。选取两部分内容,分别使用键“content_one”和“content_two”。每部分不少于100个汉字。两部分内容字数之和不多于600个汉字。
|
||
|
||
## 要求
|
||
- 严格遵守字数要求。
|
||
- 直接输出内容。
|
||
- 内容为JSON格式。
|
||
|
||
## 素材如下
|
||
""" + content
|
||
)
|
||
# log(input_message)
|
||
# 3. 调用ollama生成话题脚本
|
||
llm_result = ollama.generate_text(input_message)
|
||
log(llm_result)
|
||
try:
|
||
llm_result = json.loads(llm_result)
|
||
except JSONDecodeError as e:
|
||
log(f"ai_script_task error: {e}. skip topic: {topic}")
|
||
continue
|
||
video_script.script = (
|
||
f"""{video_script.title}
|
||
{video_script.description}
|
||
一位网友说:
|
||
{llm_result["content_one"]}
|
||
另一位网友说:
|
||
{llm_result["content_two"]}
|
||
关于这个问题大家有什么看法呢?
|
||
欢迎评论区留言
|
||
"""
|
||
)
|
||
# 4. 保存话题脚本
|
||
update_video_script(db, video_script)
|
||
|
||
if __name__ == "__main__":
|
||
execute_task(ai_script_task) |