|
此版本仍在开发中,尚未被视为稳定版。如需最新的快照版本,请使用 Spring AI 1.1.3! |
聊天模型API
Chat Model API 为开发者提供了将基于AI的聊天补全能力集成到其应用程序中的能力。它利用了预训练的语言模型,如GPT(生成型预训练变换器),以自然语言生成类似人类的响应。
API 通常通过向 AI 模型发送提示或部分对话来工作,然后根据其训练数据和对自然语言模式的理解生成对话的完成或继续。生成的回复随后返回给应用程序,应用程序可以将其呈现给用户或将它用于进一步处理。
The Spring AI Chat Model 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);
}
`0` 方法接受一个 `1` 或 `2` 参数,类似于 `3`,但会使用响应式的 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
}
消息
The 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();
}
`0`接口有各种实现,对应于AI模型可以处理的消息类别:
聊天补全端点,在基于会话角色区分消息类别时,有效映射由MessageType表示。
例如,OpenAI 识别消息类别以区分不同的对话角色,如system、user、function 或 assistant。
术语MessageType虽然可能暗示了一种特定的消息格式,但在本上下文中,它实际上指定了消息在对话中所扮演的角色。
对于不使用特定角色的AI模型,UserMessage 实现充当标准类别,通常表示用户生成的问题或指令。
要了解 Prompt 和 Message 的实际应用及其与这些角色或消息类别的关系,请参阅提示 部分中的详细说明。
聊天选项
代表可以传递给AI模型的选项。`0`类是`1`的子类,并用于定义少数可移植选项,这些选项可以传递给AI模型。 `2`类定义如下:
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 提供了一个复杂的系统,用于配置和使用聊天模型。 它允许在启动时设置默认配置,同时也提供了在每次请求基础上覆盖这些设置的灵活性。 这种做法使得开发者能够在一致的接口框架下轻松地处理不同的AI模型,并根据需要调整参数。
以下流程图说明了Spring AI如何处理聊天模型的配置和执行,结合启动时和运行时选项:
-
启动配置 - ChatModel/StreamingChatModel 是在“启动”聊天选项下初始化的。这些选项是在 ChatModel 初始化时设置的,默认用于提供配置。
-
运行时配置 - 对于每个请求,提示可以包含运行时聊天选项:这些可以在启动选项的基础上进行覆盖。
-
Option Merging Process - The "Merge Options" 步骤将启动选项和运行时选项合并。 如果提供了运行时选项,它们将优先于启动选项。
-
输入处理 - "转换输入" 步骤将输入指令转化为模型特定的本地格式。
-
输出处理 - "转换输出" 步骤将模型的响应转换为标准化的
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
}
The ChatResponse 类用于存储AI模型的输出,每个Generation实例包含单个提示可能产生的多个输出中的一个。
来自Java开发中Spring AI框架文档网站的HTML内容翻译如下:
The ChatResponse class also carries a ChatResponseMetadata metadata about the AI Model’s response.
生成
最后,生成类继承自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聊天模型进行交互,允许在保持客户端应用程序一致API的同时,轻松集成和切换不同的AI服务。
-
OpenAI 会话完成(支持流式传输、多模态及函数调用)
-
Microsoft Azure 开放AI聊天补全 (支持流式传输及函数调用)
-
Ollama Chat Completion (流式传输、多模态支持及函数调用支持)
-
Google Vertex AI Gemini Chat Completion (流式传输、多模态支持及函数调用支持)
-
Mistral AI 聊天补全 (支持流式传输与函数调用)
-
Anthropic Chat 完成 (支持流式传输与函数调用)
| 在聊天模型对比部分找到详细可用的聊天模型比较。 |
聊天模型API
The Spring AI 聊天模型API建立在Spring AI Generic Model API之上,提供了针对聊天的具体抽象和实现。
这使得不同AI服务之间的集成和切换变得更加容易,同时保持客户端应用程序的一致API。
以下类图说明了Spring AI Chat Model API的主要类和接口。