Spring AI 集成 DeepSeek Chat 技术详解与最佳实践

一、概述

随着 AIGC(AI Generated Content)技术飞速发展,企业和开发者越来越多地需要将强大的大语言模型(LLM)能力融入自己的业务系统。Spring AI 作为 Spring 生态下的 AI 集成框架,为 Java 开发者提供了统一、简洁的接口,便于快速接入如 DeepSeek Chat 这类主流大模型服务。

本文将系统讲解如何在 Spring Boot 项目中集成 DeepSeek Chat,涵盖从环境准备、依赖配置、核心参数详解、代码示例到常见问题排查,并结合 mermaid 图表优化结构说明,帮助你高效上手并深入理解原理。


二、名词解释

名词 释义
LLM(大语言模型) Large Language Model,能理解和生成自然语言的大型神经网络
Spring AI Spring 官方推出的 AI 框架,统一接入多种主流 AI 模型及服务
DeepSeek Chat DeepSeek 推出的高性能对话模型,支持通用对话和推理能力
API Key 用于鉴权访问云端服务的密钥,务必妥善保管
BOM Bill of Materials,依赖版本统一管理配置
Prompt 向 AI 模型输入的文本(或消息序列),决定生成内容
Reasoner 推理模型,能输出链式思考过程并给出最终答案

三、项目背景与发展历史

Spring AI 诞生于 2023 年,由 Spring 团队发起,目标是让 Java 世界与 AIGC 技术无缝衔接。它抽象了多种 AI 服务的接入方式,支持 OpenAI、DeepSeek、百度文心等主流模型,并且保持 Spring 风格的配置、自动装配和依赖管理。

DeepSeek 成立于 2023 年,专注于大模型研发,致力于提供高性价比的推理与生成服务。2024 年,DeepSeek Chat 和 Reasoner 模型发布,支持高质量对话、链式推理、代码生成等场景,API 设计简洁易用。

Spring AI + DeepSeek 结合,赋能 Java 企业级场景,极大提升了开发效率和智能化水平。


四、集成流程结构(Mermaid Flowchart)

注册 DeepSeek 获取 API Key
配置 API Key 环境变量或 application.yml
添加 Spring AI DeepSeek 依赖
核心参数配置
代码调用 DeepSeekChatModel
模型选择与参数动态设置
多轮对话/推理/流式输出
常见问题排查与安全建议

五、核心配置项与代码实践

1. 环境准备

  • 注册 DeepSeek 官网,获取 API Key
  • 推荐用环境变量存储 API Key,增强安全性

2. 依赖配置

  • Maven/Gradle 添加 spring-ai-starter-model-deepseek 依赖
  • 推荐引入 Spring AI BOM 统一管理版本

3. application.properties 核心参数

spring.ai.deepseek.api-key=${DEEPSEEK_API_KEY}
spring.ai.deepseek.chat.options.model=deepseek-chat
spring.ai.deepseek.chat.options.temperature=0.8

4. 主要代码示例

普通文本生成
@RestController
public class ChatController {
    @Autowired
    private DeepSeekChatModel chatModel;

    @GetMapping("/ai/generate")
    public Map<String, Object> generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        return Map.of("generation", chatModel.call(message));
    }
}
流式输出
@GetMapping("/ai/generateStream")
public Flux<ChatResponse> generateStream(@RequestParam("message") String message) {
    var prompt = new Prompt(new UserMessage(message));
    return chatModel.stream(prompt);
}
代码生成(前缀补全)
@GetMapping("/ai/generatePythonCode")
public String generate(@RequestParam("message") String message) {
    UserMessage userMessage = new UserMessage(message);
    Message assistantMessage = DeepSeekAssistantMessage.prefixAssistantMessage("```python\n");
    Prompt prompt = new Prompt(
        List.of(userMessage, assistantMessage),
        ChatOptions.builder().stopSequences(List.of("```")).build()
    );
    ChatResponse response = chatModel.call(prompt);
    return response.getResult().getOutput().getText();
}
推理模型调用
public void deepSeekReasonerExample() {
    DeepSeekChatOptions promptOptions = DeepSeekChatOptions.builder()
        .model(DeepSeekApi.ChatModel.DEEPSEEK_REASONER.getValue())
        .build();
    Prompt prompt = new Prompt("9.11 和 9.8 哪个大?", promptOptions);
    ChatResponse response = chatModel.call(prompt);

    DeepSeekAssistantMessage msg = (DeepSeekAssistantMessage) response.getResult().getOutput();
    String reasoningContent = msg.getReasoningContent(); //链式推理内容
    String text = msg.getText(); //最终答案
}

六、状态机流程解析(Mermaid stateDiagram-v2)

注册/获取API Key
配置API Key/依赖
项目启动
文本生成请求
代码补全请求
推理模型请求
Registered
Configured
Ready
TextGeneration
CodeCompletion
Reasoning

说明:不同请求类型均从 Ready 状态启动,分别进入文本、代码、推理分支,最终返回结果。


七、请求响应流程(Mermaid sequenceDiagram)

Client SpringAI DeepSeekAPI 发送文本/代码/推理请求 携带API Key+参数发起调用 返回生成/推理结果 封装响应返回结果 Client SpringAI DeepSeekAPI

八、常见问题与注意事项

  • API Key安全:务必用环境变量或密钥管理系统,不要硬编码在代码中。
  • 模型选择deepseek-chat 适合通用对话,deepseek-reasoner 适合链式推理场景。
  • 参数动态设置:可在 Prompt 构造时传递不同 options,灵活控制每次请求行为。
  • 多轮对话:注意推理模型返回的 reasoning_content 字段不能作为后续输入,否则会报错。
  • 流式输出:使用 chatModel.stream() 实现 Token 级别流式响应,适合实时交互。

