当前位置: 首页 > news >正文

Spring AI介绍、应用场景和示例代码

Spring AI 是由 Spring 团队推出的一个项目,旨在简化将 AI 能力(如大语言模型)集成到 Spring 应用中的过程。它为常见的 AI 模型服务(如 OpenAI、Azure OpenAI、HuggingFace、Ollama 等)提供统一的访问抽象。Spring AI 基于 Spring Boot 和 Spring Framework 的生态系统,结合 spring-ai 的组件,为开发者提供一致且可扩展的方式调用 AI 服务。


🌟 Spring AI 主要特性

  • 对多种 LLM 提供统一抽象接口。

  • 支持聊天模型(chat completion)、文本补全、文档问答(RAG)、embedding 等。

  • 支持 VectorStore,如 PostgreSQL、Redis、Milvus、Pinecone 等。

  • 集成 Spring Boot,支持配置驱动、自动装配、注入等。

  • 简化 LLM 在服务端的调用与集成,便于构建 AI 驱动的应用。


📌 适用场景

场景描述
智能客服利用 LLM 实现基于文档或 FAQ 的自动问答。
智能代码助手结合 Embedding 和代码片段进行语义搜索与补全。
文档问答系统使用 RAG 技术,对本地文档进行语义索引和问答。
自动摘要生成处理输入内容生成简洁摘要。
多轮对话搭建具备上下文记忆的聊天机器人。
嵌入搜索对文档或数据做向量化表示,实现语义搜索。


🧱 核心模块

  • ChatClient:统一的聊天模型接口。

  • EmbeddingClient:将文本转为向量的接口。

  • VectorStore:用于存储和查询嵌入向量。

  • Retriever:从 VectorStore 中检索相关信息。

  • PromptTemplate:提示词模板,便于控制 LLM 输出。


一、基础示例代码(基于 OpenAI)

1. 添加依赖(Maven)

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId><version>0.8.1</version> <!-- 最新版本请查询 Maven 中央仓库 -->
</dependency>

2. 配置 application.yml

spring:ai:openai:api-key: ${OPENAI_API_KEY}

3. 使用 ChatClient 实现对话

import org.springframework.ai.chat.ChatClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/chat")
public class ChatController {@Autowiredprivate ChatClient chatClient;@GetMappingpublic String chat(@RequestParam String message) {return chatClient.call(message);}
}

4. 使用 PromptTemplate 构建 Prompt

import org.springframework.ai.chat.messages.*;
import org.springframework.ai.prompt.*;
import org.springframework.ai.chat.ChatClient;
import org.springframework.stereotype.Service;import java.util.Map;@Service
public class PromptService {private final ChatClient chatClient;public PromptService(ChatClient chatClient) {this.chatClient = chatClient;}public String summarizeText(String text) {PromptTemplate promptTemplate = new PromptTemplate("请总结以下文本内容:{text}");Prompt prompt = promptTemplate.create(Map.of("text", text));return chatClient.call(prompt).getResult().getOutput().getContent();}
}

二、嵌入与向量存储(RAG 基础)

1. 添加依赖

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-chroma-store-spring-boot-starter</artifactId><version>0.8.1</version>
</dependency>

2. 配置嵌入和向量存储

spring:ai:openai:embedding:enabled: truevectorstore:chroma:uri: http://localhost:8000

3. 示例代码:存储和查询文档

import org.springframework.ai.embedding.EmbeddingClient;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.ai.vectorstore.VectorStoreRetriever;
import org.springframework.ai.document.Document;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class DocumentService {private final VectorStore vectorStore;private final VectorStoreRetriever retriever;public DocumentService(VectorStore vectorStore) {this.vectorStore = vectorStore;this.retriever = vectorStore.retriever();}public void addDocument(String content) {Document doc = new Document(content);vectorStore.add(List.of(doc));}public List<Document> searchSimilar(String query) {return retriever.similaritySearch(query);}
}

三、进阶:RAG 模式整合

可以将 Retriever 检索的文档内容拼接到 prompt 中,作为“上下文”传给 ChatClient,从而实现 RAG 模式。

public String answerWithContext(String question) {List<Document> docs = retriever.similaritySearch(question);String context = docs.stream().map(Document::getContent).collect(Collectors.joining("\n"));PromptTemplate promptTemplate = new PromptTemplate("根据以下内容回答问题:\n{context}\n问题:{question}");Prompt prompt = promptTemplate.create(Map.of("context", context, "question", question));return chatClient.call(prompt).getResult().getOutput().getContent();
}

四、可视化或 UI 集成

可通过 Spring Boot 提供 REST API,配合前端构建一个交互式的 Chat UI,如:

  • 使用 Vue/React 搭建前端

  • 使用 WebSocket 实时返回 AI 回复

  • 将用户消息与 AI 回复保存到数据库(供审计或微调使用)


五、总结

Spring AI 是 Spring 生态中整合 AI 能力的标准方式,适合企业应用、安全可控地使用 AI,构建智能应用。它抽象了底层 API 调用,让开发者专注业务逻辑。

相关文章:

  • 第2章 算法分析基础
  • 76.评论日记
  • MySQL数据库安装+配置(1遍成功)
  • 数据可视化:php+echarts实现数据可视化(包含echart安装引入)
  • 力扣49. 字母异位词分组(哈希表)
  • DAY03:Vue深度解析之响应式系统与计算属性实战指南
  • 化妆品出口日本需要做什么认证?化妆品出口日本流程,化妆品出口日本介绍
  • Spring Boot 为 MongoDB 自动配置了哪些核心 Bean?
  • 广东省省考备考(第四天5.7)—言语(第二节课)
  • android中的背压问题及解决方案
  • Brain | 大脑的‘逻辑引擎’:右前额网络如何驱动类比与演绎推理?
  • 添加地形与自定义地形
  • 【Python类(Class)完全指南】面向对象编程入门
  • 芳草集精油怎么样?佰草集精油的功效与用法一览
  • 跨平台C++开发解决方案总结
  • MEGA3:分子进化遗传学分析和序列比对集成软件
  • Go语言——error、panic
  • 【Redis】C++如何使用redis
  • Nginx 性能调优与深度监控
  • Linux上将conda环境VLLM服务注册为开机自启
  • 巴基斯坦称回应挑衅,对印度发起军事行动
  • 白宫启动“返乡计划” ,鼓励非法移民自愿离开美国
  • 71岁导演詹姆斯・弗雷病逝,曾执导《纸牌屋》、麦当娜MV
  • 海关总署统计分析司司长:4月进出口增速较一季度加快4.3个百分点
  • 印巴战火LIVE丨印巴互相发动无人机袭击,巴官员称两国已在国安层面接触
  • 正荣地产:董事会主席、行政总裁辞任,拟投入更多精力推动境内债重组等工作