跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaAIjava

Spring AI 实战:Java 原生接入大模型快速上手

Spring AI 是专为 Java 生态设计的原生 AI 框架,通过统一接口屏蔽底层模型差异。其核心特性,包括多供应商适配、标准化 API、Spring Boot 集成及 RAG 支持。实战部分演示了基于 DeepSeek 模型的对话功能搭建,涵盖环境配置、依赖引入、控制器编写及流式响应优化。最终结合可视化界面,实现了完整的 AI 聊天应用流程,帮助开发者快速在 Java 项目中落地大模型能力。

PgDevote发布于 2026/3/27更新于 2026/7/2052 浏览
Spring AI 实战:Java 原生接入大模型快速上手

Spring AI 实战:Java 原生接入大模型快速上手

在大模型席卷全球的技术浪潮下,Java 开发者们迫切需要一款贴合自身生态、低门槛接入 AI 能力的框架。Spring AI 的出现,恰好填补了这一空白 —— 它并非简单移植 Python 生态的现有方案,而是深度遵循 Spring 设计哲学,为 Java 和 Spring 开发者打造了原生的 AI 开发框架。

一、什么是 Spring AI?

Spring AI 是面向 Java 和 Spring 生态的原生人工智能框架,其核心设计理念完全传承自 Spring:依赖注入、POJO 编程、模块化架构与可配置性。它重构了 AI 应用的全开发流程,让开发者无需关注底层模型的适配细节,就能像调用数据库、Web API 一样轻松集成聊天、文本嵌入、图像生成、语音处理等 AI 能力。

架构图

更重要的是,Spring AI 完美解决了多 AI 供应商适配的痛点 —— 通过'一套接口,多种实现'的统一抽象,开发者可以无缝切换 OpenAI、Anthropic、Bedrock、Hugging Face、Vertex AI、Ollama 等主流 AI 服务,无需修改核心业务代码。同时,它还支持企业内部数据与 AI 模型的快速关联,这正是检索增强生成(RAG)等高级场景的核心需求。

参考资源

  • 官网地址:https://spring.io/projects/spring-ai
  • 官方文档:https://docs.spring.io/spring-ai/reference/index.html
  • 中文文档:https://spring-ai.spring-doc.cn/docs/1.0.0/index.html

二、Spring AI 核心特性:为什么值得选?

Spring AI 覆盖了 AI 应用开发的全流程,其核心特性可以总结为以下 7 点,每一点都精准命中开发者的实际需求:

1. 全栈多供应商模型适配,覆盖主流 AI 能力

深度对接 Anthropic、OpenAI 等主流服务商,覆盖聊天交互、文本嵌入、多模态生成、语音交互、内容安全等核心能力。

  • 聊天交互:文本对话、多轮上下文对话
  • 文本嵌入:语义向量转换,支撑语义搜索
  • 多模态生成:文生图、图生文
  • 语音交互:音频转录/语音转文字、文本转语音
  • 内容安全:敏感信息检测与审核

所有模型统一接口封装,切换模型无需修改业务代码,提升项目灵活性与可扩展性。

2. 标准化抽象 API,统一调用体验

Spring AI 提供了 ChatClient、EmbeddingModel、ImageModel 等标准化接口,开发者无需关心底层模型的差异。支持同步/流式调用及模型高级功能(如 OpenAI Function Calling),聚焦业务逻辑,提升开发效率。

3. 原生集成 Spring Boot,开箱即用

遵循 Spring Boot 设计理念,通过 Starter 依赖与自动装配实现 AI 组件一键集成,Spring Initializr 可快速生成项目骨架,开箱即用,贴合 Java 开发者习惯。

4. 结构化输出与类型安全,降低维护成本

支持将 AI 非结构化响应自动解析映射到 Java POJO,保障类型安全,避免繁琐的字符串解析与类型转换,降低维护成本。

5. 内置向量存储与 RAG 支持,激活私有知识库

