ソースを参照

title_safer_commit

luojunhui 3 ヶ月 前
コミット
a1e9660991

+ 3 - 0
applications/const/task_const.py

@@ -76,6 +76,9 @@ class NewContentIdTaskConst(HistoryContentIdTaskConst):
     KIMI_SUCCESS_STATUS = 1
     KIMI_FAIL_STATUS = 2
 
+    # KIMI 安全分
+    KIMI_SAFE_SCORE = 7
+
 
 class RematchTaskConst(NewContentIdTaskConst):
     """

+ 101 - 1
applications/functions/kimi.py

@@ -15,10 +15,11 @@ class KimiServer(object):
     """
 
     @classmethod
-    async def search_kimi_schedule(cls, params):
+    async def search_kimi_schedule(cls, params, safe_score):
         """
         搜索阶段 kimi 操作
         :param params:
+        :param safe_score:
         :return:
         """
         title = params['article_title'].split("@@")[-1]
@@ -26,6 +27,11 @@ class KimiServer(object):
         trace_id = params['content_id']
         try:
             kimi_title = await cls.kimi_title(title)
+            # 判断kimi 标题是否安全
+            title_score = await cls.get_kimi_title_safe_score(kimi_title)
+            if int(title_score) > safe_score:
+                kimi_title = await cls.make_kimi_title_safer(title)
+
         except Exception as e:
             logging(
                 code="4002",
@@ -218,3 +224,97 @@ class KimiServer(object):
                 return response
             except Exception as e:
                 return {}
+
+    @classmethod
+    async def get_kimi_title_safe_score(cls, kimi_title):
+        """
+        获取kimi_title的安全分数
+        """
+        prompt = f"""
+        请你学习一下内容规范,以下标题可能会违反了某条内容规范。请你对标题做一个内容风险评级,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)含有法律、行政法规禁止的其他内容的。
+        输入的标题是: {kimi_title}
+        """
+        client = OpenAI(
+            api_key='sk-5DqYCa88kche6nwIWjLE1p4oMm8nXrR9kQMKbBolNAWERu7q',
+            base_url="https://api.moonshot.cn/v1"
+        )
+        chat_completion = client.chat.completions.create(
+            messages=[
+                {
+                    "role": "user",
+                    "content": prompt
+                }
+            ],
+            model="moonshot-v1-32k"
+        )
+        response = chat_completion.choices[0].message.content
+        return response
+
+    @classmethod
+    async def make_kimi_title_safer(cls, ori_title):
+        """
+        安全化 kimi title
+        """
+        prompt = """
+            以下每行为一个文章的标题,请用尽量平实的语言对以上标题进行改写,保持在10~15字左右,请注意:
+            1. 不要虚构或改变标题的含义。
+            2. 不要用笃定的语气描述存疑的可能性,不要将表述可能性的问句改为肯定句。
+            直接输出改写后的标题列表。
+            在改写完成后,再输出一次,在改写的标题前增加和标题情感、语气匹配的特殊符号,如:“🔴”、“😄”、“🔥”、“😨”等等
+            输出:
+                输出结果是Dict, 格式为: 
+                {
+                "title_v1": 请填写第一次输出的标题,
+                "title_v2": 请填写第二次输出的标题
+                }
+            输入的标题是: 
+        """
+        client = OpenAI(
+            api_key='sk-5DqYCa88kche6nwIWjLE1p4oMm8nXrR9kQMKbBolNAWERu7q',
+            base_url="https://api.moonshot.cn/v1"
+        )
+        chat_completion = client.chat.completions.create(
+            messages=[
+                {
+                    "role": "user",
+                    "content": prompt + ori_title,
+                }
+            ],
+            model="moonshot-v1-32k",
+            response_format={"type": "json_object"}
+        )
+        response = chat_completion.choices[0].message.content
+        response_json = json.loads(response)
+        safer_title = response_json["title_v2"]
+        return safer_title

+ 6 - 1
tasks/new_contentId_task.py

@@ -343,7 +343,12 @@ class NewContentIdTask(object):
                 )
                 return
             try:
-                kimi_result = await generate_kimi_result(content_id=content_id, article_text_table=self.article_text_table, db_client=self.long_articles_client)
+                kimi_result = await generate_kimi_result(
+                    content_id=content_id,
+                    article_text_table=self.article_text_table,
+                    db_client=self.long_articles_client,
+                    safe_score=NewContentIdTaskConst.KIMI_SAFE_SCORE
+                )
                 await self.update_content_status(
                     new_content_status=NewContentIdTaskConst.TASK_KIMI_FINISHED_STATUS,
                     trace_id=trace_id,

+ 2 - 2
tasks/utils/kimi_task.py

@@ -53,7 +53,7 @@ async def get_kimi_result(content_id, article_text_table, db_client) -> Dict:
         return {}
 
 
-async def generate_kimi_result(content_id, article_text_table, db_client) -> Dict:
+async def generate_kimi_result(content_id, article_text_table, db_client, safe_score) -> Dict:
     """
     为content_id执行kimi操作
     """
@@ -69,7 +69,7 @@ async def generate_kimi_result(content_id, article_text_table, db_client) -> Dic
         "article_text": res[0][1],
         "content_id": content_id
     }
-    kimi_info = await K.search_kimi_schedule(params=article_obj)
+    kimi_info = await K.search_kimi_schedule(params=article_obj, safe_score=safe_score)
     kimi_title = kimi_info['k_title']
     content_title = kimi_info['content_title'].replace("'", "").replace('"', "")
     content_keys = json.dumps(kimi_info['content_keys'], ensure_ascii=False)