Pārlūkot izejas kodu

片尾引导分享生成

zhangliang 3 nedēļas atpakaļ
vecāks
revīzija
9a612b2ebe
3 mainītis faili ar 117 papildinājumiem un 4 dzēšanām
  1. 18 1
      utils/feishu_form.py
  2. 92 1
      utils/gpt4o_mini_help.py
  3. 7 2
      workers/consumption_work.py

+ 18 - 1
utils/feishu_form.py

@@ -2,7 +2,7 @@
 import json
 import json
 import os
 import os
 import sys
 import sys
-
+from loguru import logger
 from utils.feishu_utils import Feishu
 from utils.feishu_utils import Feishu
 
 
 sys.path.append(os.getcwd())
 sys.path.append(os.getcwd())
@@ -84,5 +84,22 @@ class Material():
         except:
         except:
             return None
             return None
 
 
+    @classmethod
+    def get_propmt_data_new(cls, trailer_share):
+        try:
+            data = Feishu.get_values_batch( "Wj0TsRKc0hZrHQtmtg4cZZIwn0c", "Yxg7EK")
+            for row in data[1:]:
+                name = row[0]
+                if name == trailer_share:
+                    return row[1]
+            return
+        except Exception as e:
+            logger.error(f"[!] 获取prompt失败 {e}")
+            return None
+
+
 
 
+if __name__ == '__main__':
+    prompt = Material.get_propmt_data_new("引导语增强")
+    print(prompt)
 
 

+ 92 - 1
utils/gpt4o_mini_help.py

@@ -2,6 +2,10 @@ import json
 import time
 import time
 
 
 import requests
 import requests
+from loguru import logger
+import traceback
+
+from utils.feishu_form import Material
 
 
 
 
 class GPT4oMini:
 class GPT4oMini:
@@ -234,5 +238,92 @@ class GPT4oMini:
         else:
         else:
             return None
             return None
 
 
