前面几篇文章聊的都是大模型的“文本能力”,对话、结构化返回、上下文管理,都围绕着 ChatModel 展开。
但 Spring AI 能做的事情远不止文本对话。从 2.0 版本开始,图像生成有了一套独立的接口体系 ImageModel,和 ChatModel 走的是完全不同的 API 路径。

这篇文章从 ImageModel 的接口设计讲起,再拆解求职派是怎么把图像模型接入到了多供应商架构中,最后回答一个容易搞混的问题,IMAGE 和 VISION 到底有什么区别。
01、ImageModel 和 ChatModel 有什么不同?
ChatModel 大家已经很熟悉了。输入是一段对话(Prompt),输出也是一段文字(ChatResponse)。
ImageModel 的逻辑完全不同。它接收一段文字描述(ImagePrompt),返回一张图片的 URL 或 Base64 数据(ImageResponse)。

一个是“文字进文字出”,另一个是“文字进图片出”。
两者在 Spring AI 的类型体系里也是彻底隔离的。Spring AI 2.0 把所有模型抽象成了一个泛型接口 Model<treq, tres="">,ChatModel 和 ImageModel 分别继承了它,但泛型参数完全不同。
// 聊天模型:对话进,文字出
public interface ChatModel
extends Model<prompt, chatresponse="">
// 图像模型:文字进,图片出
public interface ImageModel
extends Model<imageprompt, imageresponse="">
除了类型不同,两者走的 HTTP 端点也不一样。
聊天模型请求的是 /v1/chat/completions,图像模型请求的是 /v1/images/generations。
求职派的模型配置里(ModelConfig.java),这两个路径由 completionsPath 和 imagesPath 两个独立的字段分别维护。
不管是 OpenAI 还是智谱,聊天和生图都是两个独立的 API,请求参数、返回结构、计费方式全都不一样。
对于开发者来说,这种分离的好处在于心智模型很清晰。写聊天相关的代码时,只需要关注 ChatModel 体系里的那些类(Prompt、ChatResponse、ChatOptions)。
写图像生成的代码时,切换到 ImageModel 体系(ImagePrompt、ImageResponse、ImageOptions)。两套 API 独立演进,互不干扰。
02、怎么用 ImageModel 生成一张图?
核心调用只需要三步。构建一个图像提示词,调用图像模型的 call 方法,从返回结果里取出图片 URL。
ImagePrompt prompt = new ImagePrompt(
"一只穿西装的龙虾,正在参加求职面试",
ZhiPuAiImageOptions.builder()
.model("cogview-4...</imageprompt,></prompt,></treq,>
回复