一.干货干货!!!SpringAI入门到实战-小试牛刀

前言

SpringAI1.0.0正式版在前些时间正式出炉,这意味着它的版本开始稳定可以用于商用了,前面我们学习了LangChain4j开发AI应用,相对而言SpringAI也是非常重要的AI落地框架很多企业也在使用,本篇文章我们来介绍如何在SpringBoot项目中入门SpringAI.

认识SpringAI

SpringAI 是 Spring 官方推出的 AI 集成框架,旨在简化 Java 开发者对接各类 AI 模型和服务的过程,提供高效、灵活的企业级 AI 应用开发支持。其主要功能包括:

  • 多模型支持 :SpringAI 支持多种主流 AI 模型,包括 OpenAI(GPT-4、GPT-3.5)、Azure OpenAI、Hugging Face、Anthropic(Claude)、Google Vertex AI 等,开发者可通过标准化 API 快速切换模型,无需重复适配不同厂商的 SDK。支持:聊天模型,嵌入模型,图像模型,矢量数据库等
  • 智能 Prompt 工程 : 支持参数化提示词(Prompt),结合 Thymeleaf 或 FreeMarker 等模板引擎动态生成内容。自动维护多轮对话的上下文,优化大模型的连续交互能力
  • 数据预处理与增强 : 内置文本分块(Chunking)工具,适用于 RAG(检索增强生成)场景,支持 OpenAI Embeddings 或本地向量库(如 Sentence-Transformers),便于语义搜索和相似度匹配。
  • 函数调用 :支持 OpenAI 的函数调用(Function Calling),将自然语言指令映射到业务逻辑

相比Langchain4j而言功能上都差不多,前者是 LangChain 的 Java 移植版,更注重链式调用和灵活编排,适合复杂 AI 工作流开发。SpringAI深度集成 Spring 生态,提供开箱即用的自动化配置,适合 Spring Boot 项目快速接入 AI 功能。

整合SpringAI

1. 引入依赖

首先我们需要搭建一套SpringBoot基础环境,那么我们需要集成哪些东西呢 ,具体pom.xml如下

  • SpringBoot : 版本采用 3.3.8
  • JDK版本:21
  • SpringAI : 1.0.0 正式版本

参考文档:

xml 复制代码
<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>3.3.8</version>
</parent>

<properties>
	<java.version>21</java.version>
	<spring-ai.version>1.0.0</spring-ai.version>
</properties>

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

		<dependency>
			<groupId>org.springframework.ai</groupId>
			<artifactId>spring-ai-starter-model-openai</artifactId>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
</dependencies>

<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.ai</groupId>
			<artifactId>spring-ai-bom</artifactId>
			<version>${spring-ai.version}</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>

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

	<repositories>
		<repository>
			<id>spring-snapshots</id>
			<name>Spring Snapshots</name>
			<url>https://repo.spring.io/snapshot</url>
			<releases>
				<enabled>false</enabled>
			</releases>
		</repository>
		<repository>
			<name>Central Portal Snapshots</name>
			<id>central-portal-snapshots</id>
			<url>https://central.sonatype.com/repository/maven-snapshots/</url>
			<releases>
				<enabled>false</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</repository>
	</repositories>
  • spring-ai-bom : 引入SpringAI的依赖声明
  • https://repo.spring.io/snapshot :指定Spring的Maven仓库地址,否则依赖可能无法下载
  • spring-ai-starter-model-openai : SpringAI 整合Openai的基础依赖,因为OpenAI的ChatGPT出来的比较早,其他AI厂商大多遵循OpenAI的标准,所以我们通过OpenAI的集成方式也可以集成其他厂商的AI模型

2.项目配置

大模型我们采用阿里百炼平台的,官网地址:https://bailian.console.aliyun.com/?tab=model#/model-market

  • 首先需要登录百炼大模型注册账号
  • 在百炼大模型控制台找到API-KEY菜单,创建apikey

拿到百炼平台的APIkey之后,我们来配置yml文件,配置如下:

yaml 复制代码
spring:
  ai:
    openai:
      api-key: ${API_KEY} #百炼的api_key
      base-url: https://dashscope.aliyuncs.com/compatible-mode #阿里百炼平台模型地址
      chat:
        options:
          model: qwen-max-latest #模型名字
          temperature: 1 #温度,0-1,越大回答问题越人性化
server:
  port: 8888
  • 这里的 ${API_KEY} 是百炼平台创建的APIkey,你可以通过环境变量配置,或者在IDEA中指定环境变量从而避免明文展示

上面的配置我们采用了spring.ai.openai的协议标准来配置百炼平台的千问大模型,它是可以支持的。

3.配置ChatClient

接下来我们来创建SpringAI的ChatClient 对话客户端,创建一个配置类,然后通过@Bean来创建,代码如下

java 复制代码
@Configuration
public class AgentConfig {

