|
@@ -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)
|