聊天模型API为开发人员提供了将人工智能聊天完成功能集成到应用程序中的能力。它利用预训练的语言模型,如GPT(生成预训练转换器),以自然语言对用户输入生成类似人类的响应。
API通常通过向人工智能模型发送提示或部分对话来工作,然后人工智能模型根据其训练数据和对自然语言模式的理解生成对话的完成或继续。然后将完成的响应返回给应用程序,应用程序可以将其呈现给用户或用于进一步处理。
Spring人工智能聊天模型API设计为一个简单便携的界面,用于与各种人工智能模型交互,使开发人员能够在不同的模型之间切换,只需最少的代码更改。这种设计符合Spring的模块化和互换性理念。
此外,在Prompt用于输入封装和ChatResponse用于输出处理等配套类的帮助下,Chat Model API将与AI Model的通信统一起来。它管理请求准备和响应解析的复杂性,提供了一个直接和简化的API交互。
您可以在“可用实现”部分找到有关可用实现的更多信息,也可以在“聊天模型比较”部分找到详细的比较。
API Overview
本节提供了Spring AI Chat Model API接口和相关类的指南。
ChatModel
以下是ChatModel接口定义:
public interface ChatModel extends Model<Prompt, ChatResponse> {
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参数,但它使用reactive 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();
}
多模式消息类型还实现了提供媒体内容对象列表的MediaContent接口。
public interface MediaContent extends Content {
Collection<Media> getMedia();
}
Message接口有各种实现,对应于AI模型可以处理的消息类别:
聊天完成端点,根据会话角色区分消息类别,由MessageType有效映射。
例如,OpenAI识别不同会话角色的消息类别,如系统、用户、功能或助手。
虽然术语MessageType可能意味着特定的消息格式,但在这种情况下,它有效地指定了消息在对话中扮演的角色。
对于不使用特定角色的AI模型,UserMessage实现充当标准类别,通常表示用户生成的查询或指令。要了解Prompt和Message之间的实际应用和关系,特别是在这些角色或消息类别的背景下,请参阅Prompts部分中的详细说明。
Chat Options
表示可以传递给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提供了一个复杂的系统来配置和使用聊天模型。它允许在启动时设置默认配置,同时还提供了根据每个请求覆盖这些设置的灵活性。这种方法使开发人员能够轻松地使用不同的AI模型并根据需要调整参数,所有这些都在Spring AI框架提供的一致界面内完成。
以下流程图说明了Spring AI如何处理聊天模型的配置和执行,结合启动和运行时选项:
启动和运行时选项的分离允许进行全局配置和特定于请求的调整。
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
最后,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
}
Available Implementations
该图显示了统一的界面ChatModel和StreamingChatModel,用于与来自不同提供商的各种人工智能聊天模型交互,允许在不同的人工智能服务之间轻松集成和切换,同时为客户端应用程序维护一致的API。
OpenAI聊天完成(流媒体、多模态和功能调用支持)
Microsoft Azure开放式AI聊天完成(流媒体和函数调用支持)
Ollama聊天完成(流媒体、多模式和功能调用支持)
拥抱面部聊天完成(不支持流媒体)
Google Vertex AI Gemini聊天完成(流媒体、多模态和功能调用支持)
亚马逊基岩
Mistral AI聊天完成(流媒体和功能调用支持)
人工聊天完成(流媒体和功能调用支持)
Find a detailed comparison of the available Chat Models in th |
Chat Model API
Spring AI Chat Model API构建在Spring AI Generic Model API之上,提供特定于Chat的抽象和实现。这允许在不同的人工智能服务之间轻松集成和切换,同时为客户端应用程序维护一致的API。下面的类图说明了Spring AI聊天模型API的主要类和接口。