    @Bean
    public ChatClient chatClient(OpenAiChatModel model){
        return ChatClient.builder(model).build();
    }
}
  • 这里是通过注入:OpenAiChatModel 对话模型指定给ChatClient。因为我们在yml中配置了OpenAi的对话模型,所以系统会自动装配 OpenAiChatModel 对象。

然后需要创建一个启动类,启动类采用最简单的即可

java 复制代码
@SpringBootApplication
public class SpringAiAgentApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringAiAgentApplication.class, args);
	}

}

4.编写Controller

编写Controller注入ChatClient 客户端实现和大模型对话

java 复制代码
@RestController
@RequiredArgsConstructor
public class AgentController {

    private final ChatClient chatClient;

    @RequestMapping(value = "/ai/chat")
    public String chat(@RequestParam String prompt){
        return chatClient
                .prompt("模拟女朋友的身份回答问题,不能暴露你AI的身份").user(prompt).call().content();
    }

}
  • chatClient.prompt().user(prompt) : 指定提示词,prompt("系统提示词")方法可以指定系统提示词让AI按照我们的要求来回答问题。 user("用户提示词")可以指定用户提示词,也就是用户的提问内容

上面的对话方式采用的是非流式的,也就是说客户端需要等待大模型把所有的结果处理完之后一起返回,那么这可能需要等待的时间比较长,如果想要采用流式输出可以修改如下

java 复制代码
 @RequestMapping(value = "/ai/chat")
 public Flux<String> chat(@RequestParam String prompt){
     return chatClient
             .prompt("模拟女朋友的身份回答问题,不能暴露你AI的身份").user(prompt)
             .stream().content();
 }

5.测试对话

启动项目,调用 chat接口,测试效果如下

整合本地模型Ollama

1.Ollama安装大模型

进入Ollama官网 : https://www.ollama.com/ 找到 download ,根据自己的系统环境下载对应的Ollama安装包,我这里下载的是windows版本

下载好之后双击安装,安装好之后进入到ollama安装目录,使用命令提示符窗口运行命令下载deepseek模型,模型下载且运行好之后就可以直接对话,如下:

模型的版本可以在ollama官网下载:https://www.ollama.com/library/deepseek-r1, 根据自己机器配置情况下载合适的版本

2.项目整合ollama

SpringAI1.0.0版本中的依赖和之前的版本有些不一样,如下:

xml 复制代码
<dependency>
	<groupId>org.springframework.ai</groupId>
	<artifactId>spring-ai-starter-model-ollama</artifactId>
</dependency>

接着我们在yaml中配置ollama相关属性

yaml 复制代码
spring:
  ai:
    ollama:
      base-url: http://localhost:11434 #ollama的接口地址
      chat:
        model: deepseek-r1:7b #模型名字

接着我们为Ollama配置新的ChatClient,在 AgentConfig 中增加Bean的配置

java 复制代码
 @Bean
 public ChatClient ollamaClient(OllamaChatModel model){
     return ChatClient.builder(model).build();
 }

3.编写测试

在controller中注入ChatClient ollamaClient 进行测试,效果如下

java 复制代码
    @RequestMapping(value = "/ai/chat/ollama")
    public Flux<String> ollamaChat(@RequestParam String prompt){
        return chatClient
                .prompt("模拟女朋友的身份回答问题,不能暴露你AI的身份").user(prompt)
                .stream().content();
    }

测试效果和使用百炼平台的模型是一样的,只是可能本地的模型会稍微慢一点,因为本地机器配置问题。

总结

本篇文章我们介绍了如何在SpringBoot整合SpringAI1.0.0版本,其中包括百炼大模型的接入,以及本地大模型DeepSeek模型的接入,以及如何指定系统提示,流式输出等。如果文章对你有帮助请三连,你的鼓励是我最大的动力,点赞破千就是头发掉光也出下章。

相关推荐
weixin_985432113 小时前
Spring Boot 中的 @ConditionalOnBean 注解详解
java·spring boot·后端
猎人everest3 小时前
快速搭建运行Django第一个应用—投票
后端·python·django
啾啾Fun5 小时前
精粹汇总:大厂编程规范(持续更新)
后端·规范
yt948326 小时前
lua读取请求体
后端·python·flask
IT_10246 小时前
springboot从零入门之接口测试!
java·开发语言·spring boot·后端·spring·lua
汪子熙6 小时前
在 Word 里编写 Visual Basic 调用 DeepSeek API
后端·算法·架构
寻月隐君7 小时前
手把手教你用 Solana Token-2022 创建支持元数据的区块链代币
后端·web3·github
代码丰7 小时前
使用Spring Cloud Stream 模拟生产者消费者group destination的介绍(整合rabbitMQ)
java·分布式·后端·rabbitmq
烛阴8 小时前
Cheerio DOM操作深度指南:轻松玩转HTML元素操作
前端·javascript·后端
Hello.Reader8 小时前
在多云环境透析连接ngx_stream_proxy_protocol_vendor_module
后端·python·flask