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] }