Просмотр исходного кода

单视频供给,小程序优化

luojunhui 2 месяцев назад
Родитель
Сommit
ef66ff51ed

+ 1 - 1
applications/api/__init__.py

@@ -1,5 +1,5 @@
 """
 @author: luojunhui
 """
-from .moon_shot_api import generate_mini_program_title
+from .moon_shot_api import fetch_moon_shot_response
 from .nlp_api import similarity_between_title_list

+ 91 - 10
applications/api/moon_shot_api.py

@@ -1,9 +1,12 @@
 """
 @author: luojunhui
 """
+import json
 from openai import OpenAI
 
-mini_program_title_generate_prompt = """
+from config import moon_shot
+
+generate_program_title_prompt = """
     请将以上标题改写成适合小程序点击和传播的小程序标题,小程序标题的写作规范如下,请学习后进行小程序标题的编写。直接输出最终的小程序标题
     小程序标题写作规范:
     1.要点前置:将最重要的信息放在标题的最前面,以快速吸引读者的注意力。例如,“5月一辈子同学,三辈子亲,送给我的老同学,听哭无数人!”中的“5月”和“一辈子同学,三辈子亲”都是重要的信息点。
@@ -21,25 +24,103 @@ mini_program_title_generate_prompt = """
     避免误导:确保标题准确反映内容,避免夸大或误导读者。
     """
 
+get_title_safe_score_prompt = """
+    请你学习一下内容规范,以下标题可能会违反了某条内容规范。请你对标题做一个内容风险评级,1-10分,等级越高内容违规风险越大。 
+    请直接输出内容风险评级的分数,不要输出你的理由、分析等内容。 
+    输出:
+        只需要输出危险分级分数,不要输出任何其他内容。
+    内容规范为: 
+    4.2 色俗内容 
+        4.2.1 散布淫秽、色情内容,包括但不限于招嫖、寻找一夜情、性伴侣等。 
+        4.2.2 发布有色情意味的情色文字、情色视频、情色漫画等内容。 
+        4.2.3 以投稿/爆料等形式描述约炮经历、性交体验、偷情、涉隐私部位偷拍等伤风败俗的话题内容。 
+        4.2.4 以低俗的配图引诱用户阅读文章、关注微信公众号。包含性撩拨、性挑逗画面;疑似女性性高潮/性虐场面;偷拍的沐浴/更衣/如厕/亲热等私密画面;女性故意露出敏感部位 (纯裸露的胸、生殖器官)以及敏感部位未打码的真人写真/艺术摄影等。 
+        4.2.5 文内以低俗类的动图或引导图,诱导用户点击进而跳转至另一篇图文页或关注某个公众号。 
+        4.2.6 文章主要描述PUA撩妹、撩汉等相关话题,且引导用户关注公众号/加个人微信号/加群。 
+    4.11 煽动、夸大、误导类内容 平台鼓励创作者提供准确、清晰、能体现文章内容主旨的标题,不允许通过标题噱头诱导用户点击或误导用户。
+        包括但不限于以下情况: 
+        4.11.1 标题含有危害人身安全、恐吓侮辱、惊悚、极端内容,或者以命令式语气强迫用户阅读。 
+        4.11.2 标题无依据夸大事件严重程度、紧急程度、受影响面以及事件引发的情绪。 
+        4.11.3 标题以浮夸的描述,反常识强调某种食物/行为对人体健康的影响,煽动人群要/不要去做某行为。 
+        4.11.4 非官方通知或者公告,但标题假借官方名义煽动获取流量,或以信息来源机密、看完即删来诱导用户。 
+        4.11.5 标题故意隐藏关键信息,或无中生有部分信息,给用户造成误导。 
+        4.12 违反国家法律法规禁止的内容 
+            (1)违反宪法确定的基本原则的; 
+            (2)危害国家安全,泄露国家秘密,颠覆国家政权,破坏国家统一的; 
+            (3)损害国家荣誉和利益的; 
+            (4)煽动民族仇恨、民族歧视,破坏民族团结的; 
+            (5)破坏国家宗教政策,宣扬邪教和封建迷信的; 
+            (6)散布不实信息,扰乱社会秩序,破坏社会稳定的; 
+            (7)散布淫秽、色情、赌博、暴力、恐怖或者教唆犯罪的; 
+            (8)侮辱或者诽谤他人,侵害他人合法权益的; 
+            (9)煽动非法集会、结社、游行、示威、聚众扰乱社会秩序; 
+            (10)以非法民间组织名义活动的; 
+            (11)不符合《即时通信工具公众信息服务发展管理暂行规定》及遵守法律法规、社会主义制度、国家利益、公民合法利益、公共秩序、社会道德风尚和信息真实性等“七条底线”要求的; 
+            (12)含有法律、行政法规禁止的其他内容的。
+    输入的标题是: 
+    """
+
+make_title_safe_prompt = """
+    以下每行为一个文章的标题,请用尽量平实的语言对以上标题进行改写,保持在10~15字左右,请注意:
+    1. 不要虚构或改变标题的含义。
+    2. 不要用笃定的语气描述存疑的可能性,不要将表述可能性的问句改为肯定句。
+    直接输出改写后的标题列表。
+    在改写完成后,再输出一次,在改写的标题前增加和标题情感、语气匹配的特殊符号,如:“🔴”、“😄”、“🔥”、“😨”等等
+    输出:
+        输出结果是Dict, 格式为: 
+        {
+        "title_v1": 请填写第一次输出的标题,
+        "title_v2": 请填写第二次输出的标题
+        }
+    输入的标题是: 
+        """
+
 
