diff --git a/README.md b/README.md index 5f31afe..55b63e1 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,6 @@ cp config-template.json config.json 在使用时只需要更改 model 和 channel 配置块下的 type 字段,即可在任意模型和应用间完成切换,连接不同的通路。下面将依次介绍各个 模型 及 应用 的配置和运行过程。 - ## 二、选择模型 ### 1. ChatGPT @@ -114,6 +113,7 @@ pip3 install --upgrade openai + `model`: 模型名称,目前支持填入 `gpt-3.5-turbo`, `gpt-4`, `gpt-4-32k` (其中gpt-4 api暂未开放) + `proxy`: 代理客户端的地址,详情参考 [#56](https://github.com/zhayujie/bot-on-anything/issues/56) + `character_desc`: 配置中保存着你对chatgpt说的一段话,他会记住这段话并作为他的设定,你可以为他定制任何人格 + + `max_history_num`[optional]: 对话最大记忆长度,超过该长度则清理前面的记忆。 ### 2.GPT-3.0 @@ -485,3 +485,9 @@ pip3 install PyJWT flask 本地运行:`python3 app.py`运行后访问 `http://127.0.0.1:80` 服务器运行:部署后访问 `http://公网域名或IP:端口` + + +### 通用配置 + ++ `clear_memory_commands`: 对话内指令,主动清空前文记忆,字符串数组可自定义指令别名。 + + default: ["#清除记忆"] diff --git a/config-template.json b/config-template.json index 481b905..c6b31c9 100644 --- a/config-template.json +++ b/config-template.json @@ -57,5 +57,8 @@ "http_auth_password": "6.67428e-11", "port": "80" } + }, + "common": { + "clear_memory_commands": ["#清除记忆"] } } diff --git a/config.py b/config.py index 6ae2c95..3c9ab17 100644 --- a/config.py +++ b/config.py @@ -52,3 +52,12 @@ def channel_conf_val(channel_type, key, default=None): # common default config return config.get('channel').get(key, default) return val + + +def common_conf(): + return config.get('common') + + +def common_conf_val(key, default=None): + return config.get('common').get(key, default) + diff --git a/model/openai/chatgpt_model.py b/model/openai/chatgpt_model.py index 2bae160..9880888 100644 --- a/model/openai/chatgpt_model.py +++ b/model/openai/chatgpt_model.py @@ -1,7 +1,7 @@ # encoding:utf-8 from model.model import Model -from config import model_conf +from config import model_conf, common_conf_val from common import const from common import log import openai @@ -22,7 +22,8 @@ class ChatGPTModel(Model): if not context or not context.get('type') or context.get('type') == 'TEXT': log.info("[CHATGPT] query={}".format(query)) from_user_id = context['from_user_id'] - if query == '#清除记忆': + clear_memory_commands = common_conf_val('clear_memory_commands', ['#清除记忆']) + if query in clear_memory_commands: Session.clear_session(from_user_id) return '记忆已清除' @@ -195,6 +196,7 @@ class Session(object): @staticmethod def save_session(query, answer, user_id, used_tokens=0): max_tokens = model_conf(const.OPEN_AI).get('conversation_max_tokens') + max_history_num = model_conf(const.OPEN_AI).get('max_history_num', None) if not max_tokens or max_tokens > 4000: # default value max_tokens = 1000 @@ -209,6 +211,11 @@ class Session(object): session.pop(1) session.pop(1) + if max_history_num is not None: + while len(session) > max_history_num * 2 + 1: + session.pop(1) + session.pop(1) + @staticmethod def clear_session(user_id): user_session[user_id] = [] diff --git a/model/openai/open_ai_model.py b/model/openai/open_ai_model.py index e9819dc..21a77c9 100644 --- a/model/openai/open_ai_model.py +++ b/model/openai/open_ai_model.py @@ -1,7 +1,7 @@ # encoding:utf-8 from model.model import Model -from config import model_conf +from config import model_conf, common_conf_val from common import const from common import log import openai @@ -20,7 +20,8 @@ class OpenAIModel(Model): if not context or not context.get('type') or context.get('type') == 'TEXT': log.info("[OPEN_AI] query={}".format(query)) from_user_id = context['from_user_id'] - if query == '#清除记忆': + clear_memory_commands = common_conf_val('clear_memory_commands', ['#清除记忆']) + if query in clear_memory_commands: Session.clear_session(from_user_id) return '记忆已清除'