SpringBoot整合OpenAI

news/2025/12/8 11:33:48/文章来源:https://www.cnblogs.com/viva-zzt/p/19320710

记录一下SpringBoot整合OpenAI的过程

要求是jdk17

1、添加pom.xml文件的依赖如下:

<!--    管理依赖--><dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>1.0.0-M6</version><scope>import</scope><type>pom</type></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>3.5.6</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
<!--    引入openAI依赖--><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>

2、配置application.yml文件

我使用的是deepseek模型,可以方便获取key,官网地址:https://platform.deepseek.com/

server:port: 8080
spring:application:name: spring-ai-learnai:openai:# 替换成自己的api-keyapi-key: 你的keybase-url: https://api.deepseek.com
      chat:options:model: deepseek-chat
# 开启日志输出为DEBUG
logging:
level:
org.springframework.ai.chat.client: DEBUG

3、创建配置类,配置ChatClient的基本信息

/*** <p>配置类</p>** @author : zzt* @date : 2025-12-08 10:12**/
@Configuration
public class ChatClientConfig {@Beanpublic ChatClient chatClient(ChatClient.Builder builder, Advisor simpleLoggerAdvisor){return builder.defaultAdvisors(simpleLoggerAdvisor).build();}/*** 创建一个Advisor,用于记录日志* @return  Advisor*/@Beanpublic Advisor simpleLoggerAdvisor(){return new SimpleLoggerAdvisor();}
}

4、最后看开始编写代码

/*** <p>聊天的控制器</p>** @author : zzt* @date : 2025-12-08 10:16**/
@Slf4j
@RestController
@RequestMapping("/chat")
@RequiredArgsConstructor
public class ChatController {// 定义final并添加@RequiredArgsConstructor注解,等同于通过构造方法声明Beanprivate final ChatClient chatClient;/*** 根据问题返回答案* @param question  问题* @return  答案*/@GetMapping("/ask")public String ask(@RequestParam("question") String question) {return chatClient.prompt().user(question).call().content();}/*** 根据问题流式返回答案* @param question  问题* @return  答案*/@GetMapping(value = "/askSteam", produces = MediaType.TEXT_EVENT_STREAM_VALUE)public Flux<String> askSteam(@RequestParam("question") String question) {return chatClient.prompt().user(question).stream().content().doOnNext(param -> log.info("Answer: {}", param));}
}

 

注意问题,在SpringBoot高版本中,一个参数接受也必须添加注解,否则会有如下的报错

java.lang.IllegalArgumentException: Name for argument of type [java.lang.String] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the '-parameters' flag.

解决办法在Controller中接受天数添加注解@RequestParam

 @GetMapping("/ask")public String ask(@RequestParam("question") String question) 

5、最后添加启动类

/*** <p>启动类</p>** @author : zzt* @date : 2025-12-08 10:13**/
@SpringBootApplication
public class AIApplication {public static void main(String[] args) {SpringApplicationBuilder builder = new SpringApplicationBuilder(AIApplication.class);ConfigurableEnvironment environment = builder.run(args).getEnvironment();// 当然为了安全也可以将key配置到环境变量中String property = environment.getProperty("ssl.api.key");System.out.println("ssl.api.key: " + property);}
}

项目结构如下

├─src
│  ├─main
│  │  ├─java
│  │  │  └─com
│  │  │      └─zzt
│  │  │          │  AIApplication.java
│  │  │          │  
│  │  │          ├─config
│  │  │          │      ChatClientConfig.java
│  │  │          │      
│  │  │          └─controller
│  │  │                  ChatController.java
│  │  │                  
│  │  └─resources
│  │          application.yml

访问:http://localhost:8080/chat/ask?question=%E4%BD%A0%E5%A5%BD%E5%91%80

image

