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

Spring AI 实战指南:核心接口、消息类型与流式输出详解

Spring AI 框架简化了 Java 应用中人工智能功能的集成。教程涵盖环境配置、API Key 申请及项目依赖引入,深入解析 ChatModel 与 ChatClient 接口的区别与应用场景。通过示例展示 System、User、Assistant 消息类型的构建方式,以及利用 Entity 实现结构化输出和基于 Flux 的 SSE 流式响应。此外还介绍了 Advisors 拦截器机制,助力开发者高效构建生成式 AI 应用。

月亮邮递员发布于 2026/3/28更新于 2026/8/2345 浏览

基本概念

什么是 AI

AI(人工智能)的核心在于让机器模拟人类智能,从经验中学习并做出决策。当前最主流的是生成式人工智能(AIGC),它能自动生成文章、代码等内容。

理解几个关键术语有助于后续开发:

  • 模型(Model):AI 系统的核心,本质是训练后的数学函数。可以想象成一个'虚拟大脑',通过数据学习掌握技能。
  • 大语言模型(LLM):基于海量文本训练的深度学习模型,拥有数百亿参数,擅长理解和生成人类语言。
  • 提示词(Prompt):用户给模型的指令。提示词的质量直接决定回答质量,设计优化过程称为'提示词工程'。
  • 词元(Token):模型处理文本的基本单位,也是计费依据。英文单词或中文短语可能被拆分成多个 Token。

Spring AI 是什么

Spring AI 是基于 Spring 生态的开源框架,旨在简化 Java 应用集成 AI 功能的过程。它提供统一的抽象接口,支持多种模型提供商(如 OpenAI、DeepSeek、Ollama 等),并能无缝集成 Spring Boot 和向量数据库。

快速入门

环境要求

  • JDK:17 或以上(推荐 JDK 21)
  • Spring Boot:3.2 或以上版本
  • 凭证:有效的 AI 服务 API Key(本文以 DeepSeek 为例)

项目配置

创建 Maven 项目后,添加依赖:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
    <version>1.0.0-M6</version>
</dependency>

在 application.yml 中配置密钥与模型信息:

spring:
  ai:
    openai:
      api-key: 你的 API Key
      base-url: https://api.deepseek.com
      chat:
        options:
          model: deepseek-chat
          temperature: 0.7

其中 temperature 控制生成的随机性,值越低结果越确定。配置完成后即可启动项目。

核心接口

Spring AI 提供了两个构建对话式 AI 应用的核心接口:

ChatModel

ChatModel 直接与底层模型通信,更底层且灵活,适合需要精细控制的场景。

@Service
public class ChatService {
    @Autowired
    private ChatModel chatModel;

    public String askQuestion(String question) {
        UserMessage userMessage = new UserMessage(question);
        Prompt prompt = new Prompt(List.of(userMessage));
        ChatResponse response = chatModel.call(prompt);
        return response.getResult().getOutput().getContent();
    }
}

ChatClient

ChatClient 在 ChatModel 之上封装了流畅的 API,使用更简洁,适合大多数业务场景。

@Service
public class ChatService {
    @Autowired
    private ChatClient chatClient;

    public String askQuestion(String question) {
        return chatClient.call(question);
    }
}
维度ChatModelChatClient
抽象层级底层,接近原始模型高层,面向业务
返回值ChatResponse(含元数据)ChatResponse 或纯文本
使用方法手动构造 Prompt链式 Builder 模式

消息类型

所有消息都实现了 Message 接口,用于模拟多轮对话中的不同角色:

  • SystemMessage:设定 AI 的身份、性格和行为准则,通常放在对话开头。
  • UserMessage:代表用户的输入,驱动对话前进。
  • AssistantMessage:代表 AI 的回复,用于保持上下文连贯性。
  • FunctionMessage/ToolMessage:处理工具调用结果。

示例:设置系统预设身份

@RestController
@RequestMapping("/chat")
public class ChatController {
    private final ChatClient chatClient;

    public ChatController(ChatClient.Builder builder) {
        this.chatClient = builder
            .defaultSystem("你叫小小鱼,是一款专业的智能答疑 AI 助手,擅长 Java")
            .build();
    }

