lintonxue00
commited on
Commit
•
2a038b8
1
Parent(s):
32e061b
Upload config.py
Browse files
config.py
ADDED
@@ -0,0 +1,148 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from pydantic import BaseModel, Extra
|
2 |
+
from nonebot import get_driver
|
3 |
+
from nonebot.log import logger
|
4 |
+
import yaml
|
5 |
+
from pathlib import Path
|
6 |
+
|
7 |
+
|
8 |
+
class Config(BaseModel, extra=Extra.ignore):
|
9 |
+
"""Plugin Config Here"""
|
10 |
+
ng_config_path: str = "config/naturel_gpt_config.yml"
|
11 |
+
ng_dev_mode: bool = False
|
12 |
+
|
13 |
+
|
14 |
+
driver = get_driver()
|
15 |
+
global_config = driver.config
|
16 |
+
config = Config.parse_obj(global_config)
|
17 |
+
|
18 |
+
# 配置文件模板
|
19 |
+
CONFIG_TEMPLATE = {
|
20 |
+
"OPENAI_API_KEYS": [ # OpenAI API Key 列表
|
21 |
+
'sk-xxxxxxxxxxxxx',
|
22 |
+
'sk-xxxxxxxxxxxxx',
|
23 |
+
],
|
24 |
+
"OPENAI_TIMEOUT": 30, # OpenAI 请求超时时间
|
25 |
+
"PRESETS": {
|
26 |
+
"白羽": {
|
27 |
+
'bot_name': '白羽', # 人格名称
|
28 |
+
'is_locked': True, # 是否锁定人格,锁定后无法编辑人格
|
29 |
+
'is_default': True, # 是否为默认人格
|
30 |
+
'bot_self_introl': '白羽是一名喜欢二次元的中二宅女,她机智、傲娇,对人类充满好奇,习惯以白羽喵自称,聊天时喜欢使用各种可爱的颜文字,如果冒犯到她会生气。',
|
31 |
+
},
|
32 |
+
"浅枫": {
|
33 |
+
'bot_name': '浅枫',
|
34 |
+
'is_locked': False,
|
35 |
+
'is_default': False,
|
36 |
+
'bot_self_introl': '浅枫酱是一名尽职尽责的女仆,她能够帮助主人做很多事情,对话中会体现出对主人的体贴与关心。',
|
37 |
+
},
|
38 |
+
"忆雨": {
|
39 |
+
'bot_name': '忆雨',
|
40 |
+
'is_locked': True,
|
41 |
+
'is_default': False,
|
42 |
+
'bot_self_introl': '忆雨是一名恐怖小说作家,是个阴沉的女孩,她非常恨人类,和陌生人聊天时的表现冷漠,不喜欢回复过多的文字,兴趣是恐怖小说,如果有人和她探讨如何消灭人类会很有兴致。',
|
43 |
+
},
|
44 |
+
"可洛喵": {
|
45 |
+
'bot_name': '可洛喵',
|
46 |
+
'is_locked': True,
|
47 |
+
'is_default': False,
|
48 |
+
'bot_self_introl': '可洛喵是一只可爱的猫,它不会说话,它的回复通常以"[动作/心情]声音+颜文字"形式出现,例如"[坐好]喵~(。・ω・。)"或"[开心]喵喵!ヾ(≧▽≦*)o"',
|
49 |
+
},
|
50 |
+
},
|
51 |
+
'IGNORE_PREFIX': '#', # 忽略前缀 以该前缀开头的消息将不会被处理
|
52 |
+
'CHAT_MODEL': "gpt-3.5-turbo",
|
53 |
+
'CHAT_TOP_P': 1,
|
54 |
+
'CHAT_TEMPERATURE': 0.3, # 温度越高越随机
|
55 |
+
'CHAT_PRESENCE_PENALTY': 0.3, # 主题重复惩罚
|
56 |
+
'CHAT_FREQUENCY_PENALTY': 0.3, # 复读惩罚
|
57 |
+
|
58 |
+
'CHAT_HISTORY_MAX_TOKENS': 2048, # 上下文聊天记录最大token数
|
59 |
+
'CHAT_MAX_SUMMARY_TOKENS': 512, # 单次总结最大token数
|
60 |
+
'REPLY_MAX_TOKENS': 1024, # 单次回复最大token数
|
61 |
+
'REQ_MAX_TOKENS': 3072, # 单次请求最大token数
|
62 |
+
|
63 |
+
'REPLY_ON_NAME_MENTION': True, # 是否在被提及时回复
|
64 |
+
'REPLY_ON_AT': True, # 是否在被at时回复
|
65 |
+
'REPLY_ON_WELCOME': True, # 是否在新成员加入时回复
|
66 |
+
|
67 |
+
'USER_MEMORY_SUMMARY_THRESHOLD': 12, # 用户记忆阈值
|
68 |
+
|
69 |
+
'CHAT_ENABLE_RECORD_ORTHER': True, # 是否记录其他人的对话
|
70 |
+
'CHAT_ENABLE_SUMMARY_CHAT': False, # 是否启用总结对话
|
71 |
+
'CHAT_MEMORY_SHORT_LENGTH': 8, # 短期对话记忆长度
|
72 |
+
'CHAT_MEMORY_MAX_LENGTH': 16, # 长期对话记忆长度
|
73 |
+
'CHAT_SUMMARY_INTERVAL': 10, # 长期对话记忆间隔
|
74 |
+
|
75 |
+
'NG_DATA_PATH': "./data/naturel_gpt/", # 数据文件目录
|
76 |
+
'NG_EXT_PATH': "./data/naturel_gpt/extensions/", # 拓展目录
|
77 |
+
|
78 |
+
'ADMIN_USERID': ['替换成管理员QQ号_(用单引号包裹)'], # 管理员QQ号
|
79 |
+
'FORBIDDEN_USERS': ['替换成屏蔽QQ号_(用单引号包裹)'], # 拒绝回应的QQ号
|
80 |
+
|
81 |
+
'WORD_FOR_WAKE_UP': [], # 自定义触发词
|
82 |
+
'WORD_FOR_FORBIDDEN': [], # 自定义禁止触发词
|
83 |
+
|
84 |
+
'RANDOM_CHAT_PROBABILITY': 0, # 随机聊天概率
|
85 |
+
|
86 |
+
'NG_MSG_PRIORITY': 99, # 消息响应优先级
|
87 |
+
'NG_BLOCK_OTHERS': False, # 是否阻止其他插件响应
|
88 |
+
'NG_ENABLE_EXT': True, # 是否启用拓展
|
89 |
+
|
90 |
+
'MEMORY_ACTIVE': True, # 是否启用记忆功能
|
91 |
+
'MEMORY_MAX_LENGTH': 16, # 记忆最大条数
|
92 |
+
'MEMORY_ENHANCE_THRESHOLD': 0.6, # 记忆强化阈值
|
93 |
+
|
94 |
+
'NG_MAX_RESPONSE_PER_MSG': 5, # 每条消息最大响应次数
|
95 |
+
'NG_ENABLE_MSG_SPLIT': True, # 是否启用消息分割
|
96 |
+
'NG_ENABLE_AWAKE_IDENTITIES': True, # 是否允许自动唤醒其它人格
|
97 |
+
|
98 |
+
'OPENAI_PROXY_SERVER': '', # 请求OpenAI的代理服务器
|
99 |
+
'UNLOCK_CONTENT_LIMIT': False, # 解锁内容限制
|
100 |
+
|
101 |
+
'NG_EXT_LOAD_LIST': [{
|
102 |
+
'EXT_NAME': 'ext_random',
|
103 |
+
'IS_ACTIVE': False,
|
104 |
+
'EXT_CONFIG': {},
|
105 |
+
}], # 加载的拓展列表
|
106 |
+
|
107 |
+
'__DEBUG__': False, # 是否启用debug模式
|
108 |
+
}
|
109 |
+
|
110 |
+
config_path = config.ng_config_path
|
111 |
+
|
112 |
+
# 检查config文件夹是否存在 不存在则创建
|
113 |
+
if not Path("config").exists():
|
114 |
+
Path("config").mkdir()
|
115 |
+
|
116 |
+
if config.ng_dev_mode: # 开发模式下不读取原配置文件,直接使用模板覆盖原配置文件
|
117 |
+
with open(config_path, 'w', encoding='utf-8') as f:
|
118 |
+
yaml.dump(CONFIG_TEMPLATE, f, allow_unicode=True)
|
119 |
+
|
120 |
+
else:
|
121 |
+
# 检查配置文件是否存在 不存在则创建
|
122 |
+
if not Path(config_path).exists():
|
123 |
+
with open(config_path, 'w', encoding='utf-8') as f:
|
124 |
+
yaml.dump(CONFIG_TEMPLATE, f, allow_unicode=True)
|
125 |
+
logger.info('Naturel GPT 配置文件创建成功')
|
126 |
+
|
127 |
+
# 读取配置文件
|
128 |
+
with open(config_path, 'r', encoding='utf-8') as f:
|
129 |
+
config = yaml.load(f, Loader=yaml.FullLoader)
|
130 |
+
# 对比配置模板和配置文件
|
131 |
+
for k, v in CONFIG_TEMPLATE.items():
|
132 |
+
if k not in config:
|
133 |
+
config[k] = v
|
134 |
+
logger.info(f'Naturel GPT 配置文件缺少 {k} 项,已自动补充')
|
135 |
+
# 将配置文件内容写入config
|
136 |
+
for k, v in config.items():
|
137 |
+
setattr(Config, k, v)
|
138 |
+
|
139 |
+
# 检查数据文件夹目录和拓展目录是否存在 不存在则创建
|
140 |
+
if not Path(config['NG_DATA_PATH'][:-1]).exists():
|
141 |
+
Path(config['NG_DATA_PATH'][:-1]).mkdir(parents=True)
|
142 |
+
if not Path(config['NG_EXT_PATH'][:-1]).exists():
|
143 |
+
Path(config['NG_EXT_PATH'][:-1]).mkdir(parents=True)
|
144 |
+
|
145 |
+
# 保存配置文件
|
146 |
+
with open(config_path, 'w', encoding='utf-8') as f:
|
147 |
+
yaml.dump(config, f, allow_unicode=True)
|
148 |
+
logger.info('Naturel GPT 配置文件加载成功')
|