聊天模型 API
Chat Model API 为开发者提供了将 AI 驱动的对话完成功能集成到其应用程序中的能力。它利用预训练的语言模型,例如 GPT(生成式预训练变换模型),来生成针对用户自然语言输入、类似于人类的响应。
API通常的工作方式是向AI模型发送一个提示或部分对话,然后模型基于其训练数据和对自然语言模式的理解,生成一个完成文本或对话的延续。完成后的响应随后被返回给应用程序,应用程序可以将其呈现给用户或用于进一步处理。
Spring AI 聊天模型API旨在为与各类AI模型交互提供一个简单且可移植的接口,使开发者能够以最少的代码变更在不同模型间切换。这一设计理念与Spring的模块化和可互换性原则高度契合。
同样,借助辅助类,例如用于输入封装的 Prompt 以及用于输出处理的 ChatResponse,Chat Model API 统一了与 AI 模型的通信。它管理了请求准备和响应解析的复杂性,提供了直接且简化的 API 交互。
API 概览
本节提供 Spring AI 聊天模型 API 接口及相关类的使用指南。
聊天模型
以下是 ChatModel 接口的定义:
public interface ChatModel extends Model<Prompt, ChatResponse>, StreamingChatModel {
default String call(String message) {...}
@Override
ChatResponse call(Prompt prompt);
}
call() 方法接受 String 参数的形式简化了初始使用,避免了更复杂的 Prompt 和 ChatResponse 类。在实际应用中,更常见的是使用接受 Prompt 实例并返回 ChatResponse 的 call() 方法。
StreamingChatModel
以下是 StreamingChatModel 接口的定义:
public interface StreamingChatModel extends StreamingModel<Prompt, ChatResponse> {
default Flux<String> stream(String message) {...}
@Override
Flux<ChatResponse> stream(Prompt prompt);
}
stream()方法接受一个类似于ChatModel的String或Prompt参数,但它会使用响应式Flux API来流式传输响应。
提示
public class Prompt implements ModelRequest<List<Message>> {
private final List<Message> messages;
private ChatOptions modelOptions;
@Override
public ChatOptions getOptions() {...}
@Override
public List<Message> getInstructions() {...}
// constructors and utility methods omitted
}
消息
Message接口封装了一个Prompt文本内容、一组元数据属性以及一种称为MessageType的分类。
该接口定义如下:
public interface Content {
String getText();
Map<String, Object> getMetadata();
}
public interface Message extends Content {
MessageType getMessageType();
}
多模态消息类型同样实现了MediaContent接口,该接口提供了Media内容对象列表。
public interface MediaContent extends Content {
Collection<Media> getMedia();
}
Message 接口有多个实现,对应着 AI 模型可以处理的各类消息:

聊天补全端点,根据对话角色区分消息类别,通过MessageType进行有效映射。
例如,OpenAI 识别消息类别以区分不同的对话角色,例如 system、user、function 或 assistant。
虽然术语 MessageType 可能暗示特定的消息格式,但在此上下文中,它实际上指定了消息在对话中所扮演的角色。
对于不使用特定角色的AI模型,UserMessage实现充当标准类别,通常代表用户生成的查询或指令。要了解Prompt与Message的实际应用及其关系,尤其是在这些角色或消息类别的背景下,请参阅Prompts部分的详细说明。
聊天选项
表示可以传递给AI模型的选项。ChatOptions 类是 ModelOptions 的一个子类,用于定义一些可以传递给AI模型的通用选项。ChatOptions 类的定义如下:
public interface ChatOptions extends ModelOptions {
String getModel();
Float getFrequencyPenalty();
Integer getMaxTokens();
Float getPresencePenalty();
List<String> getStopSequences();
Float getTemperature();
Integer getTopK();
Float getTopP();
ChatOptions copy();
}
此外,每个特定于模型的ChatModel/StreamingChatModel实现都可以拥有自己的选项,这些选项可以传递给AI模型。例如,OpenAI的聊天完成模型就有其专属选项,如logitBias、seed和user。
这是一个强大的功能,允许开发者在启动应用程序时使用模型特定的选项,然后在运行时通过 Prompt 请求覆盖这些选项。
Spring AI 提供了一套用于配置和使用聊天模型的复杂系统。它允许在启动时设置默认配置,同时支持在每个请求的基础上灵活覆盖这些设置。这种方法使开发人员能够轻松地使用不同的人工智能模型并根据需要调整参数,这一切都在 Spring AI 框架提供的一致接口内完成。
以下流程图展示了 Spring AI 如何处理聊天模型的配置与执行,整合了启动和运行时选项:

