diff --git a/ai/utils/basic_func.py b/ai/utils/basic_func.py index 7c65c6e..74c3787 100644 --- a/ai/utils/basic_func.py +++ b/ai/utils/basic_func.py @@ -177,6 +177,7 @@ def get_black_list(cinema_code: str): def get_runtime_val(key: str): return AiRuntime.objects.filter(runtime_key=key).first().runtime_val + # 获取当前开启的模型 def get_current_model(): return AiModel.objects.filter(Q(current_used=True) & Q(delete_flag=False)).first() @@ -191,12 +192,36 @@ def dict_get(_dict: dict, keys: list): # AI返回数据清洗 -def data_cleansing(data:str): +def data_cleansing(data: str): return data.replace(',', ',').replace('影厅 id', '影厅id').replace('本地影片 id', '本地影片id').replace(', ', ',') + # 获取排片数据的起始和结束日期 def get_report_date(): - start_date = datetime.datetime.strftime(AiShow.objects.filter(is_ai_show=True).order_by('show_date').first().show_date, '%Y-%m-%d')+'T00:00:00Z' - end_date = datetime.datetime.strftime(AiShow.objects.filter(is_ai_show=True).order_by('-show_date').first().show_date, '%Y-%m-%d')+'T00:00:00Z' + start_date = datetime.datetime.strftime( + AiShow.objects.filter(is_ai_show=True).order_by('show_date').first().show_date, '%Y-%m-%d') + 'T00:00:00Z' + end_date = datetime.datetime.strftime( + AiShow.objects.filter(is_ai_show=True).order_by('-show_date').first().show_date, '%Y-%m-%d') + 'T00:00:00Z' print(start_date, end_date) - return start_date, end_date \ No newline at end of file + return start_date, end_date + + +# 判断目标日期是否是暑期档 +def is_summer(target: str, start='06-11', end='08-31') -> bool: + year = str(datetime.datetime.strptime(target, '%Y-%m-%d').year) + start_obj = datetime.datetime.strptime(f"{year}-{start}", '%Y-%m-%d').date() + end_obj = datetime.datetime.strptime(f"{year}-{end}", '%Y-%m-%d').date() + target_obj = datetime.datetime.strptime(target, '%Y-%m-%d').date() + if start_obj <= target_obj <= end_obj: + return True + return False + + +# 根据输入的两个日期,判端是否需要增减场次 +def add_reduce_rule(template:bool, target: bool) -> str: + if template is True and target is False: + return 'decrease' + elif template is False and target is True: + return 'increase' + else: + return 'same' diff --git a/ai/utils/manual_utils.py b/ai/utils/manual_utils.py index 32bd68c..f6440e2 100644 --- a/ai/utils/manual_utils.py +++ b/ai/utils/manual_utils.py @@ -5,56 +5,57 @@ from pymysql.cursors import DictCursor s = """ 影厅别名,影厅id,影片别名,本地影片id,语言,放映日期,开始时间,结束时间,片长,场间 -2楼 百花厅(部分按摩椅),1,功夫女足,4292,国语,2026-07-13,11:00,12:46,106,0 -2楼 百花厅(部分按摩椅),1,功夫女足,4292,国语,2026-07-13,13:00,14:46,106,14 -2楼 百花厅(部分按摩椅),1,功夫女足,4292,国语,2026-07-13,15:00,16:46,106,14 -2楼 百花厅(部分按摩椅),1,功夫女足,4292,国语,2026-07-13,17:00,18:46,106,14 -2楼 百花厅(部分按摩椅),1,功夫女足,4292,国语,2026-07-13,19:00,20:46,106,14 -2楼 百花厅(部分按摩椅),1,功夫女足,4292,国语,2026-07-13,21:00,22:46,106,14 -2楼1号厅(部分按摩椅),2,三国第一部:争洛阳,4281,国语,2026-07-13,11:10,13:27,137,0 -2楼1号厅(部分按摩椅),2,三国第一部:争洛阳,4281,国语,2026-07-13,13:40,15:57,137,13 -2楼1号厅(部分按摩椅),2,三国第一部:争洛阳,4281,国语,2026-07-13,16:10,18:27,137,13 -2楼1号厅(部分按摩椅),2,三国第一部:争洛阳,4281,国语,2026-07-13,18:40,20:57,137,13 -2楼1号厅(部分按摩椅),2,三国第一部:争洛阳,4281,国语,2026-07-13,21:10,23:27,137,13 +2楼 百花厅(部分按摩椅),1,功夫女足,4292,国语,2026-07-13,10:30,12:16,106,0 +2楼 百花厅(部分按摩椅),1,功夫女足,4292,国语,2026-07-13,12:30,14:16,106,14 +2楼 百花厅(部分按摩椅),1,功夫女足,4292,国语,2026-07-13,14:30,16:16,106,14 +2楼 百花厅(部分按摩椅),1,功夫女足,4292,国语,2026-07-13,16:30,18:16,106,14 +2楼 百花厅(部分按摩椅),1,功夫女足,4292,国语,2026-07-13,18:30,20:16,106,14 +2楼 百花厅(部分按摩椅),1,功夫女足,4292,国语,2026-07-13,20:30,22:16,106,14 +2楼1号厅(部分按摩椅),2,三国第一部:争洛阳,4281,国语,2026-07-13,11:00,13:17,137,0 +2楼1号厅(部分按摩椅),2,三国第一部:争洛阳,4281,国语,2026-07-13,13:30,15:47,137,13 +2楼1号厅(部分按摩椅),2,三国第一部:争洛阳,4281,国语,2026-07-13,16:00,18:17,137,13 +2楼1号厅(部分按摩椅),2,三国第一部:争洛阳,4281,国语,2026-07-13,18:30,20:47,137,13 +2楼1号厅(部分按摩椅),2,三国第一部:争洛阳,4281,国语,2026-07-13,21:00,23:17,137,13 2楼2号速度与激情厅(部分按摩椅),3,三国第一部:争洛阳,4281,国语,2026-07-13,10:20,12:37,137,0 2楼2号速度与激情厅(部分按摩椅),3,三国第一部:争洛阳,4281,国语,2026-07-13,12:50,15:07,137,13 2楼2号速度与激情厅(部分按摩椅),3,三国第一部:争洛阳,4281,国语,2026-07-13,15:20,17:37,137,13 2楼2号速度与激情厅(部分按摩椅),3,三国第一部:争洛阳,4281,国语,2026-07-13,17:50,20:07,137,13 2楼2号速度与激情厅(部分按摩椅),3,三国第一部:争洛阳,4281,国语,2026-07-13,20:20,22:37,137,13 -2楼3号厅(部分按摩椅),4,特立独行,4280,国语,2026-07-13,11:00,13:03,123,0 -2楼3号厅(部分按摩椅),4,小黄人与大怪兽,4288,原版,2026-07-13,13:15,14:45,90,12 -2楼3号厅(部分按摩椅),4,小黄人与大怪兽,4288,原版,2026-07-13,15:00,16:30,90,15 -2楼3号厅(部分按摩椅),4,小黄人与大怪兽,4288,原版,2026-07-13,16:45,18:15,90,15 -2楼3号厅(部分按摩椅),4,功夫女足,4292,国语,2026-07-13,18:30,20:16,106,15 +2楼3号厅(部分按摩椅),4,小黄人与大怪兽,4288,原版,2026-07-13,10:30,12:00,90,0 +2楼3号厅(部分按摩椅),4,玩具总动员5,4269,原版,2026-07-13,12:15,13:57,102,15 +2楼3号厅(部分按摩椅),4,特立独行,4280,国语,2026-07-13,14:10,16:13,123,13 +2楼3号厅(部分按摩椅),4,后室,4279,原版,2026-07-13,16:25,18:16,111,12 +2楼3号厅(部分按摩椅),4,功夫女足,4292,国语,2026-07-13,18:30,20:16,106,14 2楼3号厅(部分按摩椅),4,八仙!,4296,国语,2026-07-13,20:30,22:54,144,14 -2楼4号优选福励厅,5,功夫女足,4292,国语,2026-07-13,11:00,12:46,106,0 -2楼4号优选福励厅,5,功夫女足,4292,国语,2026-07-13,13:00,14:46,106,14 -2楼4号优选福励厅,5,功夫女足,4292,国语,2026-07-13,15:00,16:46,106,14 -2楼4号优选福励厅,5,功夫女足,4292,国语,2026-07-13,17:00,18:46,106,14 -2楼4号优选福励厅,5,功夫女足,4292,国语,2026-07-13,19:00,20:46,106,14 -2楼4号优选福励厅,5,功夫女足,4292,国语,2026-07-13,21:00,22:46,106,14 -3楼5号厅(部分按摩椅),6,功夫女足,4292,国语,2026-07-13,10:30,12:16,106,0 -3楼5号厅(部分按摩椅),6,功夫女足,4292,国语,2026-07-13,12:30,14:16,106,14 -3楼5号厅(部分按摩椅),6,功夫女足,4292,国语,2026-07-13,14:30,16:16,106,14 -3楼5号厅(部分按摩椅),6,功夫女足,4292,国语,2026-07-13,16:30,18:16,106,14 -3楼5号厅(部分按摩椅),6,功夫女足,4292,国语,2026-07-13,18:30,20:16,106,14 -3楼5号厅(部分按摩椅),6,功夫女足,4292,国语,2026-07-13,20:30,22:16,106,14 -3楼6号泰隆银行厅(部分按摩椅),7,小黄人与大怪兽,4288,原版,2026-07-13,11:00,12:30,90,0 -3楼6号泰隆银行厅(部分按摩椅),7,功夫女足,4292,国语,2026-07-13,12:45,14:31,106,15 -3楼6号泰隆银行厅(部分按摩椅),7,功夫女足,4292,国语,2026-07-13,14:45,16:31,106,14 -3楼6号泰隆银行厅(部分按摩椅),7,功夫女足,4292,国语,2026-07-13,16:45,18:31,106,14 -3楼6号泰隆银行厅(部分按摩椅),7,功夫女足,4292,国语,2026-07-13,18:45,20:31,106,14 -3楼6号泰隆银行厅(部分按摩椅),7,功夫女足,4292,国语,2026-07-13,20:45,22:31,106,14 -3楼7号厅,8,玩具总动员5,4269,原版,2026-07-13,11:00,12:42,102,0 -3楼7号厅,8,特立独行,4280,国语,2026-07-13,12:55,14:58,123,13 -3楼7号厅,8,特立独行,4280,国语,2026-07-13,15:15,17:18,123,17 -3楼7号厅,8,特立独行,4280,国语,2026-07-13,17:30,19:33,123,12 -3楼7号厅,8,八仙!,4296,国语,2026-07-13,19:45,22:09,144,12 -2楼 三江VIP厅,9,海洋奇缘:启航,4293,原版,2026-07-13,12:00,13:56,116,0 -2楼 三江VIP厅,9,后室,4279,原版,2026-07-13,14:10,16:01,111,14 -2楼 三江VIP厅,9,后室,4279,原版,2026-07-13,16:15,18:06,111,14 -2楼 三江VIP厅,9,特立独行,4280,国语,2026-07-13,18:20,20:23,123,14 -2楼 三江VIP厅,9,特立独行,4280,国语,2026-07-13,20:40,22:43,123,17 +2楼4号优选福励厅,5,功夫女足,4292,国语,2026-07-13,10:20,12:06,106,0 +2楼4号优选福励厅,5,功夫女足,4292,国语,2026-07-13,12:20,14:06,106,14 +2楼4号优选福励厅,5,功夫女足,4292,国语,2026-07-13,14:20,16:06,106,14 +2楼4号优选福励厅,5,功夫女足,4292,国语,2026-07-13,16:20,18:06,106,14 +2楼4号优选福励厅,5,功夫女足,4292,国语,2026-07-13,18:20,20:06,106,14 +2楼4号优选福励厅,5,功夫女足,4292,国语,2026-07-13,20:20,22:06,106,14 +3楼5号厅(部分按摩椅),6,功夫女足,4292,国语,2026-07-13,10:25,12:11,106,0 +3楼5号厅(部分按摩椅),6,功夫女足,4292,国语,2026-07-13,12:25,14:11,106,14 +3楼5号厅(部分按摩椅),6,功夫女足,4292,国语,2026-07-13,14:25,16:11,106,14 +3楼5号厅(部分按摩椅),6,功夫女足,4292,国语,2026-07-13,16:25,18:11,106,14 +3楼5号厅(部分按摩椅),6,功夫女足,4292,国语,2026-07-13,18:25,20:11,106,14 +3楼5号厅(部分按摩椅),6,功夫女足,4292,国语,2026-07-13,20:25,22:11,106,14 +3楼6号泰隆银行厅(部分按摩椅),7,功夫女足,4292,国语,2026-07-13,10:30,12:16,106,0 +3楼6号泰隆银行厅(部分按摩椅),7,功夫女足,4292,国语,2026-07-13,12:30,14:16,106,14 +3楼6号泰隆银行厅(部分按摩椅),7,功夫女足,4292,国语,2026-07-13,14:30,16:16,106,14 +3楼6号泰隆银行厅(部分按摩椅),7,功夫女足,4292,国语,2026-07-13,16:30,18:16,106,14 +3楼6号泰隆银行厅(部分按摩椅),7,功夫女足,4292,国语,2026-07-13,18:30,20:16,106,14 +3楼6号泰隆银行厅(部分按摩椅),7,功夫女足,4292,国语,2026-07-13,20:30,22:16,106,14 +3楼7号厅,8,海洋奇缘:启航,4293,原版,2026-07-13,10:40,12:36,116,0 +3楼7号厅,8,特立独行,4280,国语,2026-07-13,12:50,14:53,123,14 +3楼7号厅,8,玩具总动员5,4269,原版,2026-07-13,15:05,16:47,102,12 +3楼7号厅,8,后室,4279,原版,2026-07-13,17:00,18:51,111,13 +3楼7号厅,8,小黄人与大怪兽,4288,原版,2026-07-13,19:05,20:35,90,14 +3楼7号厅,8,功夫女足,4292,国语,2026-07-13,20:50,22:36,106,15 +2楼 三江VIP厅,9,功夫女足,4292,国语,2026-07-13,12:15,14:01,106,0 +2楼 三江VIP厅,9,八仙!,4296,国语,2026-07-13,14:15,16:39,144,14 +2楼 三江VIP厅,9,特立独行,4280,国语,2026-07-13,16:55,18:58,123,16 +2楼 三江VIP厅,9,后室,4279,原版,2026-07-13,19:10,21:01,111,12 +2楼 三江VIP厅,9,小黄人与大怪兽,4288,原版,2026-07-13,21:15,22:45,90,14 """ diff --git a/ai/utils/show_prompt.py b/ai/utils/show_prompt.py index 8171d36..065c870 100644 --- a/ai/utils/show_prompt.py +++ b/ai/utils/show_prompt.py @@ -15,6 +15,7 @@ class ShowAI: self.cinema = cinema_info self.user_config = json.loads(cinema_info.user_config) self.show_date = show_date + self.is_summer = is_summer(show_date) self.prompt = "" self.model = get_current_model() self.ai_model_name = self.model.model_name @@ -190,15 +191,17 @@ class ShowAI: rules = rules.replace('{template_date}', template_date) # 处理模板日期 rules = rules.replace('{available_movie}', data.get_available_movie(self.show_date)) # 处理上映影片 new_suggestion = get_new_suggestion(self.cinema, self.show_date) - rules = rules.replace('{new_movie_suggestion}', '\t无' if new_suggestion is None else new_suggestion) # 处理新片推荐数量 + rules = rules.replace('{new_movie_suggestion}', + '\t无' if new_suggestion is None else new_suggestion) # 处理新片推荐数量 prompt_list.append(rules) # 处理基本规则 basic = PromptTemplate.objects.filter( Q(del_flag=False) & Q(prompt_type='show') & Q(prompt_key='Basic')).first().prompt_val # 获取提示词模板 - start = self.user_config['holiday_date_start'] if target_date_is_holiday else self.user_config[ - 'work_date_start'] - end = self.user_config['holiday_date_end'] if target_date_is_holiday else self.user_config['work_date_end'] + start = self.user_config['holiday_date_start'] if target_date_is_holiday or self.is_summer else \ + self.user_config['work_date_start'] + end = self.user_config['holiday_date_end'] if target_date_is_holiday or self.is_summer else self.user_config[ + 'work_date_end'] basic = basic.replace('{start}', start) basic = basic.replace('{end}', end) prompt_list.append(basic) @@ -213,17 +216,20 @@ class ShowAI: # 处理增减场次规则 add_reduce = PromptTemplate.objects.filter( Q(del_flag=False) & Q(prompt_type='show') & Q(prompt_key='AddReduce')).first().prompt_val # 获取提示词模板 - prompt_list.append(add_reduce) + add_reduce_obj = json.loads(add_reduce) + rule = add_reduce_rule(template_date_is_holiday, target_date_is_holiday) + add_reduce_str = f"{add_reduce_obj['title']}\n{add_reduce_obj[rule]}\n\n" + prompt_list.append(add_reduce_str) # 处理黄金时段 prime_time = PromptTemplate.objects.filter( Q(del_flag=False) & Q(prompt_type='show') & Q(prompt_key='PrimeTime')).first().prompt_val # 获取提示词模板 prompt_list.append(prime_time) - # 处理暑期档 - summer = PromptTemplate.objects.filter( - Q(del_flag=False) & Q(prompt_type='show') & Q(prompt_key='Summer')).first().prompt_val # 获取提示词模板 - prompt_list.append(summer) + # # 处理暑期档 + # summer = PromptTemplate.objects.filter( + # Q(del_flag=False) & Q(prompt_type='show') & Q(prompt_key='Summer')).first().prompt_val # 获取提示词模板 + # prompt_list.append(summer) # 处理输出目标 output = PromptTemplate.objects.filter( @@ -246,8 +252,9 @@ class ShowAI: response = self.client.chat.completions.create( model=self.ai_model_name, messages=[ - {'role': 'system', 'content': '你是中文AI助手。要求:1.所有思考过程必须使用中文。2.所有tool reasoning必须使用中文。3.所有规划必须使用中文。4.即使用户使用英文提问,也必须中文推理。5.最终输出使用中文。'}, - {'role': 'user', 'content': self.prompt if prompt is None else prompt} , + {'role': 'system', + 'content': '你是中文AI助手。要求:1.所有思考过程必须使用中文。2.所有tool reasoning必须使用中文。3.所有规划必须使用中文。4.即使用户使用英文提问,也必须中文推理。5.最终输出使用中文。'}, + {'role': 'user', 'content': self.prompt if prompt is None else prompt}, ], stream=False, reasoning_effort="high",