大家好,我是小米,一个 31 岁、爱折腾技术、喜欢分享的程序员。最近在公司里,我们讨论到 AI 聊天模型的落地方案,有人提到了 Ollama。我一听,眼睛都亮了:这不就是传说中能本地跑大模型,还能和 SpringAI 结合得丝滑的神器嘛!

于是,我立马开干,从环境准备,到 SpringAI 的自动配置,再到多模态、函数调用、结构化输出,撸了一遍。今天我就把我的实战笔记整理出来,分享给大家。如果你对 Ollama 聊天模型在 SpringAI 里的玩法感兴趣,这篇文章你一定会喜欢!

Ollama 是什么?

如果把大模型生态比作江湖,那 Ollama 就像是那个“隐藏在山谷里的高手”。

它最大的特点是:

  • 可以让你在 本地跑 LLM(比如 Llama2、Mistral、Phi 等)。
  • 内置模型管理,支持拉取、缓存、运行模型。
  • 对开发者友好,API 类似 OpenAI,非常容易上手。

换句话说,Ollama 就是一个能把云端大模型体验搬到你笔记本的神器,配合 SpringAI 就能一键接入业务。

前提条件

想用 Ollama 聊天模型,需要先准备好一些环境。我的踩坑经验分享给大家:

1、安装 Ollama

到 Ollama 官网下载并安装对应系统的版本(支持 macOS、Linux、Windows)。

2、确认服务是否启动

在命令行输入:

OpenAI 替代方案?Ollama 与 SpringAI 的实战体验_模态

然后访问 http://localhost:11434,确认服务正常。

3、Spring Boot 项目准备

项目里引入 spring-ai-ollama-spring-boot-starter 依赖。

自动配置

SpringAI 对 Ollama 的支持非常丝滑。只要加上 starter 依赖,就能直接使用默认的 Bean,比如 OllamaChatModel。

你甚至都不用写复杂的配置文件,SpringAI 会自动扫描和配置 Ollama API 客户端。

基本属性

这些是 Ollama 的常用基础配置参数,表格如下

OpenAI 替代方案?Ollama 与 SpringAI 的实战体验_函数调用_02

聊天属性

聊天属性更偏向模型对话的控制:

OpenAI 替代方案?Ollama 与 SpringAI 的实战体验_API_03

运行时选项

除了配置文件,还能在代码里临时覆盖运行参数。例如:

OpenAI 替代方案?Ollama 与 SpringAI 的实战体验_模态_04

自动拉取模型

Ollama 很贴心:当你第一次调用一个不存在的模型时,它会自动从远程仓库拉取到本地。

比如你写 model=mistral,Ollama 会直接帮你下载并运行。

函数调用

SpringAI + Ollama 也支持函数调用(Function Calling)。

比如你定义一个方法获取天气,模型会自动决定什么时候调用:

OpenAI 替代方案?Ollama 与 SpringAI 的实战体验_函数调用_05

Ollama 会生成一个函数调用请求,然后你在后端执行逻辑,返回结果。

多模态

Ollama 还支持多模态!

比如传入图片和文字,一起作为模型输入。想象一下,你给它一张小猫的照片,再问“这只猫在干嘛?”,模型能直接回答。

结构化输出

SpringAI 提供 BeanOutputConverter,让大模型输出自动转成 Java Bean,而不是一堆乱七八糟的 JSON。

这点在做业务接口时特别爽,比如订单、用户画像等场景。

使用聊天选项构建器

除了直接写属性,也可以用 Builder 模式灵活组合:

OpenAI 替代方案?Ollama 与 SpringAI 的实战体验_模态_06

这样就能动态调整聊天策略。

与 BeanOutputConverter 集成

实际使用时,推荐把 BeanOutputConverter 和 Ollama 聊天结合。

OpenAI 替代方案?Ollama 与 SpringAI 的实战体验_函数调用_07

这样你就能直接得到一个强类型对象,而不是乱七八糟的字符串。

OpenAI API 兼容性

Ollama API 设计非常接近 OpenAI API,所以你几乎可以无缝替换。

这意味着:如果你之前项目用的是 OpenAiChatModel,切换到 Ollama 基本只要改个配置。

HuggingFace 模型

Ollama 还能运行 HuggingFace 上的模型。比如你要用 falcon、phi 等模型,直接在命令行执行:

OpenAI 替代方案?Ollama 与 SpringAI 的实战体验_模态_08

就能下载并跑起来。

示例控制器

我们在项目里通常会写个 Demo Controller,比如:

OpenAI 替代方案?Ollama 与 SpringAI 的实战体验_函数调用_09

访问 /chat?prompt=你好,立刻能看到大模型回复。

手动配置

如果你不想用 Spring Boot 的自动配置,也可以手动写 Bean:

OpenAI 替代方案?Ollama 与 SpringAI 的实战体验_模态_10

这样就能完全掌控。

低级 OllamaApi 客户端

在一些需要自定义请求的场景下,你还可以直接用 OllamaApi:

OpenAI 替代方案?Ollama 与 SpringAI 的实战体验_函数调用_11

这就是最底层的调用方式,适合做调试或者自定义封装。

总结

从自动配置到低级 API,SpringAI 对 Ollama 的支持真的非常全面。对比 OpenAI 的云端方案,Ollama 最大的优势就是:

  • 本地可控(不用担心数据安全)。
  • 免费运行(除了显卡电费)。
  • 兼容性好(API 类似 OpenAI)。

在我的实战体验里,最让我惊喜的就是 结构化输出 + BeanOutputConverter,直接把大模型回复变成 Java 对象,极大提升了业务开发效率。

未来我打算在公司内部搭个 私有化 AI 服务,用 Ollama + SpringAI,完全不依赖外部 API,既安全又高效。

END

那么问题来了:如果你要在项目里引入 Ollama,你会优先用它来做什么场景?

(欢迎留言交流呀~)

我是小米,一个喜欢分享技术的31岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!