ChatGPT太贵?教你用Spring AI在本地白嫖聊天模型!

你有没有想过,本地也能跑一个类 ChatGPT 的模型,不用连 OpenAI,也不用担心 Key 被封?今天,我来带大家体验一下 Spring AI 里非常酷的一个能力:用 Docker Model Runner 聊天模型聊起来!

我最近在折腾 Spring AI 的时候,发现它除了支持 OpenAI、Azure、Anthropic 这些平台外,还有一个宝藏功能:可以在本地通过 Docker 启动语言模型,直接和它对话! 听起来是不是很像"开箱即用的 AI 聊天机器人"?这不,我立马就搞了一下,今天就以故事的方式,把全过程分享给大家!

准备好工具,才能开干!

话说,有一天我灵感来了,想着用 Spring Boot 做个"类 ChatGPT 聊天助手",但我不想连外网 API。于是我找到了 Spring AI 的 Docker Model Runner 支持,发现居然可以本地跑模型!

不过嘛,凡事都有准备环节,先把前提条件交代清楚:

  • JDK 17+
  • Spring Boot 3.2+
  • Spring AI 0.8.1+
  • Docker 已安装且运行中
  • 网络可以拉模型(建议科学上网)

还有个重要前提是,Spring AI 已经支持了多个开源模型,像是:

  • Ollama 系列(比如 Mistral、LLaMA2)
  • LM Studio、本地端口模型
  • 甚至自己构建一个聊天服务也可以

我们今天就基于 Spring AI 的 Docker Model Runner 来跑一个 LLM 聊天服务。

选项一:直接连接 Docker 模型服务

先说最简单的用法:直接连接到一个已经在本地跑着的 LLM 容器,比如用 Ollama 启动 Mistral 模型:

ollama run mistral

启动成功后,本地 localhost:11434 就是一个聊天 API 服务,Spring AI 只需要加点配置,就能直接连上了。

在 application.yml 里加上:

是不是超级简单?Spring AI 会自动识别这个 base-url,把它当成一个兼容 OpenAI 的聊天模型来处理。你可以用 ChatClient 来交互,和连 OpenAI 一样爽!

选项二:使用 Testcontainers 自动拉起容器

如果你觉得每次启动都要手动开个模型太麻烦了,那我告诉你,Spring AI 支持自动用 Testcontainers 启动模型容器!

比如要拉起 mistral 模型,可以写个测试类:

然后,在 Spring 的配置里读取容器端口动态注入 base-url,实现一键运行、一键销毁。适合测试环境或快速原型开发。

自动配置:Spring Boot 的魔法依然在

一旦你依赖了 Spring AI 的 starter,比如:

再加上前面那个 base-url,Spring AI 会自动给你注入一个 ChatClient,你就可以像调用 Bean 一样用它了。

再比如:

是不是很有"秒回"的感觉?这就是 Spring AI 的自动配置魅力。

聊天属性详解

为了让模型"听话懂人话",我们可以配置一堆属性来精细控制模型行为。

1. 重试属性

连接不稳定咋办?加重试!

模型卡了一下没关系,Spring 帮你重试几次,保证交互稳定。

2. 连接属性

有时候模型加载慢,可以加连接超时配置:

避免一直等模型回消息等到天荒地老。

3. 配置属性(最重要的部分)

想让模型多说点话?少点废话?来设置参数:

这些参数决定了模型的 创造力、输出长度、随机性、重复性惩罚 等等,调得好,效果差异巨大!

运行时选项:想聊什么随你定

除了配置文件里设置,你也可以在代码里动态传入 options!

这一招在需要根据用户输入动态调整回复策略时超有用,比如:长回答、技术性强的回答、风格轻松的回答。

函数调用 Function Calling(真的支持!)

你没看错,本地模型现在也能玩函数调用了!

假设我们定义了一个函数,让 AI 调用它来获取天气数据:

然后在模型对话中:

AI 会自动"识别意图 + 调用函数 + 拼接返回"。是不是越来越像个真 AI 助手了!

控制器示例:做一个聊天 API

最后,我们来构建一个 Spring Boot 控制器,把这个聊天模型封装成 REST 接口,前端、微信小程序都能用!

是不是超级丝滑?部署后,前端 POST 一段话,就能秒回一句机智回复。完美!

写在最后:模型跑在本地,心里更安心

现在回头看,其实整个流程并不复杂:

  • 你可以选择连接已有模型,也可以用 Testcontainers 自动拉起容器;
  • 可以用配置文件控制模型行为,也可以在代码里灵活注入参数;
  • 更可以拓展函数调用,甚至包装成接口,做出自己的 AI 服务!

Docker Model Runner + Spring AI 真的是构建 AI 原型的神器。如果你想脱离外部依赖,在公司内网、自建服务、本地演示里快速搞定聊天模型,强烈建议试试!

好了,今天的分享就到这啦!

END

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

相关推荐
用户40993225021219 分钟前
Vue的Class绑定对象语法如何让动态类名切换变得直观高效?
前端·ai编程·trae
韩立学长20 分钟前
基于Springboot酒店管理系统的设计与实现c12044zy(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
资深web全栈开发32 分钟前
深入理解 Google Wire:Go 语言的编译时依赖注入框架
开发语言·后端·golang
忘记92636 分钟前
什么是spring boot
java·spring boot·后端
expect7g39 分钟前
Paimon源码解读 -- Compaction-6.CompactStrategy
大数据·后端·flink
雨中飘荡的记忆1 小时前
Spring事件机制:解耦利器与实战
spring
喵个咪1 小时前
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:极速搭建微服务应用
后端·微服务·go
十月南城1 小时前
多级缓存设计思路——本地 + 远程的一致性策略、失效风暴与旁路缓存的取舍
后端
float_六七2 小时前
Spring AOP连接点实战解析
java·后端·spring
武子康2 小时前
大数据-183 Elasticsearch - 并发冲突与乐观锁、分布式数据一致性剖析
大数据·后端·elasticsearch