九、权威资料和参考文献


十、速记口总结 & 系统性认知

速记口诀

“注册拿密钥,配置用变量,依赖加 BOM,参数随需变,模型按场景,代码多示例,安全记心间,官方查文档。”

系统性认知

  • Spring AI 是 Java 接入 AI 的统一桥梁,极大降低了模型接入门槛。
  • DeepSeek Chat 提供高性能对话和推理能力,为企业级应用注入智能。
  • 通过环境变量管理密钥,确保安全合规。
  • 自动装配+手动实例化两种方式,满足不同项目需求。
  • Prompt 构造和参数动态设置,实现灵活业务定制。
  • Mermaid 图表帮助梳理集成流程、状态、请求响应,优化知识结构。

结论:Spring AI 集成 DeepSeek Chat 是 Java 智能化升级的最佳实践之一。只需按本文步骤操作即可快速高效接入,建议多参考官方文档和源码,结合具体业务场景灵活应用!


你整理得很详细,下面我用中文给你提炼一下 Spring AI 集成 DeepSeek Chat 的核心用法和注意点,方便开发者快速上手。


一、准备工作

  1. 注册 DeepSeek 并获取 API Key

    • 注册、登录 DeepSeek官网
    • 在“API Keys”页面生成你的 API Key。
  2. 配置 API Key 到 Spring Boot 项目

    • 推荐用环境变量增强安全性。
    • application.propertiesapplication.yml 中配置:
      spring.ai.deepseek.api-key=你的APIKey
      # 或用环境变量
      spring.ai.deepseek.api-key=${DEEPSEEK_API_KEY}
      
    • 在你的系统环境或 .env 文件中:
      export DEEPSEEK_API_KEY=你的APIKey
      

二、依赖配置

  1. 添加 Maven 依赖

    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-starter-model-deepseek</artifactId>
    </dependency>
    
    • 推荐引入 Spring AI BOM(版本管理)。
  2. Gradle 用法

    implementation 'org.springframework.ai:spring-ai-starter-model-deepseek'
    

三、核心配置项(application.properties)

常用配置示例:

spring.ai.deepseek.api-key=你的APIKey
spring.ai.deepseek.chat.options.model=deepseek-chat
spring.ai.deepseek.chat.options.temperature=0.8

更多配置项可参考文档,比如模型选择、生成长度、采样温度、惩罚参数等。


四、代码示例

1. 普通文本生成

@RestController
public class ChatController {

    private final DeepSeekChatModel chatModel;

    @Autowired
    public ChatController(DeepSeekChatModel chatModel) {
        this.chatModel = chatModel;
    }

    @GetMapping("/ai/generate")
    public Map<String, Object> generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        return Map.of("generation", chatModel.call(message));
    }
}

2. 流式输出

@GetMapping("/ai/generateStream")
public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
    var prompt = new Prompt(new UserMessage(message));
    return chatModel.stream(prompt);
}

3. 代码生成(前缀补全)

@GetMapping("/ai/generatePythonCode")
public String generate(@RequestParam(value = "message", defaultValue = "请写一个快速排序代码") String message) {
    UserMessage userMessage = new UserMessage(message);
    Message assistantMessage = DeepSeekAssistantMessage.prefixAssistantMessage("```python\n");
    Prompt prompt = new Prompt(
        List.of(userMessage, assistantMessage),
        ChatOptions.builder().stopSequences(List.of("```")).build()
    );
    ChatResponse response = chatModel.call(prompt);
    return response.getResult().getOutput().getText();
}

4. 推理模型(deepseek-reasoner)

public void deepSeekReasonerExample() {
    DeepSeekChatOptions promptOptions = DeepSeekChatOptions.builder()
        .model(DeepSeekApi.ChatModel.DEEPSEEK_REASONER.getValue())
        .build();
    Prompt prompt = new Prompt("9.11 和 9.8 哪个大?", promptOptions);
    ChatResponse response = chatModel.call(prompt);

    DeepSeekAssistantMessage msg = (DeepSeekAssistantMessage) response.getResult().getOutput();
    String reasoningContent = msg.getReasoningContent(); //链式推理内容
    String text = msg.getText(); //最终答案
}

五、手动创建 DeepSeekChatModel

如果不使用自动配置,可以手动创建:

DeepSeekApi deepSeekApi = DeepSeekApi.builder()
    .apiKey(System.getenv("DEEPSEEK_API_KEY"))
    .build();
DeepSeekChatOptions options = DeepSeekChatOptions.builder()
    .model(DeepSeekApi.ChatModel.DEEPSEEK_CHAT.getValue())
    .temperature(0.4)
    .maxTokens(200)
    .build();
DeepSeekChatModel chatModel = DeepSeekChatModel.builder()
    .deepSeekApi(deepSeekApi)
    .defaultOptions(options)
    .build();
ChatResponse response = chatModel.call(new Prompt("生成5个著名海盗的名字"));

六、常见问题与注意事项

  • API Key安全:建议用环境变量,不要硬编码在代码中。
  • 模型选择deepseek-chat(通用对话)与 deepseek-reasoner(链式推理),根据场景选择。
  • 参数动态设置:可以在 Prompt 时动态传递 options,灵活控制每次请求参数。
  • 多轮对话:推理模型返回的 reasoning_content 字段不能作为输入,否则会报 400 错。

七、更多资料


如需详细功能或问题排查,欢迎补充具体需求或报错信息!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