此版本仍在开发中,尚未被视为稳定版。为了获取最新的快照版本,请使用Spring AI 1.1.3spring-doc.cadn.net.cn

聊天模型API

聊天模型API为开发者提供了将AI驱动的聊天补全功能集成到其应用程序中的能力。它利用预先训练好的语言模型,如GPT(生成式预训练变换器),来生成类似人类的响应,以应对用户的自然语言输入。spring-doc.cadn.net.cn

API 的工作原理通常是向AI模型发送一个提示或部分对话内容,该模型根据其训练数据和对自然语言模式的理解,生成对话的完成部分或延续。完成后的内容响应会返回给应用程序,应用程序可以将它展示给用户或用于进一步处理。spring-doc.cadn.net.cn

数字Spring AI Chat Model API旨在成为一个简单且可移植的接口,用于与各种AI模型交互,使得开发者能够以最少的代码改动在不同模型之间切换。 此设计遵循了Spring关于模块化和可互换性的理念。spring-doc.cadn.net.cn

同时,在Prompt类(用于输入封装)和ChatResponse类(用于输出处理)等辅助类的帮助下,Chat Model API统一了与AI模型的通信。它管理了请求准备和响应解析的复杂性,提供了直接且简化的API交互体验。spring-doc.cadn.net.cn

您可以在可用实现部分找到更多可用实现,并在聊天模型对比部分查看详细对比。spring-doc.cadn.net.cn

API概述

本节提供了Spring AI聊天模型API接口及关联类的使用指南。spring-doc.cadn.net.cn

聊天模型

这里是ChatModel接口定义:spring-doc.cadn.net.cn

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

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

    @Override
	ChatResponse call(Prompt prompt);
}

call() 方法带有一个 String 参数,简化了初步使用,避免了更复杂的 PromptChatResponse 类所带来的复杂性。 在实际应用中,更常见的是使用接受 Prompt 实例并返回 ChatResponsecall() 方法。spring-doc.cadn.net.cn

流式聊天模型

public interface StreamingChatModel extends StreamingModel<Prompt, ChatResponse> {

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

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

stream() 方法接受一个类似于 ChatModel 但使用响应式 Flux API 流式传输响应的 StringPrompt 参数。spring-doc.cadn.net.cn

提示

提示Prompt是一个ModelRequest,它封装了一个Message对象列表和可选的模型请求选项。 以下列表显示了Prompt类的截断版本,不包括构造函数和其他实用方法:spring-doc.cadn.net.cn

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 接口封装了一个Prompt文本内容、一组元数据属性及一个称为MessageType的分类。spring-doc.cadn.net.cn

接口定义如下:spring-doc.cadn.net.cn

public interface Content {

	String getText();

	Map<String, Object> getMetadata();
}

public interface Message extends Content {

	MessageType getMessageType();
}

多模态消息类型也实现了MediaContent接口,提供了Media内容对象的列表。spring-doc.cadn.net.cn

public interface MediaContent extends Content {

	Collection<Media> getMedia();

}

Message 接口有多种实现,分别对应AI模型可以处理的消息类别:spring-doc.cadn.net.cn

Spring AI Message API

聊天补全端点,根据对话角色区分消息类别,通过MessageType有效地映射。spring-doc.cadn.net.cn

例如,OpenAI为不同的对话角色识别消息类别,如systemuserfunctionassistantspring-doc.cadn.net.cn

虽然术语MessageType可能暗示了一种特定的消息格式,但在本上下文中,它实际上是指定了消息在对话中所扮演的角色。spring-doc.cadn.net.cn

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

聊天选项

表示可以传递给AI模型的选项。ChatOptions类是ModelOptions类的子类,用于定义可传递给AI模型的一些便携式选项。 ChatOptions类定义如下:spring-doc.cadn.net.cn

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模型就有自己的选项,如logitBiasseeduserspring-doc.cadn.net.cn

这是一个强大的功能,允许开发者在启动应用程序时使用模型特定的选项,并且随后可以通过Prompt请求在运行时覆盖它们。spring-doc.cadn.net.cn

Spring AI 为配置和使用聊天模型提供了一个精密的系统。 它允许在启动时设置默认配置,同时也提供了根据每个请求覆盖这些设置的灵活性。 这种方法使开发者能够轻松地与不同的AI模型合作,并根据需要调整参数,所有这一切都在Spring AI框架提供的统一界面中完成。spring-doc.cadn.net.cn

以下流程图展示了Spring AI如何处理聊天模型的配置与执行,它结合了启动时和运行时的选项:spring-doc.cadn.net.cn

chat options flow
  1. 启动配置 - ChatModel/StreamingChatModel 在初始化时会采用“启动”聊天选项进行设置。 这些选项在 ChatModel 初始化过程中被设定,旨在提供默认的配置。spring-doc.cadn.net.cn

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

  3. 选项合并过程 - “合并选项”步骤将启动选项和运行时选项结合在一起。如果提供了运行时选项,它们将优先于启动选项。spring-doc.cadn.net.cn

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

  5. 输出处理 - "转换输出"步骤将模型的响应转换为标准化的ChatResponse格式。spring-doc.cadn.net.cn

启动选项和运行时选项的分离使得既能进行全局配置,也能对特定请求进行调整。spring-doc.cadn.net.cn

聊天响应

ChatResponse 类的结构如下:spring-doc.cadn.net.cn

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实例包含可能由单个提示产生的多个输出之一。spring-doc.cadn.net.cn

ChatResponse 类同样携带有关AI模型响应的 ChatResponseMetadata 元数据信息。spring-doc.cadn.net.cn

生成

最后,Generation 类继承自 ModelResult 以表示模型输出(助手消息)及相关的元数据:spring-doc.cadn.net.cn

public class Generation implements ModelResult<AssistantMessage> {

	private final AssistantMessage assistantMessage;
	private ChatGenerationMetadata chatGenerationMetadata;

	@Override
	public AssistantMessage getOutput() {...}

	@Override
	public ChatGenerationMetadata getMetadata() {...}

    // other methods omitted
}

可用的实现

此图展示了统一的接口,ChatModelStreamingChatModel,用于与来自不同提供商的各种AI聊天模型进行交互,允许在保持客户端应用API一致性的同时,轻松地集成和切换不同的AI服务。spring-doc.cadn.net.cn

spring ai chat completions clients
查找有关可用聊天模型的详细比较,请参阅聊天模型对比部分。

聊天模型API

Spring AI 聊天模型API构建于Spring AI Generic Model API之上,提供了特定于聊天的抽象与实现。 这使得在保持客户端应用API一致性的同时,轻松地集成和切换不同的AI服务成为可能。 下图类图展示了Spring AI聊天模型API的主要类和接口。spring-doc.cadn.net.cn

spring ai chat api