From 4d4b1fcf866937770b41bc0c914676bfd5e4c7ec Mon Sep 17 00:00:00 2001 From: huangge1199 Date: Wed, 28 May 2025 15:52:25 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E7=94=A8=E5=B7=A5=E5=85=B7=EF=BC=9A?= =?UTF-8?q?=E7=BB=88=E7=AB=AF=E6=93=8D=E4=BD=9C=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../aiagent/Service/ToolsService.java | 2 + .../Service/impl/ToolsServiceImpl.java | 11 ++++-- .../aiagent/controller/ToolController.java | 8 ++++ .../aiagent/tools/TerminalTool.java | 39 +++++++++++++++++++ 4 files changed, 56 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/huangge1199/aiagent/tools/TerminalTool.java diff --git a/src/main/java/com/huangge1199/aiagent/Service/ToolsService.java b/src/main/java/com/huangge1199/aiagent/Service/ToolsService.java index ffeab9a..97f5c89 100644 --- a/src/main/java/com/huangge1199/aiagent/Service/ToolsService.java +++ b/src/main/java/com/huangge1199/aiagent/Service/ToolsService.java @@ -20,4 +20,6 @@ public interface ToolsService { List webSearch(String question); List webScrap(String question); + + String terminalTool(String command); } diff --git a/src/main/java/com/huangge1199/aiagent/Service/impl/ToolsServiceImpl.java b/src/main/java/com/huangge1199/aiagent/Service/impl/ToolsServiceImpl.java index d646437..c8597f8 100644 --- a/src/main/java/com/huangge1199/aiagent/Service/impl/ToolsServiceImpl.java +++ b/src/main/java/com/huangge1199/aiagent/Service/impl/ToolsServiceImpl.java @@ -2,10 +2,7 @@ package com.huangge1199.aiagent.Service.impl; import com.huangge1199.aiagent.Service.ToolsService; import com.huangge1199.aiagent.config.MyLoggerAdvisor; -import com.huangge1199.aiagent.tools.FileTool; -import com.huangge1199.aiagent.tools.WeatherTool; -import com.huangge1199.aiagent.tools.WebScrapTool; -import com.huangge1199.aiagent.tools.WebSearchTool; +import com.huangge1199.aiagent.tools.*; import jakarta.annotation.Resource; import org.springframework.ai.chat.client.ChatClient; import org.springframework.ai.ollama.OllamaChatModel; @@ -71,4 +68,10 @@ public class ToolsServiceImpl implements ToolsService { WebScrapTool webScrapTool = new WebScrapTool(); return List.of(webScrapTool.scrapeWebPage(url).split(",")); } + + @Override + public String terminalTool(String command) { + TerminalTool terminalTool = new TerminalTool(); + return terminalTool.executeTerminalCommand(command); + } } diff --git a/src/main/java/com/huangge1199/aiagent/controller/ToolController.java b/src/main/java/com/huangge1199/aiagent/controller/ToolController.java index b85af8b..54be1a7 100644 --- a/src/main/java/com/huangge1199/aiagent/controller/ToolController.java +++ b/src/main/java/com/huangge1199/aiagent/controller/ToolController.java @@ -78,4 +78,12 @@ public class ToolController { List result = toolsService.webScrap(question); return R.ok(result); } + + @PostMapping("/terminalTool") + @Operation(summary = "终端操作") + public R terminalTool(@RequestBody String command) { + CheckUtils.checkEmpty(command, "命令"); + String result = toolsService.terminalTool(command); + return R.ok(result); + } } diff --git a/src/main/java/com/huangge1199/aiagent/tools/TerminalTool.java b/src/main/java/com/huangge1199/aiagent/tools/TerminalTool.java new file mode 100644 index 0000000..1212373 --- /dev/null +++ b/src/main/java/com/huangge1199/aiagent/tools/TerminalTool.java @@ -0,0 +1,39 @@ +package com.huangge1199.aiagent.tools; + +import org.springframework.ai.tool.annotation.Tool; +import org.springframework.ai.tool.annotation.ToolParam; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +/** + * TerminlTool + * + * @author huangge1199 + * @since 2025/5/28 15:34:30 + */ +public class TerminalTool { + + @Tool(description = "Execute a command in the terminal") + public String executeTerminalCommand(@ToolParam(description = "Command to execute in the terminal") String command) { + StringBuilder output = new StringBuilder(); + try { + Process process = Runtime.getRuntime().exec("cmd.exe /c " + command); + try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) { + String line; + while ((line = reader.readLine()) != null) { + output.append(line).append("\n"); + } + } + int exitCode = process.waitFor(); + if (exitCode != 0) { + output.append("Command execution failed with exit code: ").append(exitCode); + } + } catch (IOException | InterruptedException e) { + output.append("Error executing command: ").append(e.getMessage()); + } + return output.toString(); + } + +}