Просмотр исходного кода

feat: knowledge base miss prefix

zhayujie 2 лет назад
Родитель
Сommit
a2160d135e
3 измененных файлов с 26 добавлено и 1 удалено
  1. 22 1
      bot/linkai/link_ai_bot.py
  2. 1 0
      plugins/godcmd/godcmd.py
  3. 3 0
      plugins/plugin.py

+ 22 - 1
bot/linkai/link_ai_bot.py

@@ -12,7 +12,7 @@ from bot.session_manager import SessionManager
 from bridge.context import Context, ContextType
 from bridge.reply import Reply, ReplyType
 from common.log import logger
-from config import conf
+from config import conf, pconf
 
 
 class LinkAIBot(Bot, OpenAIImage):
@@ -94,6 +94,9 @@ class LinkAIBot(Bot, OpenAIImage):
                 response = res.json()
                 reply_content = response["choices"][0]["message"]["content"]
                 total_tokens = response["usage"]["total_tokens"]
+                suffix = self._fecth_knowledge_search_suffix(response)
+                if suffix:
+                    reply_content += suffix
                 logger.info(f"[LINKAI] reply={reply_content}, total_tokens={total_tokens}")
                 self.sessions.session_reply(reply_content, session_id, total_tokens)
                 return Reply(ReplyType.TEXT, reply_content)
@@ -183,3 +186,21 @@ class LinkAIBot(Bot, OpenAIImage):
             time.sleep(2)
             logger.warn(f"[LINKAI] do retry, times={retry_count}")
             return self.reply_text(session, app_code, retry_count + 1)
+
+
+    def _fecth_knowledge_search_suffix(self, response) -> str:
+        try:
+            if response.get("knowledge_base"):
+                search_hit = response.get("knowledge_base").get("search_hit")
+                first_similarity = response.get("knowledge_base").get("first_similarity")
+                logger.info(f"[LINKAI] knowledge base, search_hit={search_hit}, first_similarity={first_similarity}")
+                plugin_config = pconf("linkai")
+                if plugin_config.get("knowledge_base"):
+                    search_miss_similarity = plugin_config.get("knowledge_base").get("search_miss_similarity")
+                    search_miss_text =  plugin_config.get("knowledge_base").get("search_miss_text")
+                    if not search_hit:
+                        return search_miss_text
+                    if search_miss_similarity and float(search_miss_similarity) > first_similarity:
+                        return search_miss_text
+        except Exception as e:
+            logger.exception(e)

+ 1 - 0
plugins/godcmd/godcmd.py

@@ -203,6 +203,7 @@ class Godcmd(Plugin):
 
         self.password = gconf["password"]
         self.admin_users = gconf["admin_users"]  # 预存的管理员账号,这些账号不需要认证。itchat的用户名每次都会变,不可用
+        global_config["admin_users"] = self.admin_users
         self.isrunning = True  # 机器人是否运行中
 
         self.handlers[Event.ON_HANDLE_CONTEXT] = self.on_handle_context

+ 3 - 0
plugins/plugin.py

@@ -21,6 +21,9 @@ class Plugin:
             if os.path.exists(plugin_config_path):
                 with open(plugin_config_path, "r", encoding="utf-8") as f:
                     plugin_conf = json.load(f)
+
+                # 写入全局配置内存
+                plugin_config[self.name] = plugin_conf
         logger.debug(f"loading plugin config, plugin_name={self.name}, conf={plugin_conf}")
         return plugin_conf