Chat Model API
Chat Model API 使开发人员能够将人工智能支持的聊天完成功能集成到他们的应用程序中。它利用预先训练的语言模型,例如 GPT(生成式预训练变压器),以自然语言对用户输入生成类似人类的响应。
API 通常通过向 AI 模型发送提示或部分对话来工作,然后 AI 模型根据其训练数据和对自然语言模式的理解生成对话的完成或延续。然后,完成的响应将返回到应用程序,应用程序可以将其呈现给用户或将其用于进一步处理。
Spring AI Chat Model API 被设计为一个简单且可移植的接口,用于与各种人工智能模型进行交互,允许开发人员以最少的代码更改在不同模型之间切换。这种设计符合 Spring 的模块化和可互换性理念。
此外,Prompt 在输入封装和输出处理等配套类的帮助下ChatResponse,聊天完成 API 统一了与 AI 模型的通信。它管理请求准备和响应解析的复杂性,提供直接且简化的 API 交互。
API 概述
本节提供 Spring AI Chat Completion API
接口和关联类的指南。
ChatModel
以下是 ChatModel 接口的定义:
public interface ChatModel extends Model<Prompt, ChatResponse>, StreamingChatModel {
default String call(String message) {...}
@Override
ChatResponse call(Prompt prompt);
}
- 带有
String
参数的call ()
方法简化了初始使用,避免了更复杂的Prompt
和ChatResponse
类的复杂性。在现实应用中,使用call ()
方法更为常见,它接收一个 Prompt 实例并返回一个 ChatResponse。
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 来流式传输响应。
Prompt
Prompt
是一个 ModelRequest
, 它封装了 Message 对象
和可选模型请求选项的列表
。以下代码清单显示了 Prompt 类的截断版本,不包括构造函数和其他实用方法:
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
Message
接口封装了一个 Prompt
文本内容、一组元数据属性和一个称为 MessageType
的分类。
接口定义如下:
public interface Content {
String getText();
Map<String, Object> getMetadata();
}
public interface Message extends Content {
MessageType getMessageType();
}
多模态 MessageType 还实现了 MediaContent 接口,提供媒体内容对象的列表。
public interface MediaContent extends Content {
Collection<Media> getMedia();
}
Message 接口有各种实现,对应于 AI 模型可以处理的消息类别:
聊天完成端点,根据会话角色区分消息类别,由 MessageType 有效地映射。
例如,OpenAI 识别不同会话角色 (如系统、用户、功能或助手) 的消息类别。
虽然术语 MessageType 可能暗示一种特定的消息格式,但在这种情况下,它实际上指的是消息在对话中所扮演的角色。
对于不使用特定角色的 AI 模型,UserMessage
实现作为一个标准类别,通常代表用户生成的查询或指令。要理解实际应用以及 Prompt 和 Message 之间的关系,特别是在这些角色或 Message 类别的上下文中,请参阅 Prompts 部分的详细解释。
ChatOptions
表示可以传递给 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 Chat Completion 模型有自己的选项,如 logitBias、seed 和 user。
这是一个强大的功能,允许开发人员在启动应用程序时使用特定于模型的选项,然后在运行时使用 Prompt 请求覆盖这些选项。
Spring AI 提供了一个复杂的系统来配置和使用 Chat Models。它允许在启动时设置默认配置,同时还提供了根据请求覆盖这些设置的灵活性。这种方法使开发人员能够轻松地使用不同的 AI 模型,并根据需要调整参数,所有这些都在 Spring AI 框架提供的一致界面中进行。
以下流程图说明了 Spring AI 如何处理 Chat Models 的配置和执行,结合了启动和运行时选项:
- 启动配置 ——ChatModel/StreamingChatModel 使用 “启动” Chat 选项进行初始化。这些选项在 ChatModel 初始化期间设置,旨在提供默认配置。
- 运行时配置 —— 对于每个请求,提示符可以包含一个运行时聊天选项:这些选项可以覆盖启动选项。
- 选项合并过程 ——“合并选项” 步骤结合了启动选项和运行时选项。如果提供了运行时选项,则它们优先于启动选项。
- 输入处理 ——“转换输入” 步骤将输入指令转换为原生的、特定于型号的格式。
- 输出处理 ——“转换输出” 步骤将模型的响应转换为标准化的 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 模型响应的 ChatResponse 元数据元数据。
Generation
最后,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 Chat Completion (streaming, multi-modality & function-calling support)
- Microsoft Azure Open AI Chat Completion (streaming & function-calling support)
- Ollama Chat Completion (streaming, multi-modality & function-calling support)
- Hugging Face Chat Completion (no streaming support)
- Google Vertex AI Gemini Chat Completion (streaming, multi-modality & function-calling support)
- Amazon Bedrock
- Mistral AI Chat Completion (streaming & function-calling support)
- Anthropic Chat Completion (streaming & function-calling support)
Chat Model API
Spring AI 聊天模型 API 建立在 Spring AI 通用模型 API 之上,提供了特定于聊天的抽象和实现。这使得在不同 AI 服务之间轻松集成和切换成为可能,同时为客户端应用程序保持一致的 API。下面的类图说明了 Spring AI 聊天模型 API 的主要类和接口。
最后编辑:Jeebiz 更新时间:2025-08-08 00:47