SpringAI 集成DeepSeek:Java 开发人工智能新利器

一、SpringAI 简介

随着人工智能技术的飞速发展,越来越多的开发者开始探索如何将 AI 能力集成到现有的应用中来提升产品的智能化水平。Spring AI 正是为 Java 开发者提供的一款强大的 AI 框架,使得这一集成过程变得前所未有的简单和高效。

本文将深入探讨 Spring AI 的核心概念以及如何快速上手使用这款智能新利器。

官方文档:https://spring.io/projects/spring-ai#overview

中文版文档:https://spring-doc.cadn.net.cn/projects/spring-ai#overview

二、什么是Spring AI?

目前 AI 应用程序开发框架主要是 Python 生态;而 Spring AI 是由 Spring 团队推出的一个扩展框架,专为将 AI 能力集成到 Java 应用中而设计。它利用 Spring 的生态系统优势,提供了一系列简单易用的 API 和工具,使开发者可以轻松地加载、训练和推理 AI模型。这不仅降低了开发门槛,还极大地提高了开发效率。

图片[1]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区

Spring AI 的核心是解决了 AI 集成的根本挑战:将您的企业数据和 API 与 AI 模型连接起来。

三、Spring AI的核心概念

3.1. Models

模型(Models)是指在处理和生成信息的算法,通常模仿人类认知功能。通过从大型数据集中学习模式和见解,这些模型可以做出预测、文本、图像或其他输出,增强跨行业的各种应用。

Spring AI 支持多种 AI模型 包括神经网络、决策树等。模型可以通过训练数据进行训练,之后用于推理。

图片[2]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区

3.2. Prompts

提示(Prompts)是基于语言输入的基础,指导 AI 模型生成特定输出。对于熟悉 ChatGPT 的人来说,提示可能看起来只是输入对话框中的文本,传送到 API 然而,它的内涵远不止于此,在许多 AI 模型中,提示文本并不只是一个简单的字符串。

在 ChatGPT 的 API 中,一个提示包含多个文本输入,每个输入都会被赋予不同的角色。例如,有一个 系统角色 它告诉模型如何行为并设定互动的上下文。此外,还有一个 用户角色 通常就是用户的输入。

设计有效的提示既是一门艺术,也是一门科学。ChatGPT 被设计用于人类对话,这与使用 SQL 等语言 提问 的方式有很大不同。与 AI 模型交流更像是与另一个人对话。

3.3. Embeddings

嵌入(Embeddings)是文本、图像或视频的数值表示,用于捕捉输入之间的关系。

嵌入通过将文本、图像和视频转换为浮点数数组(称为向量)来工作。这些向量旨在捕捉文本、图像和视频的含义。嵌入数组的长度被称为向量的维度。

通过计算两个文本的向量表示之间的数值距离,应用程序可以判断生成这些嵌入向量的对象之间的相似性。

图片[3]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区

3.4. Tokens

令牌(Tokens)是 AI 模型工作的基础构件。输入时,模型会将单词转换为令牌;输出时,模型会将令牌重新转换为单词。

图片[4]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区

3.5. Structured Output

AI 模型的输出通常以 java.lang.String 的形式返回,即使你要求回复为 JSON 格式,但它并不是一个 JSON 数据结构,而只是一个字符串。

这一复杂性催生了一个专门的领域,涉及创建提示以获得预期输出,然后将生成的简单字符串转换为可用于应用集成的数据结构。

图片[5]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区

3.6. Bringing Your Data & APIs to the AI Model

如何让 AI 模型掌握它未被训练过的信息?

目前有三种方法可以定制 AI 模型以整合您的数据:

  • 微调(Fine Tuning):这种传统的机器学习技术涉及调整模型,并改变其内部权重。然而非常耗费资源。此外,有些模型可能不支持这一选项。
  • 提示嵌入(Prompt Stuffing):一种更实际的替代方案是将您的数据嵌入提供给模型的提示中。
  • 函数调用(Function Calling):这种技术允许注册自定义的用户函数,将大型语言模型与外部系统的 API 连接起来。
图片[6]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区

3.7. Retrieval Augmented Generation

RAG 是一种称为 检索增强生成 的技术,用以解决如何将相关数据整合到提示中以确保 AI 模型能够给出准确的回答。

这种方法涉及一种批处理风格的编程模型,其中任务从文档中读取非结构化数据,进行转换,然后将其写入向量数据库。从宏观角度看,这类似于一个 ETL(提取、转换和加载)管道。向量数据库用于 RAG 技术中的检索部分。

图片[7]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区

四、快速上手指南

4.1. 创建项目

开发环境要求

  • JDK 17+
  • Spring Boot 3.2.x及以上

创建一个SpringBoot项目,集成AI模型。

图片[8]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区

4.2. 选择Spring Web、OpenAI配置

图片[9]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区

4.3. Maven pom配置

创建好项目会自动生成。

  <properties>
        <java.version>17</java.version>
        <spring-ai.version>1.0.0-M6</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-openai-spring-boot-starter</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>

4.4. 项目yml配置

