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;@Autowiredpublic 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:11434chat: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基于文檔內容進行生成