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

Spring AI介绍及大模型对接

目录

1. Spring AI介绍

2. Spring AI常用组件

2.1. Chat Client API

2.2. Models

2.3. Vector Databases

2.4. RAG

2.5. MCP

3. 大模型对接举例

3.1. 获取deepseek的API keys

3.2. idea创建工程

3.3. 配置application.yml

3.4. 编写Controller测试类

3.5. 验证Controller接口

4. 参考文档


在生成式AI、大模型、多模态交互等技术快速迭代的今天,AI已成为推动数字化转型的核心驱动力。各企业也在结合自身业务场景利用AI实现决策自动化、智能化,不断突破效率瓶颈,构建“数据-模型-业务”的价值飞轮,将AI从“技术工具”升级为“战略级生产力”。作为开发者我们也应该掌握大模型对接、RAG增强生成、AI Agent编排等前沿技术,才不会在AI时代的浪潮中落伍甚至被淘汰。因此,本文以Java开发领域为例,先介绍Java集成大模型的框架—Spring AI,接着再举例说明大模型对接步骤作为Spring AI的入门。

1. Spring AI介绍

Spring AI 是Spring官方社区推出的开源框架,旨在简化Java开发者构建生成式AI应用的复杂度。其核心理念是通过抽象接口和模块化设计,提供跨模型的便携式API,支持快速集成主流大语言模型(LLM)和向量数据库,同时深度融入Spring生态的自动配置与依赖管理机制。核心功能如下:

  • 跨模型支持:覆盖 OpenAI、Azure、DeepSeek、智普 AI、Hugging Face 等主流模型,支持聊天、文本生成、图像生成等多种模型类型。
  • 向量数据库集成:兼容 Redis、Pinecone、Milvus 等十余种向量数据库,提供统一查询接口,简化语义检索与 RAG实现。
  • 开发友好性:通过 Spring Boot Starters 实现“开箱即用”,结合 application.properties 配置模型参数,符合 Spring 开发者习惯。

2. Spring AI常用组件

2.1. Chat Client API

提供统一的 API 与 LLM 交互,封装了与 AI 模型交互的复杂性(如提示词模板、输出解析、聊天记忆等)。从设计模式角度看属于门面模式,通过统一接口简化复杂交互,开发者无需关心底层是调用 OpenAI 还是 Hugging Face,适用于快速构建完整的 AI 交互流程(如客服对话)。

2.2. Models

Spring AI 支持多种生成式模型,覆盖文本生成(Chat Models)、图像处理(Image Models)等场景,并通过统一接口实现模型切换:

  • 多模型兼容:集成 OpenAI、DeepSeek、阿里云通义等主流模型,例如通过 spring.ai.openai.chat.options.model 配置模型类型。
  • 参数动态调整:支持运行时修改温度(temperature)、最大 Token 数等参数,优化生成结果。
  • 多模态扩展:如结合文生图模型(如 DALL-E)或语音模型,扩展应用场景。

2.3. Vector Databases

向量数据库是 RAG 的技术基础,支持高维数据的存储与相似性检索。

主流选择核心操作
Spring AI 兼容 Redis、Pinecone、Milvus 等十余种数据库,SimpleVectorStore 适用于开发测试,生产环境推荐 Redis、Elasticsearch、Milvus等可持久化存储的向量数据库。

1、写入数据

通过 vectorStore.add(documents) 存储向量化文档。

2、相似性查询

similaritySearch(query, k) 返回最相关的 k 条结果。

2.4. RAG

RAG 技术通过外部知识库增强模型回答准确性,解决 LLM 的“知识局限性”和“幻觉”问题。

核心流程企业级应用

向量化存储:将文档转换为向量并存入数据库(如 Redis、Milvus)。

语义检索:用户提问时检索相关文档片段。

上下文增强生成:将检索结果与用户输入合并,作为 Prompt 提交给 LLM 生成答案。

如构建智能客服系统,结合私有知识库实现精准答疑。

2.5. MCP