spring:
  application:
    name: springAIDemo
  ai:
    openai:
      api-key: <这里要输入你自己的API Key>
      base-url: https://api.siliconflow.cn
      chat:
        options:
          model: deepseek-ai/DeepSeek-V3
  1. api-key:AI平台生成,用于API调用
  2. base-url: AI平台地址
  3. model: AI模型

4.5. 生成api-key

这里我们选用 硅基流动。

1.注册
作为集合顶尖大模型的一站式云服务平台,SiliconCloud 致力于为开发者提供更快、更全面、体验更丝滑的模型 API。

图片[10]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区

注册地址:https://cloud.siliconflow.cn/i/InuW1O76 邀请码:InuW1O76

现在登录会赠送14元额度,即2000万Token, 方便大家测试使用。

2.生成Api-key

图片[11]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区

将生成好的 API 密钥放入项目yml配置中

3.选择模型

图片[12]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区

我们选择deepseek-ai/DeepSeek-R1(思考推理)、deepseek-ai/DeepSeek-V3这两款模型。
将模型model复制进yml配置。

4.6. 完成程序调用代码

  • defaultSystem 指定系统 prompt 来约束大模型的行为或者提供一些上下文信息,如这里告诉大模型今天的日期是多少,支持占位符;
  • defaultOptions 配置模型的参数
    • temperature 用于控制随机性和多样性的程度,值越高大模型回复的内容越丰富越天马行空
    • model 配置模型广场中的模型名称
  • 每次调用接口时,通过 system 来给 current_date 占位符动态赋值。

4.7. 测试

启动项目

测试地址:http://localhost:8080/ai/chat?message=%E8%87%AA%E6%88%91%E4%BB%8B%E7%BB%8D%E4%B8%80%E4%B8%8B

图片[13]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区

问日期

图片[14]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区

4.8.切换模型

 @GetMapping("/chat")
    public String conversation(@RequestParam("message") String message, @RequestParam(required = false) String model, HttpServletResponse response) {
        // 设置字符编码,避免乱码
        response.setCharacterEncoding("UTF-8");

        if (StringUtils.isEmpty(model)) {
            model = "deepseek-v3";
        }

        return chatClient.prompt().user(message)
                .system(s -> s.param("current_date", LocalDate.now().toString()))
                .options(ChatOptions.builder().model(model).build())
                .call()
                .content();
    }

使用 model 来配置模型名称

调用示例

  • 切换deepseek-r1模型
图片[15]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区
  • 切换Qwen模型
图片[16]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区

4.9. 使用prompt模板

通过 PromptTemplate 可以编辑复杂的提示词,并且也支持占位符

比较两个数 \( 9.11 \) 和 \( 9.9 \),我们可以按照以下步骤进行: 1. **比较整数部分**: - 两个数的整数部分都是 \( 9 \),所以整数部分相同。 2. **比较小数部分**: - \( 9.11 \) 的小数部分是 \( 0.11 \)。 - \( 9.9 \) 的小数部分是 \( 0.9 \)。 3. **判断小数部分的大小**: - \( 0.9 \) 大于 \( 0.11 \)。 因此,\( 9.9 \) 大于 \( 9.11 \)。 最终答案为: \[ \boxed{9.9} \]

3.10. 使用流式对话

当前接口需等待大模型完全生成回复内容才能返回,这用户体验并不好。为实现类似 ChatGPT 的逐句实时输出效果,可采用流式传输技术(Streaming Response)。

  • 调用时把 call() 改成 stream()
  • 并且遵循SSE协议最后发送[DONE]终止标识

调用示例
http://localhost:8080/ai/streamChat?message=9.11%E5%92%8C9.9%E5%93%AA%E4%B8%AA%E6%95%B0%E5%A4%A7&model=deepseek-ai/DeepSeek-R1-Distill-Qwen-7B

结果

data:要

data:比较9

data:.11

data:和9

data:.9

data:哪个数

data:大,

data:可以按照

data:以下步骤

data:进行分析

data::
data:
data:1

data:. **
......
  • data: xxx 这种是 Server-Sent Events 的格式要求;
  • 需要前端搭配 EventSource 或 WebSocket 等方式来接收流式数据,并结合 marked.js 来正确显示 markdown 语法。

五、总结

虽然通过 Spring AI 能够快速完成 DeepSeek 大模型与 Spring Boot 项目的对接,实现基础的对话接口开发,但这仅是智能化转型的初级阶段。要将大模型能力真正落地为生产级应用,还是需实现以下技术:

  1. 能力扩展层:通过 智能体 实现意图理解与任务调度,结合 FunctionCall 实现结构化数据交互,实现AI与业务系统的无缝对接;
  2. 知识增强层:应用 RAG(检索增强生成)技术构建领域知识库,解决大模型幻觉问题,支撑专业场景的精准问答;
  3. 流程编排层:设计 Agent 工作流实现复杂业务逻辑拆解,支持多步骤推理与自动化决策;
  4. 模型优化层:基于业务数据实施模型微调 Fine-tuning 提升垂直场景的响应质量和可控性。

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容