From 29c9396b5413e444bc37f059e7a5c665f1089ca7 Mon Sep 17 00:00:00 2001 From: Cao Hanzhe Date: Fri, 8 May 2026 22:58:55 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=9F=A5=E8=AF=86?= =?UTF-8?q?=E5=BA=93=E6=A3=80=E7=B4=A2=E9=85=8D=E7=BD=AE=E5=A4=9A=E6=AC=A1?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E5=8D=A1=E6=AD=BB=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 知识库检索配置保存接口(update_knowledge_base_query_params)在持有 metadata_lock 的同时调用了 _save_metadata(),该方法会遍历所有知识库 和所有文件并逐条执行数据库操作。当知识库数据量较大时,锁持有时间过长, 导致多次快速保存请求排队阻塞,表现为前端卡死。 修复方案:将全量 _save_metadata() 替换为针对性的单条记录更新,仅更新 当前知识库的 query_params 字段,大幅减少锁持有时间和数据库操作次数。 Fixes #679 --- backend/server/routers/knowledge_router.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/backend/server/routers/knowledge_router.py b/backend/server/routers/knowledge_router.py index 8b734297..527d567c 100644 --- a/backend/server/routers/knowledge_router.py +++ b/backend/server/routers/knowledge_router.py @@ -959,9 +959,15 @@ async def update_knowledge_base_query_params( options = kb_instance.databases_meta[db_id]["query_params"].setdefault("options", {}) options.update(params) - await kb_instance._save_metadata() + updated_query_params = kb_instance.databases_meta[db_id]["query_params"] - logger.info(f"更新知识库 {db_id} 查询参数: {params}") + # 直接通过 Repository 更新单条记录,避免调用 _save_metadata() 遍历所有数据库和文件 + from yuxi.repositories.knowledge_base_repository import KnowledgeBaseRepository + + kb_repo = KnowledgeBaseRepository() + await kb_repo.update(db_id, {"query_params": updated_query_params}) + + logger.info(f"更新知识库 {db_id} 查询参数: {params}") return {"message": "success", "data": params}