Chat Model API

Chat Model API 使开发人员能够将人工智能支持的聊天完成功能集成到他们的应用程序中。它利用预先训练的语言模型,例如 GPT(生成式预训练变压器),以自然语言对用户输入生成类似人类的响应。

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

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

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

API 概述

本节提供 Spring AI Chat Completion API 接口和关联类的指南。

ChatModel

以下是 ChatModel 接口的定义:

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

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

    @Override
    ChatResponse call(Prompt prompt);
}
  • 带有 String 参数的 call ()方法简化了初始使用,避免了更复杂的 PromptChatResponse 类的复杂性。在现实应用中,使用 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 参数,但它使用响应式 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();
}

多模态 MessageType 还实现了 MediaContent 接口,提供媒体内容对象的列表。

public interface MediaContent extends Content {

    Collection<Media> getMedia();

}

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

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

例如,OpenAI 识别不同会话角色 (如系统、用户、功能或助手) 的消息类别。

虽然术语 MessageType 可能暗示一种特定的消息格式,但在这种情况下,它实际上指的是消息在对话中所扮演的角色。

对于不使用特定角色的 AI 模型,UserMessage 实现作为一个标准类别,通常代表用户生成的查询或指令。要理解实际应用以及 Prompt 和 Message 之间的关系,特别是在这些角色或 Message 类别的上下文中,请参阅 Prompts 部分的详细解释。

ChatOptions

表示可以传递给 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 Chat Completion 模型有自己的选项,如 logitBias、seed 和 user。

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

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

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

  1. 启动配置 ——ChatModel/StreamingChatModel 使用 “启动” Chat 选项进行初始化。这些选项在 ChatModel 初始化期间设置,旨在提供默认配置。
  2. 运行时配置 —— 对于每个请求,提示符可以包含一个运行时聊天选项:这些选项可以覆盖启动选项。
  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() {...}

    // other methods omitted
}

ChatResponse 类包含 AI 模型的输出,每个 Generation 实例都包含单个提示符可能产生的多个输出中的一个。

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

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
}

可用的实现

该图说明了统一的接口 ChatModel 和 StreamingChatModel 用于与来自不同提供商的各种 AI 聊天模型进行交互,实现了在不同 AI 服务之间的轻松集成和切换,同时为客户端应用程序保持一致的 API。

Chat Model API

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

作者:Jeebiz  创建时间:2025-08-03 11:42
最后编辑:Jeebiz  更新时间:2025-08-08 00:47