Spring AI的正式版已经发布了,很显然,接下来我们要做的事情就是写一个Hello World。
总体思路就是在本地搭建一个简单的大模型,然后编写Spring AI代码与模型进行交互。
分五步:
1. 安装Ollama;
2. 安装DeepSeek;
3. 创建Spring AI工程;
4. 编码;
5. 测试与小结。
1. 安装Ollama
为了在本地环境安装DeepSeek,我们先安装Ollama。Ollama是一个开源的大型语言模型服务工具,它帮助用户快速在本地运行大模型。
打开官网:https://ollama.com/download,选择Windows版本:
下载完成后,安装非常简单,按照提示操作即可,不过它默认安装在C盘。所以在D盘新建一个Ollama的文件,并且把安装程序(OllamaSetup.exe)拷贝到这个目录中。
然后以管理员身份运行cmd,切换到D盘以后,运行如下的命令,用于设置系统的环境变量:
setx OLLAMA_MODELS "D:\Ollama\models" /M
切换到D盘的Ollama目录,运行如下的命令:
OllamaSetup.exe /dir=D:\Ollama
随后弹出安装界面,按照提示点击下一步即可。安装成功后,在任务栏可以看到Ollama的图标(一个小的羊驼)。也可以在命令行输入ollama -v来查看它的版本号。
D:\>ollama -v
ollama version is 0.5.11
2. 安装DeepSeek
还是进到Ollama官网,点击DeepSeek-R1超链接:
在跳转的页面中,选择体积最小的1.5b版本。这个b是billion(十亿)的缩写,1.5b就代表该模型包含15亿个参数,属于轻量级的人工智能模型。
点击右侧的复制按钮,把命令复制下来并且运行,可以先把它下载到本地:
ollama pull deepseek-r1:1.5b
下载完成后,即可以在本地运行DeepSeek,把上面命令中的pull改成run即可运行。然后就可以跟DeepSeek进行对话了:
D:\>ollama run deepseek-r1:1.5b
>>> who are you
<think></think>Greetings! I'm DeepSeek-R1, an artificial intelligence assistant created by DeepSeek. I'm at your service and would be delighted to assist you with any inquiries or tasks you may have.
3. 创建Spring AI工程
接下来我们创建Spring AI工程。使用Spring Initializr可以快速生成脚手架: https://start.spring.io/,工程类型、语言、版本等内容可以参考下图进行选择,JDK选择版本17:
点击GENERATE按钮即可生成,把它下载到本地并用idea打开。注意,在pom.xml文件中,它默认使用的是openai,把它改成ollama的starter,否则会报错:
<!--<dependency>-->
<!-- <groupId>org.springframework.ai</groupId>-->
<!-- <artifactId>spring-ai-starter-model-openai</artifactId>-->
<!--</dependency>-->
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-ollama</artifactId>
</dependency>
同时,修改yml文件的配置信息如下:
spring:http:encoding:charset: UTF-8enable: trueforce: trueai:ollama:base-url: http://localhost:11434chat:model: deepseek-r1:1.5b
4. 编码
我们从常见的AI聊天开始。Spring AI提供了ChatClient接口,它使用流畅API与AI模型进行交互。
流畅API(Fluent API),也可理解链式API,它是一种编程接口设计风格,通过链式方法调用和上下文连贯性设计,使代码具有类似自然语言的流畅性和可读性。它的特点是每个方法都返回当前对象实例,从而支持链式调用,减少代码冗余,提升可读性。
通过ChatClient.Builder对象可创建ChatClient,而对象ChatClient.Builder象可通过自动装配的方式获得。以下是controller的代码,功能就是:用户输入消息,程序把消息发送给DeepSeek并返回对应的字符串结果:
package com.myai.demo.controller;import org.springframework.ai.chat.client.ChatClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/ai")
publicclass ChatController {privatefinal ChatClient chatClient;public ChatController(ChatClient.Builder chatClient) {this.chatClient = chatClient.build();}@GetMapping("/chat")public String chat(@RequestParam(value = "message") String message) {String result;try {result = chatClient.prompt().user(message).call().content();} catch (Exception e) {return"Exception";}return result;}
}
5. 测试与小结
这是Spring Boot程序,当然还需要对应的启动类,这个很简单,此处不再给出,如果需要完整的源代码,或者搭建过程中遇到什么问题,也欢迎后台私信进行讨论。程序启动后,我们跟它打个招呼,输入你好,看看它返回什么:
没问题,大模型返回了相应的消息,这样,第一盘菜Hello World算是搭建成功了。
初步想一想,应用程序能够与后台的大模型实时交互与对话,未来的想象空间确实比较大,让原本规规矩矩的程序变得十分强大,一些传统的功能经过大模型的智能运算处理,会厉害很多倍。
而且,当前这个程序只是基于本地的参数不多的模型,如果接入功能更为丰富、时效性更强的大模型,会智能得多。
接下来让我们一起插上AI的翅膀,让应用程序飞翔起来吧。
创作不易,烦请点个在看、点个赞。
有任何问题,也欢迎留言讨论。