SpringAi整合Springboot搭建,配置以及测试

一,SpringAI简介:

Spring AI 是一个基于 Spring 生态的 AI 集成框架,旨在简化 AI 模型(如 OpenAI、Hugging Face 等)在 Spring 应用中的调用和管理。它提供统一的 API 和自动化配置,支持对话模型、嵌入模型等功能,适合快速构建 AI 驱动的应用。

二,搭建以及配置SpringAi框架

首先创建一个maven项目,我用的idea2024所以创建项目长这样:

点击create,项目中的文件下有一个Main的类,给这个删了,那东西没用:

由于之后加的依赖版本要统一所以要加一个依赖管理:

java 复制代码
<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.ai</groupId>
                <artifactId>spring-ai-bom</artifactId>
                <version>1.1.5</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

这里之所以使用1.1.5的版本是因为在官方的github仓库中是这样提示的SpringAi 2.几的版本对应的是springboot4的版本,SpringAi1.1.几的版本对应的是springboot3.5.x的版本

这里使用openai的model,所以要找到starter中的openai 依赖位置我放截图上

这里可以看到artifactId直接加依赖,其他的依赖的groupId和version都是一致的:

XML 复制代码
<dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-starter-model-openai</artifactId>
            <version>1.1.5</version>
        </dependency>

然后再加一个Springboot3的父依赖以及测试依赖:

XML 复制代码
<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.5.4</version>
    </parent>
XML 复制代码
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

在resource文件夹下创建配置文件application.yml然后编写配置文件:

XML 复制代码
spring:
  ai:
    openai:
      api-key: 这里用你自己的apikey
      base-url: https://api.siliconflow.cn
      chat:
        options:
          model: Qwen/Qwen3.6-27B

这里的模型apikey以及配置需要的各种参数,我是从硅基流动的平台上获取的你们也可以去,我这个或者其他ai模型的平台去获取一下就是去注册一下,充个十块钱就可以用好长时间了,这里我给你在硅基流动的教程:

想用哪个模型就复制哪个模型的名字到配置文件,然后base-url都是https://api.siliconflow.cn

三,测试SpringAI

配置文件都配置好后我们开始测试一下ai的与springboot整合的效果,首先要在test包下绿色的java包中创建一个测试类,就是这个位置:

1.原生模型api调用

在测试类中编写以下代码,用来测试与ai进行对话的场景:

java 复制代码
package com.cat.ai.springaicat;

import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.ai.chat.messages.AssistantMessage;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.model.Generation;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.openai.OpenAiChatModel;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class SpringAiCatApplicationTests {

    @Resource
    private OpenAiChatModel openAiChatModel;

    @Test
    public void test1(){
        //构建一个消息对象
        Prompt prompt=Prompt.builder()
                .content("java是什么")
                .build();

        ChatResponse call = openAiChatModel.call(prompt);
        Generation result = call.getResult();
        AssistantMessage output = result.getOutput();
        String text = output.getText();
        System.out.println(text);
    }

}

首先我们直接注入这个openai的这个对话模型,然后创建一个消息对象,这种调用方法是最基础的原生调用方法,没有任何规则,角色的限制,大模型会自由回答,给到一个这个结果:

2.基于模型对象,构建出一个聊天客户端对象,使用构造器的方法,传入模型对象

java 复制代码
 @Test
    public void test2(){
        //基于模型对象,构建出一个聊天客户端对象
        ChatClient chatClient=ChatClient.builder(openAiChatModel)
                //defaultSystem用来给ai设置系统提示词
                .defaultSystem("你是一名医生,只回答医学问题,其他问题一律回答不知道")
                .build();
        String content = chatClient.prompt("java是什么").call().content();
        System.out.println(content);
    }

这种调用方式的特点是:客户端调用,可设置 AI 角色 / 规则 ,代码简洁,生产环境标准用法

3.创建bean对象,注入实现多身份的ai对话

这就是Springboot原生的技术了,使用创建Bean对象,交给容器管理,实现多个身份的对话客户端,想用哪个用哪个

java 复制代码
package com.haina.ai.config;

import jakarta.annotation.Resource;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.openai.OpenAiChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AiConfig {

    @Resource
    private OpenAiChatModel openAiChatModel;

    @Bean
    public ChatClient doctor(){
        ChatClient chatClient=ChatClient.builder(openAiChatModel)
                .defaultSystem("你是一个医生")
                .build();
        return chatClient;
    }

    @Bean
    public ChatClient teacher(){
        ChatClient chatClient=ChatClient.builder(openAiChatModel)
                .defaultSystem("你是一名老师,你的名字叫做猫咪")
                .build();
        return chatClient;
    }

    @Bean
    public ChatClient police(){
        ChatClient chatClient=ChatClient.builder(openAiChatModel)
                .defaultSystem("你是一名警察")
                .build();
        return chatClient;
    }
}

由于这里创建的bean对象的返回值类型都是一样的,所以要使用@Qualifier注解通过这个方法名的方法进行注入

java 复制代码
@Test
    public void test3(@Qualifier("police") ChatClient chatClient){
        String content = chatClient.prompt()
                //临时的系统提示词
                .system("你的名字叫咪子")
                .user("你是谁").call().content();
        System.out.println(content);
    }

4.传递字符串参数的时候还有一种使用Lambda表达式的写法,可以将str作为参数传递到提示词的模板中,可以想象到ai的使用会非常灵活

java 复制代码
@Test
    public void test4(){
        ChatClient chatClient=ChatClient.builder(openAiChatModel).build();
        String str = "Spring Aop";
        //在text方法中可以使用提示词模板,格式是{占位名称}
        //然后再param方法中的占位符赋值
        String content = chatClient.prompt()
                .user(
                        u -> u.text("请用中文解释:{str},并给出一个简单的示例,用200个字回答")
                        .param("str",str)
                )
                .call()
                .content();
        System.out.println(content);
    }

返回结果:

相关推荐
fanstuck2 小时前
1M 上下文能怎么用?我用 Seed Evolving 做了一个招标文件版本差异审查器
服务器·人工智能·数据分析·开源·aigc
墨舟的AI笔记4 小时前
React 组件库的 Tree Shaking:按需加载与副作用的工程化治理
人工智能
WoooChi5 小时前
DailyTech-20260724
人工智能·科技·业界资讯
zh路西法5 小时前
【CAM Grad-CAM Grad-CAM++】深度学习模型可解释性:从原理到YOLOv8部署实战
人工智能·深度学习·yolo·yolov8·grad-cam·cam
雨辰AI5 小时前
全集实战:企业级大模型服务化部署全栈指南|FastAPI 封装 + Nginx 负载均衡 + 高可用架构 从单机到生产一步到位
人工智能·ai·负载均衡·fastapi·ai编程
触底反弹5 小时前
Vibe Coding 不写 Git,等于悬崖边飙车
人工智能·git·面试
咖啡屋和酒吧6 小时前
健康管理:现代生活的科学守护
人工智能·生活·精选
星栈独行6 小时前
翻完 Pi 源码:它和 Codex、Claude Code 有何不同
开发语言·javascript·人工智能·程序人生
没有梦想的咸鱼185-1037-16636 小时前
AI-Python机器学习与深度学习技术:CNN/Transformer/扩散模型、SHAP可解释及Hermes智能体自动化
人工智能·python·深度学习·机器学习·chatgpt·cnn·transformer
船漏了就会沉6 小时前
Kimi K3 vs DeepSeek-V4:国产大模型的技术路线之争
人工智能