From 5dfff52b0446305250407d9c63b7a3e1d87e5a4c Mon Sep 17 00:00:00 2001
From: Nelson <1475262689@qq.com>
Date: Wed, 8 Jul 2026 17:57:26 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E5=90=8E=E5=8F=B0=E4=B8=80=E9=94=AE?=
=?UTF-8?q?=E5=88=B7=E6=96=B0=E9=A3=9E=E4=B9=A6=E7=BC=93=E5=AD=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- feishu_service.py: FeishuKnowledgeService 新增 clear_cache() 方法
- admin_settings.py: 新增 POST /admin/feishu/cache/clear API
- api.ts: 前端封装 clearFeishuCache API
- App.vue: Agent管理页面新增'刷新飞书缓存'按钮
管理员更新飞书文档后,点击按钮即可清空服务端内存缓存,
客户端下次提问时会重新读取最新内容。
---
ai_knowledge_base_v2/apps/admin-web/src/App.vue | 10 ++++++++++
.../apps/admin-web/src/services/api.ts | 2 ++
.../apps/backend/app/api/admin_settings.py | 6 ++++++
.../apps/backend/app/services/feishu_service.py | 7 +++++++
4 files changed, 25 insertions(+)
diff --git a/ai_knowledge_base_v2/apps/admin-web/src/App.vue b/ai_knowledge_base_v2/apps/admin-web/src/App.vue
index 95e17ae..af5c15b 100644
--- a/ai_knowledge_base_v2/apps/admin-web/src/App.vue
+++ b/ai_knowledge_base_v2/apps/admin-web/src/App.vue
@@ -912,6 +912,15 @@ function clearAgentPreview() {
];
}
+async function clearFeishuCache() {
+ try {
+ const result = await api.clearFeishuCache();
+ ElMessage.success(result.message || `已清空 ${result.cleared} 条缓存`);
+ } catch (e: any) {
+ ElMessage.error(e.message || "刷新缓存失败");
+ }
+}
+
async function searchChats() {
chats.value = await api.chats(buildChatQuery());
}
@@ -1163,6 +1172,7 @@ function buildChatQuery() {
保存 Agent 提示词
清空预览
+ 刷新飞书缓存
diff --git a/ai_knowledge_base_v2/apps/admin-web/src/services/api.ts b/ai_knowledge_base_v2/apps/admin-web/src/services/api.ts
index 35c1f35..5b71cd1 100644
--- a/ai_knowledge_base_v2/apps/admin-web/src/services/api.ts
+++ b/ai_knowledge_base_v2/apps/admin-web/src/services/api.ts
@@ -135,4 +135,6 @@ export const api = {
aiLogs: (query: { sessionId?: number; userId?: number; status?: string } = {}) =>
request(`/admin/ai-log/list${queryString(query)}`),
operationLogs: () => request[]>("/admin/log/list"),
+ clearFeishuCache: () =>
+ request<{ cleared: number; message: string }>("/admin/feishu/cache/clear", { method: "POST", body: "{}" }),
};
diff --git a/ai_knowledge_base_v2/apps/backend/app/api/admin_settings.py b/ai_knowledge_base_v2/apps/backend/app/api/admin_settings.py
index 76577d6..d961c47 100644
--- a/ai_knowledge_base_v2/apps/backend/app/api/admin_settings.py
+++ b/ai_knowledge_base_v2/apps/backend/app/api/admin_settings.py
@@ -302,6 +302,12 @@ def _build_agent_debug_prompt(prompt_content: str, question: str, chunks: list)
return f"{prompt_content.strip()}\n\n{context}\n\n用户问题:{question.strip()}"
+@router.post("/feishu/cache/clear")
+def clear_feishu_cache(current_admin: Admin = Depends(get_current_admin)) -> dict:
+ count = FeishuKnowledgeService.clear_cache()
+ return api_success({"cleared": count, "message": f"已清空 {count} 条飞书缓存"})
+
+
def _config_dict(config: SystemConfig) -> dict:
return {
"id": config.id,
diff --git a/ai_knowledge_base_v2/apps/backend/app/services/feishu_service.py b/ai_knowledge_base_v2/apps/backend/app/services/feishu_service.py
index b3f1c45..97bc509 100644
--- a/ai_knowledge_base_v2/apps/backend/app/services/feishu_service.py
+++ b/ai_knowledge_base_v2/apps/backend/app/services/feishu_service.py
@@ -323,6 +323,13 @@ class FeishuKnowledgeService:
_content_cache: dict[str, tuple[str, float]] = {}
_CACHE_TTL = 300 # 缓存 5 分钟
+ @classmethod
+ def clear_cache(cls) -> int:
+ """清空所有飞书内容缓存,返回被清除的条目数"""
+ count = len(cls._content_cache)
+ cls._content_cache.clear()
+ return count
+
@classmethod
def retrieve(
cls,