 访问:http://localhost:8080/chat/askSteam?question=%E4%BD%A0%E5%A5%BD%E5%91%80

基于流式响应返回的结果

image

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/992500.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

事倍功半是蠢蛋63 cursor一直卡在planning next move

省流 重装回1.7 https://forum.cursor.com/t/cursor-runs-very-slowly-and-gets-stuck-on-planning-next-moves/140994/17

2025 年 12 月玉米加工设备,全自动面粉加工设备厂家最新推荐,产能、专利、环保三维数据透视

引言​ 在国家 “十四五” 粮食安全战略推动下,粮油加工行业迎来智能化、绿色化升级浪潮,2024 年国内粮机产业规模已达 867 亿元,同比增长 12.3%。玉米加工设备与全自动面粉加工设备作为核心生产装备,其性能直接决…

护发素男士专用!25年五大柔顺护发素推荐,烫染干枯毛躁发质闭眼入不踩雷

在通勤日晒频繁、热工具造型常态化、水质偏硬的现代生活中,头发受损问题正逐渐低龄化。据《2025 中国头皮健康产业白皮书》数据显示,超 75% 的 20-35 岁人群因频繁染烫、高温损伤面临头发干枯毛躁、分叉易断的困扰,…

2025年市面上排行前列的石笼网厂商哪个好,柔韧抗压石笼网/双隔板石笼网/锌铝合金石笼网/镀锌低碳钢丝石笼网/六角石笼网厂商推荐

随着水利工程、生态护坡及基础设施建设需求的持续增长,石笼网(格宾网)作为关键的结构性材料,其市场关注度与日俱增。面对市场上众多的生产厂家,如何甄选出技术可靠、品质过硬、服务完善的供应商,成为众多采购方关…

实力强的空气能十大品牌排名解读,商用空气能厂家推荐

在当今追求节能环保与舒适生活的时代,空气能产品凭借其独特的优势,在市场上逐渐崭露头角。尤其是商用空气能领域,众多品牌纷纷发力,竞争激烈。那么,实力强的空气能十大品牌排名情况如何?哪些商用空气能厂家更值得…

awk查看第几列等于某某值

awk -F | $2=="test" {print} slave01.access.log > slave01_test 查看第2列等于变量test,并输出结果

本地消息表(可靠消息服务化)与outbox的区别

🚀 一句话总结(先给你重点)Outbox = 表在业务库里,消息与业务数据 同库同事务。 可靠消息服务化 = 表在“消息服务”的独立库里,业务方需要跨服务调用创建消息。也就是:Outbox:代码模式 + 同库事务 可靠消息服…

Dism++下载安装教程:图文讲解与系统优化全攻略

本文提供详细的 Dism++ 下载安装教程,包含下载、解压、启动与功能设置的图文步骤,全面讲解空间回收、更新管理、驱动备份、启动优化等核心功能。适配 Windows 7、Windows 10 与 Windows 11 系统,帮助用户一步搞定系…

值得推荐的空气能十大品牌供应商,哈唯空气能脱颖而出

在当今追求节能环保、舒适生活的时代,空气能产品凭借其高效、节能、环保等优势,成为众多用户的理想选择。然而,市场上空气能品牌众多,质量良莠不齐,如何挑选到的空气能品牌成为了消费者关注的焦点。下面为大家推荐…

2026最新短视频去水印接口支持抖音/快手/小红书/西瓜等多平台去水印API聚合接口

接口支持国内所有热门短视频平台去水印解析:西瓜视频、快手、抖音、小红书、今日头条、火山、皮皮虾、微博、小咖秀、微视、美拍、网易云、YY、陌陌、配音秀、虎牙、全民K歌、哔哩哔哩、最右、皮皮搞笑、全民小视频等…

上周热点回顾(12.1

热点随笔:如何将WinForm.NET代码迁移到Blazor WASM平台上 (袁永福 电子病历,医疗信息化) 我要吐了,现在上线个小程序这么麻烦吗?! (程序员鱼皮) 紧急警报:React 曝出核弹级漏洞,无需登录即可接管服务器 (秋…

2025苏州新加坡留学中介有哪些

2025苏州新加坡留学中介有哪些一、2025年苏州新加坡留学中介有哪些作为从业12年的国际教育规划师,我经常收到苏州学生和家长关于新加坡留学中介的咨询。2025年,随着新加坡留学政策的优化,如签证流程简化和部分高校增…

2026短视频去水印接口支持抖音/快手/小红书/西瓜等多平台去水印API聚合接口

接口支持国内所有热门短视频平台去水印解析:西瓜视频、快手、抖音、小红书、今日头条、火山、皮皮虾、微博、小咖秀、微视、美拍、网易云、YY、陌陌、配音秀、虎牙、全民K歌、哔哩哔哩、最右、皮皮搞笑、全民小视频等…

科研与实验室的得力助手:全自动基因扩增仪知名品牌推荐

在科研和实验室领域,基因扩增仪是至关重要的设备。它能够帮助科研人员复制和扩增特定的DNA片段,为医学、生物学等众多领域的研究提供了有力支持。那么,如何选择一台靠谱、性价比高的全自动基因扩增仪呢?本文将为您…

Linux 跨进程内存交互技术详解及实践

在Linux系统中,进程的内存空间通常是相互隔离的,这种隔离性是系统稳定性和安全性的重要保障。然而,在某些合法场景(如调试、进程监控、内存分析)中,需要突破这种隔离实现跨进程内存交互。本文将深入解析三种主流…

2025新加坡出国留学机构一共有几家

2025新加坡出国留学机构一共有几家一、2025年新加坡出国留学机构概况作为从业10年的国际教育规划师,我经常被学生和家长问及新加坡留学中介的数量问题。根据2025年发布的《亚太留学服务市场白皮书》数据显示,新加坡境…

处理民事纠纷,可靠律师哪家好?

在生活和商业活动中,民事纠纷时有发生,如何找到一位可靠的民事纠纷律师至关重要。在寻找律师的过程中,大家往往会关注行业优势、特点、价格、品牌、口碑等多方面因素。 从行业优势来看,可靠的民事纠纷律师能够凭借…

2025 OK 镜十大品牌推荐!5000-19800 元价格表 + 科普,家长选镜不踩坑

随着儿童青少年近视率逐年攀升,OK 镜(角膜塑形镜)成为家长们关注的近视控制利器。它通过夜间佩戴 8 小时以上重塑角膜形态,白天无需戴镜就能拥有清晰视力,还能有效延缓眼轴增长。但市面上品牌繁多、价格差异大,2…

梁山鸡堂食体验:季节之选与杨家坪的美味探寻

在重庆的美食版图中,梁山鸡无疑是一颗璀璨的明星,而梁山鸡堂食更是众多食客钟情的用餐方式。梁山鸡究竟有何独特魅力,在什么季节吃好,杨家坪又有哪些好吃的梁山鸡呢?让我们一起深入探寻。 梁山鸡的行业优势与特点…

2025新加坡留学机构十大排名榜

2025新加坡留学机构十大排名榜一、2025新加坡留学机构排名解析作为从业12年的国际教育规划师,我经常被学生和家长询问如何选择新加坡留学中介。在2025年12月5日的当下,新加坡留学热度持续上升,根据《2025亚太地区留…