当前位置: 首页 > news >正文

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

无需 API Key、无需云端费用、数据不出本机——一条命令启动模型,十几行 Java 代码完成首次对话。


写在前面

过去,Java 开发者想要在大模型上做实验,通常面临几个门槛:

  • 需要注册云服务商账号、申请 API Key、绑定支付方式
  • 每次调用都产生 Token 费用,调试成本不低
  • 业务数据发送到第三方云端,合规和隐私顾虑难以避免

而现在,借助Ollama(本地模型运行时)+DeepSeek 开源模型+Spring AI Alibaba(Java 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 什么是 Ollama?

Ollama 是一个开源的大模型本地运行工具,它将复杂的模型推理环境打包成一个可执行文件。你不需要安装 Python、CUDA、PyTorch 等依赖,只需一条命令就能启动模型服务。

它的工作方式类似于 Docker——底层封装了所有复杂性,暴露出一个简洁的 API 接口(默认监听localhost:11434),任何能发 HTTP 请求的客户端都可以调用它。

2.2 安装 Ollama

macOS / Windows:

访问 ollama.com,下载对应平台的安装包,双击安装即可。

Linux:

curl-fsSLhttps://ollama.com/install.sh|sh

安装完成后,Ollama 会作为后台服务自动启动。

2.3 拉取并运行 DeepSeek 模型

打开终端,执行:

ollama run deepseek-r1:1.5b

这条命令会做两件事:

  1. 从 Ollama 模型仓库下载deepseek-r1:1.5b模型(约 1.1 GB)
  2. 下载完成后自动启动交互式对话

你可以直接在终端里输入问题测试效果:

>>> 用一句话解释什么是递归 <think> ... </think> 递归就是:一个函数调用自身,直到满足终止条件后逐层返回结果。

关于模型选择:DeepSeek-R1 提供了多个尺寸——1.5B、7B、8B、14B、32B、70B、671B。选择哪个取决于你的硬件:

模型大小最低内存/显存适用场景
1.5B2 GB快速体验、低配机器
7B/8B8 GB日常开发、一般任务
14B/32B16-24 GB高质量输出、复杂推理
70B+48 GB+服务器部署、生产环境

本文以 1.5B 为例,侧重演示流程。实际项目中建议至少使用 7B 或 14B 版本以获得更好的效果。

2.4 为什么选 DeepSeek-R1 蒸馏版?

DeepSeek-R1 的完整版(671B 参数)需要数百 GB 显存,普通电脑根本无法运行。而蒸馏版(Distill)通过知识蒸馏技术,将大模型的能力"压缩"到较小的模型中,在保持较高推理质量的同时,大幅降低了硬件门槛。

特别是基于 Qwen 架构的蒸馏版本,在中文理解与生成方面表现优异,非常适合国内开发者的日常使用。


三、用 Spring AI Alibaba 开发 Java 应用

3.1 为什么是 Spring AI Alibaba?

Spring 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中添加依赖:

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

如果你希望使用 Spring AI Alibaba 的增强能力(如 Agent 框架、Graph 工作流等),可以额外引入:

<dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter</artifactId><version>1.0.0.2</version></dependency>

3.3 配置文件

src/main/resources/application.yml中配置 Ollama 连接信息:

spring:ai:ollama:base-url:http://localhost:11434chat:model:deepseek-r1options:temperature:0.7num-predict:2048
  • base-url:Ollama 服务地址,默认localhost:11434
  • model:模型名称,对应ollama run时使用的名称
  • temperature:控制输出的随机性(0-1,越高越有创造性)
  • num-predict:最大生成 Token 数

3.4 编写第一个聊天接口

创建一个简单的 REST Controller:

importorg.springframework.ai.chat.client.ChatClient;importorg.springframework.web.bind.annotation.*;@RestController@RequestMapping("/api")publicclassChatController{privatefinalChatClientchatClient;// Spring 自动注入 ChatClient.BuilderpublicChatController(ChatClient.Builderbuilder){this.chatClient=builder.build();}/** * 简单对话接口 * GET /api/chat?message=你好 */@GetMapping("/chat")publicStringchat(@RequestParamStringmessage){returnchatClient.prompt().user(message).call().content();}}

就这么简单。ChatClient的链式调用清晰表达了整个调用流程:

  1. prompt()— 构建请求
  2. user(message)— 设置用户输入
  3. call()— 发起调用
  4. content()— 提取响应文本

3.5 启动验证

启动 Spring Boot 应用后,在浏览器或终端访问:

curl"http://localhost:8080/api/chat?message=用三句话介绍Java的发展历史"

你会收到来自本地 DeepSeek 模型的回复。整个过程不需要任何外部网络请求。


四、进阶用法

4.1 流式输出(Streaming)

大模型生成回复可能需要数秒,流式输出可以让用户像看到"打字机"效果一样实时看到结果:

@GetMapping(value="/chat/stream",produces=MediaType.TEXT_EVENT_STREAM_VALUE)publicFlux<String>streamChat(@RequestParamStringmessage){returnchatClient.prompt().user(message).stream().content();}

返回类型从String变为Flux<String>,Spring WebFlux 会自动将每个 Token 片段推送给客户端。前端可以使用 EventSource / Server-Sent Events 来接收。

4.2 多轮对话(带上下文记忆)

默认情况下,每次请求都是独立的。要实现上下文关联的多轮对话,需要引入ChatMemory

importorg.springframework.ai.chat.memory.ChatMemory;importorg.springframework.ai.chat.memory.InMemoryChatMemory;@ConfigurationpublicclassChatConfig{@BeanpublicChatMemorychatMemory(){returnnewInMemoryChatMemory();}}

然后在 Controller 中使用:

privatefinalChatClientchatClient;publicChatController(ChatClient.Builderbuilder,ChatMemorychatMemory){this.chatClient=builder.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 切换到云端模型只需修改配置:

# 切换到通义千问(DashScope)spring:ai:dashscope:api-key:${DASHSCOPE_API_KEY}chat:model:qwen-plus

代码层面无需任何改动。


六、常见问题

Q:模型回答速度很慢怎么办?

A:蒸馏版 1.5B 模型在 CPU 上推理确实较慢。建议升级到 7B 或 14B 版本,并确保有足够内存。如果有 NVIDIA GPU,Ollama 会自动使用 GPU 加速。

Q:能否在 Docker 中运行?

A:可以。Ollama 提供了官方 Docker 镜像:

dockerrun-d-vollama:/root/.ollama-p11434:11434--nameollama ollama/ollamadockerexec-itollama ollama run deepseek-r1:1.5b

Q:Spring AI Alibaba 和 Spring AI 有什么区别?

A:Spring AI Alibaba 基于 Spring AI 构建,额外集成了阿里云百炼平台、Nacos 配置管理、分布式 MCP 等企业级能力。对于纯本地 Ollama 场景,两者差异不大;但如果后续需要接入云端模型或构建多智能体系统,Spring AI Alibaba 会提供更多开箱即用的功能。

Q:模型回答中带有<think>标签怎么处理?

A:DeepSeek-R1 是推理模型,输出会包含思考过程(包裹在<think>标签中)。如果只需要最终答案,可以在代码中做简单的字符串过滤,或者使用非推理版本的模型。


七、总结

通过 Ollama + DeepSeek + Spring AI Alibaba 的组合,Java 开发者可以:

  • 零成本起步:无需任何 API Key 或云服务费用
  • 数据不出本机:敏感业务数据完全本地处理
  • 快速验证想法:十几行代码即可搭建 AI 应用原型
  • 平滑过渡到生产:同一套代码可无缝切换到云端模型

对于正在探索 AI 应用落地的 Java 团队来说,这是一条投入最低、风险最小的技术验证路径。


🎁 福利时间

如果你正在备战面试或者想要学习其他知识,给大家推荐一个宝藏知识库,作者整理了一些列 Java 程序员需要掌握的核心知识,有需要的自取不谢。

知识库地址:https://farerboy.com/


http://www.jsqmd.com/news/582903/

相关文章:

  • 阈值之惑:静态分析工具准确性对大语言模型漏洞修复效能的影响研究
  • docker 安装禅道
  • 直接上干货!咱们今天聊聊怎么用MPC算法在Carsim里搞速度控制。这个方案亲测能用,我硕士论文就是靠这套东西水出来的(别告诉导师)
  • 硅谷裁员幸存法则:用混沌工程保住饭碗
  • 3步掌握APA第7版参考文献格式配置:从入门到精通的避坑指南
  • 2026届毕业生推荐的六大AI辅助写作助手实测分析
  • 2025届最火的十大降重复率助手实测分析
  • 如何判断论文哪些段落AI率高:降AI前的预检测方法和工具
  • TiKV人工智能:机器学习数据平台的终极解决方案
  • PLECS平台并网逆变器同频控制方案与线路滤波参数设计
  • U9 BE插件开发实战:如何快速设置单据字段默认值(附详细步骤)
  • 北京大学:AI+Agent与Agentic+AI的原理与应用(适合科研从业者和技术爱好者阅读)
  • 深入探讨Python的排列组合
  • Mplus—路径系数差异检验的两种实用方法
  • 用嘎嘎降AI处理社科类论文的完整教程:操作步骤和注意事项
  • IronCalc 核心架构解析:深入理解 Rust 编写的电子表格引擎
  • 终极指南:如何精准选择Fluxion攻击时间窗口与提升成功率的完整策略
  • Doorkeeper与Devise集成终极指南:构建统一认证架构的5个关键步骤
  • 2026届最火的十大降AI率工具实测分析
  • vlan基础知识
  • PromptSource与对话系统:构建流畅对话提示模板的终极指南
  • 终极指南:Spinnaker资源生命周期管理的完整流程与最佳实践
  • 计算机毕业设计:Python汽车销量智能分析与预测系统 Flask框架 scikit-learn 可视化 requests爬虫 AI 大模型(建议收藏)✅
  • 降AI工具出结果后怎么核对质量:专业的逐段检查方法和步骤
  • Lingui.js自动化部署策略:CI/CD中的国际化工作流终极指南
  • Minestom事件处理机制:实现灵活可扩展的游戏逻辑
  • Fiddler导出Jmeter脚本插件原理及基本使用
  • 终极NVIDIA Profile Inspector集成指南:与其他工具的完美融合教程
  • isowords测试策略:从单元测试到App Store截图的全自动化
  • SEO 关键字优化与内容营销的结合方法是什么