From 5ad53c2b9caa21889434e4629fb2cb98a86cf170 Mon Sep 17 00:00:00 2001 From: zhayujie Date: Thu, 16 Nov 2023 10:54:24 +0800 Subject: [PATCH] fix: reduce error noise when converting speech to text --- bot/linkai/link_ai_bot.py | 6 +++--- bridge/bridge.py | 2 +- common/const.py | 1 + config-template.json | 2 +- plugins/godcmd/godcmd.py | 6 ++++-- voice/linkai/linkai_voice.py | 15 +++++++++------ 6 files changed, 19 insertions(+), 13 deletions(-) diff --git a/bot/linkai/link_ai_bot.py b/bot/linkai/link_ai_bot.py index 3788c6b..5df89eb 100644 --- a/bot/linkai/link_ai_bot.py +++ b/bot/linkai/link_ai_bot.py @@ -47,10 +47,10 @@ class LinkAIBot(Bot): :param retry_count: 当前递归重试次数 :return: 回复 """ - if retry_count >= 2: + if retry_count > 2: # exit from retry 2 times logger.warn("[LINKAI] failed after maximum number of retry times") - return Reply(ReplyType.ERROR, "请再问我一次吧") + return Reply(ReplyType.TEXT, "请再问我一次吧") try: # load config @@ -118,7 +118,7 @@ class LinkAIBot(Bot): logger.warn(f"[LINKAI] do retry, times={retry_count}") return self._chat(query, context, retry_count + 1) - return Reply(ReplyType.ERROR, "提问太快啦,请休息一下再问我吧") + return Reply(ReplyType.TEXT, "提问太快啦,请休息一下再问我吧") except Exception as e: logger.exception(e) diff --git a/bridge/bridge.py b/bridge/bridge.py index bceca10..ba6e568 100644 --- a/bridge/bridge.py +++ b/bridge/bridge.py @@ -18,7 +18,7 @@ class Bridge(object): "text_to_voice": conf().get("text_to_voice", "google"), "translate": conf().get("translate", "baidu"), } - model_type = conf().get("model") + model_type = conf().get("model") or const.GPT35 if model_type in ["text-davinci-003"]: self.btype["chat"] = const.OPEN_AI if conf().get("use_azure_chatgpt", False): diff --git a/common/const.py b/common/const.py index 6c790f7..a46765e 100644 --- a/common/const.py +++ b/common/const.py @@ -8,6 +8,7 @@ LINKAI = "linkai" CLAUDEAI = "claude" # model +GPT35 = "gpt-3.5-turbo" GPT4 = "gpt-4" GPT4_TURBO_PREVIEW = "gpt-4-1106-preview" GPT4_VISION_PREVIEW = "gpt-4-vision-preview" diff --git a/config-template.json b/config-template.json index f18f83b..597245e 100644 --- a/config-template.json +++ b/config-template.json @@ -29,7 +29,7 @@ "group_speech_recognition": false, "voice_reply_voice": false, "tts_voice_id": "alloy", - "conversation_max_tokens": 1000, + "conversation_max_tokens": 2500, "expires_in_seconds": 3600, "character_desc": "你是ChatGPT, 一个由OpenAI训练的大型语言模型, 你旨在回答并解决人们的任何问题,并且可以使用多种语言与人交流。", "temperature": 0.7, diff --git a/plugins/godcmd/godcmd.py b/plugins/godcmd/godcmd.py index e1c47c8..03a96bd 100644 --- a/plugins/godcmd/godcmd.py +++ b/plugins/godcmd/godcmd.py @@ -266,14 +266,16 @@ class Godcmd(Plugin): if not isadmin and not self.is_admin_in_group(e_context["context"]): ok, result = False, "需要管理员权限执行" elif len(args) == 0: - ok, result = True, "当前模型为: " + str(conf().get("model")) + model = conf().get("model") or const.GPT35 + ok, result = True, "当前模型为: " + str(model) elif len(args) == 1: if args[0] not in const.MODEL_LIST: ok, result = False, "模型名称不存在" else: conf()["model"] = self.model_mapping(args[0]) Bridge().reset_bot() - ok, result = True, "模型设置为: " + str(conf().get("model")) + model = conf().get("model") or const.GPT35 + ok, result = True, "模型设置为: " + str(model) elif cmd == "id": ok, result = True, user elif cmd == "set_openai_api_key": diff --git a/voice/linkai/linkai_voice.py b/voice/linkai/linkai_voice.py index 7dc420c..c42b804 100644 --- a/voice/linkai/linkai_voice.py +++ b/voice/linkai/linkai_voice.py @@ -25,9 +25,12 @@ class LinkAIVoice(Voice): if not conf().get("text_to_voice") or conf().get("voice_to_text") == "openai": model = const.WHISPER_1 if voice_file.endswith(".amr"): - mp3_file = os.path.splitext(voice_file)[0] + ".mp3" - audio_convert.any_to_mp3(voice_file, mp3_file) - voice_file = mp3_file + try: + mp3_file = os.path.splitext(voice_file)[0] + ".mp3" + audio_convert.any_to_mp3(voice_file, mp3_file) + voice_file = mp3_file + except Exception as e: + logger.warn(f"[LinkVoice] amr file transfer failed, directly send amr voice file: {format(e)}") file = open(voice_file, "rb") file_body = { "file": file @@ -46,7 +49,7 @@ class LinkAIVoice(Voice): logger.info(f"[LinkVoice] voiceToText success, text={text}, file name={voice_file}") except Exception as e: logger.error(e) - reply = Reply(ReplyType.ERROR, "我暂时还无法听清您的语音,请稍后再试吧~") + return None return reply def textToVoice(self, text): @@ -75,5 +78,5 @@ class LinkAIVoice(Voice): return None except Exception as e: logger.error(e) - reply = Reply(ReplyType.ERROR, "遇到了一点小问题,请稍后再问我吧") - return reply + # reply = Reply(ReplyType.ERROR, "遇到了一点小问题,请稍后再问我吧") + return None