跳到主要内容

聊天模型 API

Deepseek 3.2 中英对照 Chat Models Chat Model API

Chat Model API 为开发者提供了将 AI 驱动的对话完成功能集成到其应用程序中的能力。它利用预训练的语言模型,例如 GPT(生成式预训练变换模型),来生成针对用户自然语言输入、类似于人类的响应。

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

Spring AI 聊天模型API旨在为与各类AI模型交互提供一个简单且可移植的接口,使开发者能够以最少的代码变更在不同模型间切换。这一设计理念与Spring的模块化和可互换性原则高度契合。

同样,借助辅助类,例如用于输入封装的 Prompt 以及用于输出处理的 ChatResponse,Chat Model API 统一了与 AI 模型的通信。它管理了请求准备和响应解析的复杂性,提供了直接且简化的 API 交互。

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

API 概览

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

聊天模型

以下是 ChatModel 接口的定义:

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

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

@Override
ChatResponse call(Prompt prompt);
}

call() 方法接受 String 参数的形式简化了初始使用,避免了更复杂的 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 是一个 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接口封装了一个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 消息 API

聊天补全端点,根据对话角色区分消息类别,通过MessageType进行有效映射。

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

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

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

聊天选项

表示可以传递给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 提供了一套用于配置和使用聊天模型的复杂系统。它允许在启动时设置默认配置,同时支持在每个请求的基础上灵活覆盖这些设置。这种方法使开发人员能够轻松地使用不同的人工智能模型并根据需要调整参数,这一切都在 Spring AI 框架提供的一致接口内完成。

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

聊天选项流程图

  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() {...}

// other methods omitted
}

ChatResponse 类用于存储 AI 模型的输出,其中每个 Generation 实例包含由单个提示可能产生的多个输出之一。

ChatResponse类还包含一个关于AI模型响应的元数据ChatResponseMetadata

生成

最后,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
}

可用实现

该图展示了统一接口ChatModelStreamingChatModel,它们用于与来自不同提供商的各种AI聊天模型进行交互,允许客户端应用轻松集成和切换不同的AI服务,同时保持一致的API。

spring ai 聊天补全客户端

提示

聊天模型对比 部分,您可以找到现有聊天模型的详细对比。

聊天模型 API

Spring AI Chat Model API 构建于 Spring AI Generic Model API 之上,提供了特定于聊天的抽象和实现。这使得集成和切换不同的 AI 服务变得容易,同时为客户端应用程序保持一致的 API。下面的类图展示了 Spring AI Chat Model API 的主要类和接口。

spring ai chat api

章节总结