SpringBoot三步集成AI模型并实现格式化输出

发布于:2025-09-14 ⋅ 阅读:(20) ⋅ 点赞:(0)

✨重磅!盹猫的个人小站正式上线啦~诚邀各位技术大佬前来探秘!✨

这里有:

 

  • 硬核技术干货:编程技巧、开发经验、踩坑指南,带你解锁技术新姿势!
  • 趣味开发日常:代码背后的脑洞故事、工具测评,让技术圈不再枯燥~
  • 独家资源分享:开源项目、学习资料包,助你打怪升级快人一步!

👉 点击直达→ 盹猫猫的个人小站 👈
🌟 来逛逛吧,说不定能挖到你正在找的技术宝藏哦~

目录

前言

环境准备

实现步骤

Pom依赖

yml配置文件

请求接口

效果图

总结


欢迎来到 盹猫(>^ω^<)的博客

本篇文章主要介绍了

[SpringBoot三步集成AI模型并实现格式化输出]
❤博主广交技术好友,喜欢文章的可以关注一下❤

前言

        在AI发展日益强大的今天,作为SpringBoot的忠实Coder,你是否仍然还在盯着数据库的增删改查操作?危险⚠️,你可能已经快要被淘汰了.你可能会说,Java可以做AI么?那不都是Python的事情么?

不,AI的时代已经到来,Spring官方当然不会错过机会.他们推出了SpringAI,用于快速在SpringBoot(Spring)中集成AI模型调用操作,并且提供了丰富的响应数据的格式化操作.

Spring AI 解决了 AI 集成的根本难题:将企业数据和 API 与 AI 模型连接起来

网址:

SpringAI(https://springdoc.cn/spring-ai/index.html)

现在支持的模型类型如下:

AI无法在应用中集成的主要痛点就是两个:

1.接口调用困难(AI种类太多)
2.响应数据难控制(AI很调皮)

SpringAi通过预定于很好的解决了上述问题,这篇文章就是记录使用SpringBoot快速接入DeepSeek并进行格式化的输出操作.

环境准备

        根据要求官方推荐的SpringBoot版本为3.5+以上版本,而要使用这个版本以上,则JDK版本至少为JDK17版本,所以在开发前请确保使用JDK17以上版本,并在Pom配置时使用3.5+以上的SpringBoot版本.

实现步骤

Pom依赖

        在Pom文件中需保证环境版本为17以上,这里使用17版本,并且使用了3.5.2版本的父依赖.因为要接入DeepSeek使用的主要AI依赖为spring-ai-starter-model-deepseek,并且引入官方要求的快照仓库.

<?xml version="1.0" encoding="UTF-8"?>
<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>

    <groupId>com.uav</groupId>
    <artifactId>spring-deepseek</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!-- Spring Boot 父依赖 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.5.2</version>
    </parent>

    <properties>
        <!-- 注意:Java 24 是预览版,建议使用稳定版 Java 17 或 21 -->
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <repositories>
        <!-- Spring 快照仓库(用于 Spring AI 快照版本) -->
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <releases>
                <enabled>false</enabled>
            </releases>
        </repository>
    </repositories>

    <dependencies>
        <!-- 核心:Spring Web 依赖(含 Tomcat 服务器,支持 @RestController) -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- Spring AI DeepSeek 集成依赖 -->
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-starter-model-deepseek</artifactId>
            <version>1.1.0-SNAPSHOT</version>
        </dependency>

        <!-- 可选:Spring Boot 测试依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <!-- Spring AI 版本管理 BOM -->
            <dependency>
                <groupId>org.springframework.ai</groupId>
                <artifactId>spring-ai-bom</artifactId>
                <version>1.1.0-SNAPSHOT</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>


</project>

yml配置文件

        在配置文件中对api-key进行配置,该key可以在DeepSeek官网进行申请,并且配置为deepseek-chat类型(聊天模式),随机性参数设置为 0.8.

spring:
  ai:
    deepseek:
      api-key: 你的deepseek-key
      chat:
        options:
          model: deepseek-chat
          temperature: 0.8

请求接口

        在Controller中主要使用DeepSeekChatModelChatClient进行AI接口的请求,DeepSeekChatModel 负责提供基础的接口请求功能,我们这里因为需要进行格式化输出,所以使用ChatClient进行扩展功能的请求,示例中:我们需要一个关于进行新闻的列表,根据描述,我们的预期响应结构是返回如下结构:

news:[{"title":"标题","detail":"详细描述"}....]

的一个列表.并且进行返回为(使用entity要求返回Map格式)Map格式(即Json字符串).

package com.uav;

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.deepseek.DeepSeekChatModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;


@RestController
public class DeepSeekController {

    private final DeepSeekChatModel chatModel;

    @Autowired
    public DeepSeekController(DeepSeekChatModel chatModel) {
        this.chatModel = chatModel;
    }

    @GetMapping("/ai/generate")
    public Map<String, Object> generate(@RequestParam(value = "message") {
        return ChatClient.builder(chatModel)
                .build()
                .prompt()
                .user(u -> u.text("请返回一个关于{news}的列表")
                        .param("news", "今日新闻,item内容为{'title':'','detail':''},他们的key是'news'")
                )
                .call()
                .entity(new ParameterizedTypeReference<Map<String, Object>>() {
                });
    }

}

效果图

通过在浏览器中访问:
http://127.0.0.1:8080/ai/generate

得到下述响应:

非常完美,响应结果完全符合预期.

总结

        通过上述对DeepSeek的集成,可以看到SpringAI完美的解决了AI请求种类多(进行简单的配置即可),AI响应数据结构难以控制(通过增加提示词和转换器)的问题. 效果也是非常不错的.

        赶紧去让你的应用加入AI功能吧!

注意:虽然增加了转换器,但仍然需要在实际应用中捕获异常(即使概率很低),以防止AI的调皮输出.


如果你对区块链内容感兴趣可以查看我的专栏:小试牛刀-区块链

感谢您的关注和收藏!!!!!!