0


SpringAI初入

SpringAI 集成AI及本地部署AI

本篇主要简述一下SpringAI 如何来调用AI接口,以及部署本地AI来调用AI接口。

项目依赖

在内部接入AI,需要导入一下依赖

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId></dependency>

或者

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-ollama-spring-boot-starter</artifactId></dependency>

正对不同模型,spring ai 提供了不同的依赖jar包,上述给出的示例就是 chat-gpt 和 ollama 两中接口,根据实际使用,选择不同依赖。

例如:

然后本人的pom文件使用的是一个快照版本 pom配置文件如下:

<dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>1.0.0-SNAPSHOT</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

使用上述的依赖的时候,maven官方还未将上述使用的依赖录入,所以我们这里需要改变一下仓库地址 pom配置文件内容如下

<!--    <repositories>--><!--        <repository>--><!--            <id>spring-milestones</id>--><!--            <name>Spring Milestones</name>--><!--            <url>https://repo.spring.io/milestone</url>--><!--        </repository>--><!--    </repositories>--><repositories><!--这里使用的是快照版本--><repository><id>spring-snapshot</id><name>Spring Snapshot</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository></repositories>

然后可以写代码调用接口了。

代码内容

chat-gpt

聊天
@RestController@RequestMapping("/chatgpt")publicclassChatGPTController{@ResourceprivateOpenAiChatClient openAiChatClient;@GetMapping("/chat1")publicStringchat1(@RequestParam(value ="msg")String msg){String call = openAiChatClient.call(msg);return call;}@GetMapping("/chat2")publicStringchat2(@RequestParam(value ="msg")String msg){ChatResponse call = openAiChatClient.call(newPrompt(msg,OpenAiChatOptions.builder().withModel("gpt-3.5-turbo")// 指定模型 版本.withTemperature(0.5F)// 值越大 准确率约低.build()));return call.getResult().getOutput().getContent();}@GetMapping("/chat3")publicObjectchat3(@RequestParam(value ="msg")String msg){Flux<ChatResponse> stream = openAiChatClient.stream(newPrompt(msg,OpenAiChatOptions.builder().withModel("gpt-3.5-turbo")// 指定模型 版本.withTemperature(0.5F)// 值越大 准确率约低.build()));return stream.collectList();// 数据的序列, 一序列的数据,一个一个的数据返回}}
图片生成
@RestController@RequestMapping("/images")publicclassOpenAIImageController{@ResourceprivateOpenAiImageClient openAiImageClient;@RequestMapping("/image1")privateStringgenerateImage1(@RequestParam(value ="msg")String msg){// 可以通过配置文件来设置参数属性ImageResponse imageResponse = openAiImageClient.call(newImagePrompt(msg,OpenAiImageOptions.builder().withQuality("hd")// 高清.withN(4)// 指定生成图片数量.withHeight(1024)// 指定分辨率.withWidth(1024).build()));String url = imageResponse.getResult().getOutput().getUrl();return url;}}
spring:application:name: spring-ai-demo-01openai:api-key: xx
      base-url: xx
      image:options:width: xx
          height: xx
          n: xx
          model: xx
音频转文本
@RestController@RequestMapping("/transcription")publicclassTranscriptionController{@ResourceprivateOpenAiAudioTranscriptionClient openAiAudioTranscriptionClient;@GetMapping("/transcribe1")publicObjecttranscribe1(){// 将音频转文字// 这里将资源放在classpath目录下的org.springframework.core.io.Resource audio =newClassPathResource("xxx.flac");String call = openAiAudioTranscriptionClient.call(audio);return call;}}
文本转音频
@RestController@RequestMapping("/tts")publicclassTTSController{@ResourceprivateOpenAiAudioSpeechClient openAiAudioSpeechClient;@GetMapping("/speak")publicStringspeak(){String text ="语音内容";byte[] call = openAiAudioSpeechClient.call(text);writeBytesToFile(call,"output.mp3");return"success";}publicstaticvoidwriteBytesToFile(byte[] byteArray,String filePath){try(BufferedOutputStream bos =newBufferedOutputStream(newFileOutputStream(filePath))){
            bos.write(byteArray);System.out.println("字节数组已成功写入文件。");}catch(IOException e){System.out.println("写入文件时出错:"+ e.getMessage());
            e.printStackTrace();}}}
识别图片
@RestController@RequestMapping("/multi")publicclassMultiModelController{@ResourceprivateChatClient chatClient;@GetMappingpublicObjectmultiModel(String msg,String imageUrl){// 这里要指定图片类型UserMessage userMessage =newUserMessage(msg,List.of(newMedia(MimeTypeUtils.IMAGE_PNG, imageUrl)));// 这里要指定模型ChatResponse call = chatClient.call(newPrompt(userMessage,OpenAiChatOptions.builder().withModel(OpenAiApi.ChatModel.GPT_4_VISION_PREVIEW.getValue()).build()));return call.getResult().getOutput().getContent();}}

ollama

@RestController@RequestMapping("/ollama")publicclassOllamaController{@ResourceprivateOllamaChatClient ollamaChatClient;@GetMapping("/chat")publicObjectollama(@RequestParam(value ="msg")String msg){String call = ollamaChatClient.call(msg);System.out.println(call);return call;}@GetMapping("/chat1")publicObjectollama1(@RequestParam(value ="msg")String msg){ChatResponse response = ollamaChatClient.call(newPrompt(
                        msg,OllamaOptions.create().withModel("qwen").withTemperature(0.4F)));System.out.println(response.getResult().getOutput());return response.getResult().getOutput();}}

第一种方式会去使用配置文件中指定的模型,第二种文件使用,代码指定的模型。如果在代码中指定了模型,以代码指定的模型进行调用

.withModel("qwen")
.withTemperature(0.4F)

设置问题回答的准确度,值越大准确率下降。还可以设置其他参数,通过代码或者写配置文件的形式进行设置,可自行查看官方文档。Spring AI API :: Spring AI Reference

在使用不同模型,

application.yml

配置内容也不同

API-KEY

spring:application:name: spring-ai-demo-01ai:openai:api-key: xxx # 填写自己的 api-keybase-url: https://api.openai.com

本地大模型:

spring:application:name: spring-ai-demo-01ai:ollama:base-url: http://localhost:11434chat:options:model: qwen

本地模型部署

在 ollama 官网进行下载 Ollama ,下载window版即可

下载完成后 就可以选择模型进行部署在本地上 ollama 的官方提供了各类模型部署的命令

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

如何所示就是正常下载并运行。我这个原来下载过了,如果是第一次执行这条命令,他会自动去下载模型。

默认模型运行端口

localhost:11434

,在配置文件中就可以应用自己本地的模型

配置文件中用本地模型的时候,要注意模型的名称要写完整,不然会报错 500 找不到模型

标签: java spring ai

本文转载自: https://blog.csdn.net/m0_62239561/article/details/138345935
版权归原作者 @柠 所有, 如有侵权,请联系我们删除。

“SpringAI初入”的评论:

还没有评论