Spring AI 集成了 PostgreSQL/pgvector、Pinecone、Qdrant、Redis、Weaviate 等主流向量数据库,提供元数据过滤、相似度检索能力;同时内置 ETL 流程,可快速搭建 RAG 系统,解决大模型'知识过期''不懂私有数据'痛点。

6. 工具调用能力,打通业务系统闭环

原生支持模型驱动的工具调用,可将 Spring Bean 注册为 AI 可调用工具,实现 AI 自动调用业务接口、查询数据库等操作,例如:

  • 调用天气 API 获取实时气象数据
  • 查询企业 CRM 系统获取客户详情
  • 执行业务数据统计与分析操作

实现 AI 与业务流程深度融合,让 AI 从'对话工具'升级为'业务智能入口',打通需求到执行的全闭环。

三、快速上手:环境准备与 Deepseek 对话案例

光看理论不够,咱们直接动手做个 Demo。下面我们将通过一个完整的案例,教大家搭建 Spring AI 环境,并实现与 Deepseek 模型的对话交互。

3.1 环境要求

Spring AI 构建在 Spring Boot 3.x 之上,对环境有明确要求:

  • JDK:必须为 17 及以上版本(不支持 Java 8/11/16)
  • Maven:3.6 及以上版本
  • Spring Boot:3.x 系列(本文使用 3.5.0 版本)

JDK 17 安装步骤:下载地址 https://www.oracle.com/cn/java/technologies/downloads/#java17,安装路径建议自定义,安装成功后配置环境变量,也可以在 Spring Boot 项目中指定 JDK 版本。

3.2 创建 Spring Boot 项目

首先,访问 Spring Initializr:https://start.spring.io/,或在 IDEA 中直接创建 New Module。项目配置如下:

  • Name:Weiz-SpringAI-QuickStart
  • Group:com.example
  • Artifact:Weiz-SpringAI-QuickStart
  • Package name:com.example.weizspringai
  • Language:Java
  • JDK:17
  • Spring Boot:3.5.3
  • Packaging:Jar

接着,Spring Boot 版本选择 3.5.x,依赖仅需添加「Spring Web」依赖(后续通过 Maven 引入 Spring AI 相关依赖)。

创建完成后的项目结构如下:

Weiz-SpringAI-QuickStart/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── example/
│   │   │           └── weizspringai/
│   │   │               └── WeizSpringAiQuickStartApplication.java
│   │   └── resources/
│   │       └── application.properties
│   └── test/
└── pom.xml

3.3 配置 pom.xml 依赖

在 pom.xml 中添加 Spring AI 相关依赖,核心是导入 Spring AI BOM 统一管理版本,并引入 Deepseek 模型 starter:

<?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>com.example</groupId>
        <artifactId>Weiz-SpringAI</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>Weiz-SpringAI-QuickStart</artifactId>
    <name>Weiz-SpringAI-QuickStart</name>
    <description>Weiz-SpringAI-QuickStart</description>
    <properties>
        <java.version>17</java.version>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-starter-model-deepseek</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

3.4 配置 application.properties

在 src/main/resources/application.properties 中配置 Deepseek 模型的基础信息:

spring.application.name=Weiz-SpringAI-QuickStart
server.port=8080
# Deepseek URL
spring.ai.deepseek.base-url=https://api.deepseek.com
spring.ai.deepseek.api-key=你的 Deepseek appkey
spring.ai.deepseek.chat.options.model=deepseek-chat

注意:Deepseek API 密钥需要在 Deepseek 官网注册获取,替换配置中的占位符。

3.5 编写 ChatController

创建 com.example.weizspringai.controller 包,并编写 ChatController 类,实现与 Deepseek 模型的交互:

import org.springframework.ai.deepseek.DeepSeekChatModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/ai")
public class ChatController {

    @Autowired
    private DeepSeekChatModel chatModel;

    @PostMapping("/chat")
    public String chat(@RequestBody String message) {
        String resp = chatModel.call(message);
        return resp;
    }
}

