如果你是 Java / Spring Boot 开发者想开始做 AI 应用第一步不一定是去学一整套模型训练。更实际的起点是先把一个大模型调用接进 Spring Boot 项目。这篇用 Spring AI DeepSeek 举例目标很简单跑通一个最小对话接口。直接结论你需要准备JDK 17Spring Boot 项目spring-ai-starter-model-deepseekDeepSeek API Key一个ChatController核心配置是spring: ai: deepseek: api-key: ${DEEPSEEK_API_KEY} chat: options: model: deepseek-v4-flash temperature: 0.7核心调用是return chatClient.prompt() .user(question) .call() .content();为什么这个 Demo 值得先跑很多 Java 开发者看 AI会先被 RAG、Agent、Tool Calling、MCP 这些词吓住。但企业里的 AI 应用第一步通常不是复杂智能体而是让现有 Java 系统具备调用大模型的能力。只要这个链路跑通后面的对话记忆、知识库问答、工具调用都是在这个基础上继续加能力。最小 Demo 怎么跑上一篇我们聊了一个问题为什么 Java 程序员现在要补上 Spring AI 这一课。只讲“为什么”还不够。技术这东西最怕停留在概念上。你看完一堆趋势分析收藏一堆教程最后项目里还是一行代码没跑起来那 AI 依然离你很远。所以这篇直接动手。我们用 Spring Boot 接 DeepSeek跑一个最小可用的对话接口。这篇文章不讲大而全的理论只做一件事用 10 分钟跑通一个可以和 DeepSeek 对话的 Spring Boot Demo。跑通之后你会发现Java 程序员做 AI 应用的第一步其实没有想象中那么远。一、为什么选 Spring AI DeepSeek对 Java 开发者来说Spring AI 的最大价值不是“让你少写几行代码”而是用 Spring 熟悉的工程方式把大模型接进业务系统。你不用自己封装 HTTP Client不用手写一堆请求参数也不用为每个模型供应商维护一套调用逻辑。Spring AI 把这些能力抽象成统一接口比如ChatClient面向应用开发的对话客户端ChatModel底层模型抽象Prompt提示词和消息组织Streaming流式输出Tool Calling、RAG、Chat Memory后续做企业 AI 应用会用到的能力。DeepSeek 的优势也很直接模型效果不错API 成本友好而且现在 API 已经支持deepseek-v4-flash和deepseek-v4-pro。对入门 Demo 来说建议先用deepseek-v4-flash。它响应快、成本低适合先把 Spring AI 调用链路跑通。如果你要处理更复杂的推理、代码分析或长上下文任务再切到deepseek-v4-pro。所以这个组合特别适合入门Spring AI 负责工程化DeepSeek 负责模型能力。二、准备工作你需要准备 4 样东西JDK 17 或以上Maven 或 Gradle一个 Spring Boot 项目一个 DeepSeek API Key。DeepSeek API Key 可以在 DeepSeek Platform 创建https://platform.deepseek.com/真实项目里不要把 Key 写死到代码或配置文件里。更推荐的方式是用环境变量export DEEPSEEK_API_KEY你的 DeepSeek API Key如果只是临时验证也尽量养成这个习惯密钥放在环境变量、配置中心或密钥管理工具里不要提交到代码仓库。三、创建 Spring Boot 项目最快的方式是用 Spring Initializrhttps://start.spring.io/可以按下面这样选。配置项推荐值ProjectMavenLanguageJavaSpring Boot3.5.14 或当前稳定版Groupcom.exampleArtifactspringai-deepseek-demoJava17 或以上我这里选的是 Maven、Java、Spring Boot 3.5.14、YAML、Java 17然后在依赖里加了 DeepSeek。生成后的pom.xml大概会长这样properties java.version17/java.version spring-ai.version1.1.7/spring-ai.version /properties dependencies dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-starter-model-deepseek/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId scopetest/scope /dependency /dependencies dependencyManagement dependencies dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-bom/artifactId version${spring-ai.version}/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement这里有一个小坑不建议在单个 starter 上硬写版本号最好统一交给spring-ai-bom管理。这样后面你接入 RAG、向量数据库、Chat Memory 时不容易出现 Spring AI 组件版本不一致的问题。不过下面我们要写的是一个 HTTP 接口。如果你在 Initializr 里只选了 DeepSeek没有选 Spring Web需要再补一个 Web 依赖dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency不然下一步写RestController时相关注解会找不到。四、配置 DeepSeek打开src/main/resources/application.yml加上配置spring: ai: deepseek: api-key: sk-你的-DeepSeek-API-Key chat: options: model: deepseek-v4-flash temperature: 0.7几个关键点spring.ai.deepseek.api-keyDeepSeek API KeyDemo 阶段先直接写在 yml 里model: deepseek-v4-flash速度快、成本友好适合 Demo 和常规应用temperature控制输出随机性越低越稳定越高越发散。如果你写成${DEEPSEEK_API_KEY}但启动时报DeepSeek API key must be set大概率是 IDEA 的运行配置里没有带上这个环境变量。这个时候先别卡在这里直接把 Key 写回application.yml把 Demo 跑通再说。如果你想要更强的能力可以把模型改成model: deepseek-v4-pro不过第一步建议先用deepseek-v4-flash。原因很简单先把链路跑通再根据任务复杂度选择模型。五、写第一个对话接口新建一个 Controllersrc/main/java/com/example/springaideepseekdemo/ChatController.java代码如下package com.example.springaideepseekdemo.controller; import org.springframework.ai.chat.client.ChatClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; RestController RequestMapping(/chat) public class ChatController { private final ChatClient chatClient; public ChatController(ChatClient.Builder chatClientBuilder) { this.chatClient chatClientBuilder .defaultSystem(你是一个简洁、准确的 Java 技术助手。) .build(); } GetMapping(/ask) public String ask(RequestParam String question) { return chatClient.prompt() .user(question) .call() .content(); } }这段代码的核心只有 3 行return chatClient.prompt() .user(question) .call() .content();含义也很直观创建一次提示词请求放入用户问题调用模型并拿到回答。这就是 Spring AI 的舒服之处。你写的是 Spring Boot 代码但背后已经完成了大模型调用。六、启动并测试启动项目之前先确认环境变量已经设置echo $DEEPSEEK_API_KEY然后运行 Spring Boot 主类。启动成功后访问http://localhost:8080/chat/ask?question用一句话介绍 Spring AI如果一切正常你会看到类似这样的回答Spring AI 是一个为 Spring 应用提供 AI 模型如大型语言模型集成抽象的框架旨在简化 AI 功能开发。到这里你的第一个 Spring AI DeepSeek 项目就跑通了。七、加一个流式输出接口普通接口会等模型完整生成后再返回。如果你想做出类似 ChatGPT 那种“边生成边显示”的效果可以加一个流式接口。import org.springframework.http.MediaType; import reactor.core.publisher.Flux; GetMapping(value /stream, produces MediaType.TEXT_EVENT_STREAM_VALUE) public FluxString stream(RequestParam String question) { return chatClient.prompt() .user(question) .stream() .content(); }访问http://localhost:8080/chat/stream?question写一首关于程序员的打油诗流式输出的体验会明显更好。尤其是回答比较长的时候用户不需要一直等空白页面。八、加一个系统提示词真实项目里AI 不能随便发挥。你通常要给它一个角色、边界和输出风格。比如做一个 Java 代码助手GetMapping(/code-helper) public String codeHelper(RequestParam String question) { return chatClient.prompt() .system( 你是一个专业的 Java 代码助手。 你擅长 Spring Boot、Spring AI、微服务和工程化实践。 回答要简洁、准确优先给可落地的建议。 ) .user(question) .call() .content(); }访问http://localhost:8080/chat/code-helper?question如何优化 Spring Boot 启动速度有了系统提示词模型回答会更稳定也更贴近你的业务目标。九、最容易踩的 5 个坑1. starter 名称写错旧文章里经常会出现类似spring-ai-deepseek-spring-boot-starter的写法。现在更推荐使用artifactIdspring-ai-starter-model-deepseek/artifactId再配合spring-ai-bom管理版本。2. API Key 写死Demo 可以快但不要把坏习惯带进生产。推荐这样配置spring: ai: deepseek: api-key: ${DEEPSEEK_API_KEY}3. 模型名填错DeepSeek 当前 API 常用模型可以先记两个deepseek-v4-flash更快、更便宜适合 Demo、普通问答和轻量业务场景deepseek-v4-pro能力更强适合复杂推理、代码分析和长上下文任务。刚入门先用deepseek-v4-flash排查问题更简单。4. temperature 调得太高如果你做的是代码助手、运维助手、知识库问答建议把temperature调低一些。比如temperature: 0.3这类场景要的是稳定和准确不是文采飞扬。5. 直接拿 Demo 上生产跑通 Demo 不等于可以上线。真正上线前你至少还要补上超时和重试日志和调用链追踪Token 成本控制敏感数据脱敏异常兜底权限控制提示词版本管理。AI 接口不是普通第三方接口。它既会花钱也会产生不可控输出所以更需要工程治理。十、下一步可以做什么这篇先不展开 RAG、Tool Calling 那些大主题。上一篇已经讲过它们能做什么。如果你今天只是刚跑通这个 Demo我更建议你先把它打磨成一个“像样的小项目”。可以从这几件事开始把GET接口改成POST用 JSON 传参加一个简单的前端页面不要每次都在浏览器地址栏里改问题把temperature、model做成配置项方便切换deepseek-v4-flash和deepseek-v4-pro给接口加上超时、异常提示和调用日志记录每次提问和回答方便你观察模型效果。这些东西听起来不如“智能体”“知识库”酷但很有用。因为它们会让你从“我会调一个模型接口”往“我能做一个可用的 AI 功能”迈一步。等这个小项目顺手了再去加 RAG、记忆、多轮对话、Tool Calling。那时候你不是在追概念而是在给一个已经跑起来的东西加能力。最后说两句Spring AI DeepSeek 的入门门槛不高。真正难的不是跑通第一个接口而是把它变成一个可靠、可控、可维护的企业 AI 应用。但第一步必须先迈出去。如果你是 Java 后端建议别只停留在“看看 AI 新闻”的阶段。今天就建一个 Spring Boot 项目接上 DeepSeek跑一次真实调用。代码在自己电脑上跑起来的那一刻你对 AI 应用开发的理解会完全不一样。
Java 开发者怎么用 Spring AI 接 DeepSeek?一个最小 Demo 跑通思路
如果你是 Java / Spring Boot 开发者想开始做 AI 应用第一步不一定是去学一整套模型训练。更实际的起点是先把一个大模型调用接进 Spring Boot 项目。这篇用 Spring AI DeepSeek 举例目标很简单跑通一个最小对话接口。直接结论你需要准备JDK 17Spring Boot 项目spring-ai-starter-model-deepseekDeepSeek API Key一个ChatController核心配置是spring: ai: deepseek: api-key: ${DEEPSEEK_API_KEY} chat: options: model: deepseek-v4-flash temperature: 0.7核心调用是return chatClient.prompt() .user(question) .call() .content();为什么这个 Demo 值得先跑很多 Java 开发者看 AI会先被 RAG、Agent、Tool Calling、MCP 这些词吓住。但企业里的 AI 应用第一步通常不是复杂智能体而是让现有 Java 系统具备调用大模型的能力。只要这个链路跑通后面的对话记忆、知识库问答、工具调用都是在这个基础上继续加能力。最小 Demo 怎么跑上一篇我们聊了一个问题为什么 Java 程序员现在要补上 Spring AI 这一课。只讲“为什么”还不够。技术这东西最怕停留在概念上。你看完一堆趋势分析收藏一堆教程最后项目里还是一行代码没跑起来那 AI 依然离你很远。所以这篇直接动手。我们用 Spring Boot 接 DeepSeek跑一个最小可用的对话接口。这篇文章不讲大而全的理论只做一件事用 10 分钟跑通一个可以和 DeepSeek 对话的 Spring Boot Demo。跑通之后你会发现Java 程序员做 AI 应用的第一步其实没有想象中那么远。一、为什么选 Spring AI DeepSeek对 Java 开发者来说Spring AI 的最大价值不是“让你少写几行代码”而是用 Spring 熟悉的工程方式把大模型接进业务系统。你不用自己封装 HTTP Client不用手写一堆请求参数也不用为每个模型供应商维护一套调用逻辑。Spring AI 把这些能力抽象成统一接口比如ChatClient面向应用开发的对话客户端ChatModel底层模型抽象Prompt提示词和消息组织Streaming流式输出Tool Calling、RAG、Chat Memory后续做企业 AI 应用会用到的能力。DeepSeek 的优势也很直接模型效果不错API 成本友好而且现在 API 已经支持deepseek-v4-flash和deepseek-v4-pro。对入门 Demo 来说建议先用deepseek-v4-flash。它响应快、成本低适合先把 Spring AI 调用链路跑通。如果你要处理更复杂的推理、代码分析或长上下文任务再切到deepseek-v4-pro。所以这个组合特别适合入门Spring AI 负责工程化DeepSeek 负责模型能力。二、准备工作你需要准备 4 样东西JDK 17 或以上Maven 或 Gradle一个 Spring Boot 项目一个 DeepSeek API Key。DeepSeek API Key 可以在 DeepSeek Platform 创建https://platform.deepseek.com/真实项目里不要把 Key 写死到代码或配置文件里。更推荐的方式是用环境变量export DEEPSEEK_API_KEY你的 DeepSeek API Key如果只是临时验证也尽量养成这个习惯密钥放在环境变量、配置中心或密钥管理工具里不要提交到代码仓库。三、创建 Spring Boot 项目最快的方式是用 Spring Initializrhttps://start.spring.io/可以按下面这样选。配置项推荐值ProjectMavenLanguageJavaSpring Boot3.5.14 或当前稳定版Groupcom.exampleArtifactspringai-deepseek-demoJava17 或以上我这里选的是 Maven、Java、Spring Boot 3.5.14、YAML、Java 17然后在依赖里加了 DeepSeek。生成后的pom.xml大概会长这样properties java.version17/java.version spring-ai.version1.1.7/spring-ai.version /properties dependencies dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-starter-model-deepseek/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId scopetest/scope /dependency /dependencies dependencyManagement dependencies dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-bom/artifactId version${spring-ai.version}/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement这里有一个小坑不建议在单个 starter 上硬写版本号最好统一交给spring-ai-bom管理。这样后面你接入 RAG、向量数据库、Chat Memory 时不容易出现 Spring AI 组件版本不一致的问题。不过下面我们要写的是一个 HTTP 接口。如果你在 Initializr 里只选了 DeepSeek没有选 Spring Web需要再补一个 Web 依赖dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency不然下一步写RestController时相关注解会找不到。四、配置 DeepSeek打开src/main/resources/application.yml加上配置spring: ai: deepseek: api-key: sk-你的-DeepSeek-API-Key chat: options: model: deepseek-v4-flash temperature: 0.7几个关键点spring.ai.deepseek.api-keyDeepSeek API KeyDemo 阶段先直接写在 yml 里model: deepseek-v4-flash速度快、成本友好适合 Demo 和常规应用temperature控制输出随机性越低越稳定越高越发散。如果你写成${DEEPSEEK_API_KEY}但启动时报DeepSeek API key must be set大概率是 IDEA 的运行配置里没有带上这个环境变量。这个时候先别卡在这里直接把 Key 写回application.yml把 Demo 跑通再说。如果你想要更强的能力可以把模型改成model: deepseek-v4-pro不过第一步建议先用deepseek-v4-flash。原因很简单先把链路跑通再根据任务复杂度选择模型。五、写第一个对话接口新建一个 Controllersrc/main/java/com/example/springaideepseekdemo/ChatController.java代码如下package com.example.springaideepseekdemo.controller; import org.springframework.ai.chat.client.ChatClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; RestController RequestMapping(/chat) public class ChatController { private final ChatClient chatClient; public ChatController(ChatClient.Builder chatClientBuilder) { this.chatClient chatClientBuilder .defaultSystem(你是一个简洁、准确的 Java 技术助手。) .build(); } GetMapping(/ask) public String ask(RequestParam String question) { return chatClient.prompt() .user(question) .call() .content(); } }这段代码的核心只有 3 行return chatClient.prompt() .user(question) .call() .content();含义也很直观创建一次提示词请求放入用户问题调用模型并拿到回答。这就是 Spring AI 的舒服之处。你写的是 Spring Boot 代码但背后已经完成了大模型调用。六、启动并测试启动项目之前先确认环境变量已经设置echo $DEEPSEEK_API_KEY然后运行 Spring Boot 主类。启动成功后访问http://localhost:8080/chat/ask?question用一句话介绍 Spring AI如果一切正常你会看到类似这样的回答Spring AI 是一个为 Spring 应用提供 AI 模型如大型语言模型集成抽象的框架旨在简化 AI 功能开发。到这里你的第一个 Spring AI DeepSeek 项目就跑通了。七、加一个流式输出接口普通接口会等模型完整生成后再返回。如果你想做出类似 ChatGPT 那种“边生成边显示”的效果可以加一个流式接口。import org.springframework.http.MediaType; import reactor.core.publisher.Flux; GetMapping(value /stream, produces MediaType.TEXT_EVENT_STREAM_VALUE) public FluxString stream(RequestParam String question) { return chatClient.prompt() .user(question) .stream() .content(); }访问http://localhost:8080/chat/stream?question写一首关于程序员的打油诗流式输出的体验会明显更好。尤其是回答比较长的时候用户不需要一直等空白页面。八、加一个系统提示词真实项目里AI 不能随便发挥。你通常要给它一个角色、边界和输出风格。比如做一个 Java 代码助手GetMapping(/code-helper) public String codeHelper(RequestParam String question) { return chatClient.prompt() .system( 你是一个专业的 Java 代码助手。 你擅长 Spring Boot、Spring AI、微服务和工程化实践。 回答要简洁、准确优先给可落地的建议。 ) .user(question) .call() .content(); }访问http://localhost:8080/chat/code-helper?question如何优化 Spring Boot 启动速度有了系统提示词模型回答会更稳定也更贴近你的业务目标。九、最容易踩的 5 个坑1. starter 名称写错旧文章里经常会出现类似spring-ai-deepseek-spring-boot-starter的写法。现在更推荐使用artifactIdspring-ai-starter-model-deepseek/artifactId再配合spring-ai-bom管理版本。2. API Key 写死Demo 可以快但不要把坏习惯带进生产。推荐这样配置spring: ai: deepseek: api-key: ${DEEPSEEK_API_KEY}3. 模型名填错DeepSeek 当前 API 常用模型可以先记两个deepseek-v4-flash更快、更便宜适合 Demo、普通问答和轻量业务场景deepseek-v4-pro能力更强适合复杂推理、代码分析和长上下文任务。刚入门先用deepseek-v4-flash排查问题更简单。4. temperature 调得太高如果你做的是代码助手、运维助手、知识库问答建议把temperature调低一些。比如temperature: 0.3这类场景要的是稳定和准确不是文采飞扬。5. 直接拿 Demo 上生产跑通 Demo 不等于可以上线。真正上线前你至少还要补上超时和重试日志和调用链追踪Token 成本控制敏感数据脱敏异常兜底权限控制提示词版本管理。AI 接口不是普通第三方接口。它既会花钱也会产生不可控输出所以更需要工程治理。十、下一步可以做什么这篇先不展开 RAG、Tool Calling 那些大主题。上一篇已经讲过它们能做什么。如果你今天只是刚跑通这个 Demo我更建议你先把它打磨成一个“像样的小项目”。可以从这几件事开始把GET接口改成POST用 JSON 传参加一个简单的前端页面不要每次都在浏览器地址栏里改问题把temperature、model做成配置项方便切换deepseek-v4-flash和deepseek-v4-pro给接口加上超时、异常提示和调用日志记录每次提问和回答方便你观察模型效果。这些东西听起来不如“智能体”“知识库”酷但很有用。因为它们会让你从“我会调一个模型接口”往“我能做一个可用的 AI 功能”迈一步。等这个小项目顺手了再去加 RAG、记忆、多轮对话、Tool Calling。那时候你不是在追概念而是在给一个已经跑起来的东西加能力。最后说两句Spring AI DeepSeek 的入门门槛不高。真正难的不是跑通第一个接口而是把它变成一个可靠、可控、可维护的企业 AI 应用。但第一步必须先迈出去。如果你是 Java 后端建议别只停留在“看看 AI 新闻”的阶段。今天就建一个 Spring Boot 项目接上 DeepSeek跑一次真实调用。代码在自己电脑上跑起来的那一刻你对 AI 应用开发的理解会完全不一样。