From 51c2159b8c4540565b463f0ac2c5c02169372804 Mon Sep 17 00:00:00 2001 From: Wenjie Zhang Date: Wed, 25 Mar 2026 20:46:57 +0800 Subject: [PATCH] =?UTF-8?q?fix(LightRagKB):=20=E4=BF=AE=E5=A4=8D=E7=9F=A5?= =?UTF-8?q?=E8=AF=86=E5=BA=93=E9=85=8D=E7=BD=AE=E6=9B=B4=E6=96=B0=E5=90=8E?= =?UTF-8?q?=EF=BC=8C=E5=AE=9E=E4=BE=8B=E6=B2=A1=E6=9C=89=E9=94=80=E6=AF=81?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E7=9A=84=E6=A8=A1=E5=9E=8B=E6=9C=AA=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=20Fixes:=20#580?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../knowledge/implementations/lightrag.py | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/backend/package/yuxi/knowledge/implementations/lightrag.py b/backend/package/yuxi/knowledge/implementations/lightrag.py index b09fb535..c3d8ef5b 100644 --- a/backend/package/yuxi/knowledge/implementations/lightrag.py +++ b/backend/package/yuxi/knowledge/implementations/lightrag.py @@ -105,6 +105,30 @@ class LightRagKB(KnowledgeBase): # Delete local files and metadata return super().delete_database(db_id) + def update_database(self, db_id: str, name: str, description: str, llm_info: dict = None) -> dict: + """ + 更新数据库配置 + + 当 llm_info 改变时,清除缓存的 LightRAG 实例,确保下次使用时使用新模型创建实例 + """ + if db_id not in self.databases_meta: + raise ValueError(f"数据库 {db_id} 不存在") + + # 检查 llm_info 是否发生变化 + old_llm_info = self.databases_meta[db_id].get("llm_info", {}) + llm_info_changed = llm_info is not None and llm_info != old_llm_info + logger.warning(f"old_llm_info: {old_llm_info}, new_llm_info: {llm_info}, llm_info_changed: {llm_info_changed}") + + # 调用父类方法更新基本信息 + result = super().update_database(db_id, name, description, llm_info) + + # 如果 llm_info 发生变化,清除缓存的实例,确保下次使用新模型 + if llm_info_changed and db_id in self.instances: + logger.info(f"LLM model changed, invalidating cached LightRAG instance for {db_id}") + del self.instances[db_id] + + return result + async def _create_kb_instance(self, db_id: str, kb_config: dict) -> LightRAG: """创建 LightRAG 实例""" logger.info(f"Creating LightRAG instance for {db_id}") @@ -167,6 +191,7 @@ class LightRagKB(KnowledgeBase): async def _get_lightrag_instance(self, db_id: str) -> LightRAG | None: """获取或创建 LightRAG 实例""" if db_id in self.instances: + logger.info(f"Using cached LightRAG instance for {db_id}") return self.instances[db_id] if db_id not in self.databases_meta: