diff --git a/.gitignore b/.gitignore index dcfe917..eb3a026 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,4 @@ build/ ### VS Code ### .vscode/ /src/main/resources/application-dev.yml +/tmp/ diff --git a/src/main/java/com/huangge1199/aiagent/Service/ToolsService.java b/src/main/java/com/huangge1199/aiagent/Service/ToolsService.java index 3bcd339..96510a3 100644 --- a/src/main/java/com/huangge1199/aiagent/Service/ToolsService.java +++ b/src/main/java/com/huangge1199/aiagent/Service/ToolsService.java @@ -8,4 +8,8 @@ package com.huangge1199.aiagent.Service; */ public interface ToolsService { String getWeather(String question); + + String writeFileTest(String context, String name); + + String readFileTest(String name); } 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 a382335..4c47673 100644 --- a/src/main/java/com/huangge1199/aiagent/Service/impl/ToolsServiceImpl.java +++ b/src/main/java/com/huangge1199/aiagent/Service/impl/ToolsServiceImpl.java @@ -2,7 +2,8 @@ package com.huangge1199.aiagent.Service.impl; import com.huangge1199.aiagent.Service.ToolsService; import com.huangge1199.aiagent.config.MyLoggerAdvisor; -import com.huangge1199.aiagent.tools.WeatherTools; +import com.huangge1199.aiagent.tools.FileTool; +import com.huangge1199.aiagent.tools.WeatherTool; import jakarta.annotation.Resource; import org.springframework.ai.chat.client.ChatClient; import org.springframework.ai.ollama.OllamaChatModel; @@ -25,7 +26,19 @@ public class ToolsServiceImpl implements ToolsService { return ChatClient.create(ollamaChatModel) .prompt(question) .advisors(new MyLoggerAdvisor()) - .tools(new WeatherTools()) + .tools(new WeatherTool()) .call().content(); } + + @Override + public String writeFileTest(String context, String name) { + FileTool fileTool = new FileTool(); + return fileTool.writeFile(name,context); + } + + @Override + public String readFileTest(String name) { + FileTool fileTool = new FileTool(); + return fileTool.readFile(name); + } } diff --git a/src/main/java/com/huangge1199/aiagent/controller/ToolController.java b/src/main/java/com/huangge1199/aiagent/controller/ToolController.java index 743d747..0b058a3 100644 --- a/src/main/java/com/huangge1199/aiagent/controller/ToolController.java +++ b/src/main/java/com/huangge1199/aiagent/controller/ToolController.java @@ -1,7 +1,10 @@ package com.huangge1199.aiagent.controller; +import cn.hutool.json.JSONObject; +import com.alibaba.cloud.nacos.utils.StringUtils; import com.huangge1199.aiagent.Service.ToolsService; import com.huangge1199.aiagent.common.R; +import com.huangge1199.aiagent.util.CheckUtils; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; @@ -33,4 +36,24 @@ public class ToolController { String result = toolsService.getWeather(question); return R.ok(result); } + + @PostMapping("/writeFile") + @Operation(summary = "写文件测试") + public R writeFile(@RequestBody JSONObject params) { + String context = params.getStr("context"); + String name = params.getStr("name"); + CheckUtils.checkEmpty(context, "内容"); + CheckUtils.checkEmpty(name, "文件名"); + String result = toolsService.writeFileTest(context, name); + return R.ok(result); + } + + @PostMapping("/readFile") + @Operation(summary = "读文件测试") + public R readFile(@RequestBody JSONObject params) { + String name = params.getStr("name"); + CheckUtils.checkEmpty(name, "文件名"); + String result = toolsService.readFileTest(name); + return R.ok(result); + } } diff --git a/src/main/java/com/huangge1199/aiagent/tools/FileConstant.java b/src/main/java/com/huangge1199/aiagent/tools/FileConstant.java new file mode 100644 index 0000000..55a78b3 --- /dev/null +++ b/src/main/java/com/huangge1199/aiagent/tools/FileConstant.java @@ -0,0 +1,12 @@ +package com.huangge1199.aiagent.tools; + +/** + * FileConstant + * + * @author huangge1199 + * @since 2025/5/27 16:50:37 + */ +public interface FileConstant { + + String FILE_SAVE_DIR = System.getProperty("user.dir") + "/tmp"; +} diff --git a/src/main/java/com/huangge1199/aiagent/tools/FileTool.java b/src/main/java/com/huangge1199/aiagent/tools/FileTool.java new file mode 100644 index 0000000..edeadba --- /dev/null +++ b/src/main/java/com/huangge1199/aiagent/tools/FileTool.java @@ -0,0 +1,42 @@ +package com.huangge1199.aiagent.tools; + +import cn.hutool.core.io.FileUtil; +import org.springframework.ai.tool.annotation.Tool; +import org.springframework.ai.tool.annotation.ToolParam; + +/** + * FileTools + * + * @author huangge1199 + * @since 2025/5/27 16:51:46 + */ +public class FileTool { + + private final String FILE_DIR = FileConstant.FILE_SAVE_DIR + "/file"; + + @Tool(description = "Read content from a file") + public String readFile(@ToolParam(description = "Name of the file to read") String fileName) { + String filePath = FILE_DIR + "/" + fileName; + try { + return FileUtil.readUtf8String(filePath); + } catch (Exception e) { + return "Error reading file: " + e.getMessage(); + } + } + + @Tool(description = "Write content to a file") + public String writeFile( + @ToolParam(description = "Name of the file to write") String fileName, + @ToolParam(description = "Content to write to the file") String content) { + String filePath = FILE_DIR + "/" + fileName; + try { + // 创建目录 + FileUtil.mkdir(FILE_DIR); + FileUtil.writeUtf8String(content, filePath); + return "File written successfully to: " + filePath; + } catch (Exception e) { + return "Error writing to file: " + e.getMessage(); + } + } +} + diff --git a/src/main/java/com/huangge1199/aiagent/tools/WeatherTools.java b/src/main/java/com/huangge1199/aiagent/tools/WeatherTool.java similarity index 94% rename from src/main/java/com/huangge1199/aiagent/tools/WeatherTools.java rename to src/main/java/com/huangge1199/aiagent/tools/WeatherTool.java index a20de91..192f884 100644 --- a/src/main/java/com/huangge1199/aiagent/tools/WeatherTools.java +++ b/src/main/java/com/huangge1199/aiagent/tools/WeatherTool.java @@ -9,7 +9,7 @@ import org.springframework.ai.tool.annotation.ToolParam; * @author huangge1199 * @since 2025/5/27 15:01:04 */ -public class WeatherTools { +public class WeatherTool { @Tool(description = "Get current weather for a location") public String getWeather(@ToolParam(description = "The city name") String city) { diff --git a/src/main/java/com/huangge1199/aiagent/util/CheckUtils.java b/src/main/java/com/huangge1199/aiagent/util/CheckUtils.java new file mode 100644 index 0000000..7af564c --- /dev/null +++ b/src/main/java/com/huangge1199/aiagent/util/CheckUtils.java @@ -0,0 +1,20 @@ +package com.huangge1199.aiagent.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; + +/** + * CheckUtils + * + * @author huangge1199 + * @since 2025/5/28 10:12:57 + */ +@Component +public class CheckUtils { + + public static void checkEmpty(String str, String name) { + if (StringUtils.isEmpty(str)) { + throw new RuntimeException(name + "不能为空!"); + } + } +}