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

相关推荐
武子康6 分钟前
大数据-212 数据挖掘 机器学习理论 - 无监督学习算法 KMeans 基本原理 簇内误差平方和
大数据·人工智能·学习·算法·机器学习·数据挖掘
deephub7 分钟前
Tokenformer:基于参数标记化的高效可扩展Transformer架构
人工智能·python·深度学习·架构·transformer
Q81375746012 分钟前
数据挖掘在金融交易中的应用:民锋科技的智能化布局
人工智能·科技·数据挖掘
qzhqbb16 分钟前
语言模型的采样方法
人工智能·语言模型·自然语言处理
qzhqbb19 分钟前
基于 Transformer 的语言模型
人工智能·语言模型·自然语言处理·transformer
___Dream20 分钟前
【CTFN】基于耦合翻译融合网络的多模态情感分析的层次学习
人工智能·深度学习·机器学习·transformer·人机交互
极客代码27 分钟前
【Python TensorFlow】入门到精通
开发语言·人工智能·python·深度学习·tensorflow
义小深29 分钟前
TensorFlow|咖啡豆识别
人工智能·python·tensorflow
代码之光_198034 分钟前
保障性住房管理:SpringBoot技术优势分析
java·spring boot·后端
ajsbxi40 分钟前
苍穹外卖学习记录
java·笔记·后端·学习·nginx·spring·servlet