From 82624affb0251b75b62b35567d3eb260c06efe78 Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期一, 23 三月 2026 12:48:07 +0800
Subject: [PATCH] #ai 代码优化

---
 rsf-server/src/main/java/com/vincent/rsf/server/ai/service/impl/BuiltinMcpToolRegistryImpl.java |   70 +++++++++++++++++++++++++----------
 1 files changed, 50 insertions(+), 20 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/impl/BuiltinMcpToolRegistryImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/impl/BuiltinMcpToolRegistryImpl.java
index 01e72e0..da7c1d6 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/impl/BuiltinMcpToolRegistryImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/impl/BuiltinMcpToolRegistryImpl.java
@@ -2,7 +2,9 @@
 
 import com.vincent.rsf.framework.exception.CoolException;
 import com.vincent.rsf.server.ai.config.AiDefaults;
+import com.vincent.rsf.server.ai.dto.AiMcpToolPreviewDto;
 import com.vincent.rsf.server.ai.entity.AiMcpMount;
+import com.vincent.rsf.server.ai.service.impl.mcp.BuiltinMcpToolCatalogProvider;
 import com.vincent.rsf.server.ai.service.BuiltinMcpToolRegistry;
 import com.vincent.rsf.server.ai.tool.RsfWmsBaseTools;
 import com.vincent.rsf.server.ai.tool.RsfWmsStockTools;
@@ -15,7 +17,9 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 
 @Service
 @RequiredArgsConstructor
@@ -24,46 +28,72 @@
     private final RsfWmsStockTools rsfWmsStockTools;
     private final RsfWmsTaskTools rsfWmsTaskTools;
     private final RsfWmsBaseTools rsfWmsBaseTools;
+    private final BuiltinMcpToolCatalogProvider builtinMcpToolCatalogProvider;
 
