一、为什么要先谈模型选择?
在做 AI 应用时,很多团队容易一开始就纠结:
到底用哪个大模型?
用 OpenAI、通义、智谱、DeepSeek,还是本地 Ollama?
Chat 模型、Embedding 模型、图像模型、语音模型有什么区别?
是不是一个大模型就能解决所有问题?
这些问题看似是"选型问题",本质上其实是"系统设计问题"。
因为在生产系统中,模型不是孤立存在的。一个完整的 AI 应用,往往需要多种模型协同工作。
例如一个医学影像报告质控系统,可能会同时涉及:
text
Chat Model:分析报告内容、生成质控建议
Embedding Model:做相似病例检索、知识库召回
Image Model / Multimodal Model:理解关键图像
Transcription Model:将医生语音转文字
Text-To-Speech Model:将审核结果语音播报
Moderation Model:对用户输入和模型输出做安全过滤
所以,模型选择不能简单理解为"选一个最强模型"。
更合理的思路是:
text
先看业务任务,再选模型类型;
先看系统架构,再选模型厂商;
先看生产要求,再定参数配置。
本文只做模型选择的入门总览,不展开每个模型供应商的详细配置。Spring AI 官方文档中已经提供了非常完整的模型实现和配置说明,实际开发时建议以官方文档为准。
二、Spring AI 中的模型不是一个概念,而是一组模型能力
Spring AI 把不同类型的 AI 能力抽象成不同的 Model API。
从生产应用角度,可以先把它们理解成五类:
| 模型类型 | Spring AI 抽象 | 主要用途 |
|---|---|---|
| 对话模型 | ChatModel / StreamingChatModel | 问答、总结、推理、Agent、结构化输出 |
| 向量模型 | EmbeddingModel | 文本向量化、相似度检索、RAG |
| 图像模型 | ImageModel | 根据提示词生成图片 |
| 音频模型 | TranscriptionModel / TextToSpeechModel | 语音转文字、文字转语音 |
| 审核模型 | Moderation | 内容安全、敏感内容识别 |
这几个模型不要混用。
很多初学者会觉得"大模型什么都能干",但在工程落地时,任务不同,模型类型也不同。
例如:
text
让模型分析一段报告:用 ChatModel
让系统检索相似文档:用 EmbeddingModel
让系统生成一张宣传图:用 ImageModel
让系统识别医生语音:用 TranscriptionModel
让系统过滤敏感输入:用 Moderation
这就是模型选择的第一层逻辑。
三、Chat Model:最常用的对话与推理模型
Chat Model 是 Spring AI 中最常用的模型类型。
它主要用于:
text
文本问答
报告总结
内容生成
意图识别
结构化输出
Agent 推理
Tool Calling
多轮对话
在 Spring AI 中,ChatModel 是对聊天模型的统一抽象。
常见调用方式如下:
java
String response = chatModel.call("请总结 Spring AI 的核心能力");
这种方式非常简单,适合快速体验。
但在真实项目中,更常见的是使用 Prompt 和 ChatResponse:
java
Prompt prompt = new Prompt("请分析下面报告是否存在逻辑问题");
ChatResponse response = chatModel.call(prompt);
因为生产环境中通常不只是传一个字符串,还需要携带:
text
System Message
User Message
Assistant Message
Tool Message
ChatOptions
上下文信息
模型参数
也就是说,Chat Model 是生产级 AI 应用中的"推理中枢"。
四、StreamingChatModel:什么时候需要流式输出?
如果是普通接口调用,可以等待模型完整返回结果。
但在以下场景中,等待完整结果会影响用户体验:
text
AI 聊天助手
长文本生成
报告自动生成
知识库问答
医生报告辅助书写
代码生成
这时就适合使用流式输出。
Spring AI 中的 StreamingChatModel 支持通过响应式 Flux 返回模型生成内容。
概念上可以理解为:
text
普通调用:
用户提问 → 等待 → 一次性返回完整结果
流式调用:
用户提问 → 模型边生成边返回 → 前端逐字显示
流式输出本身不会让模型更聪明,但会显著改善交互体验。
生产系统中可以这样判断:
| 场景 | 是否建议流式 |
|---|---|
| 后台批处理 | 不需要 |
| 接口同步返回结构化 JSON | 不建议 |
| 聊天机器人 | 建议 |
| 长报告生成 | 建议 |
| 前端实时展示 | 建议 |
| Agent 多步骤执行日志 | 可以考虑 |
尤其要注意:如果你需要结构化输出,例如返回严格 JSON,一般不建议直接使用流式结果作为最终业务数据。更稳妥的方式是完整接收后再解析和校验。
五、ChatOptions:模型选择不只是选模型名
模型选择不仅是配置:
yaml
model: xxx
还包括一组运行参数。
在 Spring AI 中,ChatOptions 可以配置一些通用参数,例如:
text
model
temperature
maxTokens
topP
topK
stopSequences
frequencyPenalty
presencePenalty
这些参数会直接影响模型输出效果。
简单理解:
| 参数 | 作用 |
|---|---|
| temperature | 控制随机性,越高越发散 |
| maxTokens | 控制最大输出长度 |
| topP / topK | 控制采样范围 |
| stopSequences | 指定停止生成的标记 |
| model | 指定具体模型 |
实际使用时,可以按场景设置。
例如,报告质控、合同审核、数据抽取这类严肃场景,建议:
text
temperature 低一些
输出格式更稳定
减少模型自由发挥
增加结构化输出校验
而营销文案、创意标题、活动策划这类场景,可以适当提高随机性,让结果更有变化。
所以,生产级模型选择应该同时关注:
text
模型能力
模型成本
上下文长度
响应速度
稳定性
参数配置
是否支持流式
是否支持工具调用
是否支持结构化输出
是否支持多模态
六、Embedding Model:RAG 和相似检索的基础
Embedding Model 不是用来聊天的。
它的作用是把文本、图片或其他内容转换成向量。
向量可以理解为一组浮点数,用来表达内容的语义特征。
例如:
text
文本A:肺部 CT 显示右上肺结节
文本B:右肺上叶可见小结节影
这两句话字面不同,但语义接近。
Embedding Model 可以把它们转换成向量,然后通过向量距离计算相似度。
这就是 RAG、知识库问答、相似病例检索的基础。
在 Spring AI 中,可以通过 EmbeddingModel 将文本转换为向量:
java
float[] vector = embeddingModel.embed("右肺上叶可见结节影");
也可以处理文档对象:
java
float[] vector = embeddingModel.embed(document);
在生产系统中,Embedding Model 常见用途包括:
text
知识库检索
相似文档搜索
相似病例搜索
商品相似推荐
文本聚类
语义去重
RAG 文档召回
需要注意的是,Embedding Model 的选择非常关键。
因为一旦你的知识库使用某个 Embedding 模型完成了向量化,后续检索时最好继续使用同一个模型。
否则不同模型生成的向量空间可能不一致,检索效果会受到影响。
七、Chat Model 和 Embedding Model 的关系
很多人会把 Chat Model 和 Embedding Model 混在一起。
其实它们分工不同。
| 模型 | 输入 | 输出 | 主要作用 |
|---|---|---|---|
| Chat Model | 文本 / 消息 / 上下文 | 文本或结构化结果 | 推理、生成、总结、问答 |
| Embedding Model | 文本 / 文档 | 向量 | 语义表示、相似度检索 |
在 RAG 系统中,它们通常这样协作:
text
用户问题
↓
Embedding Model 将问题转成向量
↓
向量数据库检索相关文档
↓
将文档片段和问题一起交给 Chat Model
↓
Chat Model 生成最终回答
所以,Embedding Model 负责"找资料",Chat Model 负责"组织答案"。
如果把这个逻辑放到医学影像报告质控中,可以这样理解:
text
Embedding Model:从规则库中找相似质控规则
Chat Model:结合规则和报告内容生成质控意见
这就是两类模型最常见的组合方式。
八、Image Model:用于图像生成,不等同于图像理解
Spring AI 的 Image Model API 主要面向图像生成。
它适合根据文本提示生成图片,例如:
text
生成一张产品宣传图
生成一张博客封面图
生成一张系统架构概念图
生成一张教学插图
在 Spring AI 中,ImageModel 通过 ImagePrompt 输入,通过 ImageResponse 返回结果。
示例:
java
ImagePrompt prompt = new ImagePrompt("生成一张 Spring AI 技术博客封面图");
ImageResponse response = imageModel.call(prompt);
Image Model 常见配置包括:
text
生成数量
模型名称
图片宽度
图片高度
返回格式
这里需要注意一个容易混淆的点:
text
Image Model 主要是图像生成;
Multimodal Chat Model 才通常用于图像理解。
例如:
text
让模型生成一张图片:Image Model
让模型分析一张医学图像:多模态 Chat Model
让模型判断图文是否一致:多模态 Chat Model
因此,在模型选择时不要只看"图片"两个字,而要先判断任务是"生成图片"还是"理解图片"。
九、Audio Model:语音转文字和文字转语音
音频模型主要分为两类。
1. Transcription:语音转文字
Transcription Model 用于把音频转换成文本。
典型场景包括:
text
会议录音转文字
医生语音报告转文字
客服通话转文本
教学音频整理
语音输入助手
示例:
java
String text = transcriptionModel.transcribe(audioResource);
在医学场景中,它可以用于医生语音报告录入。
流程可以是:
text
医生口述报告
↓
Transcription Model 转文字
↓
Chat Model 优化报告表达
↓
结构化输出质控结果
↓
医生确认
2. Text-To-Speech:文字转语音
Text-To-Speech Model 用于把文本转换成音频。
典型场景包括:
text
语音播报
智能客服
报告朗读
教学内容朗读
无障碍辅助
示例:
java
byte[] audio = textToSpeechModel.call("这是一段语音播报内容");
Spring AI 还支持流式语音生成,适合实时播报类场景。
不过,语音模型在生产环境中要重点关注:
text
音频格式
音色选择
生成速度
延迟
文件大小
是否支持流式
是否允许商用
是否涉及隐私数据
尤其是医疗、教育、客服等场景,录音通常包含敏感信息,必须考虑数据合规与脱敏策略。
十、Moderation Model:内容安全不能靠业务人员手工兜底
Moderation Model 用于检测潜在有害或敏感内容。
它在生产系统中经常被忽视,但非常重要。
典型场景包括:
text
用户输入审核
模型输出审核
评论内容过滤
AI 聊天安全控制
图片或文本生成前置检查
敏感问题拦截
在 AI 应用中,安全审核可以放在两个位置:
text
用户输入之前:防止恶意输入进入模型
模型输出之后:防止不合规内容返回用户
例如:
text
用户输入
↓
Moderation 检查
↓
通过后调用 Chat Model
↓
模型输出
↓
Moderation 再检查
↓
返回用户
对于开放式聊天、内容生成、用户投稿、教育问答等场景,Moderation 应该作为系统安全的一部分,而不是事后补救措施。
十一、生产级模型选择的基本原则
模型选择不是越强越好,而是越适合越好。
可以从以下几个维度考虑。
1. 按任务选模型
| 任务 | 优先选择 |
|---|---|
| 问答、总结、推理 | Chat Model |
| 流式聊天、长文本生成 | StreamingChatModel |
| 知识库检索、相似搜索 | Embedding Model |
| 图片生成 | Image Model |
| 语音转文字 | Transcription Model |
| 文字转语音 | Text-To-Speech Model |
| 内容安全审核 | Moderation Model |
这是最基础的选择逻辑。
2. 按业务风险选模型
不同业务对模型要求不一样。
例如营销文案场景,更关注创造力和成本;
报告质控场景,更关注稳定性和准确性;
医疗辅助场景,更关注可追溯、可解释和人工复核;
客服场景,更关注响应速度、并发能力和安全边界。
所以,模型选型时要先问:
text
这个场景允许模型犯多大错误?
错误发生后能不能人工兜底?
是否涉及医疗、金融、法律等严肃决策?
是否需要审计追踪?
业务风险越高,越不能只看模型效果,还要看系统层面的校验、审计和兜底能力。
3. 按成本和延迟选模型
生产系统一定要考虑成本。
同一个业务流程中,不一定所有步骤都使用最强模型。
例如:
text
简单分类:小模型
内容总结:中等模型
复杂推理:强模型
相似检索:Embedding 模型
安全过滤:Moderation 模型
一个更合理的架构是"分层用模":
text
低成本模型处理高频简单任务
高能力模型处理低频复杂任务
规则引擎处理确定性任务
人工审核处理高风险任务
这样才能让 AI 系统在成本、效果和稳定性之间取得平衡。
4. 按厂商能力选模型
不同模型供应商支持的能力不同。
选择时要重点看:
text
是否支持 Chat
是否支持 Embedding
是否支持多模态
是否支持流式输出
是否支持结构化输出
是否支持 Tool Calling
是否支持本地部署
是否支持私有化
是否有稳定的 SLA
是否符合数据合规要求
Spring AI 的价值在于,它尽量通过统一接口屏蔽不同供应商之间的差异。
但统一接口不代表所有模型能力完全一致。
所以实际使用时,仍然要查看官方文档中对应供应商的配置说明和能力边界。
十二、推荐的生产级模型组合思路
以一个知识库问答系统为例,可以这样组合:
text
Embedding Model:文档向量化和检索
Chat Model:生成最终回答
Moderation Model:输入输出审核
StreamingChatModel:前端流式展示
以一个医学影像报告质控系统为例,可以这样组合:
text
Chat Model:报告文本分析
Embedding Model:质控规则检索、相似案例召回
Multimodal Chat Model:报告与关键图像一致性分析
Moderation Model:输入输出安全控制
Transcription Model:医生语音录入
Text-To-Speech Model:质控结果播报
以一个内容创作系统为例,可以这样组合:
text
Chat Model:文案生成
Image Model:封面图生成
Moderation Model:内容审核
Embedding Model:素材相似检索
模型选择的核心不是"选一个模型",而是"设计一组模型协作完成业务流程"。
十三、Spring AI 给开发者带来的工程价值
从工程角度看,Spring AI 的模型抽象至少有三个价值。
1. 统一接口
业务代码可以依赖:
text
ChatModel
EmbeddingModel
ImageModel
TranscriptionModel
TextToSpeechModel
而不是直接依赖某个具体厂商 SDK。
这样后续切换模型时,业务代码改动会更小。
2. 配置驱动
在 Spring Boot 项目中,可以通过配置文件指定模型供应商、模型名称、API Key 和相关参数。
这符合 Spring 一贯的开发习惯。
例如:
yaml
spring:
ai:
model:
chat: openai
具体配置项会因模型类型和供应商不同而不同,因此建议开发时以官方文档为准。
3. 便于组合
Spring AI 不是只提供一个聊天接口,而是围绕 AI 应用常见能力提供一组抽象。
这使得我们可以把不同模型组合进一个业务系统:
text
Chat + Embedding + Vector Store
Chat + Tool Calling
Chat + Structured Output
Chat + Multimodality
Chat + Moderation
Audio + Chat
Image + Moderation
这也是 Spring AI 更适合生产级 AI 应用开发的原因。
十四、本章只点到为止,更多细节建议看官方文档
模型这一章内容非常多。
每一种模型下面还有不同厂商实现,不同厂商下面还有各自的配置项、模型名称、参数能力和限制说明。
因此,本文不建议把所有配置都展开讲,否则会变成一篇很长的配置手册,也容易随着版本变化而过期。
更推荐的学习方式是:
text
先理解模型类型和使用场景;
再根据业务任务选择模型抽象;
最后到 Spring AI 官方文档查看具体厂商配置。
尤其是以下内容,建议直接查官方文档:
text
不同 Chat Model 的能力对比
Embedding 模型供应商配置
Image Model 参数说明
Audio Transcription 配置
Text-To-Speech 配置
Moderation 模型配置
模型 starter 依赖
Spring Boot 配置属性
运行时参数覆盖方式
这样既能把握整体架构,又能保证具体配置不脱离官方版本。
十五、总结
Spring AI 的模型选择,不能简单理解为"选择哪个大模型最强"。
在生产级应用中,更重要的是明确不同模型的职责:
text
Chat Model 负责理解、推理和生成;
Embedding Model 负责语义向量化和检索;
Image Model 负责图像生成;
Audio Model 负责语音输入和语音输出;
Moderation Model 负责内容安全审核。
真正成熟的 AI 系统,通常不是一个模型单打独斗,而是多种模型与业务规则、数据库、向量库、工具调用、审计流程共同协作。
Spring AI 的价值就在于,它提供了一套统一的模型抽象,让 Java / Spring 开发者能够以熟悉的方式,把不同 AI 能力接入到生产系统中。
模型选择的最终目标不是追逐热点模型,而是让模型能力稳定、可控、可维护地服务业务。