fix: 修复知识库检索配置多次保存卡死的问题

知识库检索配置保存接口(update_knowledge_base_query_params)在持有
metadata_lock 的同时调用了 _save_metadata(),该方法会遍历所有知识库
和所有文件并逐条执行数据库操作。当知识库数据量较大时,锁持有时间过长,
导致多次快速保存请求排队阻塞,表现为前端卡死。

修复方案:将全量 _save_metadata() 替换为针对性的单条记录更新,仅更新
当前知识库的 query_params 字段,大幅减少锁持有时间和数据库操作次数。

Fixes #679
This commit is contained in:
Cao Hanzhe 2026-05-08 22:58:55 +08:00
parent bb8897ce28
commit 29c9396b54

View File

@ -959,9 +959,15 @@ async def update_knowledge_base_query_params(
options = kb_instance.databases_meta[db_id]["query_params"].setdefault("options", {}) options = kb_instance.databases_meta[db_id]["query_params"].setdefault("options", {})
options.update(params) 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} return {"message": "success", "data": params}