此版本仍在开发中,尚未被视为稳定版本。最新的快照版本请使用 Spring AI 1.0.0-SNAPSHOT!spring-doc.cn

聊天模型 API

聊天模型 API 使开发人员能够将 AI 驱动的聊天完成功能集成到其应用程序中。它利用预先训练的语言模型,例如 GPT (Generative Pre-trained Transformer),以自然语言生成对用户输入的类似人类的响应。spring-doc.cn

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

它被设计成一个简单且可移植的界面,用于与各种 AI 模型交互,允许开发人员以最少的代码更改在不同模型之间切换。 这种设计与 Spring 的模块化和可互换性理念一致。Spring AI Chat Model APIspring-doc.cn

此外,在用于输入封装和输出处理等配套类的帮助下,聊天模型 API 统一了与 AI 模型的通信。 它管理请求准备和响应解析的复杂性,提供直接且简化的 API 交互。PromptChatResponsespring-doc.cn

您可以在 可用实施 部分找到有关可用实施的更多信息,并在 聊天模型比较 部分找到详细比较。spring-doc.cn

API 概述

本节提供了 Spring AI Chat 模型 API 接口和相关类的指南。spring-doc.cn

聊天模型

以下是 ChatModel 接口定义:spring-doc.cn

public interface ChatModel extends Model<Prompt, ChatResponse> {

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

    @Override
	ChatResponse call(Prompt prompt);
}

带有参数的方法简化了初始使用,避免了更复杂的 and 类的复杂性。 在实际应用程序中,更常见的是使用采用实例并返回 .call()StringPromptChatResponsecall()PromptChatResponsespring-doc.cn

StreamingChatModel (流式聊天模型)

下面是 StreamingChatModel 接口定义:spring-doc.cn

public interface StreamingChatModel extends StreamingModel<Prompt, ChatResponse> {

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

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

该方法采用类似于 or 的参数,但它使用响应式 Flux API 对响应进行流式处理。stream()StringPromptChatModelspring-doc.cn

提示

Prompt 是一个封装了 Message 对象列表和可选模型请求选项的 Prompt。 下面的清单显示了该类的截断版本,不包括构造函数和其他 Util 方法:ModelRequestPromptspring-doc.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
}

消息

该接口封装了文本内容、元数据属性的集合和称为 .MessagePromptMessageTypespring-doc.cn

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

public interface Content {

	String getContent();

	Map<String, Object> getMetadata();
}

public interface Message extends Content {

	MessageType getMessageType();
}

多模式消息类型还实现了提供内容对象列表的接口。MediaContentMediaspring-doc.cn

public interface MediaContent extends Content {

	Collection<Media> getMedia();

}

该接口具有各种实现,这些实现对应于 AI 模型可以处理的消息类别:Messagespring-doc.cn

Spring AI 消息 API

聊天完成终端节点根据对话角色区分消息类别,由 有效映射。MessageTypespring-doc.cn

例如,OpenAI 识别不同对话角色的消息类别,例如 、 、 或 。systemuserfunctionassistantspring-doc.cn

虽然该术语可能意味着特定的消息格式,但在此上下文中,它有效地指定了消息在对话中扮演的角色。MessageTypespring-doc.cn

对于不使用特定角色的 AI 模型,实施充当标准类别,通常表示用户生成的查询或说明。 要了解实际应用以及 和 之间的关系,尤其是在这些角色或消息类别的上下文中,请参阅 Prompts 部分中的详细说明。UserMessagePromptMessagespring-doc.cn

聊天选项

表示可以传递给 AI 模型的选项。该类是 的子类,用于定义一些可以传递给 AI 模型的可移植选项。 该类定义如下:ChatOptionsModelOptionsChatOptionsspring-doc.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 聊天完成模型有自己的选项,如 、 和 。logitBiasseeduserspring-doc.cn

这是一项强大的功能,允许开发人员在启动应用程序时使用特定于模型的选项,然后在运行时使用请求覆盖这些选项。Promptspring-doc.cn

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

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

聊天选项流程
  1. 启动配置 - ChatModel/StreamingChatModel 使用“启动”聊天选项进行初始化。 这些选项是在 ChatModel 初始化期间设置的,旨在提供默认配置。spring-doc.cn

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

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

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

  5. 输出处理 - “Convert Output” 步骤将模型的响应转换为标准化格式。ChatResponsespring-doc.cn

启动和运行时选项的分离允许全局配置和特定于请求的调整。spring-doc.cn

聊天响应

该类的结构如下:ChatResponsespring-doc.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 模型的输出,每个实例都包含单个提示可能产生的多个输出之一。Generationspring-doc.cn

该类还携带有关 AI 模型响应的元数据。ChatResponseChatResponseMetadataspring-doc.cn

最后,Generation 类从 扩展为 来表示模型输出(助手消息)和相关元数据:ModelResultspring-doc.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
}

可用的实现

此图说明了统一接口,并且 用于与来自不同提供商的各种 AI 聊天模型进行交互,从而允许在不同的 AI 服务之间轻松集成和切换,同时为客户端应用程序保持一致的 API。ChatModelStreamingChatModelspring-doc.cn

Spring AI Chat 完成客户端
聊天模型比较 部分找到可用聊天模型的详细比较。

聊天模型 API

Spring AI Chat 模型 API 构建在 Spring AI 之上,提供特定于 Chat 的抽象和实现。 这允许在不同 AI 服务之间轻松集成和切换,同时为客户端应用程序保持一致的 API。 下面的类图说明了 Spring AI Chat 模型 API 的主要类和接口。Generic Model APIspring-doc.cn

Spring AI 聊天 API