【Spring AI】01. 聊天 API

文章目录

聊天 API


聊天 API 允许开发人员将 AI 驱动的聊天功能整合到其应用程序中。它利用预训练的语言模型,如 GPT(生成式预训练转换器),以自然语言根据用户输入生成类似人类的响应。

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

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

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

API 概览


本节提供 Spring AI 聊天 API 接口和相关类的指南。

ChatClient

以下是 ChatClient 接口定义:

java 复制代码
public interface ChatClient extends ModelClient<Prompt, ChatResponse> {

	default String call(String message) {// implementation omitted
	}

    @Override
	ChatResponse call(Prompt prompt);
}

带有 String 参数 default call 方法简化了使用,避免了 Prompt 类的 ChatResponse 复杂性。在实际应用程序中,更常见的是使用复写的 call 方法,接受 Prompt 实例并返回 ChatResponse

StreamingChatClient

下面是 StreamingChatClient 接口定义:

java 复制代码
public interface StreamingChatClient extends StreamingModelClient<Prompt, ChatResponse> {
    @Override
	Flux<ChatResponse> stream(Prompt prompt);
}

该stream方法接受类似于ChatClient的Prompt请求,但它使用 Reactive Flux API 流式传输响应。

Prompt

Prompt 是 ModelRequest 接口的实现对象,包含 modelOptions 和 messages。下面的列表显示了 Prompt 类的截断版本,不包括构造函数和其他实用工具方法:

java 复制代码
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 接口封装了 获取文本消息、属性集合 Map对象 和 消息类型MessageType 的方法 。接口定义如下:

java 复制代码
public interface Message {

   String getContent();

   Map<String, Object> getProperties();

   MessageType getMessageType();
}

该 Message 接口具有各种实现,这些实现对应处理不同消息类别的 AI 模型。一些模型,如 OpenAI 的聊天,根据对话角色区分消息类别,有效对 MessageType 做了相应的映射。

例如,OpenAI 可识别不同对话角色的消息类别,例如system、user或functionassistant。

虽然MessageType可能意味着特定的消息格式,但在这种情况下,它有效地指定了消息在对话中扮演的角色。

对于不使用特定角色的 AI 模型,UserMessage是标准实现,通常表示用户生成的查询或指令。若要了解Prompt和Message之间的实际应用和关系,尤其是在这些角色或消息类别的上下文中,请参阅 Prompts 章节中的详细说明。

ChatOptions

表示可以传递给 AI 模型的 Chat 配置项。该 ChatOptions 类是 ModelOptions 子类,用于定义可传递给 AI 模型的几个可移植配置项。该 ChatOptions 类定义如下:

java 复制代码
public interface ChatOptions extends ModelOptions {

	Float getTemperature();
	void setTemperature(Float temperature);
	Float getTopP();
	void setTopP(Float topP);
	Integer getTopK();
	void setTopK(Integer topK);
}

此外,每个特定于模型的 ChatClient/StreamingChatClient 实现都可以有自己的配置项,这些配置项可以传递给 AI 模型。例如,OpenAI 聊天模型有自己的配置项,如presencePenalty、frequencyPenalty等bestOf。

有一个强大的功能是允许开发人员在启动应用程序时初始化特定于模型的配置项,然后在运行时使用 Prompt 的配置项覆盖初始化的内容:

ChatResponse

ChatResponse 的结构如下:

java 复制代码
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

Generation 类是 ModelResult 接口的实现,输出 助手消息 和 相关元数据:

java 复制代码
public class Generation implements ModelResult<AssistantMessage> {

	private AssistantMessage assistantMessage;
	private ChatGenerationMetadata chatGenerationMetadata;

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

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

    // other methods omitted
}

Available Implementations

下图表示ChatClient和StreamingChatClient的实现类:

Chat Model API

Spring AI Chat Completion API 建立在 Spring AI Generic Model API 之上,提供 Chat 的抽象和实现。以下类图说明了 Spring AI Chat Completion API 的主要类和接口。

相关推荐
跨境摸鱼1 天前
AI 赋能!亚马逊竞争情报的“重构式”升级,破解竞品迷局
人工智能·矩阵·重构·跨境电商·亚马逊·防关联
fanruitian1 天前
Springboot 示例模版
java·spring boot·后端
QQ_4376643141 天前
常见题目及答案
android·java·开发语言
老华带你飞1 天前
茶叶商城|基于SprinBoot+vue的茶叶商城系统(源码+数据库+文档)
java·前端·javascript·数据库·vue.js·spring boot
AI即插即用1 天前
即插即用系列 | CVPR 2024 ABC-Attention:基于双线性相关注意力的红外小目标检测
图像处理·人工智能·深度学习·目标检测·计算机视觉·cnn·视觉检测
AI即插即用1 天前
即插即用系列 | WACV 2025 SvANet:专为极小目标(<1%)设计的尺度变化注意力网络,医学图像分割新SOTA!
人工智能·深度学习·神经网络·目标检测·计算机视觉·cnn·视觉检测
我超级能吃的1 天前
HashMap
java
秋邱1 天前
AR + 离线 AI 实战:YOLOv9+TensorFlow Lite 实现移动端垃圾分类识别
开发语言·前端·数据库·人工智能·python·html
Dolphin_Home1 天前
深度解析:SpringBoot 静态类调用 Bean 的底层逻辑与最优实践
java·spring boot·后端