(详解!)五分钟搞定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去那个仓库去找,整个依赖去哪里找。

<code><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中进行修改即可

<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

 参考文档 ,不仅集成了聊天模型,还有文生图模型,语音转文字模型,一系列模型等等。后续有空我也会继续更新一些!!! 编写不易,希望大家可以多多支持!!!



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。