3.1 Spring AI Chat Model API

36 阅读6分钟

Spring AI Chat Model API

概述

Chat Model API为开发者提供了将AI驱动的聊天完成能力集成到其应用程序中的能力。它利用预训练的语言模型,如GPT(Generative Pre-trained Transformer),根据自然语言模式的理解生成对用户输入的类人响应。

该API通常通过向AI模型发送提示或部分对话来工作,然后AI模型基于其训练数据和对自然语言模式的理解生成对话的完成或继续。完成的响应随后返回给应用程序,应用程序可以将其呈现给用户或用于进一步处理。

Spring AI Chat Model API被设计为一个简单且可移植的接口,用于与各种AI模型交互,允许开发者以最少的代码更改在不同模型之间切换。这种设计与Spring的模块化和可互换性理念保持一致。

同时借助Prompt等同伴类进行输入封装和ChatResponse进行输出处理,Chat Model API统一了与AI模型的通信。它管理请求准备和响应解析的复杂性,提供直接且简化的API交互。

您可以在可用实现部分找到有关可用实现的更多信息,以及在聊天模型比较部分中的详细比较。

API概述

本节提供了Spring AI Chat Model API接口和相关类的指南。

ChatModel

这是ChatModel接口定义:

public interface ChatModel extends Model<Prompt, ChatResponse>, StreamingChatModel {

	default String call(String message) {...}

    @Override
	ChatResponse call(Prompt prompt);
}

带有String参数的call()方法简化了初始使用,避免了更复杂的PromptChatResponse类的复杂性。在实际应用程序中,更常见的是使用接受Prompt实例并返回ChatResponsecall()方法。

StreamingChatModel

这是StreamingChatModel接口定义:

public interface StreamingChatModel extends StreamingModel<Prompt, ChatResponse> {

    default Flux<String> stream(String message) {...}

    @Override
	Flux<ChatResponse> stream(Prompt prompt);
}

stream()方法接受类似于ChatModelStringPrompt参数,但使用响应式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() {...}
    // 构造函数和实用方法省略
}
Message

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模型可以处理的消息类别:

Spring AI Message API

聊天完成端点基于对话角色区分消息类别,由MessageType有效映射。

例如,OpenAI识别不同对话角色的消息类别,如systemuserfunctionassistant

虽然术语MessageType可能暗示特定的消息格式,但在这种情况下,它有效地指定了消息在对话中扮演的角色。

对于不使用特定角色的AI模型,UserMessage实现充当标准类别,通常代表用户生成的查询或指令。要理解PromptMessage的实际应用及其关系,特别是在这些角色或消息类别的上下文中,请参阅提示部分中的详细解释。

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聊天完成模型有自己的选项,如logitBiasseeduser

这是一个强大的功能,允许开发者在启动应用程序时使用模型特定选项,然后在运行时使用Prompt请求覆盖它们。

Spring AI提供了一个复杂的系统来配置和使用聊天模型。它允许在启动时设置默认配置,同时提供在每个请求基础上覆盖这些设置的灵活性。这种方法使开发者能够轻松使用不同的AI模型并根据需要调整参数,所有这些都在Spring AI框架提供的一致接口内。

以下流程图说明了Spring AI如何处理聊天模型的配置和执行,结合启动和运行时选项:

Chat Options Flow

  1. 启动配置 - ChatModel/StreamingChatModel使用"启动时"聊天选项进行初始化。这些选项在ChatModel初始化期间设置,旨在提供默认配置。

  2. 运行时配置 - 对于每个请求,Prompt可以包含运行时聊天选项:这些可以覆盖启动选项。

  3. 选项合并过程 - "合并选项"步骤结合启动和运行时选项。如果提供了运行时选项,它们优先于启动选项。

  4. 输入处理 - "转换输入"步骤将输入指令转换为原生、模型特定的格式。

  5. 输出处理 - "转换输出"步骤将模型的响应转换为标准化的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() {...}
    // 其他方法省略
}

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() {...}
    // 其他方法省略
}

可用实现

此图说明了统一接口ChatModelStreamingChatModel用于与来自不同提供商的各种AI聊天模型交互,允许轻松集成和切换不同的AI服务,同时为客户端应用程序保持一致的API。

Spring AI Chat Completions Clients

提示:聊天模型比较部分中找到可用聊天模型的详细比较。

Chat Model API

Spring AI聊天模型API构建在Spring AI 通用模型API之上,提供聊天特定的抽象和实现。这允许轻松集成和切换不同的AI服务,同时为客户端应用程序保持一致的API。以下类图说明了Spring AI聊天模型API的主要类和接口。

Spring AI Chat API