长治市网站建设_网站建设公司_会员系统_seo优化
2025/12/18 13:49:12 网站建设 项目流程

记录一下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

 

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询