From 606afc99ee89f6f301a117e130a2b511e34a22b5 Mon Sep 17 00:00:00 2001 From: Wenjie Zhang Date: Wed, 24 Dec 2025 18:52:14 +0800 Subject: [PATCH] =?UTF-8?q?feat(agent):=20=E6=B7=BB=E5=8A=A0=E5=BC=BA?= =?UTF-8?q?=E5=88=B6=E5=88=B7=E6=96=B0=E6=99=BA=E8=83=BD=E4=BD=93=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E7=9A=84=E5=8A=9F=E8=83=BD=20Fixes=20#396?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修改 fetchAgentDetail 方法支持强制刷新参数 更新上下文配置选项为动态获取 调整工具和MCP服务器列表为实时获取 --- src/agents/chatbot/context.py | 8 ++++++-- src/agents/common/context.py | 6 +++++- web/src/components/AgentConfigSidebar.vue | 4 ++++ web/src/stores/agent.js | 6 +++--- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/agents/chatbot/context.py b/src/agents/chatbot/context.py index 4e12e44a..8892cde1 100644 --- a/src/agents/chatbot/context.py +++ b/src/agents/chatbot/context.py @@ -13,12 +13,16 @@ class Context(BaseContext): default_factory=list, metadata={ "name": "工具", - "options": gen_tool_info(get_tools()), # 这里的选择是所有的工具 + "options": lambda: gen_tool_info(get_tools()), # 这里的选择是所有的工具 "description": "工具列表", }, ) mcps: list[str] = field( default_factory=list, - metadata={"name": "MCP服务器", "options": list(MCP_SERVERS.keys()), "description": "MCP服务器列表"}, + metadata={ + "name": "MCP服务器", + "options": lambda: list(MCP_SERVERS.keys()), + "description": "MCP服务器列表", + }, ) diff --git a/src/agents/common/context.py b/src/agents/common/context.py index 36b3f851..d7d4e35e 100644 --- a/src/agents/common/context.py +++ b/src/agents/common/context.py @@ -107,10 +107,14 @@ class BaseContext: # 提取 Annotated 的元数据 template_metadata = cls._extract_template_metadata(field_type) + options = f.metadata.get("options", []) + if callable(options): + options = options() + configurable_items[f.name] = { "type": type_name, "name": f.metadata.get("name", f.name), - "options": f.metadata.get("options", []), + "options": options, "default": f.default if f.default is not MISSING else f.default_factory() diff --git a/web/src/components/AgentConfigSidebar.vue b/web/src/components/AgentConfigSidebar.vue index fabd44a4..18ac11fa 100644 --- a/web/src/components/AgentConfigSidebar.vue +++ b/web/src/components/AgentConfigSidebar.vue @@ -424,6 +424,10 @@ const getToolNameById = (toolId) => { const openToolsModal = async () => { console.log("availableTools.value", availableTools.value) try { + // 强制刷新智能体详情以获取最新工具列表 + if (selectedAgentId.value) { + await agentStore.fetchAgentDetail(selectedAgentId.value, true); + } selectedTools.value = [...(agentConfig.value?.tools || [])]; toolsModalOpen.value = true; } catch (error) { diff --git a/web/src/stores/agent.js b/web/src/stores/agent.js index 2ea597db..61c92ff6 100644 --- a/web/src/stores/agent.js +++ b/web/src/stores/agent.js @@ -146,11 +146,11 @@ export const useAgentStore = defineStore('agent', () => { * 获取单个智能体的详细信息(包含配置选项) * @param {string} agentId - 智能体ID */ - async function fetchAgentDetail(agentId) { + async function fetchAgentDetail(agentId, forceRefresh = false) { if (!agentId) return - // 如果已经缓存了详细信息,直接返回 - if (agentDetails.value[agentId]) { + // 如果已经缓存了详细信息且不强制刷新,直接返回 + if (!forceRefresh && agentDetails.value[agentId]) { return agentDetails.value[agentId] }