欢迎关注微信公众号:互联网全栈架构

现在AI这么火爆,Java程序员如何参与其中呢?答案来了,那就是Spring AI。创作不易,烦请点个在看、点个赞。

本文就来讲一讲什么是Spring AI,并且编写一个Hello World程序,接入本地的DeepSeek,并且与其聊天。主要分为以下几个部分:

一、什么是Spring AI

二、编写Spring AI程序

三、测试

四、总结

什么是Spring AI

总体来讲,在人工智能领域,编程语言Python会显得高出一档,而Java语言或者Spring框架都有点相对滞后。为了弥补这一缺陷,Spring团队推出了Spring AI框架,旨在帮助Java程序员快速进行AI的相关开发,目前,已经推出了Spring AI 1.0.0 M1版本,当然,这个版本还在不断完善中,还不是GA(General Availability)。

132330e23fa08adf5cd31c15404b6cd2.png

顾名思义,Spring AI框架是用来进行AI应用开发的,它旨在简化人工智能应用程序的开发流程,减少或者避免不必要的复杂性。Spring AI具备以下特性:

1. 支持主流的AI模型,比如Anthropic, OpenAI, Microsoft, Amazon, Google, and Ollama。

2. 跨模型的兼容性,它提供跨AI提供商的API,这样就可以综合利用各平台的能力,同时它也提供特定模型的API。

3. 支持主流的向量数据库,包括Apache Cassandra, Azure Vector Search, Elasticsearch, Neo4j, Redis, SAP Hana等。

4. 模型输出映射,它能够将模型输出转换成Java对象(POJO),这样就大大降低了AI开发的难度。

5. 函数调用,使得AI模型能够与外部API进行交互,从而增强应用的功能性和灵活性。

。。。。。。

dca8cd90a33c87699bceb6ae6df6b072.jpeg

总体来讲,Spring AI解决的核心问题是:把你的数据和API与AI模型连接起来。

编写Spring AI程序

接下来我们就创建一个Spring AI的Hello World程序,它会连接本地的DeepSeek,并且调用接口进行交互。

环境准备:Spring AI要求Spring Boot的版本为3.2.x或者3.3.x。JDK为17或者以上版本。

新增一个父工程,pom.xml的内容如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.3.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.myai</groupId>
    <artifactId>example</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <name>example</name>
    <description>example</description>

    <modules>
        <module>dm-sample</module>
    </modules>

    <properties>
        <java.version>17</java.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>3.3.4</version>
            </dependency>

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <version>3.3.4</version>
            </dependency>

            <dependency>
                <groupId>org.springframework.ai</groupId>
                <artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
                <version>1.0.0-SNAPSHOT</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

再创建一个模块,模块的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.myai</groupId>
    <artifactId>example</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <groupId>com.myai</groupId>
  <artifactId>dm-sample</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>dm-sample</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

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

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>

这样,工程创建好了,接下来创建一个Controller类,用于接收请求,它把前端发过来的消息,转发给大模型,并把模型的结果返回给前端:

package com.myai.doc.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;
    }
}

对应的配置文件application.yaml:

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

当然,底层还是基于Spring Boot框架的,所以需要创建一个启动类,这个就非常简单了,此处不再给出,如果需要可以参考之前的文章。

测试

运行上面的程序,确保本地的Ollama在运行。关于本地部署DeepSeek的方法,请参考之前的文章:DeepSeek本地部署流程:超级简单,配置要求很低

在浏览器里面输入:

http://localhost:8080/ai/chat?message=hello

参数message就是我们跟大模型聊天的内容,这里是hello,回车后就出现下面的结果:

8b07db5bfe01e70aedd48702ff2fa33b.png

总结

这样,Spring AI的Hello World就算是完成了,并且接入的是现在超级火爆的DeepSeek。大模型的能力无庸置疑,有了这样的框架,让我们Java程序员非常广阔的想象空间。

Spring AI现在还是特别成熟,从版本号也就可见一斑,不过,依据Spring强大的社区力量和号召力,以及高歌猛进的AI演进,相信Spring AI会越来越成熟,早点入局,会带给我们更多的机会。

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

参考文章:

https://spring.io/projects/spring-ai

推荐阅读:

DeepSeek本地部署流程:超级简单,配置要求很低

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