模型上下文协议(MCP) 是一种标准化协议,使 AI 模型能够以结构化的方式与外部工具和资源进行交互。它支持多种传输机制,从而提供跨不同环境的灵活性。Spring AI MCP通过 Spring Boot 集成扩展了 MCP Java SDK,支持MCP Client和MCP Server的自动配置。

  • MCP Client:即MCP客户端,是模型上下文协议 (MCP) 架构中的关键组件,负责建立和管理与 MCP 服务器的连接。它实现了协议的客户端功能,如消息传输、工具发现和执行等。
  • MCP Server:即MCP 服务端,是模型上下文协议 (MCP) 架构中的基础组件,为客户端提供工具、资源和功能。它实现了协议的服务端功能,如暴露本地文件、数据库等数据源的访问能力。

3. 大模型对接举例

这里以对接deepseek国产大模型为例,上手体验Spring AI Models组件中Chat Model API的使用。

3.1. 获取deepseek的API keys

登录deepseek开放平台,创建API key,创建后保存好key后面对接需要使用。

3.2. idea创建工程

  • 新建项目

  • 选择web和openai依赖

  • 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.4.5</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>org.example</groupId><artifactId>springaichat</artifactId><version>0.0.1-SNAPSHOT</version><name>springaichat</name><description>springaichat</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>17</java.version><spring-ai.version>1.0.0-M8</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-starter-model-openai</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></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></plugin></plugins></build></project>

3.3. 配置application.yml

  • 配置deepseek api的url、key等参数
spring:application:name: springaichatai:openai:base-url: https://api.deepseek.com  # deepseek api地址api-key: 配置3.1创建的deepseek API key  # deepseek API keychat:options:model: deepseek-chat # 模型名称,deepseek-chat 模型对应 DeepSeek-V3,deepseek-reasoner 模型对应 DeepSeek-R1

3.4. 编写Controller测试类

package org.example.springaichat.controller;import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.openai.OpenAiChatModel;
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 reactor.core.publisher.Flux;import java.util.Map;@RestController
public class ChatController {private final OpenAiChatModel chatModel;@Autowiredpublic ChatController(OpenAiChatModel chatModel) {this.chatModel = chatModel;}@GetMapping("/ai/generate")public Map<String,String> generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {return Map.of("generation", this.chatModel.call(message));}@GetMapping("/ai/generateStream")public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {Prompt prompt = new Prompt(new UserMessage(message));return this.chatModel.stream(prompt);}
}

3.5. 验证Controller接口

  • 启动springboot应用       

  • 浏览器请求controller接口成功对接大模型                                                                                                                                                                                                                     

4. 参考文档

Spring AI官方文档

相关文章:

  • [Java 基础]Java 是什么
  • 【QT】QString 与QString区别
  • 项目交付后缺乏回顾和改进,如何持续优化
  • 文件IO流
  • saveOrUpdate 有个缺点,不会把值赋值为null,解决办法
  • 笔记︱数据科学领域因果推断案例集锦(第三弹)
  • 爱普生Epson L3210打印机信息
  • LabVIEW磁悬浮轴承传感器故障识别
  • 金融中的线性优化:投资组合分配与求解器 - Part 2
  • SpringBoot系列之RabbitMQ 实现订单超时未支付自动关闭功能
  • 【氮化镓】GaN HMETs器件物理失效分析进展
  • 正点原子lwIP协议的学习笔记
  • 关于list集合排序的常见方法
  • 网络爬虫 - App爬虫及代理的使用(十一)
  • CodeTop100 Day21
  • Python微积分可视化:从导数到积分的交互式教学工具
  • 【Typst】1.Typst概述
  • 详解代理型RAG与MCP服务器集成
  • Java中并发修改异常如何处理
  • MaxCompute开发UDF和UDTF案例
  • 传媒公司名字起名大全/河南关键词优化搜索
  • 简单网站建设方案策划/深圳网络推广怎么做
  • 拱墅网站建设/百度首页 百度
  • 房地产企业网站建设/广东最新新闻
  • 岳阳网站建设/宁波网站推广哪家公司好
  • 网站怎样上线/阿里数据