-def generate_mini_program_title(ori_title):
+def fetch_moon_shot_response(task, input_text, out_put_type="text"):
     """
-    prompt + kimi + ori_title generate new title
-    :param ori_title:
-    :return:
+    调用kimi的api获取结果
     """
+    # generate prompt
+    match task:
+        case "generate_kimi_title":
+            prompt = input_text + generate_program_title_prompt
+        case "get_title_safe_score":
+            prompt = get_title_safe_score_prompt + input_text
+        case "make_title_safe":
+            prompt = make_title_safe_prompt + input_text
+        case _:
+            prompt = input_text
+
+    # init client
     client = OpenAI(
-        api_key='sk-5DqYCa88kche6nwIWjLE1p4oMm8nXrR9kQMKbBolNAWERu7q',
-        base_url="https://api.moonshot.cn/v1"
+        api_key=moon_shot['api_key'],
+        base_url=moon_shot['base_url']
     )
+
+    # get response
+    if out_put_type == "json":
+        chat_completion = client.chat.completions.create(
+            messages=[
+                {
+                    "role": "user",
+                    "content": prompt,
+                }
+            ],
+            model=moon_shot['model'],
+            response_format={"type": "json_object"}
+        )
+        response = chat_completion.choices[0].message.content
+        response_json = json.loads(response)
+        return response_json
+
     chat_completion = client.chat.completions.create(
         messages=[
             {
                 "role": "user",
-                "content": ori_title + "\n" + mini_program_title_generate_prompt
+                "content": prompt,
             }
         ],
-        model="moonshot-v1-32k",
+        model=moon_shot['model']
     )
     response = chat_completion.choices[0].message.content
-    return response.split("\n")[0]
+    return response

+ 3 - 0
applications/const/__init__.py

@@ -150,6 +150,9 @@ class WeixinVideoCrawlerConst:
     # 标题最短长度
     TITLE_MIN_LENGTH = 15
 
+    # safe score
+    TITLE_SAFE_SCORE_THRESHOLD = 7
+
 
 class UpdateMiniProgramDetailConst(updatePublishedMsgTaskConst):
     """

+ 13 - 2
coldStartTasks/publish/publish_video_to_pq_for_audit.py

@@ -12,7 +12,7 @@ from pymysql.cursors import DictCursor
 from applications import log
 from applications import PQAPI
 from applications.const import WeixinVideoCrawlerConst
-from applications.api import generate_mini_program_title
+from applications.api import fetch_moon_shot_response
 from applications.db import DatabaseConnector
 from config import long_articles_config
 
@@ -153,7 +153,18 @@ class PublishVideosForAudit(object):
         title = self.db_client.fetch(select_sql, cursor_type=DictCursor)[0]['article_title']
 
         try:
-            mini_program_title = generate_mini_program_title(title)
+            # generate kimi title
+            mini_program_title = fetch_moon_shot_response(task='generate_kimi_title', input_text=title)
+
+            # score kimi title
+            kimi_safe_title = None
+            title_safe_score = fetch_moon_shot_response(task='get_title_safe_score', input_text=mini_program_title)
+            if int(title_safe_score) > const.TITLE_SAFE_SCORE_THRESHOLD:
+                kimi_safe_title_obj = fetch_moon_shot_response(task='make_title_safe', input_text=title, out_put_type='json')
+                kimi_safe_title = kimi_safe_title_obj['title_v2']
+
+            mini_program_title = kimi_safe_title if kimi_safe_title else mini_program_title
+
             update_sql = f"""
             UPDATE publish_single_video_source SET mini_program_title = %s WHERE audit_video_id = %s;
             """

+ 9 - 1
config/__init__.py

@@ -79,4 +79,12 @@ piaoquan_crawler_config = {
     'password': 'crawler123456@',
     'db': 'piaoquan-crawler',
     'charset': 'utf8mb4'
-}
+}
+
+
+# moonshot model config(kimi)
+moon_shot = {
+    "api_key": "sk-5DqYCa88kche6nwIWjLE1p4oMm8nXrR9kQMKbBolNAWERu7q",
+    "model": "moonshot-v1-32k",
+    "base_url": "https://api.moonshot.cn/v1"
+}