赞
踩
继承父版本的springboot依赖,最好是比较新的依赖。
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>3.2.4</version>
- <relativePath/> <!-- lookup parent from repository -->
- </parent>
-
-
- <dependency>
- <!-- 热部署插件-->
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-devtools</artifactId>
- <scope>runtime</scope>
- <optional>true</optional>
- </dependency>
jdk版本
- <properties>
- <java.version>17</java.version>
- </properties>
springAI版本
根据官网:Spring AI
选择稳定版本0.8.1
引入依赖:
- <properties>
- <java.version>17</java.version>
- <spring-ai.version>0.8.1</spring-ai.version>
- </properties>
-
- <dependencies>
- <!--spring ai的starter依赖,启动依赖,起步依赖-->
- <dependency>
- <groupId>org.springframework.ai</groupId>
- <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
- </dependency>
- </dependencies>
-
- <!--相当于是继承一个父项目:spring-ai-bom父项目-->
- <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>
由于阿里云的仓库还没更新springai的maven坐标,所以需要配置其他仓库,加入下面的依赖
快照版本是如果你使用下面这种先行版则选择这个版本的仓库,一般我们使用稳定版本的maven
- <!--配置本项目的仓库:因为maven中心仓库还没有更新spring ai的jar包-->
- <repositories>
- <!-- <!–快照版本的仓库–>-->
- <!-- <repository>-->
- <!-- <id>spring-snapshot</id>-->
- <!-- <name>Spring Snapshots</name>-->
- <!-- <url>https://repo.spring.io/snapshot</url>-->
- <!-- <releases>-->
- <!-- <enabled>false</enabled>-->
- <!-- </releases>-->
- <!-- </repository>-->
-
- <!--里程碑版本的仓库-->
- <repository>
- <id>spring-milestones</id>
- <name>Spring Milestones</name>
- <url>https://repo.spring.io/milestone</url>
- <snapshots>
- <enabled>false</enabled>
- </snapshots>
- </repository>
- </repositories>
在自己的yml文件里面配置springAI的信息
server: port: 8080 spring: application: name: #写自己的项目名 ai: openai: # api-key: sk-xxx #写自己的key ## 可以写直接地址,也可以写中转地址(镜像地址) # base-url: https://api.openai.com api-key: sk-xxx #写自己的key #这个是我在淘宝买的key,一般配上中转地址 base-url: https://apikeyplus.com/ #这个是我买的淘宝中转地址 chat: options: model: gpt-3.5-turbo #版本 temperature: 0.3F #温度 mvc: async: request-timeout: -1
这里提示一下用买的中转地址不用科学上网也可以使用。
在这里我遇到了一个问题,不知道为什么我用自己的chatgpt3账号去官网申请了一个key,但是访问的时候却报错,这个是idea需要开启代理。
报错信息部分如下:I/O error on POST request for "https://api.openai.com/v1/chat/completions": Connection timed out: connect] with root cause
解决:在idea配置里面加上一下下面的信息:
-Djava.net.useSystemProxies=true
但是还有可能出现下面的报错:
org.springframework.ai.retry.NonTransientAiException: 429 - { "error": { "message": "You exceeded your current quota, please check your plan and billing details. For more information on this error, read the docs: https://platform.openai.com/docs/guides/error-codes/api-errors.", "type": "insufficient_quota", "param": null, "code": "insufficient_quota" } }
这个原因是你的ChatGPT这个账号里面的key的使用额度用完了。
申请key地址的官方网址:https://platform.openai.com/api-keys
- @Slf4j
- @RestController
- public class ChatController {
-
- /**
- * spring-ai 自动装配的,可以直接注入使用
- */
- @Resource
- private OpenAiChatClient openAiChatClient;
-
- /**
- * 调用OpenAI的接口
- *
- * @param msg 我们提的问题
- * @return
- */
- @RequestMapping(value = "/ai/chat")
- public String chat(@RequestParam(value = "msg",defaultValue = "给我讲一个笑话") String msg) {
- log.info("发送的消息是:{}",msg);
- String call = openAiChatClient.call(msg);
- log.info("返回的消息是:{}",call);
- return call;
- }
-
- /**
- * 调用OpenAI的接口
- *
- * @param msg 我们提的问题
- * @return
- */
- @RequestMapping(value = "/ai/chat2")
- public Object chat2(@RequestParam(value = "msg") String msg) {
- ChatResponse chatResponse = openAiChatClient.call(new Prompt(msg));
- return chatResponse.getResult().getOutput().getContent();
- }
-
-
- /**
- * 调用OpenAI的接口
- *
- * @param msg 我们提的问题
- * @return
- */
- @RequestMapping(value = "/ai/chat3")
- public Object chat3(@RequestParam(value = "msg") String msg) {
- //可选参数在配置文件中配置了,在代码中也配置了,那么以代码的配置为准,也就是代码的配置会覆盖掉配置文件中的配置
- ChatResponse chatResponse = openAiChatClient.call(new Prompt(msg, OpenAiChatOptions.builder()
- //.withModel("gpt-4-32k") //gpt的版本,32k是参数量,参数量越大回答的问题质量会越好,准确率会越高
- .withTemperature(0.4F) //温度越高,回答得比较有创新性,但是准确率会下降,温度越低,回答的准确率会更好
- .build()));
- return chatResponse.getResult().getOutput().getContent();
- }
-
- /**
- * 调用OpenAI的接口
- * 流式访问,一个一个字的输出
- * @param msg 我们提的问题
- * @return
- */
- @RequestMapping(value = "/ai/chat4")
- public Object chat4(@RequestParam(value = "msg") String msg) {
- //可选参数在配置文件中配置了,在代码中也配置了,那么以代码的配置为准,也就是代码的配置会覆盖掉配置文件中的配置
- Flux<ChatResponse> flux = openAiChatClient.stream(new Prompt(msg, OpenAiChatOptions.builder()
- //.withModel("gpt-4-32k") //gpt的版本,32k是参数量
- .withTemperature(0.4F) //温度越高,回答得比较有创新性,但是准确率会下降,温度越低,回答的准确率会更好
- .build()));
-
- flux.toStream().forEach(chatResponse -> {
- System.out.println(chatResponse.getResult().getOutput().getContent());
- });
- return flux.collectList(); //数据的序列,一序列的数据,一个一个的数据返回
- }
-
- }
测试:http://localhost:8080/ai/chat3?msg=java是什么
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。