-
启动配置 - ChatModel/StreamingChatModel 在初始化时使用“启动”聊天选项进行配置。这些选项在 ChatModel 初始化期间设置,旨在提供默认配置。
-
运行时配置 - 对于每个请求,提示(Prompt)可以包含运行时聊天选项:这些选项可以覆盖启动选项。
-
选项合并过程 - “合并选项”步骤将启动选项和运行时选项结合起来。如果提供了运行时选项,它们将优先于启动选项。
-
输入处理 - “转换输入”步骤将输入的指令转换为特定于模型的本地格式。
-
输出处理 - “转换输出”步骤将模型的响应转换为标准化的
ChatResponse格式。
启动时参数与运行时参数的分离,既支持全局配置,也允许针对特定请求进行调整。
ChatResponse
ChatResponse类的结构如下:
public class ChatResponse implements ModelResponse<Generation> {
private final ChatResponseMetadata chatResponseMetadata;
private final List<Generation> generations;
@Override
public ChatResponseMetadata getMetadata() {...}
@Override
public List<Generation> getResults() {...}
// other methods omitted
}
ChatResponse 类用于存储 AI 模型的输出,其中每个 Generation 实例包含由单个提示可能产生的多个输出之一。
ChatResponse类还包含一个关于AI模型响应的元数据ChatResponseMetadata。
生成
最后,Generation 类继承自 ModelResult,用于表示模型输出(助手消息)及相关元数据:
public class Generation implements ModelResult<AssistantMessage> {
private final AssistantMessage assistantMessage;
private ChatGenerationMetadata chatGenerationMetadata;
@Override
public AssistantMessage getOutput() {...}
@Override
public ChatGenerationMetadata getMetadata() {...}
// other methods omitted
}
可用实现
该图展示了统一接口ChatModel和StreamingChatModel,它们用于与来自不同提供商的各种AI聊天模型进行交互,允许客户端应用轻松集成和切换不同的AI服务,同时保持一致的API。

-
OpenAI 聊天补全 (支持流式传输、多模态及函数调用)
-
Microsoft Azure OpenAI 聊天补全 (支持流式传输及函数调用)
-
Ollama 聊天补全 (支持流式传输、多模态及函数调用)
-
Hugging Face 聊天补全 (不支持流式传输)
-
Google Vertex AI Gemini 聊天补全 (支持流式传输、多模态及函数调用)
-
Mistral AI 聊天补全 (支持流式传输及函数调用)
-
Anthropic 聊天补全 (支持流式传输及函数调用)
在 聊天模型对比 部分,您可以找到现有聊天模型的详细对比。
聊天模型 API
Spring AI Chat Model API 构建于 Spring AI Generic Model API 之上,提供了特定于聊天的抽象和实现。这使得集成和切换不同的 AI 服务变得容易,同时为客户端应用程序保持一致的 API。下面的类图展示了 Spring AI Chat Model API 的主要类和接口。

章节总结
Chat Models Comparison
本表格对比了Spring AI支持的各种聊天模型,详细说明了它们的功能:
Amazon Bedrock Converse
Amazon Bedrock Converse API为对话式AI模型提供了一个统一的接口,并增强了包括函数/工具调用、多模态输入和流式响应在内的功能。
Anthropic
Anthropic Claude 是一系列基础 AI 模型,可用于多种应用。对于开发者和企业,您可以通过 API 访问,直接在 Anthropic 的 AI 基础设施之上进行构建。
Azure OpenAI
Azure 的 OpenAI 服务由 ChatGPT 提供支持,其功能超越了传统的 OpenAI 能力,提供了具备增强功能的人工智能驱动文本生成。Azure 还提供了额外的 AI 安全性和负责任 AI 功能,如其最近更新中所强调的。
DeepSeek
Spring AI 支持来自 DeepSeek 的各种 AI 语言模型。您可以与 DeepSeek 语言模型交互,并基于 DeepSeek 模型创建多语言对话助手。
Docker 模型运行器
Docker Model Runner 是一款 AI 推理引擎,提供来自多个供应商的广泛模型选择。
2 个项目
Groq
Groq 是一款基于 LPU™ 的极速 AI 推理引擎,支持多种 AI 模型,具备工具/函数调用功能,并提供了一个与 OpenAI API 兼容的端点。
Hugging Face
Hugging Face Text Generation Inference (TGI) 是一个专为云端部署大型语言模型 (LLMs) 的解决方案,使其能够通过 API 进行访问。TGI 通过连续批处理、令牌流式传输和高效内存管理等特性,为文本生成任务提供了优化的性能。
Mistral AI
Spring AI 支持来自 Mistral AI 的各种 AI 语言模型。您可以与 Mistral AI 语言模型交互,并基于 Mistral 模型创建多语言对话助手。
MiniMax
Spring AI 支持来自 MiniMax 的各种 AI 语言模型。你可以与 MiniMax 语言模型进行交互,并基于 MiniMax 模型创建一个多语言对话助手。
Moonshot AI
此功能已迁移至 Spring AI 社区仓库。
NVIDIA
NVIDIA LLM API 是一款代理 AI 推理引擎,提供来自众多供应商的广泛模型选择。
Ollama
借助 Ollama,您可以在本地运行多种大型语言模型(LLM),并利用它们生成文本。Spring AI 通过 OllamaChatModel API 支持 Ollama 的聊天补全功能。
Perplexity AI
Perplexity AI 提供一项独特的 AI 服务,它将自身的语言模型与实时搜索能力相结合。该服务提供多种模型,并为对话式 AI 支持流式响应。
OCI Generative AI
1 个项目
OpenAI SDK(官方)
Spring AI通过OpenAI Java SDK支持OpenAI的语言模型,提供了与OpenAI服务(包括Microsoft Foundry和GitHub Models)的强大且官方维护的集成。
OpenAI
Spring AI支持来自ChatGPT背后的公司OpenAI的各种人工智能语言模型。OpenAI通过创建业界领先的文本生成模型和嵌入技术,在激发人们对人工智能驱动文本生成的兴趣方面发挥了重要作用。
千帆
此功能已迁移至 Spring AI 社区仓库。
智谱 AI
Spring AI 支持智谱 AI 的多种 AI 语言模型。你可以与智谱 AI 语言模型交互,并基于智谱 AI 模型创建多语言对话助手。