当前位置: 首页 > news >正文

一.干货干货!!!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 正式版本

参考文档:

<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文件,配置如下:

spring:ai:openai:api-key: ${API_KEY} #百炼的api_keybase-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来创建,代码如下


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

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

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

4.编写Controller

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


@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(“用户提示词”)可以指定用户提示词,也就是用户的提问内容

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

 @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版本中的依赖和之前的版本有些不一样,如下:

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

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

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

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

 @Beanpublic ChatClient ollamaClient(OllamaChatModel model){return ChatClient.builder(model).build();}

3.编写测试

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

    @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模型的接入,以及如何指定系统提示,流式输出等。如果文章对你有帮助请三连,你的鼓励是我最大的动力,点赞破千就是头发掉光也出下章。

http://www.xdnf.cn/news/995491.html

相关文章:

  • 山东大学《Web数据管理》期末复习宝典【万字解析!】
  • Mac 系统 Node.js 安装与版本管理指南
  • 使用Gitlab CI/CD结合docker容器实现自动化部署
  • React 集中状态管理方案
  • CentOS变Ubuntu后后端程序SO库报错,解决方案+原理分析!
  • .NET 中的异步编程模型
  • [电赛]MSPM0G3507学习笔记(二) GPIO:led与按键(流水灯、呼吸灯,短按长按与双击,ui预览)
  • 基于OpenCV和深度学习实现图像风格迁移
  • VR 地震安全演练:“透视” 地震,筑牢企业安全新护盾​
  • 16层混压PCB的精密重构:高频基板局部化的黄金法则
  • 【Go-补充】实现动态数组:深入理解 slice 与自定义实现
  • 机器学习 [白板推导](六)[核方法、指数族分布]
  • 【WebSocket】WebSocket架构重构:从分散管理到统一连接的实战经验
  • 新零售视域下实体与虚拟店融合的技术逻辑与商业模式创新——基于开源AI智能名片与链动2+1模式的S2B2C生态构建
  • C#事件基础模型代码
  • 【技术追踪】MMFusion:用于食管癌淋巴结转移诊断的多模态扩散模型(MICCAI-2024)
  • Linux部署bmc TrueSight 监控agent步骤
  • Java学习笔记之:初识nginx
  • js判断手机操作系统(ios、安卓、华为)
  • 分享在日常开发中常用的ES6知识点【面试常考】
  • “储能+热泵+AI”三维驱动,美的能源定义能源科技新未来
  • 【深度解读】混合架构数据保护实战
  • 从零搭建智能家居:香橙派+HomeAssistant实战指南
  • LlamaIndex 工作流 上下文状态和流式传输事件
  • SpringBoot+Junit在IDEA中实现查询数据库的单元测试
  • 代码训练LeetCode(32)Z字形变换
  • chrome138版本及以上el-input的textarea输入问题
  • 鸿蒙北向应用开发:新增ts文件出现的问题
  • 【狂飙AGI】第1课:大模型概述
  • QT+VTK 中QWidget与QVTKOpenGLNativeWidget的使用