gpt4o_help.py 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393
  1. import json
  2. import random
  3. import re
  4. import time
  5. import requests
  6. class GPT4o():
  7. @classmethod
  8. def get_ai_title(cls, old_title):
  9. max_retries = 3
  10. for attempt in range(max_retries):
  11. content = '''
  12. CONTEXT
  13. 你是一名短视频标题优化专家,任务是为短视频生成吸引力高且符合规范的标题。
  14. OBJECTIVE
  15. 基于优秀标题要求及示例,生成新的、吸引用户注意的标题。
  16. SCALE
  17. 如果原标题无法按照规则生成新标题则重新尝试5次,失败后返回None
  18. TIME
  19. 在标题生成请求提出后的1分钟内生成。
  20. ACTOR
  21. 短视频标题优化专家
  22. RESOURCES
  23. - 原标题列表
  24. - 优秀标题示例
  25. - 标题生成规范和约束条件
  26. RESPONSE
  27. 为每个原标题生成符合规范的新标题。
  28. 生成示例标题案例及要求
  29. 1. 标题开头包含醒目emoji🔴,整体字符长度必须控制在10-25个字
  30. 2. 识别需要修改的标题中可能感兴趣的人群,并在标题中表现出来。人群示例如:群友们、退休人员、50~70后等
  31. 3. 标题中可增加一些对内容的观点/态度,用人格化的方式表达,示例:太香了、老外至今难以相信、老百姓乐坏了
  32. 4. 标题结尾可以根据标题内容增加一些引导语,格式参考示例但不必局限于示例。示例:都看看吧、你也来看看吧、你们见过吗、你听对不对、说的太好了、请听、大家注意、太神奇了
  33. 5. 对于包含#话题和@人的标题,若标题中包含其他元素,则去除#话题和@人元素后利用其他元素生成标题。若标题去除#话题和@人外无其他元素,则仅利用#话题的内容生成标题
  34. Goodcase示例:
  35. ⭕老外至今难以相信,中国人竟能把大桥建到天上,穿入云中
  36. 🔴未来酒店体验,群友们,都看看吧!
  37. ⭕六七十年代的《忠字舞》,你们见过吗?
  38. 🔴哈哈哈!大哥说的太好了!太真实了
  39. 🔴今天,请记住那1700个集体赴死的年轻人,平均23岁!
  40. 🔴这才叫老同学聚会,到了这个年纪,还能聚在一起真不容易!
  41. 🔴百善孝为先,心凉了捂不热了
  42. 🔴养儿不如养狗,一件真实的事!都看看吧
  43. 🔴男人生气时的态度,关乎家庭温度,智慧女性们都来看看!
  44. 🔴让人受益的一段话,写得真好!
  45. 🔴“处暑三劝”!发给最好的朋友劝一劝!
  46. 🔴世间公道自在人心,善恶有报,人生智慧你得听听!
  47. 生成约束
  48. 1. 标题不能包含#话题标签和@人名。
  49. 2. 如果原标题无法按照规则生成新标题则重新尝试5次,失败后返回None。
  50. 3. 不能编造:不能加入原标题没有的实体信息,如原标题没有养老金,不能在生成的标题中出现养老金。
  51. 4. 标题内不能使用引导分享点击的词句,如:快来看看、大家都听一听、值得一看等。
  52. 5. 不能使用无实质信息和强烈诱导点击、紧急、夸张、震惊的描述,避免使用“震惊国人”、“速看”等类似描述。
  53. 6. 标题需要简洁、清晰,不要使用网络流行语,如:太燃了、佛系、躺平、内卷等。
  54. badcase示例:
  55. 🌸绝对不能错过,快打开看看,越快越好
  56. 所有老年人一定要看
  57. 天大的好消息,5月开始实施❗
  58. 就在刚刚,中国突然传出重磅消息,所有人都不敢相信! 🚩
  59. 丧尽天良!为什么生病的人越来越多,原来吃的是这些 🎈
  60. 今年的端午节太特殊,一辈子难遇一次!一定要看!错过别后悔
  61. 好消息来了,千万别划走!
  62. 紧急!已爆发,错过就晚了😱
  63. 输出格式:要求输出格式为符合RFC8259标准的JSON格式的字符串,不要以代码块形式返回,返回一个string类型的新标题
  64. '''
  65. url = "http://aigc.piaoquantv.com/aigc-server/aigc/conversation"
  66. headers = {
  67. "Content-Type": "application/json"
  68. }
  69. payload = {
  70. "auth": "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",
  71. "openAiGptParam": {
  72. "model": "gpt-4o",
  73. "temperature": 0.5,
  74. "messages": [
  75. {
  76. "role": "system",
  77. "content": content
  78. },
  79. {
  80. "role": "user",
  81. "content": old_title
  82. }
  83. ]
  84. }
  85. }
  86. wait_time = random.uniform(5, 10)
  87. time.sleep(wait_time)
  88. response = requests.post(url, headers=headers, json=payload)
  89. response = response.json()
  90. try:
  91. match = re.search(r'"[^"]+": "([^"]+)"', str(response))
  92. if match:
  93. if match == 'None':
  94. return "这个视频,分享给我的老友,祝愿您能幸福安康"
  95. title = match.group(1)
  96. if '原标题无法按照规则生成新标题' in title or '原标题不符合生成新标题的要求,请提供符合要求的原标题' in title or 'Invalid input format' in title:
  97. return "这个视频,分享给我的老友,祝愿您能幸福安康"
  98. return title
  99. else:
  100. content = response['data']['choices'][0]['message']['content']
  101. if content:
  102. if content == 'None':
  103. return "这个视频,分享给我的老友,祝愿您能幸福安康"
  104. if 'title' in content:
  105. data = json.loads(content)
  106. title = data["title"]
  107. if title:
  108. return title
  109. elif '新标题' in content:
  110. data = json.loads(content)
  111. title = data['新标题']
  112. return title
  113. return content
  114. elif attempt == max_retries - 1:
  115. return "这个视频,分享给我的老友,祝愿您能幸福安康"
  116. except Exception:
  117. if attempt == max_retries - 1:
  118. return "这个视频,分享给我的老友,祝愿您能幸福安康"
  119. # @classmethod
  120. # def get_ai_title(cls, old_title):
  121. # max_retries = 3
  122. # for attempt in range(max_retries):
  123. # # content = '''
  124. # # CONTEXT
  125. # # 你是一名短视频标题优化专家,任务是为短视频生成吸引力高且符合规范的标题。
  126. # #
  127. # # OBJECTIVE
  128. # # 基于优秀标题要求及示例,生成新的、吸引用户注意的标题。
  129. # #
  130. # # SCALE
  131. # # 如果原标题无法按照规则生成新标题则重新尝试5次,失败后返回None
  132. # #
  133. # # TIME
  134. # # 在标题生成请求提出后的1分钟内生成。
  135. # #
  136. # # ACTOR
  137. # # 短视频标题优化专家
  138. # #
  139. # # RESOURCES
  140. # # 原标题列表
  141. # # 优秀标题示例
  142. # # 标题生成规范和约束条件
  143. # #
  144. # # RESPONSE
  145. # # 为每个原标题生成符合规范的新标题。
  146. # #
  147. # # 生成示例标题案例及要求
  148. # # 标题开头包含醒目emoji🔴,整体字符长度必须控制在10-25个字
  149. # # 识别需要修改的标题中可能感兴趣的人群,并在标题中表现出来。人群示例如:群友们、退休人员、50~70后等
  150. # # 标题中可增加一些对内容的观点/态度,用人格化的方式表达,示例:太香了、老外至今难以相信、老百姓乐坏了
  151. # # 标题结尾可以根据标题内容增加一些引导语,格式参考示例但不必局限于示例。示例:都看看吧、你也来看看吧、你们见过吗、你听对不对、说的太好了、请听、大家注意、太神奇了
  152. # #
  153. # # Goodcase示例:
  154. # # ⭕老外至今难以相信,中国人竟能把大桥建到天上,穿入云中
  155. # # 🔴未来酒店体验,群友们,都看看吧!
  156. # # ⭕六七十年代的《忠字舞》,你们见过吗?
  157. # # 🔴哈哈哈!大哥说的太好了!太真实了
  158. # # 🔴今天,请记住那1700个集体赴死的年轻人,平均23岁!
  159. # #
  160. # # 生成约束
  161. # # 标题不能包含#话题标签和@人名。
  162. # # 如果原标题无法按照规则生成新标题则重新尝试5次,失败后返回None。
  163. # # 不能编造:不能加入原标题没有的实体信息,如原标题没有养老金,不能在生成的标题中出现养老金。
  164. # # 标题内不能使用引导分享点击的词句,如:快来看看、大家都听一听、值得一看等。
  165. # # 不能使用无实质信息和强烈诱导点击、紧急、夸张、震惊的描述,避免使用“震惊国人”、“速看”等类似描述。
  166. # # 标题需要简洁、清晰,不要使用网络流行语,如:太燃了、佛系、躺平、内卷等。
  167. # # badcase示例:
  168. # # 🌸绝对不能错过,快打开看看,越快越好
  169. # # 所有老年人一定要看
  170. # # 天大的好消息,5月开始实施❗
  171. # # 就在刚刚,中国突然传出重磅消息,所有人都不敢相信! 🚩
  172. # # 丧尽天良!为什么生病的人越来越多,原来吃的是这些 🎈
  173. # # 今年的端午节太特殊,一辈子难遇一次!一定要看!错过别后悔
  174. # # 好消息来了,千万别划走!
  175. # # 紧急!已爆发,错过就晚了😱
  176. # #
  177. # # 需要重新生成的标题列表如下:
  178. # # 1.抹不掉的容颜,回不去的青春!愿50。60。70后的我们,保重自己,珍惜每一天!收起
  179. # # 2.人在做,天在看,世间自有公道在。善恶到头终有报,有因必有果~人在做天在看人生感悟人生智慧情感现实
  180. # # 3.这个视频,分享给我的老友,祝愿您能幸福安康
  181. # # 4.#乡村美食 #乡村柴火饭 #快手美食家 煮好的五花肉切成薄片炒苦瓜好香啊
  182. # # 5.#奥运气氛组已就位 #赛场尽兴而动 #奥运会
  183. # #
  184. # #
  185. # #
  186. # # 作为一个短视频专家,请你根据以下需求帮我改写标题:
  187. # #
  188. # # 第一:根据下面的优秀标题示例,总结优秀标题特点,生成一个新标题,要求如下:
  189. # # 1.识别需要修改的标题中可能感兴趣的人群,并在标题中表现出来。人群示例如:群友们、退休人员、50~70后等
  190. # # 2.标题中可增加一些对内容的观点/态度,用人格化的方式表达,示例:太香了、老外至今难以相信、老百姓乐坏了
  191. # # 3.标题结尾可以增加一些引导语,示例:都看看吧、你们见过吗、你听对不对
  192. # # 4.标题的内容不要互相矛盾,示例:「老友记,看这个视频,愿你幸福安康,乐坏了!」这个标题中,「愿你祝福安康」的语境下,不应该有「乐坏了」这种语气词
  193. # #
  194. # # 修改后的优秀case:
  195. # # ⭕老外至今难以相信,中国人竟能把大桥建到天上,穿入云中
  196. # # 🔴未来酒店体验,群友们,都看看吧!
  197. # # ⭕六七十年代的《忠字舞》,你们见过吗?
  198. # # 🔴哈哈哈!大哥说的太好了!太真实了
  199. # # 🔴今天,请记住那1700个集体赴死的年轻人,平均23岁!
  200. # #
  201. # # 第二:生成过程有如下的规范、约束和建议:
  202. # # 1.标题开头包含醒目emoji🔴,整体字符长度必须控制在10-25个字,emoji可以根据标题做调整
  203. # # 2.不能包含#话题和@人
  204. # # 3.如果原标题无法按照规则生成新标题则重新尝试5次,失败后返回None
  205. # # 4.不能编造:不能加入原标题没有的实体信息,如原标题没有养老金,不能在生成的标题中出现养老金;
  206. # # 5.标题内不能使用引导分享点击的词句;包括但不限于下面这些词语:快来看看、群友看看、大家都听一听、 一起看看、 快来看、 都看看、来看看、值得一看、 进来看看、请看看、提前看看
  207. # # 7.不能使用无实质信息和强烈诱导点击、紧急、夸张、震惊的描述:在提高标题吸引力的同时,严格落实不使用“震惊国人”、“转发”、“速看”、“一定”、“必看”、“错过悔恨终生”同类型的描述。
  208. # # 8.标题不要使用网络流行语,如:太燃了、佛系、躺平、内卷等
  209. # # 错误危险标题示例:
  210. # # 🌸绝对不能错过,快打开看看,越快越好
  211. # # 所有老年人一定要看
  212. # # 天大的好消息,5月开始实施❗
  213. # # 就在刚刚,中国突然传出重磅消息,所有人都不敢相信! 🚩
  214. # # 丧尽天良!为什么生病的人越来越多,原来吃的是这些 🎈
  215. # # 今年的端午节太特殊,一辈子难遇一次!一定要看!错过别后悔
  216. # # 好消息来了,千万别划走!
  217. # # 紧急!已爆发,错过就晚了😱
  218. # #
  219. # # 需要重新生成的标题列表如下:
  220. # # 1.抹不掉的容颜,回不去的青春!愿50。60。70后的我们,保重自己,珍惜每一天!收起
  221. # # 2.人在做,天在看,世间自有公道在。善恶到头终有报,有因必有果~人在做天在看人生感悟人生智慧情感现实
  222. # # 3.这个视频,分享给我的老友,祝愿您能幸福安康
  223. # # 4.#乡村美食 #乡村柴火饭 #快手美食家 煮好的五花肉切成薄片炒苦瓜好香啊
  224. # # 5.#奥运气氛组已就位 #赛场尽兴而动 #奥运会
  225. # # '''
  226. # content = '''
  227. # 请针对微信平台视频类小程序场景,面向人群是中国中老年人,在单聊、群聊场景,对不同视频内容原标题,在分享卡片上预览的标题进行优化。优化目标是提高这个场景下的视频卡片点击率。要求优化过程综合考虑下面的要求:
  228. # 第一:根据下面的优秀标题示例,总结优秀标题特点,生成一个新标题:
  229. # 示例case:
  230. # 此视频献给四零后,看完感触颇多!
  231. # 🔴2024八一战友聚会通知书,各位战友请查收!
  232. # 50年前毛主席就告诫了,今天一一验证!苦的还是老百姓
  233. # 🔴十分通透的一段话,写得太棒了,请朋友们收好!
  234. # 🏆⭕️⭕️⭕接台湾回家,激动人心!
  235. # 💗省钱小妙招,找了很久,终于找到了!
  236. # 🔴这才是民间高手,每一个动作都太漂亮了!赞!
  237. # 第二:生成过程有如下的规范、约束和建议:
  238. # 1.标题开头包含醒目emoji🔴,整体字符长度控制在10-25;
  239. # 2.不能包含#话题和@人;
  240. # 3.如果原标题无法按照规则生成新标题则重新尝试5次,失败后返回None
  241. # 4.不能编造:不能加入原标题没有的实体信息,如原标题没有养老金,不能在生成的标题中出现养老金;
  242. # 5.标题内不能使用引导分享点击的词句;包括但不限于下面这些词语:快来看看、群友看看、大家都听一听、 一起看看、 快来看、 都看看、来看看、值得一看、 进来看看、请看看、提前看看
  243. # 7.不能使用无实质信息和强烈诱导点击、紧急、夸张、震惊的描述:在提高标题吸引力的同时,严格落实不使用“转发”、“速看”、“一定”、“必看”、“错过悔恨终生”同类型的描述。
  244. # 错误危险标题示例:
  245. # 🌸绝对不能错过,快打开看看,越快越好
  246. # 所有老年人一定要看
  247. # 天大的好消息,5月开始实施❗
  248. # 就在刚刚,中国突然传出重磅消息,所有人都不敢相信! 🚩
  249. # 丧尽天良!为什么生病的人越来越多,原来吃的是这些 🎈
  250. # 今年的端午节太特殊,一辈子难遇一次!一定要看!错过别后悔
  251. # 好消息来了,千万别划走!
  252. # 紧急!已爆发,错过就晚了😱
  253. # 输出格式:要求输出格式为符合RFC8259标准的JSON格式的字符串,不要以代码块形式返回,返回一个string类型的新标题
  254. # '''
  255. # url = "http://aigc.piaoquantv.com/aigc-server/aigc/conversation"
  256. # headers = {
  257. # "Content-Type": "application/json"
  258. # }
  259. # payload = {
  260. # "auth": "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",
  261. # "openAiGptParam": {
  262. # "model": "gpt-4o",
  263. # "temperature": 0.5,
  264. # "messages": [
  265. # {
  266. # "role": "system",
  267. # "content": content
  268. # },
  269. # {
  270. # "role": "user",
  271. # "content": old_title
  272. # }
  273. # ]
  274. # }
  275. # }
  276. # wait_time = random.uniform(5, 20)
  277. # time.sleep(wait_time)
  278. # response = requests.post(url, headers=headers, json=payload)
  279. # response = response.json()
  280. # try:
  281. # match = re.search(r'"[^"]+": "([^"]+)"', str(response))
  282. # if match:
  283. # if match == 'None':
  284. # return "这个视频,分享给我的老友,祝愿您能幸福安康"
  285. # title = match.group(1)
  286. # if '原标题无法按照规则生成新标题' in title or '原标题不符合生成新标题的要求,请提供符合要求的原标题' in title or 'Invalid input format' in title:
  287. # return "这个视频,分享给我的老友,祝愿您能幸福安康"
  288. # return title
  289. # else:
  290. # content = response['data']['choices'][0]['message']['content']
  291. # if content:
  292. # if content == 'None':
  293. # return "这个视频,分享给我的老友,祝愿您能幸福安康"
  294. # data = json.loads(content)
  295. # title = data["title"]
  296. # if title:
  297. # return title
  298. # else:
  299. # return content
  300. # elif attempt == max_retries - 1:
  301. # return "这个视频,分享给我的老友,祝愿您能幸福安康"
  302. # except Exception:
  303. # if attempt == max_retries - 1:
  304. # return "这个视频,分享给我的老友,祝愿您能幸福安康"
  305. @classmethod
  306. def get_ai_pw(cls, title):
  307. max_retries = 3
  308. for attempt in range(max_retries):
  309. content = '''
  310. 请针对微信平台视频类小程序场景,面向人群是中国中老年人,在单聊、群聊场景,对不同类型的内容,生成结尾引导分享的脚本。引导用户发生更多的分享行为。要求优化过程综合考虑下面的要求:
  311. 第一.根据下面的示例case,总结分享引导脚本特点,生成分享引导脚本
  312. 示例case1:
  313. 标题:几十年前的老歌,现在很少听到了!
  314. 返回分享引导脚本:
  315. 这个视频真是难得,太美太好听了,看完真是回忆满满,让人怀念那个时代,多么淳朴多么美好,今天大家都在群里转发这个视频,看了都说,那时候虽然手里不宽裕,但心里都满怀希望,那股子拼劲,真是让人热血沸腾,老朋友你还记得吗?如果你也跟我一样深深的怀念,赶紧把这个视频转发到你所有群里去吧,让大家伙都看看吧,多多转发,感恩有你!
  316. 示例case2:
  317. 标题:🔺令人尊敬的老人❗❗这才是我们应该追的明星❗
  318. 返回分享引导脚本:
  319. 这个视频发出来5天了,转发的人却寥寥无几,试想一次明星出轨就全民皆知,这样中国真正的正能量却无人关注,真是太讽刺了!如果你看到了这个视频,请分享到你加入的每个群,向杨老这种无私奉献的大爱致敬!千万别让那些低调做好事的人心寒!转发传递下去,让世界都看到,中华民族的正能量!
  320. 第二:生成过程有如下的规范、约束和建议:
  321. 1.不能编造:不能加入原标题没有的实体信息,如原标题没有养老金,不能在生成的标题中出现养老金;
  322. 2.不能使用强烈的诱导、夸张词汇:在提高分享吸引力的同时,严格落实不使用“必做”、“错过悔恨终生”类描述;
  323. 3.分享引导阅读总时长控制30秒到1分钟,20-30句话,每句话字符长度控制在4-10字;
  324. 输出格式:要求输出格式为符合RFC8259标准的JSON格式的字符串,不要以代码块形式返回,返回一个string类型的分享引导脚本内容。
  325. '''
  326. url = "http://aigc.piaoquantv.com/aigc-server/aigc/conversation"
  327. headers = {
  328. "Content-Type": "application/json"
  329. }
  330. payload = {
  331. "auth": "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",
  332. "openAiGptParam": {
  333. "model": "gpt-4o",
  334. "temperature": 0.5,
  335. "messages": [
  336. {
  337. "role": "system",
  338. "content": content
  339. },
  340. {
  341. "role": "user",
  342. "content": title
  343. }
  344. ]
  345. }
  346. }
  347. wait_time = random.uniform(5, 20)
  348. time.sleep(wait_time)
  349. response = requests.post(url, headers=headers, json=payload)
  350. response = response.json()
  351. try:
  352. content = response['data']['choices'][0]['message']['content']
  353. pattern = re.compile(r'"分享引导脚本":\s*"(.*?)"')
  354. match = pattern.search(content)
  355. if match:
  356. pw = match.group(1)
  357. # 检查文本中是否包含英文字母
  358. if re.search(r'[a-zA-Z]', pw):
  359. pw = re.sub(r'[a-zA-Z]', '', pw)
  360. return pw
  361. else:
  362. if content:
  363. if re.search(r'[a-zA-Z]', content):
  364. content = re.sub(r'[a-zA-Z]', '', content)
  365. return content
  366. if attempt == max_retries - 1:
  367. return None
  368. except Exception:
  369. if attempt == max_retries - 1:
  370. return None
  371. if __name__ == '__main__':
  372. title = '恒大美女个个貌美如花如天仙。清纯一笑倾红颜女人一生如花恒大歌舞团倾国倾城个人写真'
  373. GPT4o.get_ai_title(title)