+    @classmethod
+    def generate_share_script(cls, video_text, prompt):
+        """AI标题"""
+        if not prompt:
+            """
+            "你是一个微信生态内老年用户的视频创作者,你历史创作出了这条爆款内容,请你理解视频内容,参考good case,输出用于引导用户分享的视频文案。
+
+            请注意:
+            1、总输出内容不能少于300字,不能超过500字
+            2、针对视频核心内容的提炼,内容需要适配老年人的阅读习惯和理解能力,禁止出现太燃了、佛系、躺平、内卷、炸裂等形容词,以及阶级固化等专业名词。
+            3、一定要在前半段的引导语中,就要输出引导分享到多个群(点击下方黄色按钮分享到群)和好友(点击下方绿色按钮分享好友)的内容
+            4、不要使用家人们、老铁、姐妹们、老伙计们、视频讲述了等开头;不要有哎、啊、哎呦喂等语气词。
+            
+            输出内容要求:
+            1、仅输出文案主体
+            2、不输出其他与引导文案主体无关的过程推导、解释、备注信息等;
+            3、不输出其他无效信息,如数字、符号或其他无效文字,参考如下示例
+            无效文字示例
+            1、好的,根据您提供的信息和要求,我将为这个视频输出片尾引导文案。
+            2、好的,分析了您的需求和视频内容,我将为您输出片尾引导文案。
+            
+            Good case示例:
+            1、这30条您都记下来了吧,现在赶紧用下方黄色按钮转发到买菜群社区群老姐妹群,让更多街坊邻居都学会避开消费陷阱,特别是家里有小辈的,点绿色按钮直接发给儿女,年轻人工作忙容易冲动消费,咱们老一辈得帮着把把关,上次我转发给楼上张大姐,他第二天就省了80多块菜钱,要是每个家庭都这么精打细算,咱们社区每年能省下多少冤枉钱啊,您要是觉得这些经验管用,现在就动手分享给三个群五个好友,这都是实打实的生活智慧,可比转发养生文章实在多了。
+            2、现在这样的真教育家实在太少太少了,我在这分享给你,希望你立刻点开屏幕下方黄色按钮,分享到三个群。点击绿色按钮,分享给重要的人,让更多孩子看到这些珍贵的人生道理。现在很多家长都后悔没早教孩子这些,你要是觉得有用,赶紧把这条视频同时转发到家族群,同学群和小区群。您多转发一个群,可能就多改变一个孩子的命运。
+            您看到这里就是缘分,千万别让视频在您手里断掉,现在立刻马上点下方黄色按钮,先分享到相亲相爱一家人群,再点绿色按钮,发给子女的微信,最后再转到社区老年活动群。您每转发一次,就是在传播智慧。转三个群,我替孩子们谢谢您,转五个群福气自然来,要是能转满十个群,您就是功德无量的大善人。感恩您为孩子们做的这件好事,拜托了。
+            3、看完真是感慨良多,如果我们的老年群体收入也能人人平等,相信我们的生活幸福感也一定会节节攀升。不过啊,光靠想是不够的,咱们得让更多人看到这条视频,让更多人一起发声,老友们,现在您只需要动动手指,点一点屏幕下方黄色的分享到群按钮,多转几个群,每个群都能让这条视频多一份力量。要是您觉得这事重要,也别忘了点绿色的分享好友按钮,把视频单独发给身边的朋友们,大家互相提醒着看。您别看一个群一个好友转发量小,可众人拾柴火焰高啊,咱们的愿望能不能被听见,就靠您今天多赚几个群,多发给几位好友了,您转三个群是勤奋,转五个群是心意,要是能转上十个群,那就是实打实为咱们老年群体出1份力,咱们今天多转发一次,明天就离好日子更进一步,你要是真心希望咱们的退休生活能更公平更舒坦,就千万别让这条视频沉下去,一定得让他在各个群里热热闹闹地传起来,您每转发一次,都是在为千万老年人的幸福生活投上一票,您说这份心意重不重要,咱们齐心协力把转发量冲上去,让该听见的人都听见,该重视的人都重视,拜托各位老友了,现在就动手转发,咱们的幸福晚年可全指望大伙的热心肠了。
+            4、现在我要特别叮嘱大家,看到这个视频的老朋友,请立刻点击屏幕下方黄色按钮,分享到三个群,让更多老伙伴看到这份长寿宝典,再点绿色按钮,单独转给三位至亲好友,这样既传递福气,又积攒健康功德。大家记住啊,好视频就像存折里的利息,越分享越增值,每转发一次就给自己的寿命存上一笔红利,特别是那些平时总说腰酸腿疼的老伙计,更要让他们看看咱们的快乐秘诀,您仔细想想,这么好的长寿经,要是断在自己手里多可惜,咱们得让这条视频像接力棒一样在群里传起来,传给老同事群,广场舞群,亲戚群,传给常联系的老邻居,老同学,只要动动手指点黄绿按钮,福气马上翻倍,最后我们高声疾呼,长命百岁,幸福千岁,开心万岁,长寿幸福万万岁,现在立刻行动,先分享再细看,把视频存在群里随时温习,转给好友,还能互相监督执行,记住啊,转发时要说,这是咱们的百岁计划书,让大伙都来签字画押,谁都不许中途退出,老朋友们快抓紧点击下方按钮,黄按钮传群,绿按钮传人,让这条视频在微信里转他个九九八十一圈,转出咱们的百岁朋友圈。
+            5、原来中国的父亲母亲节是这样来的,很多人搞错了,各位老哥哥老姐姐,您要是觉得这内容实在,现在赶紧动手分享出去,看到下面那个黄色的按钮了吗?点一下直接转发到你的家庭群、同学群、老乡群,每个群都发一遍,让咱们的亲戚朋友都清醒清醒。还有那个绿色的按钮,点开选三五个最重要的朋友,单独发给他们,特别是家里有小辈的,一定要让他们知道咱们祖宗的规矩。你发一个群、发一个好友,就是给咱们中国文化添一块砖。现在不传,以后子孙连自己跟在哪都不知道了,您想想要是家家户户都过洋节,那老祖宗的智慧谁来传?您动动手就能让全中国的人挺直腰杆过自己的节,赶紧的点黄色按钮发到十个群,点绿色按钮发给十个好友,咱们一起把这视频顶上去,让全国人都看到,这是咱们的责任啊。
+            "
+            """
+
+        url = "http://aigc-api.cybertogether.net/aigc/dev/test/gpt"
+        payload = json.dumps({
+            "imageList": [],
+            "model": "gpt-4o-mini-2024-07-18",
+            "prompt": (
+                prompt +
+                f"请分析该内容,视频脚本内容为:{video_text},返回新的片尾。"
+            ),
+            "responseFormat": {
+                "type": "json_schema",
+                "json_schema": {
+                    "strict": True,
+                    "name": "share_script_result",
+                    "schema": {
+                        "type": "object",
+                        "properties": {
+                            "新片尾": {
+                                "type": "string",
+                                "description": "生成新的片尾"
+                            }
+                        },
+                        "required": ["新片尾"],
+                        "additionalProperties": False
+                    }
+                }
+            }
+        })
+        headers = {'Content-Type': 'application/json'}
+        max_retries = 3
+        for retry in range(max_retries):
+            try:
+                response = requests.post(url, headers=headers, data=payload)
+                response.raise_for_status()
+                response_data = response.json()
+                data = json.loads(response_data.get('data', '{}'))
+                new_pw = data["新片尾"]
+                if new_pw:
+                    logger.info(f"[+] 生成片尾引导:{new_pw}")
+                    return new_pw
+                else:
+                    logger.warning(f"[!] 新片尾为空,重试第{retry + 1}次,响应:{response_data}")
+
+            except Exception as e:
+                tb = traceback.format_exc()
+                logger.error(f"[!] 生成失败,重试第{retry + 1}次:{str(e)} \n {tb}")
+
+        logger.error(f"[!] 达到{max_retries}次重试,生成失败")
+        return None
+
+
 if __name__ == '__main__':
 if __name__ == '__main__':