这里简化了返回类型,实际生产中可根据需要定义 DTO。

3.6 启动并测试

运行主启动类启动项目。浏览器访问:http://localhost:8080/ai/chat?message=你是谁,即可看到模型响应。

四、实战进阶:流式响应与可视化界面优化

前面使用 Spring AI 快速整合 DeepSeek,实现了与大模型对话的功能,但是这个项目存在两个不足:无可视化交互界面;AI 响应为一次性返回,缺乏实时感。下面对项目进行优化升级。

Step 1:实现流式返回接口

在 ChatController 中,创建新接口 /ai/chatStream 接口,利用 SSE 技术实现流式传输。

@PostMapping("/chatStream")
public SseEmitter chatStream(@RequestBody String message) {
    SseEmitter emitter = new SseEmitter(Long.MAX_VALUE);
    Flux<String> stream = chatModel.stream(message);
    stream.subscribe(
        chunk -> {
            try {
                String json = objectMapper.writeValueAsString(chunk);
                emitter.send(SseEmitter.event().data(json).build());
            } catch (IOException e) {
                emitter.completeWithError(e);
            }
        },
        error -> { emitter.completeWithError(error); },
        () -> { emitter.complete(); }
    );
    return emitter;
}

Step 2:创建可视化聊天界面

为了更直观地与模型交互,我们可以在 src/main/resources/static 目录下创建 index.html,实现简单的聊天界面。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AI 聊天助手(流式响应)</title>
<style>
* { margin:0; padding:0; box-sizing: border-box; }
body { font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial, sans-serif; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); height:100vh; display: flex; justify-content: center; align-items: center; }
.chat-container { width:800px; height:600px; background: white; border-radius:16px; box-shadow:0 20px 60px rgba(0,0,0,0.3); display: flex; flex-direction: column; overflow: hidden; }
.chat-header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); padding:20px; color: white; }
.chat-header h1 { font-size:24px; font-weight:600; }
.chat-messages { flex:1; padding:20px; overflow-y: auto; background: #f5f5f5; }
.message { margin-bottom:16px; display: flex; align-items: flex-start; }
.message.user { justify-content: flex-end; }
.message.assistant { justify-content: flex-start; }
.message-content { max-width:70%; padding:12px 16px; border-radius:12px; line-height:1.5; word-wrap:break-word; }
.message.user .message-content { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; border-bottom-right-radius:4px; }
.message.assistant .message-content { background: white; color: #333; border-bottom-left-radius:4px; box-shadow:0 2px 8px rgba(0,0,0,0.1); }
.chat-input-container { padding:20px; background: white; border-top:1px solid #e0e0e0; }
.chat-input-form { display: flex; gap:12px; }
#messageInput { flex:1; padding:12px 16px; border:2px solid #e0e0e0; border-radius:24px; font-size:16px; outline: none; transition: border-color 0.3s; }
#sendButton { padding:12px 32px; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; border: none; border-radius:24px; font-size:16px; font-weight:600; cursor: pointer; }
</style>
</head>
<body>
<div class="chat-container">
    <div class="chat-header"><h1>AI 聊天助手</h1><p>基于 Spring AI 和 DeepSeek 的智能对话系统(流式响应)</p></div>
    <div class="chat-messages" id="chatMessages"></div>
    <div class="chat-input-container">
        <form class="chat-input-form" id="chatForm">
            <input type="text" id="messageInput" placeholder="输入您的问题..." autocomplete="off" required>
            <button type="submit" id="sendButton">发送</button>
        </form>
    </div>
</div>
<script>
const chatMessages = document.getElementById('chatMessages');
const chatForm = document.getElementById('chatForm');
const messageInput = document.getElementById('messageInput');
const sendButton = document.getElementById('sendButton');

async function sendMessage(message){
    const response = await fetch('/ai/chatStream', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ message: message })
    });
    if (!response.ok) throw new Error('网络请求失败');
    const reader = response.body.getReader();
    const decoder = new TextDecoder();
    let fullText = '';
    while (true) {
        const { done, value } = await reader.read();
        if (done) break;
        const chunk = decoder.decode(value, { stream: true });
        const lines = chunk.split('\n').filter(line => line.trim());
        for (const line of lines) {
            try {
                const cleanLine = line.replace(/^data:\s*/, '').trim();
                if (!cleanLine) continue;
                const data = JSON.parse(cleanLine);
                if (data.response) { fullText += data.response; }
            } catch (e) { console.warn('解析 JSON 失败:', e); }
        }
        // 此处省略 DOM 更新逻辑以保持简洁
    }
}

