Spring AI 在 Ollama 与 OpenAI 间切换聊天/Embedding/图像/语音模型
方案简介
本方案演示如何在同一个 Spring AI 工程中,对接多种 LLM 提供方:本地 Ollama、云端 OpenAI 与 Mistral AI 等。仓库在 models/ 目录下按 chat、embedding、image、audio 四类模型分别组织示例,目标读者是希望构建可在不同模型提供方之间无缝切换、或同一系统混合使用本地与云端模型的 Java 开发者。
亮点与能力
方案具备以下能力:
- 聊天补全:支持 Ollama、OpenAI、Mistral AI 以及 Multiple Providers 同时接入
- Embedding(向量化):支持 Ollama、OpenAI、Mistral AI 以及本地 ONNX Transformers
- 图像生成:通过 OpenAI Image 模型
- 语音转文字与文字转语音:通过 OpenAI Audio 模型
- 同一套 Spring AI 代码切换提供方时仅需修改配置与依赖
- 多个 Patterns(Prompts、Tool Calling、Structured Output、Multimodality、Memory、Guardrails)共用上述模型抽象
组成与分工
组合中各成员分工如下:
- Spring AI:统一抽象 ChatModel、EmbeddingModel、ImageModel、AudioModel 等接口
- Ollama:本地聊天与 Embedding 提供方,便于离线/私有部署
- OpenAI:云端聊天、Embedding、图像、语音模型提供方
- Mistral AI:另一云端聊天与 Embedding 提供方示例
- ONNX Transformers:本地 Embedding 提供方,运行 Transformer 模型
- Java 25 + Podman/Docker:运行时与容器环境
前置要求
前置要求:
- Java 25
- Podman 或 Docker
- 至少一个可用的模型提供方:本地 Ollama(需预拉取模型)、OpenAI API Key、Mistral AI API Key 等
- 若使用 ONNX Transformers 需本地具备相应模型权重
实施步骤
实施步骤参考如下:
1. 选择目标模型提供方
根据需求在 models/chat/、models/embedding/、models/image/、models/audio/ 中选择对应子模块,例如 chat-ollama、chat-openai、embedding-transformers。
2. 准备对应提供方
- Ollama:本地启动并拉取所需聊天/Embedding 模型
- OpenAI:准备
OPENAI_API_KEY - Mistral AI:准备对应 API Key
- ONNX Transformers:准备模型文件
3. 引入 Spring AI 依赖
在所选子模块的 pom.xml 或 build.gradle 中引入对应的 Spring AI starter 依赖(具体依赖坐标以子模块为准)。
4. 配置模型提供方
在 application.properties 或 application.yml 中配置 Spring AI 指向所选提供方,例如 base-url、api-key、模型名等。
5. 调用模型接口
通过 Spring AI 注入的 ChatModel、EmbeddingModel、ImageModel、AudioModel 等 Bean 调用模型能力。
6. 切换提供方(可选)
参考 models/chat/chat-multiple-providers 同时配置多个提供方,或在不同模块间复用同一份业务代码。
优缺点
- ✓ 一份代码适配多种模型提供方
- ✓ 支持本地/云端模型并存切换
- ✕ 不同提供方能力不完全对等
- ✕ OpenAI 调用需 API Key 且
出处
本方案挖掘自开源项目 ThomasVitale/llm-apps-java-spring-ai,方案内容与实施命令均来自其 README 原文。
本方案由真实开源项目挖掘整理,实施命令均来自其 README 原文,安装使用请遵循项目开源协议。