diff --git a/backend/ai-core/cmd/main.go b/backend/ai-core/cmd/main.go index 77409c2..4f44efc 100644 --- a/backend/ai-core/cmd/main.go +++ b/backend/ai-core/cmd/main.go @@ -192,16 +192,17 @@ func main() { var asrProvider llm.ASRProvider if getEnvBool("ENABLE_TOOLS", true) { // 11 个共享通用插件 — 注册其工具到统一注册中心 + registerPlugins(toolRegistry) + for _, t := range pluginFile.NewFilePlugin(dataDir).Tools() { toolRegistry.Register(t) } + for _, t := range pluginHTTP.NewHTTPPlugin().Tools() { toolRegistry.Register(t) } + // 优先使用本地 SearXNG,不可用时回退 DuckDuckGo searxngURL := getEnv("SEARXNG_URL", "") if searxngURL != "" { + toolRegistry.Register(wrapTool(tools.NewWebSearchToolWithURL(searxngURL), "web_search", "Search the web via SearXNG", "search")) } else { + for _, t := range pluginWS.NewWebSearchPlugin().Tools() { toolRegistry.Register(t) } } - - registerPlugins(toolRegistry) - for _, t := range pluginFile.NewFilePlugin(dataDir).Tools() { toolRegistry.Register(t) } - for _, t := range pluginHTTP.NewHTTPPlugin().Tools() { toolRegistry.Register(t) } - for _, t := range pluginWS.NewWebSearchPlugin().Tools() { toolRegistry.Register(t) } - for _, t := range pluginWF.NewWebFetchPlugin().Tools() { toolRegistry.Register(t) } + for _, t := range pluginWF.NewWebFetchPlugin().Tools() { toolRegistry.Register(t) } // ai-core 专属工具 — 通过 sdk.Tool 适配器注册 if iotClient != nil { toolRegistry.Register(wrapTool(tools.NewIoTQueryTool(iotClient), "iot_query", "Query IoT Devices", "iot"))