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

相关推荐
9呀2 小时前
VS Code Codex 多窗口使用与补丁记录
人工智能
七仔啊2 小时前
安防通行人脸抓拍识别
人工智能
Wang's Blog2 小时前
Java 项目实战: 外卖平台-删除分类的关联校验与自定义业务异常
java·服务器·项目开发
hai_android3 小时前
Kotlin / Android 常用函数使用示例手册
android·java·kotlin
guoran_shini3 小时前
SVD矩阵分解
人工智能
MayBaymax3 小时前
MongoDB 索引与事务
java·数据库·mongodb
烟锁池塘柳03 小时前
【Agent】如何从大模型构建真正的 Agent?以 Claude Code 为例,理解能构建智能体的真正的 Harness 工程
人工智能·agent
vx-程序开发3 小时前
【计算机毕设】django校园跑腿服务系统83141
java·数据库·vue.js·spring boot·spring·elasticsearch·django
qq_199886873 小时前
第6板块 第2节 CUDA运行时API与驱动API 核心笔记
c++·人工智能·gpu算力
m0_734571763 小时前
深入理解人工智能 最核心的算法模块
人工智能