Browse Source

MySQL 服务
异步化 v0.2开发上线

罗俊辉 11 months ago
parent
commit
10f94ad5ca

+ 113 - 0
applications/functions/chatgpt.py

@@ -0,0 +1,113 @@
+"""
+@author: luojunhui
+"""
+import openai
+import requests
+
+
+class OpenAIServer(object):
+    """
+    openai 服务
+    """
+    openai.api_key = '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'
+    proxies = {
+        'http': 'http://localhost:1087',
+        'https': 'http://localhost:1087'
+    }
+    # 创建一个代理会话
+    session = requests.Session()
+    session.proxies.update(proxies)
+    headers = {
+        'Authorization': f'Bearer {openai.api_key}',
+        'Content-Type': 'application/json',
+    }
+
+    @classmethod
+    def prompt_generate(cls, prompt_type):
+        """
+        为具体的 task 生成 prompt
+        :param prompt_type:
+        :return:
+        """
+        if prompt_type == "title":
+            prompt = """
+                请将以上标题改写成适合小程序点击和传播的小程序标题,小程序标题的写作规范如下,请学习后进行小程序标题的编写。直接输出最终的小程序标题
+                小程序标题写作规范:
+                1.要点前置:将最重要的信息放在标题的最前面,以快速吸引读者的注意力。例如,“5月一辈子同学,三辈子亲,送给我的老同学,听哭无数人!”中的“5月”和“一辈子同学,三辈子亲”都是重要的信息点。
+                2.激发情绪:使用能够触动人心的语言,激发读者的情感共鸣。如“只剩两人同学聚会,看后感动落泪。”使用“感动落泪”激发读者的同情和怀旧情绪。
+                3.使用数字和特殊符号:数字可以提供具体性,而特殊符号如“🔴”、“😄”、“🔥”等可以吸引视觉注意力,增加点击率。
+                4.悬念和好奇心:创建悬念或提出问题,激发读者的好奇心。例如,“太神奇了!长江水位下降,重庆出现惊奇一幕!”中的“惊奇一幕”就是一个悬念。
+                5.名人效应:如果内容与知名人士相关,提及他们的名字可以增加标题的吸引力。
+                6.社会价值观:触及读者的文化和社会价值观,如家庭、友情、国家荣誉等。
+                7.标点符号的运用:使用感叹号、问号等标点来增强语气和情感表达。
+                8.直接的语言:使用直白、口语化的语言,易于理解,如“狗屁股,笑死我了!”。
+                9.热点人物或事件:提及当前的热点人物或事件,利用热点效应吸引读者。
+                10.字数适中:保持标题在10-20个字之间,既不过长也不过短,确保信息的完整性和吸引力。
+                11.适当的紧迫感:使用“最新”、“首次”、“紧急”等词汇,创造一种紧迫感,促使读者立即行动。
+                12.情感或价值诉求:使用如“感动”、“泪目”、“经典”等词汇,直接与读者的情感或价值观产生共鸣。
+                避免误导:确保标题准确反映内容,避免夸大或误导读者。
+            """
+        elif prompt_type == "text":
+            prompt = """
+                请从我给你的文章中挖掘出以下信息并且返回如下结果。
+                你返回的结果是一个 json, 格式如下:
+                {
+                    "content_keys": [] # 同时提供三个与文章内容高度相关的关键词,这些关键词将用于网络上搜索相关视频内容,
+                    "content_title": 一个总结性的标题,该标题应简洁并能够反映文章的主要内容
+                }
+                你需要处理的文本是:
+            """
+        else:
+            prompt = "用中文帮我回答以下问题"
+        return prompt
+
+    @classmethod
+    def gpt_mining(cls, text, prompt):
+        """
+        用 gpt 实现文本挖掘
+        :param prompt:
+        :param text:
+        :return:
+        """
+        response = cls.session.post(
+            url='https://api.openai.com/v1/chat/completions',
+            headers=cls.headers,
+            json={
+                'model': 'gpt-3.5-turbo',
+                'messages': [
+                    {'role': 'system', 'content': '你是一名优秀的中文工作者'},
+                    {'role': 'user', 'content': prompt + text},
+                ],
+            }
+        )
+        # 解析响应
+        if response.status_code == 200:
+            return response.json()['choices'][0]['message']['content']
+        else:
+            raise Exception(f"Request failed: {response.status_code} - {response.text}")
+
+    @classmethod
+    def gpt_deal(cls, params):
+        """
+        main 函数,处理 gpt 的事务逻辑
+        :return:
+        """
+        title = params['title'].split("@@")[-1]
+        contents = params['content']
+        trace_id = params['trace_id']
+        # 修改 title
+        title_response = cls.gpt_mining(
+            text=title,
+            prompt=cls.prompt_generate(
+                prompt_type="title"
+            )
+        )
+        print(title_response)
+        # 挖掘信息
+        article_response = cls.gpt_mining(
+            text=contents,
+            prompt=cls.prompt_generate(
+                prompt_type="text"
+            )
+        )
+        print(article_response)

+ 0 - 0
applications/match_alg/__init__.py → applications/match_algorithm/__init__.py


+ 1 - 1
applications/match_alg/rank.py → applications/match_algorithm/rank.py

@@ -1,7 +1,7 @@
 """
 @author: luojunhui
 """
-from applications.match_alg.recall import recall_videos
+from applications.match_algorithm.recall import recall_videos
 from applications.functions.log import logging
 
 

+ 0 - 0
applications/match_alg/recall.py → applications/match_algorithm/recall.py