From a9d2f41e4312b2bab1e6dd72b8db7c9f1861f678 Mon Sep 17 00:00:00 2001 From: Wenjie Zhang Date: Sun, 21 Dec 2025 16:23:19 +0800 Subject: [PATCH] =?UTF-8?q?fix(agent):=20=E4=BF=AE=E5=A4=8D=E6=99=BA?= =?UTF-8?q?=E8=83=BD=E4=BD=93=E9=87=8D=E5=A4=8D=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E5=92=8C=E5=B7=A5=E5=85=B7=E9=87=8D=E5=A4=8D=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复智能体初始化时的并发问题,添加isInitializing状态防止重复初始化 - 优化工具加载逻辑,避免重复请求 - 移除AgentView中多余的watch监听 --- web/src/components/AgentChatComponent.vue | 2 +- web/src/components/AgentConfigSidebar.vue | 4 ++++ web/src/stores/agent.js | 8 ++++++++ web/src/views/AgentView.vue | 7 ------- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/web/src/components/AgentChatComponent.vue b/web/src/components/AgentChatComponent.vue index 07902024..11dddc75 100644 --- a/web/src/components/AgentChatComponent.vue +++ b/web/src/components/AgentChatComponent.vue @@ -991,7 +991,7 @@ const initAll = async () => { onMounted(async () => { await initAll(); scrollController.enableAutoScroll(); - }); +}); watch(currentAgentId, async (newAgentId, oldAgentId) => { if (newAgentId !== oldAgentId) { diff --git a/web/src/components/AgentConfigSidebar.vue b/web/src/components/AgentConfigSidebar.vue index ba9fbdac..a7299c8f 100644 --- a/web/src/components/AgentConfigSidebar.vue +++ b/web/src/components/AgentConfigSidebar.vue @@ -423,6 +423,10 @@ const getToolNameById = (toolId) => { const loadAvailableTools = async () => { try { + // 避免重复加载,如果已经有工具就直接返回 + if (availableTools.value && Object.keys(availableTools.value).length > 0) { + return; + } await agentStore.fetchTools(); } catch (error) { console.error('加载工具列表失败:', error); diff --git a/web/src/stores/agent.js b/web/src/stores/agent.js index 86f31339..e6048a38 100644 --- a/web/src/stores/agent.js +++ b/web/src/stores/agent.js @@ -33,6 +33,7 @@ export const useAgentStore = defineStore('agent', () => { // 初始化状态 const isInitialized = ref(false) + const isInitializing = ref(false) // ==================== 计算属性 ==================== const selectedAgent = computed(() => @@ -76,6 +77,10 @@ export const useAgentStore = defineStore('agent', () => { async function initialize() { if (isInitialized.value) return + // 防止并发初始化 + if (isInitializing.value) return + isInitializing.value = true + try { await fetchAgents() await fetchDefaultAgent() @@ -111,6 +116,8 @@ export const useAgentStore = defineStore('agent', () => { console.error('Failed to initialize agent store:', err) handleChatError(err, 'initialize') error.value = err.message + } finally { + isInitializing.value = false } } @@ -321,6 +328,7 @@ export const useAgentStore = defineStore('agent', () => { isLoadingAgentDetail.value = false error.value = null isInitialized.value = false + isInitializing.value = false } return { diff --git a/web/src/views/AgentView.vue b/web/src/views/AgentView.vue index ec94302b..9e12b8de 100644 --- a/web/src/views/AgentView.vue +++ b/web/src/views/AgentView.vue @@ -165,13 +165,6 @@ const loadAgentConfig = async () => { } }; -// 监听智能体选择变化 -watch( - () => selectedAgentId.value, - () => { - loadAgentConfig(); - } -); // 选择智能体(使用store方法) const selectAgent = (agentId) => {