(详解!)五分钟搞定SpringAi 快速引入Chartgpt,让你少走坑!!!快速体验!!!
何政@ 2024-07-19 12:31:02 阅读 100
目录
1.创建项目:
2.依赖配置
3.编码环节
配置文件
编码环节
4.项目效果演示
1.创建项目:
打开我们心爱的IDEA, 简单创建一个SpringBoot工程,JDK必须17版本以上(别拿你的1.8版本来哈!)这里我们就选择17版本,使用Maven进行依赖管理
Spring Boot 3版本都可以,然后这里依赖项我们只选择Spring Web 跟Lombok就可以,不选也可以,下面我会提供Maven全面依赖文件,你只需CV到你的POM文件就可以了
清理一下用不到的文件,开始进行依赖配置
2.依赖配置
<code> <dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
<version>0.8.1</version>
</dependency>
配置Spring 仓库
仓库是一定要配置着的,它这个AI去那个仓库去找,整个依赖去哪里找。
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<releases>
<enabled>false</enabled>
</releases>
</repository>
</repositories>
注:其次就是我们很多人使用的这个Maven的时候,会把Maven那个默认仓库源改掉我们国内的阿里云,又因为阿里云仓库暂时还没有对应的Spring-ai-openai-spring-boot-starter 依赖,导致我们去拉起依赖的时候会报错,找不到AI这个依赖。所以Maven的仓库源需要使用Maven默认的仓库源,在Maven\conf\setting.xml中进行修改即可
<code> <mirror>
<id>maven-default-http-blocker</id>
<mirrorOf>external:http:*</mirrorOf>
<name>Pseudo repository to mirror external repositories initially using HTTP.</name>
<url>http://0.0.0.0/</url>
<blocked>true</blocked>
</mirror>
当然你也可以在官网下一个和你当下不同版本的Maven来使用也是可以的 官网连接https://maven.apache.org/download.cgi
需要的可以去下载
整体pom.xml文件
<code><?xml version="1.0" encoding="UTF-8"?>code>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"code>
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">code>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.5</version>
<relativePath/>
</parent>
<groupId>com.abu</groupId>
<artifactId>abu-ai-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>abu-ai-demo</name>
<description>abu-ai-demo</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
<version>0.8.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<releases>
<enabled>false</enabled>
</releases>
</repository>
</repositories>
</project>
Mavne 进行刷新,开始编码环节了
3.编码环节
3.1配置文件
这里是 .yml 格式文件 ,默认是.properties格式 修改下后缀即可。
<code>server:
port: 8080
spring:
application:
name: springai
ai:
openai:
# openAi的key
api-key: sk-xxxxxxxxxxxxxxxxxx
# 对应的请求地址,如果使用中中转地址国内即可使用不需魔法 如果没有默认官方地址: api.openai.com 需要魔法
base-url: https://api.openai.com
# 使用AI模型 默认3.5 可选gpt-4 gpt-4-32k
chat:
options:
model: gpt-3.5-turbo
#异步调用超时设置
mvc:
async:
request-timeout: -1
没有openai-key的可以自行淘宝买一个 。需要中转地址的可以评论区666 我会免费提供给你!
3.2编码环节
可以直接官网cv 即可 https://docs.spring.io/spring-ai/reference/api/clients/openai-chat.html
点击复制 到我们项目中
2个接口,一个是咱们把消息发过去,那边吧消息编辑好了,在一起返回给我们。第二个是采用流式的风格,把文字一点一点传过来,一会看我们测试效果!!!
<code>package com.example.springai;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.chat.ChatResponse;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.openai.OpenAiChatClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;
import java.util.Map;
@Slf4j
@RestController
public class ChatController {
private final OpenAiChatClient chatClient;
@Autowired
public ChatController(OpenAiChatClient chatClient) {
this.chatClient = chatClient;
// StringUtils.hasLength()
}
@GetMapping("/ai/generate")
public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
log.info("发送的消息:{}",message);
String result = chatClient.call(message);
log.info("返回来的消息:{}",result);
return Map.of("generation", result);
}
@GetMapping("/ai/generateStream")
public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
log.info("发送的消息:{}",message);
Prompt prompt = new Prompt(new UserMessage(message));
log.info("返回来的消息:{}",prompt);
return chatClient.stream(prompt);
}
}
4.项目效果演示
我们通过Postman 来访问一下 看看效果
返回的是一个支持Markdown的文本,还是不错的,另外一个流式的我们也试试 看看效果
每一个流的详细内容
就以流的一个形式响应回来,每一个都包含着一个文字,我们可以对这个方法体做解析,一个一个解析出来,如果传到前端,前端也可以以流的形式一点一点吐出来。
以上:就成功把AI集成到我们SpringBoot中了,当然我这里只是简单尝试了一下,一个普通对话,一个流式对话。大家有兴趣可以去Spring 官方
https://spring.io/projects/spring-ai
参考文档 ,不仅集成了聊天模型,还有文生图模型,语音转文字模型,一系列模型等等。后续有空我也会继续更新一些!!! 编写不易,希望大家可以多多支持!!!
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。