Java 开发者零成本上手:用 Spring AI Alibaba + Ollama 本地跑通 DeepSeek 大模型

张开发
2026/4/10 11:42:45 15 分钟阅读

分享文章

Java 开发者零成本上手:用 Spring AI Alibaba + Ollama 本地跑通 DeepSeek 大模型
无需 API Key、无需云端费用、数据不出本机——一条命令启动模型十几行 Java 代码完成首次对话。写在前面过去Java 开发者想要在大模型上做实验通常面临几个门槛需要注册云服务商账号、申请 API Key、绑定支付方式每次调用都产生 Token 费用调试成本不低业务数据发送到第三方云端合规和隐私顾虑难以避免而现在借助Ollama本地模型运行时DeepSeek 开源模型Spring AI AlibabaJava AI 开发框架你可以在自己的笔记本上完成从模型部署到应用开发的完整闭环。整个过程不需要任何网络请求除初始下载外数据完全留在本地。本文将从零开始带你一步步完成这条链路。一、整体架构一览┌─────────────────────────────────────────────────┐ │ 你的笔记本电脑 │ │ │ │ ┌──────────┐ HTTP ┌───────────────────┐ │ │ │ Spring │ ──────────► │ Ollama Server │ │ │ │ AI │ localhost │ :11434 │ │ │ │ Alibaba │ REST API │ │ │ │ │ App │ ◄────────── │ DeepSeek-R1 │ │ │ │ (Java) │ JSON Resp │ (本地运行中) │ │ │ └──────────┘ └───────────────────┘ │ │ │ │ 数据不出本机 · 无 Token 费用 · 无网络依赖 │ └─────────────────────────────────────────────────┘核心理念很简单Ollama 负责在本地跑模型Spring AI Alibaba 负责用 Java 调用它。两者之间通过标准 HTTP 接口通信与调用云端 API 的代码几乎没有区别。二、本地部署 DeepSeek 模型2.1 什么是 OllamaOllama 是一个开源的大模型本地运行工具它将复杂的模型推理环境打包成一个可执行文件。你不需要安装 Python、CUDA、PyTorch 等依赖只需一条命令就能启动模型服务。它的工作方式类似于 Docker——底层封装了所有复杂性暴露出一个简洁的 API 接口默认监听localhost:11434任何能发 HTTP 请求的客户端都可以调用它。2.2 安装 OllamamacOS / Windows访问 ollama.com下载对应平台的安装包双击安装即可。Linuxcurl-fsSLhttps://ollama.com/install.sh|sh安装完成后Ollama 会作为后台服务自动启动。2.3 拉取并运行 DeepSeek 模型打开终端执行ollama run deepseek-r1:1.5b这条命令会做两件事从 Ollama 模型仓库下载deepseek-r1:1.5b模型约 1.1 GB下载完成后自动启动交互式对话你可以直接在终端里输入问题测试效果 用一句话解释什么是递归 think ... /think 递归就是一个函数调用自身直到满足终止条件后逐层返回结果。关于模型选择DeepSeek-R1 提供了多个尺寸——1.5B、7B、8B、14B、32B、70B、671B。选择哪个取决于你的硬件模型大小最低内存/显存适用场景1.5B2 GB快速体验、低配机器7B/8B8 GB日常开发、一般任务14B/32B16-24 GB高质量输出、复杂推理70B48 GB服务器部署、生产环境本文以 1.5B 为例侧重演示流程。实际项目中建议至少使用 7B 或 14B 版本以获得更好的效果。2.4 为什么选 DeepSeek-R1 蒸馏版DeepSeek-R1 的完整版671B 参数需要数百 GB 显存普通电脑根本无法运行。而蒸馏版Distill通过知识蒸馏技术将大模型的能力压缩到较小的模型中在保持较高推理质量的同时大幅降低了硬件门槛。特别是基于 Qwen 架构的蒸馏版本在中文理解与生成方面表现优异非常适合国内开发者的日常使用。三、用 Spring AI Alibaba 开发 Java 应用3.1 为什么是 Spring AI AlibabaSpring AI 是 Spring 生态官方的 AI 集成框架而 Spring AI Alibaba 在此基础上做了进一步增强统一的 API 抽象一套代码可以无缝切换 Ollama、通义千问、OpenAI 等不同模型Fluent API链式调用ChatClient提供类似 Stream API 的流畅编程体验企业级能力内置流式输出、多轮对话记忆、函数调用Function Calling、结构化输出等Spring Boot 原生集成配置即生效零额外学习成本3.2 创建项目使用 Spring Initializr 或 IDE 创建一个 Spring Boot 3.x 项目然后在pom.xml中添加依赖dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-ollama-spring-boot-starter/artifactIdversion1.0.0/version/dependency如果你希望使用 Spring AI Alibaba 的增强能力如 Agent 框架、Graph 工作流等可以额外引入dependencygroupIdcom.alibaba.cloud.ai/groupIdartifactIdspring-ai-alibaba-starter/artifactIdversion1.0.0.2/version/dependency3.3 配置文件在src/main/resources/application.yml中配置 Ollama 连接信息spring:ai:ollama:base-url:http://localhost:11434chat:model:deepseek-r1options:temperature:0.7num-predict:2048base-urlOllama 服务地址默认localhost:11434model模型名称对应ollama run时使用的名称temperature控制输出的随机性0-1越高越有创造性num-predict最大生成 Token 数3.4 编写第一个聊天接口创建一个简单的 REST Controllerimportorg.springframework.ai.chat.client.ChatClient;importorg.springframework.web.bind.annotation.*;RestControllerRequestMapping(/api)publicclassChatController{privatefinalChatClientchatClient;// Spring 自动注入 ChatClient.BuilderpublicChatController(ChatClient.Builderbuilder){this.chatClientbuilder.build();}/** * 简单对话接口 * GET /api/chat?message你好 */GetMapping(/chat)publicStringchat(RequestParamStringmessage){returnchatClient.prompt().user(message).call().content();}}就这么简单。ChatClient的链式调用清晰表达了整个调用流程prompt()— 构建请求user(message)— 设置用户输入call()— 发起调用content()— 提取响应文本3.5 启动验证启动 Spring Boot 应用后在浏览器或终端访问curlhttp://localhost:8080/api/chat?message用三句话介绍Java的发展历史你会收到来自本地 DeepSeek 模型的回复。整个过程不需要任何外部网络请求。四、进阶用法4.1 流式输出Streaming大模型生成回复可能需要数秒流式输出可以让用户像看到打字机效果一样实时看到结果GetMapping(value/chat/stream,producesMediaType.TEXT_EVENT_STREAM_VALUE)publicFluxStringstreamChat(RequestParamStringmessage){returnchatClient.prompt().user(message).stream().content();}返回类型从String变为FluxStringSpring WebFlux 会自动将每个 Token 片段推送给客户端。前端可以使用 EventSource / Server-Sent Events 来接收。4.2 多轮对话带上下文记忆默认情况下每次请求都是独立的。要实现上下文关联的多轮对话需要引入ChatMemoryimportorg.springframework.ai.chat.memory.ChatMemory;importorg.springframework.ai.chat.memory.InMemoryChatMemory;ConfigurationpublicclassChatConfig{BeanpublicChatMemorychatMemory(){returnnewInMemoryChatMemory();}}然后在 Controller 中使用privatefinalChatClientchatClient;publicChatController(ChatClient.Builderbuilder,ChatMemorychatMemory){this.chatClientbuilder.defaultSystem(你是一个有帮助的AI助手).defaultAdvisors(newMessageChatMemoryAdvisor(chatMemory)).build();}GetMapping(/chat/memory)publicStringchatWithMemory(RequestParamStringmessage,RequestParamStringconversationId){returnchatClient.prompt().user(message).advisors(a-a.param(ChatMemory.CONVERSATION_ID,conversationId)).call().content();}通过conversationId同一用户的多次对话会保留上下文。4.3 结构化输出有时候你需要模型返回特定格式的数据比如 JSON而不是自由文本publicrecordProductInfo(Stringname,Doubleprice,Stringcategory){}PostMapping(/chat/extract)publicProductInfoextractProductInfo(RequestParamStringtext){returnchatClient.prompt().user(从以下文本中提取商品信息: text).call().entity(ProductInfo.class);}Spring AI 会自动将模型的输出反序列化为 Java 对象。五、生产环境考量虽然本地部署非常适合开发和测试但在生产环境中还需要考虑以下几点5.1 硬件资源场景建议配置开发调试8GB 内存 1.5B/7B 模型小规模使用16GB 内存 14B 模型生产部署独立 GPU 服务器 32B 模型5.2 并发与性能Ollama 默认单实例处理请求。如果需要支持高并发可以考虑部署多个 Ollama 实例 负载均衡使用 Spring AI Alibaba 的连接池配置对响应时间要求不高的场景采用异步处理5.3 模型切换得益于 Spring AI 的统一抽象从 Ollama 切换到云端模型只需修改配置# 切换到通义千问DashScopespring:ai:dashscope:api-key:${DASHSCOPE_API_KEY}chat:model:qwen-plus代码层面无需任何改动。六、常见问题Q模型回答速度很慢怎么办A蒸馏版 1.5B 模型在 CPU 上推理确实较慢。建议升级到 7B 或 14B 版本并确保有足够内存。如果有 NVIDIA GPUOllama 会自动使用 GPU 加速。Q能否在 Docker 中运行A可以。Ollama 提供了官方 Docker 镜像dockerrun-d-vollama:/root/.ollama-p11434:11434--nameollama ollama/ollamadockerexec-itollama ollama run deepseek-r1:1.5bQSpring AI Alibaba 和 Spring AI 有什么区别ASpring AI Alibaba 基于 Spring AI 构建额外集成了阿里云百炼平台、Nacos 配置管理、分布式 MCP 等企业级能力。对于纯本地 Ollama 场景两者差异不大但如果后续需要接入云端模型或构建多智能体系统Spring AI Alibaba 会提供更多开箱即用的功能。Q模型回答中带有think标签怎么处理ADeepSeek-R1 是推理模型输出会包含思考过程包裹在think标签中。如果只需要最终答案可以在代码中做简单的字符串过滤或者使用非推理版本的模型。七、总结通过 Ollama DeepSeek Spring AI Alibaba 的组合Java 开发者可以零成本起步无需任何 API Key 或云服务费用数据不出本机敏感业务数据完全本地处理快速验证想法十几行代码即可搭建 AI 应用原型平滑过渡到生产同一套代码可无缝切换到云端模型对于正在探索 AI 应用落地的 Java 团队来说这是一条投入最低、风险最小的技术验证路径。 福利时间如果你正在备战面试或者想要学习其他知识给大家推荐一个宝藏知识库作者整理了一些列 Java 程序员需要掌握的核心知识有需要的自取不谢。知识库地址https://farerboy.com/

更多文章