Spring AI介绍及大模型对接

article/2025/6/9 19:37:25

目录

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官方文档


http://www.hkcw.cn/article/hhkJTgFOug.shtml

相关文章

C++算法训练营 Day6 哈希表(1)

1.有效的字母异位词 LeetCode&#xff1a;242.有效的字母异位词 给定两个字符串s和t &#xff0c;编写一个函数来判断t是否是s的字母异位词。 示例 1: 输入: s “anagram”, t “nagaram” 输出: true 示例 2: 输入: s “rat”, t “car” 输出: false 解题思路&#xff…

LeetCode hot100-11

题目描述 题目链接&#xff1a;滑动窗口最大值 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1&#xff1a; 输入…

js web api阶段

一.变量声明 1.JS中的const const在js修饰数组和对象&#xff0c;本质类似与c的引用数据类型&#xff0c;所以类似于 int* const ref 修饰的是地址&#xff0c;值是可以改变的 然后下面这种情况是禁止的 左边这种都有括号&#xff0c;说明是建立了一个块新地址去存放&#xf…

【计算机网络】数据链路层——ARP协议

&#x1f525;个人主页&#x1f525;&#xff1a;孤寂大仙V &#x1f308;收录专栏&#x1f308;&#xff1a;计算机网络 &#x1f339;往期回顾&#x1f339;&#xff1a;【计算机网络】网络层IP协议与子网划分详解&#xff1a;从主机通信到网络设计的底层逻辑 &#x1f516;流…

群晖 NAS 如何帮助培训学校解决文件管理难题

在现代教育环境中&#xff0c;数据管理和协同办公的效率直接影响到教学质量和工作流畅性。某培训学校通过引入群晖 NAS&#xff0c;显著提升了部门的协同办公效率。借助群晖的在线协作、自动备份和快照功能&#xff0c;该校不仅解决了数据散乱和丢失的问题&#xff0c;还大幅节…

基于LLaMA-Factory和Easy Dataset的Qwen3微调实战:从数据准备到LoRA微调推理评估的全流程指南

随着开源大模型如 LLaMA、Qwen 和 Baichuan 的广泛应用&#xff0c;其基于通用数据的训练方式在特定下游任务和垂直领域中的表现仍存在提升空间&#xff0c;因此衍生出针对具体场景的微调训练需求。这些训练涵盖预训练&#xff08;PT&#xff09;、指令微调&#xff08;SFT&…

视觉语言动作模型 (VLAs) :赋予机器行动的智慧

文章目录 一、VLA 的诞生&#xff1a;从单模态到多模态的飞跃二、深入剖析 VLA&#xff1a;核心组件与工作原理三、前沿进展&#xff1a;那些令人瞩目的 VLA 模型与趋势四、VLA 的广阔天地&#xff1a;应用场景一览五、挑战与荆棘&#xff1a;VLA 面临的难题六、未来展望&#…

C/S医学影像系统源码,全院一体化PACS系统源码,实现全院检查预约和信息共享互通

全院一体化PACS系统源码 全院级PACS系统不仅仅具有安全、高效、稳定的访问/存储/调阅架构和强大的影像后台处理功能&#xff1b;还是一个全院一体化的PACS系统&#xff0c;覆盖了医院所有影像科室&#xff08;放射、超声、内镜、病理、心脑电等&#xff09;&#xff1b;从影像…

力扣刷题Day 69:搜索二维矩阵(74)

1.题目描述 2.思路 首先判断target是否有可能在矩阵的某一行里&#xff0c;没可能直接返回False&#xff0c;有可能就在这一行里二分查找。 3.代码&#xff08;Python3&#xff09; class Solution:def searchMatrix(self, matrix: List[List[int]], target: int) -> boo…

生成JavaDoc文档

生成 JavaDoc 文档 1、快速生成 文档 注解 2、常见的文档注解 3、脚本生成 doc 文档 4、IDEA工具栏生成 doc 文档 第一章 快速入门 第01节 使用插件 在插件工具当中&#xff0c;找到插件 javaDoc 使用方式&#xff0c;在代码区域&#xff0c;直接点击右键。选择 第02节 常用注…