+    /**
+     * 鏍¢獙鍐呯疆 MCP 缂栫爜鏄惁鍚堟硶銆�
+     * 褰撳墠鐗堟湰鍙厑璁镐娇鐢ㄦ樉寮忕櫥璁板湪娉ㄥ唽琛ㄤ腑鐨勭紪鐮侊紝鏈煡缂栫爜鐩存帴鎷掔粷锛�
+     * 杩欐牱鍙互纭繚鈥滈〉闈㈠彲閫夐」鈥濆拰鈥滆繍琛屾椂鍙寕杞介」鈥濆缁堜竴鑷淬��
+     */
     @Override
     public void validateBuiltinCode(String builtinCode) {
         if (!StringUtils.hasText(builtinCode)) {
             throw new CoolException("鍐呯疆 MCP 缂栫爜涓嶈兘涓虹┖");
         }
-        if (!supportedBuiltinCodes().contains(builtinCode)) {
+        if (!builtinMcpToolCatalogProvider.supportedBuiltinCodes().contains(builtinCode)) {
             throw new CoolException("涓嶆敮鎸佺殑鍐呯疆 MCP 缂栫爜: " + builtinCode);
         }
     }
 
+    /**
+     * 鏍规嵁鎸傝浇璁板綍鍒涘缓鍐呯疆宸ュ叿鍥炶皟銆�
+     * 杩欓噷涓嶄細鍋氫换浣曞姩鎬佸彂鐜帮紝鎵�鏈夊伐鍏烽兘蹇呴』缁忚繃鏄惧紡娉ㄥ唽鍜屾不鐞嗙洰褰曟牎楠屽悗鎵嶈兘鏆撮湶缁欐ā鍨嬨��
+     */
     @Override
     public List<ToolCallback> createToolCallbacks(AiMcpMount mount, Long userId) {
         String builtinCode = mount.getBuiltinCode();
         validateBuiltinCode(builtinCode);
         if (AiDefaults.MCP_BUILTIN_RSF_WMS.equals(builtinCode)) {
             List<ToolCallback> callbacks = new ArrayList<>();
-            callbacks.addAll(Arrays.asList(ToolCallbacks.from(rsfWmsStockTools)));
-            callbacks.addAll(Arrays.asList(ToolCallbacks.from(rsfWmsTaskTools)));
-            callbacks.addAll(Arrays.asList(ToolCallbacks.from(rsfWmsBaseTools)));
+            callbacks.addAll(createValidatedCallbacks(rsfWmsStockTools, builtinCode));
+            callbacks.addAll(createValidatedCallbacks(rsfWmsTaskTools, builtinCode));
+            callbacks.addAll(createValidatedCallbacks(rsfWmsBaseTools, builtinCode));
             return callbacks;
-        }
-        if (AiDefaults.MCP_BUILTIN_RSF_WMS_STOCK.equals(builtinCode)) {
-            return Arrays.asList(ToolCallbacks.from(rsfWmsStockTools));
-        }
-        if (AiDefaults.MCP_BUILTIN_RSF_WMS_TASK.equals(builtinCode)) {
-            return Arrays.asList(ToolCallbacks.from(rsfWmsTaskTools));
-        }
-        if (AiDefaults.MCP_BUILTIN_RSF_WMS_BASE.equals(builtinCode)) {
-            return Arrays.asList(ToolCallbacks.from(rsfWmsBaseTools));
         }
         throw new CoolException("涓嶆敮鎸佺殑鍐呯疆 MCP 缂栫爜: " + builtinCode);
     }
 
-    private List<String> supportedBuiltinCodes() {
-        return List.of(
-                AiDefaults.MCP_BUILTIN_RSF_WMS,
-                AiDefaults.MCP_BUILTIN_RSF_WMS_STOCK,
-                AiDefaults.MCP_BUILTIN_RSF_WMS_TASK,
-                AiDefaults.MCP_BUILTIN_RSF_WMS_BASE
-        );
+    /**
+     * 杩斿洖鏌愪釜鍐呯疆缂栫爜涓嬪彲棰勮鐨勫伐鍏风洰褰曚俊鎭��
+     * 璇ョ洰褰曟瘮杩愯鏃跺洖璋冨浜嗗伐鍏风敤閫斻�佹煡璇㈣竟鐣屽拰绀轰緥鎻愰棶锛屼緵绠$悊椤靛睍绀恒��
+     */
+    @Override
+    public List<AiMcpToolPreviewDto> listBuiltinToolCatalog(String builtinCode) {
+        validateBuiltinCode(builtinCode);
+        return new ArrayList<>(builtinMcpToolCatalogProvider.getCatalog(builtinCode).values());
     }
+
+    private List<ToolCallback> createValidatedCallbacks(Object toolBean, String builtinCode) {
+        /**
+         * 鎶� `@Tool` Bean 杞垚 Spring AI ToolCallback锛屽苟寮哄埗鏍¢獙锛�
+         * 1. 宸ュ叿鍚嶅繀椤荤鍚堝懡鍚嶈鑼�
+         * 2. 姣忎釜宸ュ叿閮藉繀椤诲嚭鐜板湪娌荤悊鐩綍閲�
+         */
+        List<ToolCallback> callbacks = Arrays.asList(ToolCallbacks.from(toolBean));
+        Map<String, AiMcpToolPreviewDto> catalog = builtinMcpToolCatalogProvider.getCatalog(builtinCode);
+        for (ToolCallback callback : callbacks) {
+            if (callback == null || callback.getToolDefinition() == null) {
+                continue;
+            }
+            String toolName = callback.getToolDefinition().name();
+            if (!StringUtils.hasText(toolName) || !toolName.startsWith("rsf_query_")) {
+                throw new CoolException("鍐呯疆宸ュ叿鍛藉悕涓嶇鍚堣鑼冿紝蹇呴』浠� rsf_query_ 寮�澶�: " + toolName);
+            }
+            if (!catalog.containsKey(toolName)) {
+                throw new CoolException("鍐呯疆宸ュ叿缂哄皯娌荤悊鐩綍閰嶇疆: " + toolName);
+            }
+        }
+        return callbacks;
+    }
+
 }

--
Gitblit v1.9.1