feat: 后台一键刷新飞书缓存
- feishu_service.py: FeishuKnowledgeService 新增 clear_cache() 方法 - admin_settings.py: 新增 POST /admin/feishu/cache/clear API - api.ts: 前端封装 clearFeishuCache API - App.vue: Agent管理页面新增'刷新飞书缓存'按钮 管理员更新飞书文档后,点击按钮即可清空服务端内存缓存, 客户端下次提问时会重新读取最新内容。
This commit is contained in:
@@ -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() {
|
async function searchChats() {
|
||||||
chats.value = await api.chats(buildChatQuery());
|
chats.value = await api.chats(buildChatQuery());
|
||||||
}
|
}
|
||||||
@@ -1163,6 +1172,7 @@ function buildChatQuery() {
|
|||||||
<div class="actions">
|
<div class="actions">
|
||||||
<el-button type="primary" @click="savePrompt">保存 Agent 提示词</el-button>
|
<el-button type="primary" @click="savePrompt">保存 Agent 提示词</el-button>
|
||||||
<el-button @click="clearAgentPreview">清空预览</el-button>
|
<el-button @click="clearAgentPreview">清空预览</el-button>
|
||||||
|
<el-button type="warning" @click="clearFeishuCache">刷新飞书缓存</el-button>
|
||||||
</div>
|
</div>
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -135,4 +135,6 @@ export const api = {
|
|||||||
aiLogs: (query: { sessionId?: number; userId?: number; status?: string } = {}) =>
|
aiLogs: (query: { sessionId?: number; userId?: number; status?: string } = {}) =>
|
||||||
request<AiLogRecord[]>(`/admin/ai-log/list${queryString(query)}`),
|
request<AiLogRecord[]>(`/admin/ai-log/list${queryString(query)}`),
|
||||||
operationLogs: () => request<Record<string, unknown>[]>("/admin/log/list"),
|
operationLogs: () => request<Record<string, unknown>[]>("/admin/log/list"),
|
||||||
|
clearFeishuCache: () =>
|
||||||
|
request<{ cleared: number; message: string }>("/admin/feishu/cache/clear", { method: "POST", body: "{}" }),
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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()}"
|
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:
|
def _config_dict(config: SystemConfig) -> dict:
|
||||||
return {
|
return {
|
||||||
"id": config.id,
|
"id": config.id,
|
||||||
|
|||||||
@@ -323,6 +323,13 @@ class FeishuKnowledgeService:
|
|||||||
_content_cache: dict[str, tuple[str, float]] = {}
|
_content_cache: dict[str, tuple[str, float]] = {}
|
||||||
_CACHE_TTL = 300 # 缓存 5 分钟
|
_CACHE_TTL = 300 # 缓存 5 分钟
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def clear_cache(cls) -> int:
|
||||||
|
"""清空所有飞书内容缓存,返回被清除的条目数"""
|
||||||
|
count = len(cls._content_cache)
|
||||||
|
cls._content_cache.clear()
|
||||||
|
return count
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def retrieve(
|
def retrieve(
|
||||||
cls,
|
cls,
|
||||||
|
|||||||
Reference in New Issue
Block a user