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岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号"软件求生",获取更多技术干货!

相关推荐
cos1 小时前
我的 Claude Code 使用小记
ai编程·claude
CodeUp.1 小时前
基于SpringBoot的OA办公系统的设计与实现
spring boot·后端·mybatis
GitLqr1 小时前
AI洞察 | 好酷!国产模型在 电影、3D、TTS 领域取得巨大进步!
aigc·ai编程·虚拟现实
小醉你真好1 小时前
Spring Boot + ShardingSphere 分库分表实战
java·spring boot·后端·mysql
Jacob02342 小时前
Node.js 性能瓶颈与 Rust + WebAssembly 实战探索
后端·rust·node.js
王中阳Go2 小时前
分库分表之后如何使用?面试可以参考这些话术
后端·面试
子昕2 小时前
CodeBuddy实测:腾讯这回没忽悠人,确实挺能打的
ai编程
kinlon.liu3 小时前
内网穿透 FRP 配置指南
后端·frp·内网穿透
小徐_23333 小时前
AI开发小程序无从下手?CodeBuddy:我来助你!
ai编程·codebuddy