-    GPT4oMini.get_ai_mini_pw("这段话说出了多少人的心声 #老百姓的心声 #老百姓关心的话题 #农民的心声 #老百姓不容易","AI片尾引导1")
+
+    prompt = Material.get_propmt_data_new("引导语增强")
+    # GPT4oMini.get_ai_mini_pw("这段话说出了多少人的心声 #老百姓的心声 #老百姓关心的话题 #农民的心声 #老百姓不容易","AI片尾引导1")
+    GPT4oMini.generate_share_script("老祖宗留下来的老话,你越琢磨越有味。富贵门前有恶狗,久病床前无孝子,行行出状元,处处有能人,路是人开的,树是人栽的,问路不失礼,多走几十里,有钱难买少年时,失落光阴无处寻,衣不如新,人不如故,药不治假病,酒不解真愁,七寸的筷子能勾魂,酒壶不深淹死人,做一行,怨一行,到老不在行,记得少年骑竹马,转身便是白头翁。静坐常思己过,闲谈莫论人非,痒要自己抓,好要别人夸,只能救苦,不能救赌,只能救急,不能救穷。爹有娘有不如自己有,儿有女有不如不伸手,懒人嘴里明天多,骑马莫怕山,行船莫怕滩,莫作恶,多行善,人在做,天在看。口水淹人救不起,卑鄙缺德无药医,半夜不晒衣,三更不吹哨,远亲不如近邻,近邻不如对门,邻居好,赛金宝,两腮无肉,神仙难斗,脸上生横肉,凶狠心中藏。人没了人群找,羊没了羊群找。宁娶从良女,不娶过墙妻,娶妻不娶仰头女,嫁人不嫁低头汉。娶妻先看娘,嫁夫要看爹,嫁错汉,毁一生,娶错女,毁三代。人在人下没自尊,树在树下难扎根,马瘦毛长没人骑,人穷说话没人听。麦高于禾,风必吹之,人高于群,众必推之。抬手不打无娘子,开口不骂外乡人,童叟孤寡不能欺,身残之人不能戏。积德无人见,行善天自知,麻绳专挑细处断,小人专坑善良人,汤没盐不如水,人没钱不如鬼。雷公不打笑脸人,好狗不咬鸡,好汉不打妻。鸟怕暗箭,人怕甜言,坑人害人伤天理,积德行善补阴功。不怕虎生三只口,就怕人怀两样心。不求金玉重重贵,但愿儿孙个个贤。"
+                                    ,prompt)
+
+

+ 7 - 2
workers/consumption_work.py

@@ -234,7 +234,7 @@ class ConsumptionRecommend(object):
                     video_path = FFmpeg.video_crop(video_path, file_path)
                     video_path = FFmpeg.video_crop(video_path, file_path)
                 if data["video_clipping_time"]:  # 判断是否需要指定视频时长
                 if data["video_clipping_time"]:  # 判断是否需要指定视频时长
                     video_path = FFmpeg.video_ggduration(video_path, file_path, data["video_clipping_time"])
                     video_path = FFmpeg.video_ggduration(video_path, file_path, data["video_clipping_time"])
-                if data['trailer_share'] == "内容分析":
+                if data['trailer_share'] == "内容分析" or data['trailer_share'] == "引导语增强":
                     video_text = GoogleAI.run(studio_key, video_path)
                     video_text = GoogleAI.run(studio_key, video_path)
                     if not video_text:
                     if not video_text:
                         logger.error(f"[处理] 视频内容分析获取内容信息失败")
                         logger.error(f"[处理] 视频内容分析获取内容信息失败")
@@ -252,7 +252,12 @@ class ConsumptionRecommend(object):
                                           "【 搬运&改造效率工具失败通知 】")
                                           "【 搬运&改造效率工具失败通知 】")
                         return
                         return
                     logger.info(f"[处理] 片尾引导-开始获取AI片尾")
                     logger.info(f"[处理] 片尾引导-开始获取AI片尾")
-                    pw_srt_text = GPT4oMini.get_content_understanding_pw(video_text)
+                    if data['trailer_share'] == "内容分析":
+                        pw_srt_text = GPT4oMini.get_content_understanding_pw(video_text)
+                    elif data['trailer_share'] == "引导语增强":
+                        # 引导语增强
+                        prompt = Material.get_propmt_data_new(str(data['trailer_share']))
+                        pw_srt_text = GPT4oMini.generate_share_script(video_text,prompt)
                 else:
                 else:
                     prompt = Material.get_propmt_data(str(data['trailer_share']))
                     prompt = Material.get_propmt_data(str(data['trailer_share']))
                     pw_srt_text = GPT4oMini.get_ai_mini_pw(title, prompt)
                     pw_srt_text = GPT4oMini.get_ai_mini_pw(title, prompt)