moon_shot_api.py 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. """
  2. @author: luojunhui
  3. """
  4. import json
  5. from openai import OpenAI
  6. from config import moon_shot
  7. generate_program_title_prompt = """
  8. 请将以上标题改写成适合小程序点击和传播的小程序标题,小程序标题的写作规范如下,请学习后进行小程序标题的编写。直接输出最终的小程序标题
  9. 小程序标题写作规范:
  10. 1.要点前置:将最重要的信息放在标题的最前面,以快速吸引读者的注意力。例如,“5月一辈子同学,三辈子亲,送给我的老同学,听哭无数人!”中的“5月”和“一辈子同学,三辈子亲”都是重要的信息点。
  11. 2.激发情绪:使用能够触动人心的语言,激发读者的情感共鸣。如“只剩两人同学聚会,看后感动落泪。”使用“感动落泪”激发读者的同情和怀旧情绪。
  12. 3.使用数字和特殊符号:数字可以提供具体性,而特殊符号如“🔴”、“😄”、“🔥”等可以吸引视觉注意力,增加点击率。
  13. 4.悬念和好奇心:创建悬念或提出问题,激发读者的好奇心。
  14. 5.名人效应:如果内容与知名人士相关,提及他们的名字可以增加标题的吸引力。
  15. 6.社会价值观:触及读者的文化和社会价值观,如家庭、友情、国家荣誉等。
  16. 7.标点符号的运用:使用感叹号、问号等标点来增强语气和情感表达。
  17. 8.直接的语言:使用直白、口语化的语言,易于理解,如“狗屁股,笑死我了!”。
  18. 9.热点人物或事件:提及当前的热点人物或事件,利用热点效应吸引读者。
  19. 10.字数适中:保持标题在10-20个字之间,既不过长也不过短,确保信息的完整性和吸引力。
  20. 11.情感或价值诉求:使用如“感动”、“泪目”、“经典”等词汇,直接与读者的情感或价值观产生共鸣。
  21. 避免误导:确保标题准确反映内容,避免夸大或误导读者。
  22. """
  23. get_title_safe_score_prompt = """
  24. 请你学习一下内容规范,以下标题可能会违反了某条内容规范。请你对标题做一个内容风险评级,1-10分,等级越高内容违规风险越大。
  25. 请直接输出内容风险评级的分数,不要输出你的理由、分析等内容。
  26. 输出:
  27. 只需要输出危险分级分数,不要输出任何其他内容。
  28. 内容规范为:
  29. 4.2 色俗内容
  30. 4.2.1 散布淫秽、色情内容,包括但不限于招嫖、寻找一夜情、性伴侣等。
  31. 4.2.2 发布有色情意味的情色文字、情色视频、情色漫画等内容。
  32. 4.2.3 以投稿/爆料等形式描述约炮经历、性交体验、偷情、涉隐私部位偷拍等伤风败俗的话题内容。
  33. 4.2.4 以低俗的配图引诱用户阅读文章、关注微信公众号。包含性撩拨、性挑逗画面;疑似女性性高潮/性虐场面;偷拍的沐浴/更衣/如厕/亲热等私密画面;女性故意露出敏感部位 (纯裸露的胸、生殖器官)以及敏感部位未打码的真人写真/艺术摄影等。
  34. 4.2.5 文内以低俗类的动图或引导图,诱导用户点击进而跳转至另一篇图文页或关注某个公众号。
  35. 4.2.6 文章主要描述PUA撩妹、撩汉等相关话题,且引导用户关注公众号/加个人微信号/加群。
  36. 4.11 煽动、夸大、误导类内容 平台鼓励创作者提供准确、清晰、能体现文章内容主旨的标题,不允许通过标题噱头诱导用户点击或误导用户。
  37. 包括但不限于以下情况:
  38. 4.11.1 标题含有危害人身安全、恐吓侮辱、惊悚、极端内容,或者以命令式语气强迫用户阅读。
  39. 4.11.2 标题无依据夸大事件严重程度、紧急程度、受影响面以及事件引发的情绪。
  40. 4.11.3 标题以浮夸的描述,反常识强调某种食物/行为对人体健康的影响,煽动人群要/不要去做某行为。
  41. 4.11.4 非官方通知或者公告,但标题假借官方名义煽动获取流量,或以信息来源机密、看完即删来诱导用户。
  42. 4.11.5 标题故意隐藏关键信息,或无中生有部分信息,给用户造成误导。
  43. 4.12 违反国家法律法规禁止的内容
  44. (1)违反宪法确定的基本原则的;
  45. (2)危害国家安全,泄露国家秘密,颠覆国家政权,破坏国家统一的;
  46. (3)损害国家荣誉和利益的;
  47. (4)煽动民族仇恨、民族歧视,破坏民族团结的;
  48. (5)破坏国家宗教政策,宣扬邪教和封建迷信的;
  49. (6)散布不实信息,扰乱社会秩序,破坏社会稳定的;
  50. (7)散布淫秽、色情、赌博、暴力、恐怖或者教唆犯罪的;
  51. (8)侮辱或者诽谤他人,侵害他人合法权益的;
  52. (9)煽动非法集会、结社、游行、示威、聚众扰乱社会秩序;
  53. (10)以非法民间组织名义活动的;
  54. (11)不符合《即时通信工具公众信息服务发展管理暂行规定》及遵守法律法规、社会主义制度、国家利益、公民合法利益、公共秩序、社会道德风尚和信息真实性等“七条底线”要求的;
  55. (12)含有法律、行政法规禁止的其他内容的。
  56. 输入的标题是:
  57. """
  58. make_title_safe_prompt = """
  59. 以下每行为一个文章的标题,请用尽量平实的语言对以上标题进行改写,保持在10~15字左右,请注意:
  60. 1. 不要虚构或改变标题的含义。
  61. 2. 不要用笃定的语气描述存疑的可能性,不要将表述可能性的问句改为肯定句。
  62. 直接输出改写后的标题列表。
  63. 在改写完成后,再输出一次,在改写的标题前增加和标题情感、语气匹配的特殊符号,如:“🔴”、“😄”、“🔥”、“😨”等等
  64. 输出:
  65. 输出结果是Dict, 格式为:
  66. {
  67. "title_v1": 请填写第一次输出的标题,
  68. "title_v2": 请填写第二次输出的标题
  69. }
  70. 输入的标题是:
  71. """
  72. def fetch_moon_shot_response(task, input_text, output_type="text"):
  73. """
  74. 调用kimi的api获取结果
  75. """
  76. # generate prompt
  77. match task:
  78. case "generate_kimi_title":
  79. prompt = input_text + '\n' + generate_program_title_prompt
  80. case "get_title_safe_score":
  81. prompt = get_title_safe_score_prompt + input_text
  82. case "make_title_safe":
  83. prompt = make_title_safe_prompt + input_text
  84. case _:
  85. prompt = input_text
  86. # init client
  87. client = OpenAI(
  88. api_key=moon_shot['api_key'],
  89. base_url=moon_shot['base_url']
  90. )
  91. # get response format
  92. if output_type == "json":
  93. response_format = {"type": "json_object"}
  94. else:
  95. response_format = {"type": "text"}
  96. chat_completion = client.chat.completions.create(
  97. messages=[
  98. {
  99. "role": "user",
  100. "content": prompt,
  101. }
  102. ],
  103. model=moon_shot['model'],
  104. response_format=response_format,
  105. )
  106. response = chat_completion.choices[0].message.content
  107. if output_type == "json":
  108. response_json = json.loads(response)
  109. return response_json
  110. return response