最近在做一个内网项目的时候,我被一个需求卡住了:业务系统想接入大模型能力,但数据不能出内网。直接调大模型平台API的方案被一句话否了,剩下的路只有两条——要么自己租卡训练,要么在本地把开源模型跑起来。我选了后者,然后发现最顺手的组合就是Spring AI + Ollama。Spring AI负责Java系统里所有模型调用抽象,Ollama负责把Qwen2.5这类本地大模型变成一个随时可用的服务。这篇文章把我从零开始踩通的路完整记录下来,适合正在做Spring AI落地、又不想把数据送出去的团队参考。
1. 为什么我会把Spring AI和Ollama绑在一起用
1.1 一个"模型API不能进内网"的需求引发的重构
你可能会问:直接用大模型平台的API不香吗?说实话,如果是个人开发或者数据不敏感的Demo,确实香。API一次调用返回内容,SDK现成,prompt随便调。可一旦上了企业内网环境,事情立刻不一样:客户要求模型推理必须在自己的机器上完成,哪怕只是把一句话发给外网服务都会触发合规审查。更不用说有些生产网段根本只有业务端口能出去,大模型API域名根本不通。
我当时的解决办法很朴素:把模型装到客户机房的一台GPU服务器上,然后让Java后端去调用这台服务器的地址。问题也随之而来:模型怎么跑、模型跑起来以后用什么协议暴露给业务系统、Java代码怎么维护多个模型之间的切换。如果这些都用原始HTTP去拼,项目推进到一半就会失控。
1.2 Ollama的角色:把大模型变成一个本地HTTP服务
Ollama不是一个聊天网页,它是模型运行时管理器。它帮你把开源大模型下载到本地、加载进显存/内存、然后暴露一个REST API。你不用关心模型推理背后的Python环境、tokenizer、CUDA版本,只需执行一条命令把模型拉下来,然后对着http://127.0.0.1:11434发POST请求,就能拿到生成结果。
它还有一个很关键的优点,就是模型之间隔离得很干净。我在同一台机器上既跑过qwen2.5:7b,也跑过更小的gemma2:2b,通过一个简单的命令就能切换。对Java开发来说,可以把Ollama理解成一个只在本机/局域网开放的数据库服务,只不过存储的不是表,而是大模型的权重和推理能力。
1.3 Spring AI解决的是Java程序员接模型的"最后一公里"
如果已经有Ollama这个HTTP服务了,为什么还需要Spring AI?你当然可以自己用RestTemplate或WebClient去请求/api/generate,但很快会碰到几个重复性极强的需求:把用户消息和历史记录拼成Prompt、把模型返回的Token流解析成可读文本、把大模型的JSON输出转成Java对象、控制不同模型参数。这些工作每个项目都要做一遍,且特别容易踩细节坑。
Spring AI把这类工作抽象成了几个统一接口。最核心的是ChatModel,它对上层隐藏了模型提供方差异。今天连接Ollama,明天想切到别的兼容OpenAI协议的服务,业务代码改动很小。对团队里的Java工程师来说,这比让他们去学Python推理栈友好太多。所以我的选择是:模型层交给Ollama,接入层交给Spring AI,业务层只认Java接口。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 本地部署Ollama:安装、拉模型、下载慢与盘符问题一次解决
2.1 安装Ollama之前,先决定模型目录
Ollama的Windows安装包本身并不大,真正占空间的是你后续拉取的模型文件。一个7B参数的量化模型通常在4GB到6GB之间,如果你装完以后直接把模型全部丢在C盘,用不了多久系统盘就会告急。
因此安装之前,我的建议是先设好环境变量OLLAMA_MODELS,把它指到大容量磁盘目录。Windows里就是系统环境变量设置里加一条:
code复制OLLAMA_MODELS=D:\ollama\models
Linux/macOS则写到shell配置或systemd service里:
bash复制export OLLAMA_MODELS=/data/ollama/models
有人会问:我已经装完Ollama了,模型也拉了一半,这时改目录行不行?行,但需要手动把旧目录里的模型迁移过去,否则会重复拉取。我踩过一次这个坑,所以现在只要给新机器装Ollama,第一步永远是定模型目录,再谈安装。
安装过程没什么玄学。Windows直接运行安装包,Linux用官方脚本或者二进制包都行。装完检查一下版本:
bash复制ollama --version
如果命令找不到,打开新终端再试一次,Windows下环境变量生效需要重启终端。
2.2 拉取qwen2.5:7b之前,先请看清模型体积
官方模型库里模型很多,但入门阶段我推荐先拉一个qwen2.5:7b。原因是7B参数量级在消费级显卡上还能跑得动,量化后体积约4.7GB,显存8GB左右基本能吃下,没有独立显卡时用CPU也能出结果,只是慢一些。
拉取命令很简单:
bash复制ollama pull qwen2.5:7b
ollama会把模型从默认仓库下载到本地。下载时间取决于你的实际带宽,如果网络环境不稳定,可能等很久。这里我不建议盲目选更大的模型,比如`q