    @GetMapping("/call")
    public String generation(String userInput) {
        return this.chatClient.prompt()
            .user(userInput)
            .call()
            .content();
    }
}

输出格式

结构化输出

若需获取 JSON 或对象格式的数据,可使用 entity() 方法将输出转换为自定义实体。

@GetMapping("/entity")
public Recipe entity(String userInput) {
    return this.chatClient.prompt()
        .user(String.format("请帮我生成%s的菜谱", userInput))
        .call()
        .entity(Recipe.class);
}

record Recipe(String dis, List<String> ingredients) {}

流式输出

传统输出需等待全部生成完成,而流式输出(SSE)能边生成边返回,提升用户体验。Spring AI 基于响应式编程实现,返回 Flux<String>。

@GetMapping(value = "/stream", produces = "text/html;charset=utf-8")
public Flux<String> stream(String userInput) {
    return this.chatClient.prompt()
        .user(userInput)
        .stream()
        .content();
}
SSE 协议基础

SSE(Server-Sent Events)允许服务器主动向浏览器推送数据流。核心特点包括单向通信、基于 HTTP、长连接及自动重连。

数据格式遵循特定规范,例如:

data: 这是一条消息

后端可通过 WebFlux 优雅地实现此协议。

Flux 操作

Flux 是 WebFlux 的核心组件,支持创建、转换、过滤和消费等操作。

// 创建
Flux<String> fixedFlux = Flux.just("Hello", "World");

// 转换
Flux<String> uppercased = fixedFlux.map(String::toUpperCase);

// 过滤
Flux<Integer> evenNumbers = Flux.range(1, 10).filter(n -> n % 2 == 0);

// 消费
fixedFlux.subscribe(System.out::println);

Advisors

Advisors 是一种拦截器机制,允许在 AI 调用链的关键节点注入逻辑,如日志记录或提示词修改。

执行流程为:用户输入 → Advisor.before() → AI 模型 → Advisor.after() → 响应。

内置 SimpleLoggerAdvisor 可自动记录请求和响应:

@GetMapping("/advisor")
public String advisor(String userInput) {
    return this.chatClient.prompt()
        .advisors(new SimpleLoggerAdvisor())
        .user(userInput)
        .call()
        .content();
}

配合日志级别配置,即可清晰追踪交互细节。

目录

  1. 基本概念
  2. 什么是 AI
  3. Spring AI 是什么
  4. 快速入门
  5. 环境要求
  6. 项目配置
  7. 核心接口
  8. ChatModel
  9. ChatClient
  10. 消息类型
  11. 输出格式
  12. 结构化输出
  13. 流式输出
  14. SSE 协议基础
  15. Flux 操作
  16. Advisors
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • Claude Code 高级编程技巧与实战项目详解
  • JDK 版本切换导致 toString() 空指针异常排查与解决
  • 数据链路层详解:LLC、MAC、局域网与广域网
  • 深入理解 IDE 中 LLM 调用的 Session 机制
  • Jetson + OpenClaw + 飞书机器人:构建边缘设备 AI Agent 远程交互系统
  • C++ 模板编程基础:泛型编程入门与实践
  • MySQL 数据库基础操作:创建、管理与备份恢复
  • 为什么建议学习 Python:AI 时代的核心竞争力与实用场景
  • MIT 室内场景识别数据集详解及 YOLOv8 训练实战
  • Android 开发进阶:Framework 源码与系统启动流程解析
  • 2025 前端复盘:框架内卷落幕,AI 重构生态与开发者破局
  • GLM-4.7 与 MiniMax M2.1 工程级 Agent 模型对比及集成指南
  • 基于Python Django Flask Vue的大学生问卷调查管理系统
  • Linux 基础开发工具(下):Git 版本控制与 GDB 调试实战
  • 数据结构:栈与队列详解及实现
  • Visual Studio Code + Maven:Java 项目安装配置与开发指南
  • WSL2 Linux 内核更新包(适用于 x64 计算机)
  • FPGA 实现 HDMI 接口选型与核心技术详解
  • FuseLLM:基于知识融合的大模型集成方法
  • WSL(Windows Subsystem for Linux)安装教程

相关免费在线工具

  • 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