攻防世界RE-1000Click

首先按一千次肯定是不可能的&#xff0c;观察到验证flag时会有一个输出&#xff1a; 直接在ida中搜索这个错误提示词&#xff1a; 往上找找就能找到flag&#xff1a; flag: flag{TIBntXVbdZ4Z9VRtoOQ2wRlvDNIjQ8Ra}

【嵌入式(2)深入剖析嵌入式开发:从基础到实战】

为打造符合CSDN高质量博文标准的内容&#xff0c;我以清晰目录架构梳理知识&#xff0c;插入代码示例、时序图等增强可读性&#xff0c;并添加投票互动&#xff0c;提升文章吸引力与互动性。 目录 [引言一、嵌入式处理器的分类及特点二、硬件、软件与固件&#xff1a;嵌入式系…

数据库-联合查询(内连接外连接),子查询,合并查询

一.为什么要使用联合查询 在数据设计时由于范式的要求&#xff0c;数据被拆分到多个表中&#xff0c;那么要查询一个条数据的完整信息&#xff0c;就要从多个表中获取数据&#xff0c;如下图所示&#xff1a;要获取学生的基本信息和班级信息就要从学生表和班级表中获取&#xf…

dvwa6——Insecure CAPTCHA

captcha&#xff1a;大概是“我不是机器人”的一个勾选框或者图片验证 LOW: 先输入密码正常修改试一下&#xff08;123&#xff09;&#xff0c;发现报错 查看源码&#xff1a; <?phpif( isset( $_POST[ Change ] ) && ( $_POST[ step ] 1 ) ) {// Hide the C…

通过基于流视频预测的可泛化双手操作基础策略

25年5月来自中国电信、西北工业大学和香港科大的论文“Towards a Generalizable Bimanual Foundation Policy via Flow-based Video Prediction”。 由于动作空间巨大且需要协调手臂运动&#xff0c;学习可泛化的双手操作策略对于具身智体而言极具挑战性。现有方法依赖于视觉-…

隧道监测预警系统:构筑智慧交通的安全中枢

在交通基础设施体系中&#xff0c;隧道作为关键节点&#xff0c;其安全运营直接关系到整个路网的畅通与稳定。隧道监测预警系统通过多维度感知网络与智能分析中枢的有机融合&#xff0c;构建起全天候、立体化的安全防护体系&#xff0c;成为守护隧道安全的智能防线。 一、系统…

【相机基础知识与物体检测】更新中

参考&#xff1a; 黑马机器人 | 相机标定&物体检测https://robot.czxy.com/docs/camera/ 01-相机基础 相机基础概述 相机是机器视觉的基础&#xff0c;相机直接产生了相机数据。所有视觉算法都是作用在相机数据上的。相机数据的好坏&#xff0c;或者对相机数据的理解方式…

Nginx实战

更多推荐阅读&#xff1a; 前端性能&异常分析排查流程-CSDN博客 关于列表性能分析与标准-CSDN博客 Fullcalendar常用功能介绍-CSDN博客 目录 Nginx介绍 下载和安装 实战分享 场景一、localhost代理线上环境 场景二&#xff1a;通过本地路径访问其他域名的地址信息 防盗链功…

java实用类

文章目录 SystemSystem.exit(int status);currentTimeMillis String 类String两种创建方式String提供的常用方法 Runtime作用演示 Object类常用方法重写 toString()重写 equals() 和 hashCode() BigInter类BigInter 构造方法常用方法演示 BigDecimal类常见构造器常用方法演示 S…

windows安装多个版本composer

一、需求场景 公司存在多个项目&#xff0c;有的项目比较老&#xff0c;需要composer 1.X版本才能使用 新的项目又需要composer 2.X版本才能使用 所以需要同时安装多个版本的composer二、下载多个版本composer #composer官网 https://getcomposer.org/download/三、放到指定目…