mirror of
https://github.com/d0zingcat/MoviePilot-Plugins.git
synced 2026-05-13 15:09:12 +00:00
ChatGPT:支持自定义辅助识别提示词
This commit is contained in:
@@ -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": "修复通知异常",
|
||||
|
||||
@@ -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
|
||||
@@ -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对象 所以需要进行提取
|
||||
|
||||
Reference in New Issue
Block a user