掘金 人工智能 前天 19:28
ChatGPT太贵?教你用Spring AI在本地白嫖聊天模型!
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文详细介绍了如何利用Spring AI的Docker Model Runner功能,在本地部署并运行类似ChatGPT的聊天模型。文章涵盖了从准备环境、连接已有模型服务,到使用Testcontainers自动管理容器的多种方式。此外,还深入讲解了Spring AI的聊天属性配置、运行时选项以及支持函数调用(Function Calling)的能力,并提供了一个将聊天模型封装成RESTful API的控制器示例。通过本地部署,用户可以摆脱对外部API的依赖,更安全、灵活地构建和演示AI聊天服务,是快速开发AI原型的有力工具。

📦 **本地化部署优势**:Spring AI通过Docker Model Runner支持在本地运行语言模型,无需依赖OpenAI等外部服务,解决了API密钥被封、数据隐私和网络不稳定等问题,为在内网、自建服务或本地演示场景下快速构建AI聊天原型提供了安全可靠的解决方案。

🚀 **灵活的模型连接方式**:文章介绍了两种主要连接本地模型的方式:一是直接连接到已运行的Docker模型服务(如Ollama),只需配置`application.yml`中的`base-url`即可,Spring AI会自动将其识别为兼容OpenAI的聊天模型;二是利用Testcontainers自动拉起模型容器,并动态注入端口,非常适合测试环境和快速原型开发。

⚙️ **深度配置与控制**:Spring AI提供了丰富的聊天属性配置,包括重试机制以增强交互稳定性、连接超时设置以避免长时间等待,以及核心的配置属性,如`temperature`(创造力)、`top_p`、`max_tokens`(输出长度)、`presence_penalty`和`frequency_penalty`(重复性惩罚)等,这些参数能够显著影响模型的输出效果,允许用户精细调优模型行为。

💡 **高级功能支持**:除了基础的对话能力,Spring AI还支持在本地模型上实现函数调用(Function Calling),允许AI调用预定义的本地函数来获取数据或执行操作,极大地增强了AI助手的实用性和智能化水平。文章还展示了如何将此能力封装成RESTful API,方便前端或其他服务集成。

🛠️ **Spring Boot生态整合**:通过引入Spring AI的starter依赖,并进行简单的配置,Spring Boot能够自动注入`ChatClient` Bean,使得与本地模型的交互如同调用普通Bean一样便捷。这种自动配置的特性大大简化了开发流程,提高了开发效率。

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

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

准备好工具,才能开干!

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

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

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

我们今天就基于 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 一段话,就能秒回一句机智回复。完美!

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

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

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

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

END

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

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Spring AI Docker Model Runner 本地模型 AI聊天 函数调用
相关文章