chatForm.addEventListener('submit', async (e) => {
    e.preventDefault();
    const message = messageInput.value.trim();
    if (!message) return;
    messageInput.value = '';
    await sendMessage(message);
});
</script>
</body>
</html>

Step 3:启动并测试

重启项目后,访问 http://localhost:8080,即可通过可视化界面与 AI 聊天,例如输入'你好',模型会流式返回。

聊天界面

总结

总的来说,Spring AI 让 Java 接入 AI 变得像调用普通服务一样简单。通过统一抽象接口,我们无需跨生态就能快速集成大模型能力。从环境搭建到流式响应优化,整个流程展示了如何在现有 Java 项目中平滑落地 AI 功能,极大降低了开发门槛。

目录

  1. Spring AI 实战:Java 原生接入大模型快速上手
  2. 一、什么是 Spring AI?
  3. 二、Spring AI 核心特性:为什么值得选?
  4. 1. 全栈多供应商模型适配,覆盖主流 AI 能力
  5. 2. 标准化抽象 API,统一调用体验
  6. 3. 原生集成 Spring Boot,开箱即用
  7. 4. 结构化输出与类型安全,降低维护成本
  8. 5. 内置向量存储与 RAG 支持,激活私有知识库
  9. 6. 工具调用能力,打通业务系统闭环
  10. 三、快速上手:环境准备与 Deepseek 对话案例
  11. 3.1 环境要求
  12. 3.2 创建 Spring Boot 项目
  13. 3.3 配置 pom.xml 依赖
  14. 3.4 配置 application.properties
  15. Deepseek URL
  16. 3.5 编写 ChatController
  17. 3.6 启动并测试
  18. 四、实战进阶:流式响应与可视化界面优化
  19. Step 1:实现流式返回接口
  20. Step 2:创建可视化聊天界面
  21. Step 3:启动并测试
  22. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 利用腾讯云 HAI 与 DeepSeek 快速搭建响应式个人网页
  • GLM-4.6V-Flash-WEB 食品包装识别准确性验证
  • 10 款主流 AIGC 降重工具免费与付费版对比评测
  • 渐进式 Web 应用开发实例:核心技术与实战
  • AI 热榜深度解析:平台生态、多智能体与模型产品化趋势
  • 数据结构初阶:树的概念、术语与表示方法
  • OpenClaw 开源汉化版安装与配置指南
  • AR 健身教练“形随心动”:基于 Rokid CXR-M SDK 的实践落地
  • 将 Zed 集成到 Bright Data Web MCP,让 AI 编辑器具备“超能力”
  • 企业级工作流引擎低代码开发实战:RuoYi-Flowable-Plus
  • AMR 机器人:如何满足现代物料搬运需求
  • Flutter for OpenHarmony:使用 money2 实现高精度金融计算
  • C++ 基于正倒排索引的 Boost 搜索引擎实现
  • Python性能分析:从cProfile到火焰图,精准定位性能瓶颈
  • AI 公司滥用用户协议:将用户视为数据提款机的现象分析
  • 知网 AIGC 检测不通过?三步降低 AI 率
  • RAG 检索增强生成技术入门与实战指南
  • VS Code 远程连接服务器后 GitHub Copilot 无法使用修复方案
  • Seata XA 模式:强一致性分布式事务的配置与权衡
  • Spring Boot 集成数据仓库与 ETL 工具实战

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online