【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 的主要类和接口。

相关推荐
“AI国潮设计-小江”3 分钟前
《【AIGC实战】Python+SDXL批量生成“英歌舞树莓香草布丁”IP,附保持角色一致性的代码逻辑》
开发语言·人工智能·python·prompt·aigc
const_qiu4 分钟前
第四章 06:4.6 统一入口 —— analyze() 能力收束
java·人工智能
硅谷秋水17 分钟前
DynaHarness 方法总结
人工智能·机器学习·语言模型·机器人
TK泰妞17 分钟前
跨境短视频真正难在哪?一套从找参考到批量测试的 AI 工作流
大数据·人工智能
m0_6220235320 分钟前
产业资本运作之金融结构重塑产业生态
人工智能·深度学习·金融
aichitang202423 分钟前
Meta Muse Spark Open:816B 巨型开放权重多模态 Agent 模型架构、部署实战与社区首测全解
大数据·人工智能·python·算法·ai·架构·spark
她的男孩29 分钟前
JAR 全对仍 checksum mismatch:Forge Admin 把 Flyway 从 filesystem 改成 classpath
java·数据库·spring boot
鬼手点金30 分钟前
如何选择模型
java·前端·人工智能·git·深度学习
xrgs_shz31 分钟前
基于OGD-Net的果园环境下蟠桃生长期检测
人工智能·yolo·目标检测·计算机视觉
我叫孙一鸣-专注电子元器件34 分钟前
快反镜的镜面偏转角,为什么不等于光束偏转角?
人工智能·智能硬件·半导体·压电驱动器