概述
Spring AI是Spring生态中应用于人工智能领域的应用框架,它的目标是将Spring 生态系统的设计原则(如可移植性、模块化设计)应用于AI领域,并在AI领域中推广使用POJO(Plain Old Java Objects)作为应用的构建模块。
Spring AI能做什么?
支持目前主流大语言模型平台,例如 OpenAI、Microsoft、Amazon、Google 和 Huggingface;
支持阻塞与流式的文本对话;
支持图像生成(当前仅限OpenAI的dall-e-*模型和SD);
支持嵌入模型;
支持LLM生成的内容转为POJO;
支持主流的向量数据库或平台:Azure Vector Search, Chroma, Milvus, Neo4j, PostgreSQL/PGVector, PineCone, Qdrant, Redis 和 Weaviate
支持函数调用
支持自动装配和启动器(与Spring Boot完美集成);
提供用于数据处理工程的ETL框架;
快速搭建一个SpringAI项目
1.创建项目
点击新建一个项目
按照箭头指示创建,jdk要求最低17,项目名和路径自定义
继续按照箭头指示创建
我这里演示的是openAI的接口所以这里要选择openAI
点击create,进入
修改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/> <!-- lookup parent from repository --></parent><groupId>com.mobai</groupId><artifactId>spring-ai-demo</artifactId><version>0.0.1-SNAPSHOT</version><name>spring-ai-demo</name><description>spring-ai-demo</description><properties><java.version>17</java.version><spring-ai.version>0.8.1</spring-ai.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></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>cn.hutool</groupId><artifactId>hutool-json</artifactId><version>5.8.27</version></dependency></dependencies><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><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></repositories></project>
这里有个小坑,openai的依赖在阿里云远程仓库是没有的会导致远程仓库是阿里云的同学下载依赖失败,这里我们需要将远程仓库换回来,修改maven安装路径下的conf下的setting.xml文件
接着我们需要修改application.yaml文件,如果没有需自行创建,加入以下配置,配置我们的api-key,需自行去某宝购买
编写启动类命名任意,注意启动类的路径
创建一个web文件夹用于接收请求
在这里,我们选择阻塞式调用接口进行演示。
创建一个ChatController
类,将ChatClient
注入进来,并编写一个简单的接口进行测试:
package com.mobai.springaidemo.web;import org.springframework.ai.chat.ChatResponse;
import org.springframework.ai.chat.Generation;
import org.springframework.ai.chat.prompt.ChatOptions;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.openai.OpenAiChatClient;
import org.springframework.ai.openai.OpenAiChatOptions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;/*** @author Mobai* @version 1.0* @date 2024/5/28 01:24*/
@RestController
public class ChatController {private final ChatClient chatClient;public ChatController(ChatClient chatClient) {this.chatClient = chatClient;}@GetMapping("/chat1")public String demo(String msg){String response = chatClient.call(msg);return response;}
}
点击启动
在浏览器输入:http://127.0.0.1:8080/chat1prompt=你的问题
运行结果如下:
在上面的测试接口中,核心代码String response = chatClient.call(msg)
。其中,msg是我们输入到ChatGPT的文本(一般是问题),response
则是ChatGPT针对msg生成出的文本,即响应。Spring AI将底层的请求、参数配置等进行了封装,AI模型默认GPT-3.5-Turbo
。因此我们只需这简简单单的一行代码就能对接ChatGPT。