From 7b84f63629829cce7128ba8db313f366c99758b6 Mon Sep 17 00:00:00 2001 From: zouzhiwen <409053122@qq.com> Date: Fri, 20 Mar 2026 19:06:49 +0800 Subject: [PATCH] init --- .idea/.gitignore | 10 + .idea/ApifoxUploaderProjectSetting.xml | 7 + .idea/compiler.xml | 18 + .idea/copilot.data.migration.ask2agent.xml | 6 + .idea/editorJumperProjectSettings.xml | 6 + .idea/encodings.xml | 7 + .idea/inspectionProfiles/Project_Default.xml | 8 + .idea/jarRepositories.xml | 20 + .idea/misc.xml | 12 + .vscode/settings.json | 3 + .xcodemap/config/xcodemap-class-filter.yaml | 33 + output.mp3 | Bin 0 -> 70125 bytes pom.xml | 67 + spring-ai-alibaba-demo.iml | 8 + src/main/java/com/baoshi/ApiListTool.java | 28 + .../java/com/baoshi/BusinessRouteTool.java | 24 + src/main/java/com/baoshi/Main.java | 17 + src/main/java/com/baoshi/conf/AiConfig.java | 30 + .../controller/MultiModelsController.java | 41 + src/main/resources/application.yml | 13 + src/test/java/com/baoshi/ChatModelTest.java | 13 + src/test/java/com/baoshi/DemoTest.java | 203 ++ target/classes/application.yml | 13 + .../baoshi/ApiListTool$DomainRequest.class | Bin 0 -> 1503 bytes target/classes/com/baoshi/ApiListTool.class | Bin 0 -> 1829 bytes .../BusinessRouteTool$RouteRequest.class | Bin 0 -> 1371 bytes .../com/baoshi/BusinessRouteTool.class | Bin 0 -> 1275 bytes target/classes/com/baoshi/Main.class | Bin 0 -> 688 bytes target/classes/com/baoshi/conf/AiConfig.class | Bin 0 -> 2139 bytes .../controller/MultiModelsController.class | Bin 0 -> 4335 bytes target/maven-archiver/pom.properties | 3 + .../compile/default-compile/createdFiles.lst | 4 + .../compile/default-compile/inputFiles.lst | 5 + .../default-testCompile/createdFiles.lst | 1 + .../default-testCompile/inputFiles.lst | 1 + target/spring-ai-alibaba-1.0-SNAPSHOT.jar | Bin 0 -> 5795 bytes .../spring-ai-alibaba-demo-1.0-SNAPSHOT.jar | Bin 0 -> 6616 bytes .../TEST-com.baoshi.DemoTest.xml | 1682 +++++++++++++++++ .../surefire-reports/com.baoshi.DemoTest.txt | 4 + target/test-classes/com/baoshi/DemoTest.class | Bin 0 -> 16502 bytes 40 files changed, 2287 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/ApifoxUploaderProjectSetting.xml create mode 100644 .idea/compiler.xml create mode 100644 .idea/copilot.data.migration.ask2agent.xml create mode 100644 .idea/editorJumperProjectSettings.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .vscode/settings.json create mode 100644 .xcodemap/config/xcodemap-class-filter.yaml create mode 100644 output.mp3 create mode 100644 pom.xml create mode 100644 spring-ai-alibaba-demo.iml create mode 100644 src/main/java/com/baoshi/ApiListTool.java create mode 100644 src/main/java/com/baoshi/BusinessRouteTool.java create mode 100644 src/main/java/com/baoshi/Main.java create mode 100644 src/main/java/com/baoshi/conf/AiConfig.java create mode 100644 src/main/java/com/baoshi/controller/MultiModelsController.java create mode 100644 src/main/resources/application.yml create mode 100644 src/test/java/com/baoshi/ChatModelTest.java create mode 100644 src/test/java/com/baoshi/DemoTest.java create mode 100644 target/classes/application.yml create mode 100644 target/classes/com/baoshi/ApiListTool$DomainRequest.class create mode 100644 target/classes/com/baoshi/ApiListTool.class create mode 100644 target/classes/com/baoshi/BusinessRouteTool$RouteRequest.class create mode 100644 target/classes/com/baoshi/BusinessRouteTool.class create mode 100644 target/classes/com/baoshi/Main.class create mode 100644 target/classes/com/baoshi/conf/AiConfig.class create mode 100644 target/classes/com/baoshi/controller/MultiModelsController.class create mode 100644 target/maven-archiver/pom.properties create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst create mode 100644 target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst create mode 100644 target/spring-ai-alibaba-1.0-SNAPSHOT.jar create mode 100644 target/spring-ai-alibaba-demo-1.0-SNAPSHOT.jar create mode 100644 target/surefire-reports/TEST-com.baoshi.DemoTest.xml create mode 100644 target/surefire-reports/com.baoshi.DemoTest.txt create mode 100644 target/test-classes/com/baoshi/DemoTest.class diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..ab1f416 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,10 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Ignored default folder with query files +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/ApifoxUploaderProjectSetting.xml b/.idea/ApifoxUploaderProjectSetting.xml new file mode 100644 index 0000000..b0b7524 --- /dev/null +++ b/.idea/ApifoxUploaderProjectSetting.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..39e5e30 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/copilot.data.migration.ask2agent.xml b/.idea/copilot.data.migration.ask2agent.xml new file mode 100644 index 0000000..1f2ea11 --- /dev/null +++ b/.idea/copilot.data.migration.ask2agent.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/editorJumperProjectSettings.xml b/.idea/editorJumperProjectSettings.xml new file mode 100644 index 0000000..bd94242 --- /dev/null +++ b/.idea/editorJumperProjectSettings.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..d0da917 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..0912217 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..758a443 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..4505247 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "maven.view": "hierarchical" +} \ No newline at end of file diff --git a/.xcodemap/config/xcodemap-class-filter.yaml b/.xcodemap/config/xcodemap-class-filter.yaml new file mode 100644 index 0000000..927c620 --- /dev/null +++ b/.xcodemap/config/xcodemap-class-filter.yaml @@ -0,0 +1,33 @@ +autoDeleteData: false +autoDetectedPackages: +- com.baoshi +autoKeepDataNum: 10 +enableAutoDetect: true +entryDisplayConfig: + excludedPathPatterns: [] + skipJsCss: true +funcDisplayConfig: + skipConstructors: false + skipFieldAccess: true + skipFieldChange: true + skipGetters: false + skipNonProjectPackages: false + skipPrivateMethods: false + skipSetters: false +ignoreSameClassCall: null +ignoreSamePackageCall: null +includedPackagePrefixes: null +includedParentClasses: null +maxColSize: 32 +maxNumFirst: 12 +maxNumFirstImportant: 1024 +maxNumHash: 3 +maxNumHashImportant: 256 +maxObjectDepth: 4 +maxStrSize: 4096 +name: xcodemap-filter +openMainWindow: true +recordMode: manual +sourceDisplayConfig: + color: blue +startOnDebug: false diff --git a/output.mp3 b/output.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..f0ebdc6cee6bb560d2e5b80448780d45f1ec4f65 GIT binary patch literal 70125 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 literal 0 HcmV?d00001 diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..0264b5e --- /dev/null +++ b/pom.xml @@ -0,0 +1,67 @@ + + + 4.0.0 + + + org.springframework.boot + spring-boot-starter-parent + 3.5.8 + + + + com.baoshi + spring-ai-alibaba-demo + 1.0-SNAPSHOT + + + 17 + 17 + UTF-8 + + + + + + com.fasterxml.jackson.core + jackson-annotations + 2.19.4 + + + + + com.alibaba.cloud.ai + spring-ai-alibaba-agent-framework + 1.1.2.2 + + + + + org.springframework.ai + spring-ai-starter-model-ollama + 1.1.2 + + + + + com.alibaba.cloud.ai + spring-ai-alibaba-starter-dashscope + 1.1.2.2 + + + + + org.springframework.boot + spring-boot-starter-webflux + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + \ No newline at end of file diff --git a/spring-ai-alibaba-demo.iml b/spring-ai-alibaba-demo.iml new file mode 100644 index 0000000..4d4d822 --- /dev/null +++ b/spring-ai-alibaba-demo.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/baoshi/ApiListTool.java b/src/main/java/com/baoshi/ApiListTool.java new file mode 100644 index 0000000..1f82ebb --- /dev/null +++ b/src/main/java/com/baoshi/ApiListTool.java @@ -0,0 +1,28 @@ +package com.baoshi; + +import org.springframework.ai.chat.model.ToolContext; + +import java.util.List; +import java.util.Map; +import java.util.function.BiFunction; + +/** + * 业务 + */ +public class ApiListTool implements BiFunction { + + //Map>.of("仓库",) + private final Map> map = Map.of( + "出库", List.of("/api/outbound"), + "存储", List.of("/api/Inventory") + ); + + @Override + public String apply(DomainRequest request, ToolContext toolContext) { + return String.join(",", map.get(request.domain())); + } + + /** 与 LLM tool call 返回的 JSON 结构对应 */ + public record DomainRequest(String domain) { + } +} \ No newline at end of file diff --git a/src/main/java/com/baoshi/BusinessRouteTool.java b/src/main/java/com/baoshi/BusinessRouteTool.java new file mode 100644 index 0000000..3799bd8 --- /dev/null +++ b/src/main/java/com/baoshi/BusinessRouteTool.java @@ -0,0 +1,24 @@ +package com.baoshi; + +import org.springframework.ai.chat.model.ToolContext; + +import java.util.function.BiFunction; + +/** + * 业务 + */ +public class BusinessRouteTool implements BiFunction { + + @Override + public String apply(RouteRequest request, ToolContext toolContext) { + + return """ + 订单相关业务域:出库, + 移库、盘点、上架相关业务域:存储 + """; + } + + /** 与 LLM tool call 返回的 JSON 结构对应 */ + public record RouteRequest() { + } +} \ No newline at end of file diff --git a/src/main/java/com/baoshi/Main.java b/src/main/java/com/baoshi/Main.java new file mode 100644 index 0000000..4e79494 --- /dev/null +++ b/src/main/java/com/baoshi/Main.java @@ -0,0 +1,17 @@ +package com.baoshi; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * @author Wen + * @date 2026/3/12 18:38 + */ +//TIP To Run code, press or +// click the icon in the gutter. +@SpringBootApplication +public class Main { + public static void main(String[] args) { + SpringApplication.run(Main.class, args); + } +} \ No newline at end of file diff --git a/src/main/java/com/baoshi/conf/AiConfig.java b/src/main/java/com/baoshi/conf/AiConfig.java new file mode 100644 index 0000000..ca0abba --- /dev/null +++ b/src/main/java/com/baoshi/conf/AiConfig.java @@ -0,0 +1,30 @@ +package com.baoshi.conf; + +import com.alibaba.cloud.ai.autoconfigure.dashscope.DashScopeChatProperties; +import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatModel; +import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatOptions; +import org.springframework.ai.chat.client.ChatClient; +import org.springframework.ai.model.ollama.autoconfigure.OllamaChatProperties; +import org.springframework.ai.ollama.OllamaChatModel; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class AiConfig { + + @Bean + public ChatClient dashScope(@Autowired DashScopeChatModel dashScopeChatModel, + @Autowired DashScopeChatProperties properties) { + return ChatClient.builder(dashScopeChatModel) + //.defaultOptions(DashScopeChatOptions.builder().build()) + .build(); + } + + @Bean + public ChatClient ollama(@Autowired OllamaChatModel ollamaChatModel, + @Autowired OllamaChatProperties properties) { + return ChatClient.builder(ollamaChatModel).defaultOptions(properties.getOptions()).build(); + } + +} diff --git a/src/main/java/com/baoshi/controller/MultiModelsController.java b/src/main/java/com/baoshi/controller/MultiModelsController.java new file mode 100644 index 0000000..d76ee84 --- /dev/null +++ b/src/main/java/com/baoshi/controller/MultiModelsController.java @@ -0,0 +1,41 @@ +package com.baoshi.controller; + +import org.springframework.ai.chat.client.ChatClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; +import reactor.core.scheduler.Schedulers; + +import java.util.Map; + +@RestController +public class MultiModelsController { + + @Autowired + private Map chatClientMap; + + @GetMapping("/chat") + Mono generation(@RequestParam String message, + @RequestParam String model) { + ChatClient chatClient = chatClientMap.get(model); + if (chatClient == null) { + return Mono.just("Unknown model: " + model); + } + return Mono.fromCallable(() -> chatClient.prompt().user(message).call().content()) + .subscribeOn(Schedulers.boundedElastic()); + } + + @GetMapping(value = "/chatStream", produces = MediaType.TEXT_EVENT_STREAM_VALUE) + Flux chatStream(@RequestParam String message, + @RequestParam String model) { + ChatClient chatClient = chatClientMap.get(model); + if (chatClient == null) { + return Flux.just("Unknown model: " + model); + } + return chatClient.prompt().user(message).stream().content(); + } +} \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..689bcea --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,13 @@ +# 解决 Spring AI 1.0.0-M6 与 1.1.x 并存时的 chatClientBuilderConfigurer bean 冲突 +spring: + ai: + ollama: + base-url: http://100.121.13.117:11434 + chat: + model: qwen2.5:7b + dashscope: + api-key: sk-36a57382b9ae4db696ecd07eb7150a88 + chat: + api-key: sk-36a57382b9ae4db696ecd07eb7150a88 +server: + port: 8080 diff --git a/src/test/java/com/baoshi/ChatModelTest.java b/src/test/java/com/baoshi/ChatModelTest.java new file mode 100644 index 0000000..36718a1 --- /dev/null +++ b/src/test/java/com/baoshi/ChatModelTest.java @@ -0,0 +1,13 @@ +package com.baoshi; + +import org.springframework.boot.test.context.SpringBootTest; + +/** + * @author Wen + * @date 2026/3/20 18:26 + */ +@SpringBootTest(classes = Main.class) +public class ChatModelTest { + + +} diff --git a/src/test/java/com/baoshi/DemoTest.java b/src/test/java/com/baoshi/DemoTest.java new file mode 100644 index 0000000..e831575 --- /dev/null +++ b/src/test/java/com/baoshi/DemoTest.java @@ -0,0 +1,203 @@ +package com.baoshi; + +import com.alibaba.cloud.ai.dashscope.audio.tts.DashScopeAudioSpeechModel; +import com.alibaba.cloud.ai.dashscope.audio.tts.DashScopeAudioSpeechOptions; +import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatModel; +import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatOptions; +import com.alibaba.cloud.ai.dashscope.chat.MessageFormat; +import com.alibaba.cloud.ai.dashscope.common.DashScopeApiConstants; +import com.alibaba.cloud.ai.dashscope.image.DashScopeImageModel; +import com.alibaba.cloud.ai.dashscope.image.DashScopeImageOptions; +import com.alibaba.cloud.ai.dashscope.spec.DashScopeModel; +import com.alibaba.cloud.ai.dashscope.video.DashScopeVideoModel; +import com.alibaba.cloud.ai.dashscope.video.DashScopeVideoOptions; +import com.alibaba.cloud.ai.dashscope.video.VideoMessage; +import com.alibaba.cloud.ai.dashscope.video.VideoPrompt; +import com.alibaba.cloud.ai.dashscope.video.VideoResponse; +import com.alibaba.cloud.ai.graph.agent.ReactAgent; +import com.alibaba.cloud.ai.graph.checkpoint.savers.MemorySaver; +import com.alibaba.cloud.ai.graph.exception.GraphRunnerException; +import com.baoshi.BusinessRouteTool.RouteRequest; +import org.junit.jupiter.api.Test; +import org.springframework.ai.audio.tts.Speech; +import org.springframework.ai.audio.tts.TextToSpeechPrompt; +import org.springframework.ai.audio.tts.TextToSpeechResponse; +import org.springframework.ai.chat.messages.AssistantMessage; +import org.springframework.ai.chat.messages.UserMessage; +import org.springframework.ai.chat.model.ChatModel; +import org.springframework.ai.chat.model.ChatResponse; +import org.springframework.ai.chat.prompt.Prompt; +import org.springframework.ai.content.Media; +import org.springframework.ai.image.ImagePrompt; +import org.springframework.ai.image.ImageResponse; +import org.springframework.ai.tool.ToolCallback; +import org.springframework.ai.tool.function.FunctionToolCallback; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.core.io.FileSystemResource; +import org.springframework.util.MimeTypeUtils; +import reactor.core.publisher.Flux; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.MalformedURLException; +import java.util.Collections; + +/** + * @author Wen + * @date 2026/3/12 21:45 + */ +@SpringBootTest(classes = Main.class) +class DemoTest { + @Autowired + @Qualifier("ollamaChatModel") + // @Qualifier("dashScopeChatModel") + private ChatModel chatModel; + + @Test + void contextLoads() throws GraphRunnerException { + ToolCallback businessTool = FunctionToolCallback + .builder("business_route", new BusinessRouteTool()) + .description("根据用户描述确定业务域") + .inputType(RouteRequest.class) + .build(); + + ToolCallback apiListTool = FunctionToolCallback + .builder("api_list", new ApiListTool()) + .description("根据业务域名获取对应接口") + .inputType(ApiListTool.DomainRequest.class) + .build(); + + // 创建 agent + ReactAgent agent = ReactAgent.builder() + .name("warehouse_agent") + .model(chatModel) + .tools(apiListTool, businessTool) + .systemPrompt("你是一个业务知识助手,可以根据用户描述提供相关业务领域知识,在对话期间最先应该获取到当前用户想要讨论的业务域,再进行其他工具的调用.") + .saver(new MemorySaver()) + .build(); + + // 运行 agent + AssistantMessage response = agent.call("请告诉我订单相关接口"); + System.out.println(response); + } + + /** + * 文生图示例 + * 模型:wanx2.1-t2i-turbo(快速)、wan2.2-t2i-plus(增强)、qwen-image 等 + * 可选:style(photography/anime/watercolor...)、size、n(数量)、negativePrompt + */ + @Test + void text2Img(@Autowired DashScopeImageModel imageModel) { + DashScopeImageOptions options = DashScopeImageOptions.builder() + .model("wanx2.1-t2i-turbo") + // .style("anime") // 风格:photography/portrait/3d cartoon/anime/oil painting/watercolor/sketch/chinese painting/flat illustration/auto + // .n(1) // 生成数量 1-4 + // .size("1024*1024") // 尺寸:1024*1024、720*1280、1280*720 + // .negativePrompt("模糊") // 负面提示词 + .build(); + + ImageResponse response = imageModel.call(new ImagePrompt("程序员徐庶", options)); + String imageUrl = response.getResult().getOutput().getUrl(); + + System.out.println("文生图 URL: " + imageUrl); + // 或获取 base64: response.getResult().getOutput().getB64Json(); + } + + /** + * 文生视频示例(异步,通常需 1-5 分钟) + * 模型:wanx2.1-t2v-turbo(快速)、wanx2.1-t2v-plus(增强)、wanx2.5-t2v-preview 等 + * 可选:size(1280*720)、duration、imageUrl(图生视频)、negativePrompt + * + * 已知问题:spring-ai-alibaba 1.1.2.0 存在 DashScopeVideoOptions Jackson 反序列化 bug, + * 调用会抛出 InvalidDefinitionException,待上游修复。可关注: + * https://github.com/alibaba/spring-ai-alibaba/issues + */ + @Test + void text2Video(@Autowired DashScopeVideoModel videoModel) { + DashScopeVideoOptions options = DashScopeVideoOptions.builder() + .model(DashScopeModel.VideoModel.WANX21_T2V_TURBO.getName()) // 文生视频用 T2V,I2V 需提供 imageUrl + .input(DashScopeVideoOptions.InputOptions.builder() + .prompt("一只阳光下奔跑的猫") + .build()) + .build(); + + + VideoPrompt prompt = new VideoPrompt(Collections.singletonList(new VideoMessage("一只阳光下奔跑的猫")), options); + VideoResponse response = videoModel.call(prompt); + + String videoUrl = response.getResult().getOutput().videoUrl(); + String taskStatus = response.getResult().getOutput().taskStatus(); + + System.out.println("文生视频 状态: " + taskStatus + ", URL: " + videoUrl); + } + + /** + * 文生语音 + * + * @param audioSpeechModel + * @throws IOException + */ + @Test + void testText2Audio(@Autowired DashScopeAudioSpeechModel audioSpeechModel) throws IOException { + DashScopeAudioSpeechOptions options = DashScopeAudioSpeechOptions.builder() + .model(DashScopeModel.AudioModel.COSYVOICE_V1.getValue()) + .voice("longlaotie") + .format("mp3") + .build(); + + TextToSpeechPrompt prompt = new TextToSpeechPrompt("大家好,我是人帅活好的徐庶。", options); + + // 使用 stream() 收集所有音频块,call() 内部聚合可能有问题 + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + Flux stream = audioSpeechModel.stream(prompt); + stream.doOnNext(r -> { + for (Speech speech : r.getResults()) { + byte[] bytes = speech.getOutput(); + if (bytes.length > 0) { + try { + baos.write(bytes); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + }).blockLast(); + + byte[] audioBytes = baos.toByteArray(); + if (audioBytes.length == 0) { + throw new IllegalStateException("未收到任何音频数据"); + } + + File file = new File("./output.mp3"); + try (FileOutputStream fos = new FileOutputStream(file)) { + fos.write(audioBytes); + } + } + + /** + * 多模态 + */ + @Test + public void testMultimodal(@Autowired DashScopeChatModel dashScopeChatModel) throws MalformedURLException { + // flac、mp3、mp4、mpeg、mpga、m4a、ogg、wav 或 webm。需先运行 testText2Audio 生成 output.mp3 + var audioFile = new FileSystemResource("output.mp3"); + + Media media = new Media(MimeTypeUtils.parseMimeType("audio/mpeg"), audioFile); + UserMessage userMessage = UserMessage.builder().media(media).text("识别音频内容").build(); + userMessage.getMetadata().put(DashScopeApiConstants.MESSAGE_FORMAT, MessageFormat.AUDIO); + + DashScopeChatOptions options = DashScopeChatOptions.builder() + .multiModel(true) + .model("qwen-audio-turbo-latest") // 音频识别用 qwen-audio,qwen-vl 仅支持图片 + .build(); + + Prompt prompt = Prompt.builder().chatOptions(options).messages(userMessage).build(); + ChatResponse response = dashScopeChatModel.call(prompt); + + System.out.println(response.getResult().getOutput().getText()); + } +} diff --git a/target/classes/application.yml b/target/classes/application.yml new file mode 100644 index 0000000..689bcea --- /dev/null +++ b/target/classes/application.yml @@ -0,0 +1,13 @@ +# 解决 Spring AI 1.0.0-M6 与 1.1.x 并存时的 chatClientBuilderConfigurer bean 冲突 +spring: + ai: + ollama: + base-url: http://100.121.13.117:11434 + chat: + model: qwen2.5:7b + dashscope: + api-key: sk-36a57382b9ae4db696ecd07eb7150a88 + chat: + api-key: sk-36a57382b9ae4db696ecd07eb7150a88 +server: + port: 8080 diff --git a/target/classes/com/baoshi/ApiListTool$DomainRequest.class b/target/classes/com/baoshi/ApiListTool$DomainRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..80d5ec1d7e84b2315dab5347e54d4939a9f5fab0 GIT binary patch literal 1503 zcma)6T~8B16g>lMcPWc4l@IX)KPcE1WyNnPk|@MLQqch6L7%4Wgbr+X>h6}r|Kx)t z8WSG;0sbiCo$exwt)vg#nS1x1v*+G3(_g<&egb%jl{5x0Xky5QffPgbfFE(k<=(!t zEo#cIGo)6eC&N{S!9sCw7#4<2q-~7AX2{o6)2VV5G^F#YB`Y!rca?JU>#E76w=F)k zMGz82y%RI!DrfvVp)bAta*lLdvXMcS!3tHBWmqm$`r$4Ydo$*2T*f#tHh9ojQ+2^m z?3Zy=fkjTfK7xx&3B5j$9^u$)XSrz^+ zuezi*S5Y4_l>!_`w3hU4VmrFWzbg%cHSaIfx)AYW1Hu-z(m z`;*ATz}?R+u`Ys|FI%DVlaMu+2SG9sd;GDRB>DAo$2Xp;g^>({$zX4Kp71-&f}9&Y zcd1M~XP7%1#RaXISZ0{HxRgAI=0G#H=q~{v$Mqejok4p8)0DkR(JHO_eY*4mthDeQ z<}pPBxJJ(uRf4Ln({nPa!VSz&MD-muvXAx#qW~DATYrlnns$j+4K_R$|^0KVB&xHs3q%fOBQC4CjoIwvqYd9J8j9K zNVjB^zQMexAtPoqFh}JBn8)4DT0n_bt3#@dSfHOC!95I8_7NWA31xDGuu#BLvgjFJ Hpp5B1eMVV6 literal 0 HcmV?d00001 diff --git a/target/classes/com/baoshi/ApiListTool.class b/target/classes/com/baoshi/ApiListTool.class new file mode 100644 index 0000000000000000000000000000000000000000..d78fd1852862b4acaae71774541353e038aabcec GIT binary patch literal 1829 zcmb7E+foxj5IqwDn}m&ops08QK@0(1?}Cen1W`1AC6rY@PQs83COdJnL4Ebb5AenE z3w*IktGpl&7SH|%zhT*vEV5{&IL^~To5n+ReIaf?@^rD|SI)tu#an1~xV zV4?#Fh6D9%HBXkTtgKS5kXm6FNM-*iO*o!% zU$&zghYcLjNJpuR9i%y4VR+I6<6qRhSb~*NYCDQ!IBwvCiIX_R(4ALhE5}u}D6QKS zsjs=DREgLs>pD6D_tMc3^f9oJ82T|_;EahuoFzt@CmEPlWiFjZ;#o~-_S%-~XNH3* zzpA=Wi=Hc;f~^@DGLgnGffoe%4>lno7}!wQHgJw1xg*J}CtRK@i5M(gFmTbtC0yRs z8Vy8-@T!sy!(4^DSIVapDEfy)5 zRe4@|%w4I^zA@|-WtHK`e~6)chP&Nfga2{b-G&s>?(OKnVC|Dm>ZCd071i=Xu4SfX zqXI{RE#&uQfFs}1q=H=%bbof#C-IlY08lI!;qOM031__B6ohIYE{s z+A~^v(%-<+Nh29uM|-j}*+t7b4t+t-r+VBidUlg9Xl#dRkVcW9Unja~KUufdv*0$S z=tL@EjL;egErdzY$=>v5^bCK+>F-E|u!)g%oc~B~LeSZDMH*w0p1q9-Kby8@Fzvs; zgBgmrOJ30snSnbXx(M)|4|tt|HDEkFyovsiO$y^zs zfeh27Ax-R0sKzi;8de4alYxXm@1qK7=pTgc$o41h@vhLqBRQE}>3c2l-VSsZ&keL1 zu+XS>Xr9|rX#-0PbC>mqCUSP6avM@=r9IvY^QvqLr3}ib7+5j!2#*;S1~NV0)pl1{ zq1*_9>%a zQsTbS(T)xc$pns|lcA?xE`}z)wq`zHum;oh3=b8RN;gzcYAAhx^MVT6NNG66&|6k} zN}9%sXJwVNEn`wnhb%*Eih5({NE1M_ULhl#MV>K9)0wuj++5<04CGK5Q+eq!^wsSn z#h^JAXc~X6vVo~uO*MR>5kq`I z<}9u}hv3+*^{Ht72klq`jW^h5RVm@9#|d+N!S+ps|K_PKu`SH=H)fJz(icNNMTrmy=gRav28hO}j5sb3 LrG2XE$AVDQoff-FvS+X&M)ESmylkrHHe60AXP`ZgG76Pp0NqfCsyg?%8E?h8vCC|#yCDK zgGZA|s$$`k(IjdMvQanu96U%xp7;MvMTX9c^>@Qr%CXT--Z?%n`bs5*6;UduMo`$N z`wZ2Axss1boKtLfceWOyF@Eao{_Kh9>DI)bepVCgYI{kZ0o%M z9jwr*fmN)Lh;QC2#ejMz=sluw@!9X+8K@>edrG5@b$qAz2K_Z6O0I&<(*D2}c|Ud= FcmwP?s=ELH literal 0 HcmV?d00001 diff --git a/target/classes/com/baoshi/conf/AiConfig.class b/target/classes/com/baoshi/conf/AiConfig.class new file mode 100644 index 0000000000000000000000000000000000000000..efbf630a630d9fee377867d3784e4fe9a72bb73a GIT binary patch literal 2139 zcmb_e+foxj5IvJXVnP5VqJZ~%P+&wwuu!WY7Nu1vcq!f|n@KXd*-6drivE#r>WjAr zKfsT&?AgtQXp%CPsoLG?+3quEx=+vM$Ioxy0o=o#ED}hjF_Ob5QVfS*ir0d>!mIL~ z(o5+C45_=yQ^9?PWMO`942O_OBb&n*atw>wRJq?U%Bxn4sLOqAUU8wgQxgGqTqV7L z7inCKh79RasNAwN43)z6pxC-DOE(IAY)9+!1HJ!P>EdR*&iWW8Fqy{T9FAa$VP(*o zeNh-jBi;pQk5yGX>lAT3cX+rrxFjWg`7=qPzCgPJby z3VSdF(ojuipM_qa>T*x{iVC*jc{&hH4KMcWa8g1b-vnH=UHPUI9wp&?H&%O@F3`1} zpd~`^c||yZHg69?Z&2gyD-9(}|T*j3MJ&OY7De@}CXA(3G zngFiRWvMLCbCIs`1Q|;-Xx%xkH@Q5eXv-yUxh#A_{wrn^_>EM&trG{x$}s7=C(5GRZPP2=^gpfDl+l3?j0CKsY4AoviwPw<6I~jzI_5$b*k*YpqhNZ$xNTUT8~UE( zNZ%NaoX{TjiqZ)NE2{$YtZ_3ObZqH{!)94v!BBi!6xxo#h5TI1#{v!AIu@db+v~pa z{4q&!Huoh|H8SS6PG8cnSRm*5V@6Q+ZFlU7ZZDQ5m@C*(+WMGTJoh) zjtY()j4Mrft|!oTH3|rAXH#giQ099euujK%Y##@;3{P%qwiYIyPamfPTgIO837A97rL|NV|1tHauDMVXKCI9ow*7V13=*z#5mu zNcq?3{Tb~szu-k~Q5KInW)RwzKyP2e8BOS72s?BbcwAs^5ETN;w+r%&D{!cw-;c;^ zkqpAovb4xNk9`{U>o|aC1O^`gPkLq)NMGPmt$SBo?Gc<1OMOVkVGL3wK}fGD2^?uz zC6tMjBQhv6+-0hdqd2DFxQ-JzDR8hgX{R$3&=^r6!%1LmqoY>+C^d8*r&Mqc2^?-2 zjEczyD5r5o!&wF8IYw%0P#W0@ET%}+YLVJgplj3~bImaFrNBtC;eLYOH+_F=PMbfF z7g#Y8xuIQ>7wo`hHag_GUTB6kO(w9XDZhd=-N3jKC*T`~Ss^eEMWHuk`?5&3ZG)^= zswUa4JROw^(m$t?oj}i!XPM3g)3?=oy4V(u+dMBf)ItH|A=xqMNS zTtj~<$sjPtVnLgjqrIfcFi)=5UIC-2nr1AF6nx%jXj&62(kcG#VHu8l#j~a=tD*F% zi;E8rr-_3oi|=YG?vyMT1=}sw8uYkSokdyIWP$cc(}}2;_PE{)Y^ZmfitKeBwEKb2 zO4DY{MwwPAI0^WNHf^+tLFJf)@Q_>TqS>Gk6yQAIgV!y%#w?$PF?vzZI619Z^>h}iqMr!`^_DS zaHf>d%z2nCLpFM86HAkJANIVES}@Crw+9P4@LCqH;|&dOsz&iGb{kdkYjZ(mm&N<|K*NVRKElV0o@qdbVz(d)Gfk~*rI-w= zZ-4*)pl8)c-N!`FwF;~I9BZ?-pfxJ08=p4Tyi~nZ*5_H?i@wlN#&Fov*A|<}Y&Z3jIKkyEbQP(*> zNBEY(D9&;0;QD!vZ5(+wQ@gXaD z46vNH#1-h_9b`3so7rS<=co?uPncH@&fz7z91D}fE1YFWxfZX&B)SZU;9aRYNgW!+bK3{9m~Y5nv4C{7$(AY)+CVa1|3N#G5I^ftexhyq&v?-Ml>C z#oi3=;-KK;h(Hx+PYh%u#qA}~O@z0l2H-#i;6Mf7Kn38Y2M6fH0GASlq|^z(65JT5 z*92&HRyjDgDqEi7sGMh6e;t@-6`0`!Os#7q7FwE+#3GWGDKxQ=&$;rmfX|5Y3??f+ zIK}tt{P%G62KT&;cWJ**@EN|uS6tsfnmldzbw?MDa{PwlX^!7={0=|hN38e{A{qYP literal 0 HcmV?d00001 diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties new file mode 100644 index 0000000..2c0090c --- /dev/null +++ b/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=spring-ai-alibaba-demo +groupId=com.baoshi +version=1.0-SNAPSHOT diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..7dbf840 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,4 @@ +com/baoshi/BusinessRouteTool.class +com/baoshi/ApiListTool.class +com/baoshi/ApiListTool$DomainRequest.class +com/baoshi/BusinessRouteTool$RouteRequest.class diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..3a3ea52 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,5 @@ +/Users/kazusa/IdeaProjects/spring-ai/spring-ai-alibaba-demo/src/main/java/com/baoshi/ApiListTool.java +/Users/kazusa/IdeaProjects/spring-ai/spring-ai-alibaba-demo/src/main/java/com/baoshi/BusinessRouteTool.java +/Users/kazusa/IdeaProjects/spring-ai/spring-ai-alibaba-demo/src/main/java/com/baoshi/Main.java +/Users/kazusa/IdeaProjects/spring-ai/spring-ai-alibaba-demo/src/main/java/com/baoshi/conf/AiConfig.java +/Users/kazusa/IdeaProjects/spring-ai/spring-ai-alibaba-demo/src/main/java/com/baoshi/controller/MultiModelsController.java diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst new file mode 100644 index 0000000..3709823 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst @@ -0,0 +1 @@ +com/baoshi/DemoTest.class diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..87e4e2a --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst @@ -0,0 +1 @@ +/Users/kazusa/IdeaProjects/spring-ai/spring-ai-alibaba-demo/src/test/java/com/baoshi/DemoTest.java diff --git a/target/spring-ai-alibaba-1.0-SNAPSHOT.jar b/target/spring-ai-alibaba-1.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..7361c75ebf1c14a4f1c6f0b6b723f6e25689871e GIT binary patch literal 5795 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 literal 0 HcmV?d00001 diff --git a/target/surefire-reports/TEST-com.baoshi.DemoTest.xml b/target/surefire-reports/TEST-com.baoshi.DemoTest.xml new file mode 100644 index 0000000..61d1077 --- /dev/null +++ b/target/surefire-reports/TEST-com.baoshi.DemoTest.xml @@ -0,0 +1,1682 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/target/surefire-reports/com.baoshi.DemoTest.txt b/target/surefire-reports/com.baoshi.DemoTest.txt new file mode 100644 index 0000000..b8faf04 --- /dev/null +++ b/target/surefire-reports/com.baoshi.DemoTest.txt @@ -0,0 +1,4 @@ +------------------------------------------------------------------------------- +Test set: com.baoshi.DemoTest +------------------------------------------------------------------------------- +Tests run: 4, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 15336 s -- in com.baoshi.DemoTest diff --git a/target/test-classes/com/baoshi/DemoTest.class b/target/test-classes/com/baoshi/DemoTest.class new file mode 100644 index 0000000000000000000000000000000000000000..5526df5f7e9a45e1a8b6e0828de8fb1e15ebc8ad GIT binary patch literal 16502 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 literal 0 HcmV?d00001