赞
踩
目录
打开我们心爱的IDEA, 简单创建一个SpringBoot工程,JDK必须17版本以上(别拿你的1.8版本来哈!)这里我们就选择17版本,使用Maven进行依赖管理
Spring Boot 3版本都可以,然后这里依赖项我们只选择Spring Web 跟Lombok就可以,不选也可以,下面我会提供Maven全面依赖文件,你只需CV到你的POM文件就可以了
清理一下用不到的文件,开始进行依赖配置
- <dependency>
- <groupId>org.springframework.ai</groupId>
- <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
- <version>0.8.1</version>
- </dependency>
配置Spring 仓库
仓库是一定要配置着的,它这个AI去那个仓库去找,整个依赖去哪里找。
- <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>
注:其次就是我们很多人使用的这个Maven的时候,会把Maven那个默认仓库源改掉我们国内的阿里云,又因为阿里云仓库暂时还没有对应的Spring-ai-openai-spring-boot-starter 依赖,导致我们去拉起依赖的时候会报错,找不到AI这个依赖。所以Maven的仓库源需要使用Maven默认的仓库源,在Maven\conf\setting.xml中进行修改即可
- <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文件
- <?xml version="1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
- <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 进行刷新,开始编码环节了
这里是 .yml 格式文件 ,默认是.properties格式 修改下后缀即可。
- 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 我会免费提供给你!
可以直接官网cv 即可 https://docs.spring.io/spring-ai/reference/api/clients/openai-chat.html
点击复制 到我们项目中
2个接口,一个是咱们把消息发过去,那边吧消息编辑好了,在一起返回给我们。第二个是采用流式的风格,把文字一点一点传过来,一会看我们测试效果!!!
- 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);
- }
- }
我们通过Postman 来访问一下 看看效果
返回的是一个支持Markdown的文本,还是不错的,另外一个流式的我们也试试 看看效果
每一个流的详细内容
就以流的一个形式响应回来,每一个都包含着一个文字,我们可以对这个方法体做解析,一个一个解析出来,如果传到前端,前端也可以以流的形式一点一点吐出来。
以上:就成功把AI集成到我们SpringBoot中了,当然我这里只是简单尝试了一下,一个普通对话,一个流式对话。大家有兴趣可以去Spring 官方
https://spring.io/projects/spring-ai
参考文档 ,不仅集成了聊天模型,还有文生图模型,语音转文字模型,一系列模型等等。后续有空我也会继续更新一些!!! 编写不易,希望大家可以多多支持!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。