遨游Spring AI:第一盘菜Hello World

****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盘以后,运行如下的命令,用于设置系统的环境变量:

go 复制代码
setx OLLAMA_MODELS "D:\Ollama\models" /M

切换到D盘的Ollama目录,运行如下的命令:

go 复制代码
OllamaSetup.exe /dir=D:\Ollama

随后弹出安装界面,按照提示点击下一步即可。安装成功后,在任务栏可以看到Ollama的图标(一个小的羊驼)。也可以在命令行输入ollama -v来查看它的版本号。

go 复制代码
D:\>ollama -v
ollama version is 0.5.11

2. 安装DeepSeek

还是进到Ollama官网,点击DeepSeek-R1超链接:

在跳转的页面中,选择体积最小的1.5b版本。这个b是billion(十亿)的缩写,1.5b就代表该模型包含15亿个参数,属于轻量级的人工智能模型。

点击右侧的复制按钮,把命令复制下来并且运行,可以先把它下载到本地:

go 复制代码
ollama pull deepseek-r1:1.5b

下载完成后,即可以在本地运行DeepSeek,把上面命令中的pull改成run即可运行。然后就可以跟DeepSeek进行对话了:

go 复制代码
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,否则会报错:

go 复制代码
<!--<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文件的配置信息如下:

go 复制代码
spring:
  http:
    encoding:
      charset: UTF-8
      enable: true
      force: true
  ai:
    ollama:
      base-url: http://localhost:11434
      chat:
        model: deepseek-r1:1.5b

4. 编码

我们从常见的AI聊天开始。Spring AI提供了ChatClient接口,它使用流畅API与AI模型进行交互。

流畅API(Fluent API),也可理解链式API,它是一种编程接口设计风格,通过链式方法调用和上下文连贯性设计,使代码具有类似自然语言的流畅性和可读性‌。它的特点是每个方法都返回当前对象实例,从而支持链式调用,减少代码冗余,提升可读性。

通过ChatClient.Builder对象可创建ChatClient,而对象ChatClient.Builder象可通过自动装配的方式获得。以下是controller的代码,功能就是:用户输入消息,程序把消息发送给DeepSeek并返回对应的字符串结果:

go 复制代码
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的翅膀,让应用程序飞翔起来吧。

创作不易,烦请点个在看、点个赞。

有任何问题,也欢迎留言讨论。

相关推荐
ManageEngineITSM3 分钟前
IT服务台为什么越忙越低效?
人工智能·自动化·excel·itsm·工单系统
程砚成4 分钟前
小微美业的数字化突围:一款轻量工具,如何让小店告别经营焦虑?
人工智能
IT_陈寒5 分钟前
为什么我的Vite热更新老是重新加载整个页面?
前端·人工智能·后端
safestar201216 分钟前
ES批量写入性能调优:BulkProcessor 参数详解与实战案例
java·大数据·运维·jenkins
还在忙碌的吴小二23 分钟前
Harness 最佳实践:Java Spring Boot 项目落地 OpenSpec + Claude Code
java·开发语言·spring boot·后端·spring
风吹迎面入袖凉24 分钟前
【Redis】Redis的五种核心数据类型详解
java·redis
zhaoshuzhaoshu26 分钟前
人工智能(AI)发展史:详细里程碑
人工智能·职场和发展
三分恶26 分钟前
支付江湖路—第一章:支付溯源——从贝壳到比特
后端
Luke~27 分钟前
阿里云计算巢已上架!3分钟部署 Loki AI 事故分析引擎,SRE 复盘时间直接砍掉 80%
人工智能·阿里云·云计算·loki·devops·aiops·sre
weixin_1562415757627 分钟前
基于YOLOv8深度学习花卉识别系统摄像头实时图片文件夹多图片等另有其他的识别系统可二开
大数据·人工智能·python·深度学习·yolo