Chat Completion API为开发人员提供了将AI驱动的聊天完成能力集成到他们的应用程序中的能力。它利用了预训练的语言模型,比如GPT(生成预训练变换器),以生成对用户自然语言输入的类人响应。

API通常通过将提示或部分对话发送给人工智能模型来工作,然后该模型根据其训练数据和对自然语言模式的理解生成对话的补全或继续。完成的响应随后返回给应用程序,应用程序可以将其呈现给用户或用于进一步处理。

Spring AI Chat Completion API`旨在为与各种AI 模型的交互提供一个简单且便携的接口,让开发人员能够在不同模型之间切换,只需进行最小的代码更改。这种设计与Spring的模块化和可互换性的哲学是一致的。

借助于`Prompt`这样的伴生类来封装输入,并且通过`ChatResponse`来处理输出,聊天完成API统一了与AI模型的通讯。它管理了请求准备和响应解析的复杂性,提供了一种直接且简化的API交互方式。

API 概览

这一部分提供了Spring AI Chat Completion API接口及相关类的指南。

聊天客户端

这是链接:https://github.com/spring-projects/spring-ai/blob/main/spring-ai-core/src/main/java/org/springframework/ai/chat/ChatClient.java [ChatClient] 接口定义:

public interface ChatClient extends ModelClient<Prompt, ChatResponse> {

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

java
@Override
ChatResponse call(Prompt prompt);
}

call` 方法带有一个 String 参数,简化了初次使用,避免了更复杂的 PromptChatResponse 类的复杂性。在实际应用中,通常更常用的是一个带有 Prompt 实例参数,并且返回 ChatResponsecall 方法。

流式聊天客户端

这是链接:https://github.com/spring-projects/spring-ai/blob/main/spring-ai-core/src/main/java/org/springframework/ai/chat/StreamingChatClient.java [StreamingChatClient] 接口定义:

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

stream` 方法采用类似于 ChatClientPrompt 请求,但它通过反应式的 Flux API 来流式传输响应。

提示

The Prompt is a ModelRequest that encapsulates a list of Message objects and optional model request options. The following listing shows a truncated version of the Prompt class, excluding constructors and other utility methods:

public class Prompt implements ModelRequest<List<Message>> {

private final List<Message> messages;

private ChatOptions modelOptions;

@Override
	public ChatOptions getOptions() {..}

java
@Override
public List<Message> getInstructions() {...}

// 构造方法和实用程序方法省略
}

信息

Message`接口封装了一条文本消息、一组作为`Map`的属性,以及被称为`MessageType`的分类。该接口定义如下:

public interface Message {

String getContent();


Map<String, Object> getProperties();

MessageType getMessageType();
}

Message`接口有各种各样的实现,这些实现对应于人工智能模型可以处理的消息类别。一些模型,如OpenAI的聊天完成端点,根据会话角色区分消息类别,有效地由`MessageType`进行映射。

例如,OpenAI识别用于不同会话角色的消息类别,例如`system`(系统)、user(用户)、function(功能)或`assistant`(助手)。

虽然术语`MessageType`可能意味着一种特定的消息格式,在这个上下文中它有效地指定了消息在对话中所扮演的角色。

对于不使用特定角色的AI模型来说,`UserMessage`实现充当一个标准类别,通常代表用户生成的查询或指令。要理解其实际应用以及`Prompt`和`Message`之间的关系,特别是在这些角色或消息类别的上下文中,请参考Prompts部分的详细解释。

聊天选项

表示可以传递给AI模型的选项。“ChatOptions”类是“ModelOptions”类的子类,用于定义一些可以传递给AI模型的便携式选项。“ChatOptions”类定义如下:

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`等。

这是一个强大的特性,允许开发者在启动应用程序时使用特定于模型的选项,然后在运行时使用提示请求来覆盖它们:

chat options flow

聊天响应

ChatResponse` 类的结构如下:

public class ChatResponse implements ModelResponse<Generation> {

java
private final ChatResponseMetadata chatResponseMetadata;
private final List<Generation> generations;

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

    @Override
	public List<Generation> getResults() {...}

    // other methods omitted
}

[ChatResponse] 类保存了 AI 模型的输出,其中每个 Generation 实例包含了可能由单个提示产生的多个输出中的一个。

ChatResponse` 类还携带了有关 AI 模型响应的 ChatResponseMetadata 元数据。

代际

最后,Generation 类从 ModelResult 继承,用以表示输出助手信息响应及与此结果相关的元数据:https://github.com/spring-projects/spring-ai/blob/main/spring-ai-core/src/main/java/org/springframework/ai/chat/Generation.java[Generation]。

public class Generation implements ModelResult<AssistantMessage> {

private AssistantMessage assistantMessage;
private ChatGenerationMetadata chatGenerationMetadata;

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

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

    // other methods omitted
}

可用实现

为以下模型提供者提供了`ChatClient`和`StreamingChatClient`实现:

spring ai chat completions clients

聊天模型API

Spring AI 聊天完成 API 是基于 Spring AI 通用模型 API 构建的,提供了特定于聊天的抽象和实现。下面的类图阐释了 Spring AI 聊天完成 API 的主要类和接口。

春天 人工智能聊天接口