|
最新快照版本请使用Spring AI 1.1.0! |
聊天模型API
聊天模型API为开发者提供了将AI驱动的聊天补全功能集成到其应用中的能力。它利用预训练语言模型,如GPT(生成预训练变换器),生成类人响应自然语言用户输入。
该 API 通常通过向 AI 模型发送提示或部分对话,模型根据训练数据和对自然语言模式的理解生成对话的完成或续写。完成后的响应会返回给应用程序,应用程序可以将其呈现给用户或用于进一步处理。
这Spring AI 聊天模型 API设计为一个简单且可移植的界面,用于与各种 AI 模型交互,使开发者能够以最小的代码修改在不同模型之间切换。
这种设计与Spring关于模块化和可更换性的理念相契合。
还有像这样的同伴职业的帮助提示对于输入封装和聊天回应在输出处理方面,聊天模型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()方法字符串参数简化了初始使用,避免了更复杂的作提示和聊天回应类。
在实际应用中,更常见的是使用call()方法提示实例并返回聊天回应.
StreamingChatModel
以下是StreamingChatModel界面定义:
public interface StreamingChatModel extends StreamingModel<Prompt, ChatResponse> {
default Flux<String> stream(String message) {...}
@Override
Flux<ChatResponse> stream(Prompt prompt);
}
这stream()方法取字符串或提示参数类似于聊天模型但它通过响应式 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
}
消息
这消息接口封装了提示文本内容、元数据属性集合,以及一种称为消息类型.
接口定义如下:
public interface Content {
String getText();
Map<String, Object> getMetadata();
}
public interface Message extends Content {
MessageType getMessageType();
}
多模态消息类型还实现了媒体内容接口提供列表媒体内容对象。
public interface MediaContent extends Content {
Collection<Media> getMedia();
}
这消息接口有多种实现方式,对应AI模型可处理的消息类别:
聊天补全端点根据对话角色区分消息类别,有效映射为消息类型.
例如,OpenAI 识别针对不同对话角色的消息类别,例如系统,用户,功能或助理.
而该术语消息类型可能暗示特定的信息格式,在此语境中,它实际上指明了信息在对话中所扮演的角色。
对于不使用特定角色的AI模型,用户消息实现作为一个标准类别,通常代表用户生成的询问或指令。
理解其实际应用及其关系提示和消息特别是在这些角色或消息类别的背景下,请参见提示部分的详细说明。
聊天选项
表示可以传递给AI模型的选项。这聊天选项类是 的子类ModelOptions并用于定义一些可传递给AI模型的可移植选项。
这聊天选项类的定义如下:
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聊天补全模型有自己的选项,比如logit偏置,种子和用户.
这是一个强大的功能,允许开发者在启动应用程序时使用模型特定的选项,然后在运行时通过提示请求。
Spring AI 提供了一个复杂的系统,用于配置和使用聊天模型。 它允许在启动时设置默认配置,同时提供按请求覆盖这些设置的灵活性。 这种方法使开发者能够轻松地处理不同的 AI 模型并根据需要调整参数,所有这些都在 Spring AI 框架提供的一致界面内进行。
以程图展示了 Spring AI 如何处理聊天模型的配置和执行,结合启动和运行时选项:
-
启动配置——ChatModel/StreamingChatModel 初始化为“启动”聊天选项。 这些选项在 ChatModel 初始化时设置,旨在提供默认配置。
-
运行时配置——对于每个请求,提示符可以包含运行时聊天选项:这些选项可以覆盖启动选项。
-
选项合并过程——“合并选项”步骤结合了启动和运行时选项。 如果提供了运行时选项,它们优先于启动选项。
-
输入处理——“转换输入”步骤将输入指令转换为本地、特定型号的格式。
-
输出处理——“转换输出”步骤将模型的响应转换为标准化
聊天回应格式。
启动和运行时选项的分离允许全局配置和针对特定请求的调整。
聊天回应
结构聊天回应类别如下:
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 模型的输出,每个生成包含单个提示可能产生的多个输出之一的实例。
这聊天回应类别还携带AChatResponse元数据关于AI模型响应的元数据。
生成
最后,世代类从以下模型结果为了表示模型输出(助理消息)及相关元数据:
public class Generation implements ModelResult<AssistantMessage> {
private final AssistantMessage assistantMessage;
private ChatGenerationMetadata chatGenerationMetadata;
@Override
public AssistantMessage getOutput() {...}
@Override
public ChatGenerationMetadata getMetadata() {...}
// other methods omitted
}
可用实现
此图展示了统一接口,聊天模型和StreamingChatModel用于与不同提供商的各种AI聊天模型交互,便于集成和切换不同AI服务,同时保持客户端应用的一致API。
-
OpenAI 聊天补全(支持流式、多模态及功能调用)
-
Microsoft Azure Open AI 聊天补全(支持流式和函数调用)
-
Ollama 聊天补全(支持流式、多模态及功能调用)
-
HuggingFace聊天补全(不支持直播)
-
Google Vertex AI 双子座聊天补全(支持流媒体、多模态及功能调用)
-
Mistral AI 聊天补全(支持流式和功能调用)
-
Anthropic 聊天补全(支持流式和功能调用)
| 在“聊天模型比较”部分查看可用聊天模型的详细比较。 |
聊天模型API
Spring AI 聊天模型 API 是建立在 Spring AI 之上通用模型API提供Chat专属的抽象和实现。
这使得不同 AI 服务之间的集成和切换变得轻松,同时为客户端应用保持一致的 API。
下图展示了 Spring AI 聊天模型 API 的主要类和接口。