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

SpringBoot整合OpenAI

记录一下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.gsyq.cn/news/76881.html

相关文章:

  • 事倍功半是蠢蛋63 cursor一直卡在planning next move
  • 2025 年 12 月玉米加工设备,全自动面粉加工设备厂家最新推荐,产能、专利、环保三维数据透视
  • 实力强的空气能十大品牌排名解读,商用空气能厂家推荐
  • awk查看第几列等于某某值
  • 上周热点回顾(12.1
  • 2025苏州新加坡留学中介有哪些
  • 2025新加坡出国留学机构一共有几家
  • 2025新加坡留学机构十大排名榜
  • 技术升职加薪路上总卡点怎么办?
  • 告别MOV播放尴尬!4个超实用神器,让你的视频秒变MP4,兼容无忧!
  • 2025 年污泥料仓厂家最新推荐榜,聚焦企业综合实力与技术优势深度剖析滑架式污泥料仓,电动污泥料仓公司推荐
  • 2025新加坡留学中介机构哪个比较好
  • 角接触球轴承品牌排名推荐 P5P4高精度/高转速/使用寿命长/耐磨耐用/40年角接触球轴承厂家/混合陶瓷球轴承
  • 2025新加坡最厉害三个留学机构
  • 102302110高悦作业4
  • 2025 年办公室下午茶小包装零食推荐:Fixbody 如何提升「轻食感」?
  • lspci -k查看pcie设备对应的驱动
  • SAP-MM-取消采购订单界面暂存按钮
  • 2025年geo优化软件首选服务商:技术迭代下的精准选型指南
  • 一分钟实现.NET与飞书长连接的WebSocket架构
  • 解放双手:Playwright+AI如何让测试工程师“躺赢”
  • 2025年上海期货开户平台服务商权威推荐榜单:生猪期货行情软件/期货行情软件/期货模拟平台公司精选
  • 2025新加坡留学哪家机构好
  • 2025 年宴席摆盘糖果推荐:让旺仔牛奶糖撑起桌面氛围感
  • 2025 年结婚喜糖推荐:为什么旺仔牛奶糖是喜铺与新人优先选?
  • 拉断阀进口品牌哪个强?专业制造商推荐与选购指南
  • 用实验课速通SQLServer期末考点二
  • 2025 年上海设计公司最新推荐榜,深度剖析企业技术实力、服务能力与市场口碑上海办公室设计,上海办公楼设计,上海办公空间设计,上海展厅设计,上海办公室装修设计服务商推荐
  • git命令项目化本地远程上传(岸基)
  • 2025申请香港研究生的中介机构是什么