Spring AI 是一个 Spring 官方团队主导的开源项目,旨在将生成式人工智能(Generative AI)能力无缝集成到 Spring 应用程序中。它提供了一个统一的、Spring 风格的抽象层,简化了与各种大型语言模型(LLMs)、嵌入模型(Embedding Models)、向量数据库以及相关 AI 服务的交互。
文档位置:开始 (Getting Started) | Spring AI1.0.0中文文档|Spring官方文档|SpringBoot 教程|Spring中文网
应用场景
- 构建检索增强生成(RAG)应用: 这是 Spring AI 最核心和成熟的应用场景。
- 简化流程: 提供开箱即用的
VectorStore
抽象(支持 Chroma, Pinecone, Milvus, Redis, Azure Vector Search, PostgreSQL/PGVector 等)和AiClient
抽象。 - 无缝集成: 轻松实现:
- 从文档(Txt, PDF, Word, Markdown, JSON 等)加载、分割文本。
- 使用嵌入模型将文本块转换为向量。
- 将向量和元数据存储到向量数据库。
- 用户提问时,检索相关文本块。
- 构造包含检索结果的提示词(Prompt)。
- 调用 LLM 生成基于上下文的回答。
- 应用: 智能问答系统、企业知识库助手、基于文档的客服机器人、个性化学习工具。
- 简化流程: 提供开箱即用的
- 简化与 LLMs 的交互:
- 统一 API: 使用相同的
AiClient
或ChatClient
接口调用 OpenAI GPT, Anthropic Claude, Azure OpenAI, Google Vertex AI, Hugging Face 上的模型,甚至本地运行的 Ollama 模型。 - 提示词模板: 提供强大的提示词模板引擎,支持参数化、条件判断、循环等,方便构造复杂提示,管理提示词版本。
- 结构化输出: 轻松将 LLM 的自然语言输出解析为预定义的 Java 对象(POJOs),简化后续处理。
- 函数调用: 支持 LLM 的函数调用功能,让模型能够触发执行应用程序中定义的方法。
- 应用: 任何需要文本生成、摘要、翻译、代码生成、内容创作、对话交互的场景。
- 统一 API: 使用相同的
- 集成嵌入模型:
- 统一抽象: 通过
EmbeddingClient
接口调用不同的文本嵌入模型提供商(OpenAI, Ollama, Transformers on Hugging Face, Azure OpenAI 等)。 - 简化向量化: 轻松将文本转换为向量,为存储到向量数据库或进行相似性计算做准备。
- 应用: 为 RAG 准备数据、实现语义搜索、内容聚类、去重。
- 统一抽象: 通过
- AI 驱动的数据分析和处理:
- 利用 LLM 处理非结构化或半结构化文本数据(如日志、用户反馈、调查报告),进行情感分析、主题提取、关键信息抽取、分类。
- 将抽取出的结构化信息存储到传统数据库或用于生成报告。
- 结合 Spring Batch 进行批处理。
- 增强现有应用功能:
- 智能客服/聊天机器人: 在现有的 Web 或移动应用中集成智能对话能力。
- 内容生成与辅助: 在 CMS、博客平台、邮件系统中辅助生成或润色内容。
- 个性化推荐: 利用用户行为或内容的嵌入向量,实现更语义化的推荐(结合向量数据库)。
- 快速原型验证和实验:
- Spring AI 简洁的 API 和 Spring Boot 的自动配置让开发者能极其快速地搭建 AI 概念验证(PoC)或最小可行产品(MVP)。
- 方便尝试不同的模型提供商、提示词策略、RAG 配置。
入门学习
项目当前环境是Win11,SpringBoot, Ollama,开发工具是Idea,需要提前对这些有些了解,以及安装Ollama
大模型本地搭建
为了方便本地的大模型搭建,这里选择Ollama,Ollama是一个开源工具,专为在本地计算机上轻松运行大型语言模型(LLM) 而设计。好处是方便部署运行大模型,命令一键部署,安装的话比较简单,Download Ollama on macOS 官网下载自己需要的版本,然后下一步下一步就好。
安装好后打开命令行输入命令即可,常用命令:
# 下载并运行 llama3 模型 (8B 参数版本是默认)
ollama run llama3
# 下载并运行 llama3 70B 参数版本 (需要足够内存/显存)
ollama run llama3:70b
# 下载并运行 mistral 模型
ollama run mistral
# 查看已下载的模型列表
ollama list
除了llama3模型外,也有其他不同类型的大模型,
点进去后直接复制命令即可。
这里使用的是最近比较流行的大模型deepseek-r1
ollama run deepseek-r1
出现下面内容说明启动成功
java项目创建
项目基于springBoot运行,所以首先搭建SpringBoot项目
1、创建java Maven项目,然后写入依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.4.5</version>
</parent>
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<releases>
<enabled>false</enabled>
</releases>
</repository>
<repository>
<name>Central Portal Snapshots</name>
<id>central-portal-snapshots</id>
<url>https://central.sonatype.com/repository/maven-snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>1.0.0-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2、创建java子项目,这个项目是springboot项目,pom添加依赖
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-ollama</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
3、项目下创建包com.demo,然后创建启动类DemoApplication,并添加注解
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
4、创建包controller,里面存放Controller类,作为测试接口
import org.springframework.ai.ollama.OllamaChatModel;
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 java.util.Map;
@RestController
public class ChatController {
private final OllamaChatModel chatModel;
@Autowired
public ChatController(OllamaChatModel chatModel) {
this.chatModel = chatModel;
}
@GetMapping("/ai/generate")
public Map<String,String> generate(@RequestParam(value = "message") String message) {
return Map.of("generation", this.chatModel.call(message));
}
}
5、创建Resource包,里面创建application.yml配置文件,添加Spring ai配置,ollama是由于要连接ollama,base-url是当前ollama服务开启后的地址,chat.model配置的是当前启动的模型,当前启动的deepseek-r1,如果你用的是其他模型,这里需要更换下
spring:
ai:
ollama:
base-url: http://localhost:11434
chat:
model: deepseek-r1
项目搭建完后效果
config包下是后面的内容,现在不用管
6、启动本地大模型
ollama run deepseek-r1
7、运行DemoApplication的main函数启动,启动正常后使用API访问工具进行测试,这里使用的是Apipost,然后使用API测试工具访问接口,这里用的时Apipost,Apipost 是一款国产的、一体化、全流程的 API 协作开发与测试平台,类似PostMan,安装直接去官网下载就好,如果使用其他的测试方案也行,直接能测接口就好
填写完参数后,直接运行就好
结束语
Spring ai主要针对的是当下流行的大模型,根据不同的大模型处理方案提供了不同的接口,简化java开发在使用大模型时的代码,根据这块估计是以后java开发常备的一个技能。
下一篇是如何使用java,针对大模型的输出的内容进行优化,输出符合自己情况的内容,使用Spring Ai RAG模块,使LLM基于文档内容进行生成