Spring AI旨在简化包含人工智能功能的应用程序的开发,而不会造成不必要的复杂性。
该项目从著名的 Python 项目中汲取灵感,例如 LangChain 和 LlamaIndex,但 Spring AI 并不是这些项目的直接移植。该项目成立的信念是,下一波生成式 AI 应用程序将不仅适用于 Python 开发人员,而且将在许多编程语言中无处不在。
Spring AI 的核心是提供抽象,作为开发 AI 应用程序的基础。这些抽象具有多种实现,只需最少的代码更改即可轻松交换组件。
1.Spring AI 提供以下功能
- 支持所有主要的模型提供商,如OpenAI,Microsoft,Amazon,Google和Huggingface。
- 支持的模型类型包括聊天和文本到图像,还有更多类型正在开发中。
- 跨 AI 提供商的可移植 API,用于聊天和嵌入模型。支持同步和流 API 选项。还支持下拉以访问特定于模型的功能。
- 将 AI 模型输出映射到 POJO。
- 支持所有主要的矢量数据库提供商,例如 Azure Vector Search、Chroma、Milvus、Neo4j、PostgreSQL/PGVector、PineCone、Qdrant、Redis 和 Weaviate
- 跨 Vector Store 提供程序的可移植 API,包括一个类似 SQL 的新颖元数据过滤器 API,该 API 也是可移植的。
- Function calling 函数调用
- 用于 AI 模型和矢量存储的 Spring Boot 自动配置和启动器。
- 用于数据工程的 ETL 框架
2.快速开始
创建一个简单的spring项目,注意这里jdk需要17以上,然后在pom文件中添加依赖
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId><version>0.8.1</version>
</dependency>
接下来在application.properties文件中添加配置
spring.ai.openai.api-key=YOUR_API_KEY
spring.ai.openaibase-url=https://api.openai.com
这样一个简单的环境就完成了。
3.简单使用
创建一个OpenAiController
类,将ChatClient(
SpringBoot启动时,会为我们自动注入)
注入进来,并编写一个简单的接口进行测试:
@RestController
@RequestMapping("/chat")
public class OpenAiController {@Resourceprivate ChatClient chatClient;@GetMapping("/openai/test")public Map<String, String> completion(@RequestParam(value = "message") String message) {return Map.of("generation", chatClient.call(message));}
}
代码chatClient.call(message)中message是我们输入到chartgpt的文本,返回结果即时ChartGPT生成的内容,AI模型默认gpt-3.5-turbo
,Spring AI对参数和请求做了封装,简单的一行代码就完成了ChartGPT的对接。
4.流式对话
流式对话即流式对话传输,只要AI有输出,就进行服务端内容的推送,而不需要等到AI生成完后一起发送,一定程度上能够提高使用上的响应速度,增加对话的体验。
Spring AI 流式对话接口采用的是Spring WebFlux异步网络框架实现。
@RestController
@RequestMapping("/chat")
public class OpenAiStreamController {@Resourceprivate StreamingChatClient streamingChatClient;@GetMapping(value = "/openai/stream")public Flux<String> stream(String message){// 将流中的内容按顺序返回return streamingChatClient.stream(message).flatMapSequential(Flux::just);}
}