From a87a31c6d8d19660fd277caf4e2c5538e9c0828e Mon Sep 17 00:00:00 2001 From: qiaoyun680 <549653222@qq.com> Date: Thu, 22 May 2025 08:45:09 +0800 Subject: [PATCH] =?UTF-8?q?ChatGPT=EF=BC=9A=E6=94=AF=E6=8C=81=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E8=BE=85=E5=8A=A9=E8=AF=86=E5=88=AB=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E8=AF=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.v2.json | 3 ++- plugins.v2/chatgpt/__init__.py | 37 +++++++++++++++++++++++++++++----- plugins.v2/chatgpt/openai.py | 9 ++++++--- 3 files changed, 40 insertions(+), 9 deletions(-) diff --git a/package.v2.json b/package.v2.json index 88c0d3a..136c22f 100644 --- a/package.v2.json +++ b/package.v2.json @@ -94,11 +94,12 @@ "name": "ChatGPT", "description": "消息交互支持与ChatGPT对话。", "labels": "消息通知,识别", - "version": "2.1.5", + "version": "2.1.6", "icon": "Chatgpt_A.png", "author": "jxxghp", "level": 1, "history": { + "v2.1.6": "支持自定义辅助识别提示词", "v2.1.5": "兼容一些模型返回json数据信息用markdown语法包裹的情况", "v2.1.4": "不处理http链接", "v2.1.3": "修复通知异常", diff --git a/plugins.v2/chatgpt/__init__.py b/plugins.v2/chatgpt/__init__.py index 1bf0192..1b2d7ac 100644 --- a/plugins.v2/chatgpt/__init__.py +++ b/plugins.v2/chatgpt/__init__.py @@ -17,7 +17,7 @@ class ChatGPT(_PluginBase): # 插件图标 plugin_icon = "Chatgpt_A.png" # 插件版本 - plugin_version = "2.1.5" + plugin_version = "2.1.6" # 插件作者 plugin_author = "jxxghp" # 作者主页 @@ -46,6 +46,8 @@ class ChatGPT(_PluginBase): _key_status = {} # 是否发送通知 _notify = False + # 自定义提示词 + _customize_prompt = '接下来我会给你一个电影或电视剧的文件名,你需要识别文件名中的名称、版本、分段、年份、分瓣率、季集等信息,并按以下JSON格式返回:{"name":string,"version":string,"part":string,"year":string,"resolution":string,"season":number|null,"episode":number|null},特别注意返回结果需要严格附合JSON格式,不需要有任何其它的字符。如果中文电影或电视剧的文件名中存在谐音字或字母替代的情况,请还原最有可能的结果。' def init_plugin(self, config: dict = None): if config: @@ -57,7 +59,7 @@ class ChatGPT(_PluginBase): self._openai_key = config.get("openai_key") self._model = config.get("model") self._notify = config.get("notify") - + self._customize_prompt = config.get("customize_prompt") # 处理多个API密钥 if self._openai_key: self._api_keys = [key.strip() for key in self._openai_key.split(',') if key.strip()] @@ -77,7 +79,7 @@ class ChatGPT(_PluginBase): if self._openai_url and api_key: self.openai = OpenAi(api_key=api_key, api_url=self._openai_url, proxy=settings.PROXY if self._proxy else None, - model=self._model, compatible=bool(self._compatible)) + model=self._model, compatible=bool(self._compatible), customize_prompt=self._customize_prompt) logger.info(f"ChatGPT插件初始化API客户端成功") return True return False @@ -270,6 +272,29 @@ class ChatGPT(_PluginBase): } ] }, + { + 'component': 'VRow', + 'content': [ + { + 'component': 'VCol', + 'props': {'cols': 12}, + 'content': [ + { + 'component': 'VTextarea', + 'props': { + 'rows': 2, + 'auto-grow': True, + 'model': 'customize_prompt', + 'label': '辅助识别提示词', + 'hint': '在辅助识别时的给AI的提示词', + 'clearable': True, + 'persistent-hint': True, + } + } + ] + } + ] + }, { 'component': 'VRow', 'content': [ @@ -304,7 +329,9 @@ class ChatGPT(_PluginBase): "notify": False, "openai_url": "https://api.openai.com", "openai_key": "", - "model": "gpt-3.5-turbo" + "model": "gpt-3.5-turbo", + "customize_prompt": '接下来我会给你一个电影或电视剧的文件名,你需要识别文件名中的名称、版本、分段、年份、分瓣率、季集等信息,并按以下JSON格式返回:{"name":string, ' + '"version":string,"part":string,"year":string,"resolution":string,"season":number|null,"episode":number|null},特别注意返回结果需要严格附合JSON格式,不需要有任何其它的字符。如果中文电影或电视剧的文件名中存在谐音字或字母替代的情况,请还原最有可能的结果。' } def get_page(self) -> List[dict]: @@ -459,4 +486,4 @@ class ChatGPT(_PluginBase): """ 退出插件 """ - pass + pass \ No newline at end of file diff --git a/plugins.v2/chatgpt/openai.py b/plugins.v2/chatgpt/openai.py index ff3a3e6..b05c1b1 100644 --- a/plugins.v2/chatgpt/openai.py +++ b/plugins.v2/chatgpt/openai.py @@ -13,8 +13,10 @@ class OpenAi: _api_key: str = None _api_url: str = None _model: str = "gpt-3.5-turbo" + _prompt: str = '接下来我会给你一个电影或电视剧的文件名,你需要识别文件名中的名称、版本、分段、年份、分瓣率、季集等信息,并按以下JSON格式返回:{"name":string,"version":string,"part":string,"year":string,"resolution":string,"season":number|null,"episode":number|null},特别注意返回结果需要严格附合JSON格式,不需要有任何其它的字符。如果中文电影或电视剧的文件名中存在谐音字或字母替代的情况,请还原最有可能的结果。' - def __init__(self, api_key: str = None, api_url: str = None, proxy: dict = None, model: str = None, compatible: bool = False): + def __init__(self, api_key: str = None, api_url: str = None, proxy: dict = None, model: str = None, compatible: + bool = False, customize_prompt: str = None): self._api_key = api_key self._api_url = api_url if compatible: @@ -26,7 +28,8 @@ class OpenAi: openai.proxy = proxy.get("https") if model: self._model = model - + if customize_prompt: + self._prompt = customize_prompt def get_state(self) -> bool: return True if self._api_key else False @@ -125,7 +128,7 @@ class OpenAi: return None result = "" try: - _filename_prompt = '接下来我会给你一个电影或电视剧的文件名,你需要识别文件名中的名称、版本、分段、年份、分瓣率、季集等信息,并按以下JSON格式返回:{"name":string,"version":string,"part":string,"year":string,"resolution":string,"season":number|null,"episode":number|null},特别注意返回结果需要严格附合JSON格式,不需要有任何其它的字符。如果中文电影或电视剧的文件名中存在谐音字或字母替代的情况,请还原最有可能的结果。' + _filename_prompt = self._prompt completion = self.__get_model(prompt=_filename_prompt, message=filename) result = completion.choices[0].message.content # 有些模型返回json数据时会使用 ```json ``` 包裹json对象 所以需要进行提取