聊天模型 API

内容

聊天模型 API 为开发者提供了将 AI 驱动的聊天完成能力集成到其应用程序中的能力。它利用预训练的语言模型,如 GPT(生成式预训练变换器),以生成对用户输入的自然语言的人类般的响应。

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

Spring AI Chat Model API 旨在提供一个简单且可移植的接口,以便与各种 AI 模型 进行交互,使开发者能够在不同模型之间进行切换,代码更改最小化。这一设计与 Spring 的模块化和可互换性的理念相一致。

此外,借助于像 Prompt 这样的伴随类用于输入封装,以及 ChatResponse 用于输出处理,聊天模型 API 统一了与 AI 模型的通信。它管理请求准备和响应解析的复杂性,提供了直接和简化的 API 交互。

本节提供了 Spring AI 聊天模型 API 接口及相关类的指南。

这里是聊天模型接口定义:

public interface ChatModel extends Model<Prompt, ChatResponse> {
 默认字符串 call(字符串 消息) {...}
    @Override
 	聊天响应 调用(提示 提示);
}

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

这里是流式聊天模型接口定义:

public interface StreamingChatModel extends StreamingModel<Prompt, ChatResponse> {
    默认 Flux<String> stream(String message) {...}
    @Override
 	Flux<ChatResponse> stream(Prompt prompt);
}

stream() 方法接受一个类似于 ChatModelStringPrompt 参数,但它使用反应式 Flux API 流式传输响应。

Prompt 是一个 ModelRequest,封装了一系列 Message 对象和可选的模型请求选项。以下列表显示了 Prompt 类的简化版本,省略了构造函数和其他实用方法:

public class Prompt implements ModelRequest<List<Message>> {
    private final List<Message> messages;
    private ChatOptions 模型选项;
 @Override
 public ChatOptions getOptions() {...}
 @Override
 public List<Message> getInstructions() {...}
    // 构造函数和工具方法省略
}

Message 接口封装了 Prompt 文本内容、一组元数据属性,以及称为 MessageType 的分类。

接口定义如下:

public interface 内容 {
 String getText();
 Map<String, Object> 获取元数据();
}
public interface 消息 extends 内容 {
 获取消息类型();
}

多模态消息类型还实现了 MediaContent 接口,提供了一系列 Media 内容对象。

public interface 媒体内容 extends 内容 {
 集合<媒体> 获取媒体();
}

Message 接口有多种实现,分别对应于 AI 模型可以处理的消息类别:

Spring AI Message API

聊天完成端点,根据对话角色区分消息类别,使用 MessageType 有效映射。

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

虽然术语 MessageType 可能暗示特定的消息格式,但在此上下文中,它实际上指定了消息在对话中所扮演的角色。

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

表示可以传递给 AI 模型的选项。ChatOptions 类是 ModelOptions 的子类,用于定义可以传递给 AI 模型的少量可移植选项。ChatOptions 类定义如下:

public interface 聊天选项 extends 模型选项 {
 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 初始化时设置,旨在提供默认配置。
  1. 运行时配置 - 对于每个请求,提示可以包含运行时聊天选项:这些可以覆盖启动选项。
  1. 选项合并过程 - “合并选项”步骤结合了启动选项和运行时选项。如果提供了运行时选项,则它们优先于启动选项。
  1. 输入处理 - "转换输入"步骤将输入指令转换为本地的、特定于模型的格式。
  1. 输出处理 - “转换输出”步骤将模型的响应转换为标准化的 ChatResponse 格式。

启动和运行时选项的分离允许进行全局配置和请求特定的调整。

ChatResponse 类的结构如下:

public class ChatResponse implements ModelResponse<Generation> {
    private final ChatResponseMetadata 聊天响应元数据;
 private final List<Generation> 生成列表;
 @Override
 public ChatResponseMetadata getMetadata() {...}
    @Override
 	public List<Generation> getResults() {...}
    // 其他方法省略
}

The 聊天响应 class holds the AI Model’s output, with each Generation instance containing one of potentially multiple outputs resulting from a single prompt.

ChatResponse 类还携带有关 AI 模型响应的 ChatResponseMetadata 元数据。

最后,生成 类继承自 ModelResult,用于表示模型输出(助手消息)及相关元数据:

public class Generation implements ModelResult<AssistantMessage> {
	private final 助手消息 assistantMessage;
	private 聊天生成元数据 chatGenerationMetadata;
 @Override
 public AssistantMessage getOutput() {...}
 @Override
 public ChatGenerationMetadata getMetadata() {...}
    // 其他方法省略
}

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

spring ai chat api

总结
Spring AI Chat Model API为开发者提供了将AI聊天功能集成到应用程序中的能力,利用预训练的语言模型(如GPT)生成自然语言的响应。该API通过发送提示或部分对话给AI模型,生成对话的延续,并将结果返回给应用程序。Spring AI Chat Model API设计为简单且可移植的接口,允许开发者在不同模型之间轻松切换。它通过`Prompt`类封装输入和`ChatResponse`类处理输出,简化了与AI模型的通信。API支持多种消息类型,区分不同的对话角色,如用户和助手。开发者可以在启动时设置默认配置,并在每次请求时覆盖这些设置,提供灵活性。`ChatResponse`类持有AI模型的输出,包含多个生成结果。整体而言,Spring AI Chat Model API提供了一种一致的方式来集成和使用不同的AI服务,简化了开发过程。