收藏本站,收获最前沿的人工智能与编程资讯!!

Spring AI 聊天模型 API ChatModel

技术文档 20℃ 0

聊天模型 API

聊天模型 API 为开发者提供了将 AI 驱动的对话补全能力集成到应用程序中的能力。它利用预训练语言模型(如生成式预训练 Transformer,即 GPT),对用户输入的自然语言生成类人化的响应。

该 API 的工作方式通常是:向 AI 模型发送提示词或不完整的对话内容,模型基于其训练数据和对自然语言模式的理解,生成对话的补全内容或续文。生成完成的响应会返回给应用程序,应用程序可将其展示给用户,或用于后续业务处理。

Spring AI 聊天模型 API 被设计为一个简洁、可移植的接口,用于对接各类 AI 模型,让开发者只需极少的代码修改即可在不同模型之间切换。这一设计符合 Spring 模块化、可替换的核心设计理念。

借助 Prompt(输入封装)和 ChatResponse(输出处理)等配套类,聊天模型 API 统一了与 AI 模型的交互方式。它屏蔽了请求构建与响应解析的复杂性,提供了直接、简化的 API 交互体验。

你可以在「可用实现」章节查看更多可用实现,并在「聊天模型对比」章节查看详细对比。

API 概览

本节介绍 Spring AI 聊天模型 API 接口及相关类。

ChatModel

以下是 ChatModel 接口定义:

public interface ChatModel extends Model, StreamingChatModel {

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

    @Override
	ChatResponse call(Prompt prompt);
}

接收字符串参数的 call() 方法简化了初始使用,无需使用复杂的 PromptChatResponse 类。在实际应用中,更常用的是接收 Prompt 实例并返回 ChatResponsecall() 方法。

StreamingChatModel

以下是 StreamingChatModel 接口定义:

public interface StreamingChatModel extends StreamingModel{

    default Fluxstream(String message) {...}

    @Override
	Fluxstream(Prompt prompt);
}

stream() 方法与 ChatModel 类似,可接收字符串或 Prompt 参数,但它基于响应式 Flux API 流式返回响应。

Prompt

Prompt 是一种模型请求,封装了消息对象列表与可选的模型请求参数。以下是精简版 Prompt 类(省略构造器和工具方法):

public class Prompt implements ModelRequest> {

    private final Listmessages;

    private ChatOptions modelOptions;

	@Override
	public ChatOptions getOptions() {...}

	@Override
	public ListgetInstructions() {...}

    // 构造器和工具方法省略
}

Message

Message 接口封装了提示词文本内容、元数据属性集合,以及消息类型(MessageType)。

接口定义如下:

public interface Content {

	String getText();

	MapgetMetadata();
}

public interface Message extends Content {

	MessageType getMessageType();
}

多模态消息类型还会实现 MediaContent 接口,提供媒体内容对象列表:

public interface MediaContent extends Content {

	CollectiongetMedia();

}

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

对话补全接口会根据对话角色区分消息类别,这些角色由 MessageType 有效映射。

例如,OpenAI 可识别系统、用户、函数、助手等不同对话角色的消息类别。

尽管 MessageType 名称暗示特定消息格式,但在本上下文中,它实际表示消息在对话中承担的**角色**。

对于不使用特定角色的 AI 模型,UserMessage 实现作为标准类别,通常代表用户生成的提问或指令。如需了解 PromptMessage 在角色/消息类别场景下的实际应用与关系,可查看提示词章节的详细说明。

ChatOptions

表示可传递给 AI 模型的配置参数。ChatOptionsModelOptions 的子类,用于定义可跨模型使用的通用参数。类定义如下:

public interface ChatOptions extends ModelOptions {

	String getModel();
	Float getFrequencyPenalty();
	Integer getMaxTokens();
	Float getPresencePenalty();
	ListgetStopSequences();
	Float getTemperature();
	Integer getTopK();
	Float getTopP();
	ChatOptions copy();

}

此外,每个模型专属的 ChatModel/StreamingChatModel 实现都可拥有自身的专属参数,例如 OpenAI 对话补全模型支持 logitBiasseeduser 等参数。

这是一项强大特性:开发者可在应用启动时使用模型专属参数,并在运行时通过 Prompt 请求覆盖这些参数。

Spring AI 提供了完善的聊天模型配置体系:支持在启动时设置默认配置,同时允许按请求灵活覆盖。这让开发者能够轻松对接不同 AI 模型,并按需调整参数,全程使用 Spring AI 提供的统一接口。

下图展示了 Spring AI 如何结合启动配置与运行时参数,处理聊天模型的配置与执行:

  1. 启动配置ChatModel/StreamingChatModel 使用「启动时」聊天参数初始化,作为默认配置。

  2. 运行时配置:每个请求的 Prompt 可携带运行时聊天参数,用于覆盖启动参数。

  3. 参数合并:合并启动参数与运行时参数,运行时参数优先级更高。

  4. 输入处理:将输入指令转换为模型原生格式。

  5. 输出处理:将模型响应转换为标准 ChatResponse 格式。

启动参数与运行时参数分离,既支持全局配置,也支持单请求精细化调整。

ChatResponse

ChatResponse 类结构如下:

public class ChatResponse implements ModelResponse{

    private final ChatResponseMetadata chatResponseMetadata;
	private final Listgenerations;

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

    @Override
	public ListgetResults() {...}

    // 其他方法省略
}

ChatResponse 存储 AI 模型的输出,每个 Generation 实例对应单次提示词生成的一个结果(支持多结果返回)。

ChatResponse 还携带 AI 模型响应的元数据(ChatResponseMetadata)。

Generation

Generation 类继承自 ModelResult,表示模型输出(助手消息)及相关元数据:

public class Generation implements ModelResult{

	private final AssistantMessage assistantMessage;
	private ChatGenerationMetadata chatGenerationMetadata;

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

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

    // 其他方法省略
}

相关推荐