遨游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的翅膀,让应用程序飞翔起来吧。

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

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

相关推荐
寻月隐君4 分钟前
Rust 异步编程实践:从 Tokio 基础到阻塞任务处理模式
后端·rust·github
GO兔4 分钟前
开篇:GORM入门——Go语言的ORM王者
开发语言·后端·golang·go
蹦蹦跳跳真可爱5897 分钟前
Python----大模型(使用api接口调用大模型)
人工智能·python·microsoft·语言模型
小爷毛毛_卓寿杰8 分钟前
突破政务文档理解瓶颈:基于多模态大模型的智能解析系统详解
人工智能·llm
Mr.Winter`9 分钟前
障碍感知 | 基于3D激光雷达的三维膨胀栅格地图构建(附ROS C++仿真)
人工智能·机器人·自动驾驶·ros·具身智能·环境感知
Sincerelyplz10 分钟前
【Temproal】快速了解Temproal的核心概念以及使用
笔记·后端·开源
爱上语文11 分钟前
Redis基础(6):SpringDataRedis
数据库·redis·后端
Lemon程序馆11 分钟前
速通 GO 垃圾回收机制
后端·go
欧阳秦穆15 分钟前
apoc-5.24.0-extended.jar 和 apoc-4.4.0.36-all.jar 啥区别
java·jar
Aurora_NeAr16 分钟前
Spark SQL架构及高级用法
大数据·后端·spark