聊天模型 API
Chat Model API 为开发者提供了将 AI 驱动的聊天完成功能集成到其应用程序中的能力。它利用了预训练的语言模型,例如 GPT(生成式预训练 Transformer),以生成与用户输入的自然语言类似的人类化响应。
API 通常通过向 AI 模型发送提示或部分对话来工作,然后模型根据其训练数据和对自然语言模式的理解生成完成或继续对话的内容。生成的响应随后返回给应用程序,应用程序可以将其呈现给用户或用于进一步处理。
Spring AI Chat Model API
旨在为与各种 AI 模型 交互提供一个简单且可移植的接口,使开发者能够以最少的代码更改在不同的模型之间进行切换。这一设计符合 Spring 的模块化和可互换性理念。
此外,借助如 Prompt
这样的输入封装类和 ChatResponse
这样的输出处理类,Chat Model API 统一了与 AI 模型的通信。它管理了请求准备和响应解析的复杂性,提供了直接且简化的 API 交互。
API 概览
本节提供了 Spring AI Chat Model API 接口及相关类的指南。
ChatModel
这里是 ChatModel 接口的定义:
public interface ChatModel extends Model<Prompt, ChatResponse> {
default String call(String message) {...}
@Override
ChatResponse call(Prompt prompt);
}
带有 String
参数的 call()
方法简化了初始使用,避免了更复杂的 Prompt
和 ChatResponse
类的复杂性。在实际应用中,更常见的是使用接受 Prompt
实例并返回 ChatResponse
的 call()
方法。
StreamingChatModel
以下是 StreamingChatModel 接口的定义:
public interface StreamingChatModel extends StreamingModel<Prompt, ChatResponse> {
default Flux<String> stream(String message) {...}
@Override
Flux<ChatResponse> stream(Prompt prompt);
}
stream()
方法接受一个与 ChatModel
类似的 String
或 Prompt
参数,但它使用响应式的 Flux API 来流式传输响应。
提示
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
接口封装了一个 Prompt
文本内容、一组元数据属性以及一个称为 MessageType
的分类。
接口定义如下:
public interface Content {
String getContent();
Map<String, Object> getMetadata();
}
public interface Message extends Content {
MessageType getMessageType();
}
多模态消息类型还实现了 MediaContent
接口,提供了 Media
内容对象的列表。
public interface MediaContent extends Content {
Collection<Media> getMedia();
}
Message
接口有多种实现,对应于 AI 模型可以处理的消息类别:
聊天完成端点,根据对话角色区分消息类别,通过 MessageType
有效映射。
例如,OpenAI 识别不同对话角色的消息类别,如 system
、user
、function
或 assistant
。
虽然术语 MessageType
可能暗示了特定的消息格式,但在上下文中,它实际上指定了消息在对话中所扮演的角色。
对于不使用特定角色的 AI 模型,UserMessage
实现作为一个标准类别,通常表示用户生成的查询或指令。要了解 Prompt
和 Message
之间的实际应用和关系,特别是在这些角色或消息类别的上下文中,请参阅 Prompts 部分中的详细解释。
聊天选项
表示可以传递给 AI 模型的选项。ChatOptions
类是 ModelOptions
的子类,用于定义一些可以传递给 AI 模型的可移植选项。ChatOptions
类的定义如下:
public interface ChatOptions extends ModelOptions {
String getModel();
Float getFrequencyPenalty();
Integer getMaxTokens();
Float getPresencePenalty();
List<String> getStopSequences();
Float getTemperature();
Integer getTopK();
Float getTopP();
ChatOptions copy();
}
此外,每个特定模型的 ChatModel
/StreamingChatModel
实现都可以有自己的一组选项,这些选项可以传递给 AI 模型。例如,OpenAI 的 Chat Completion 模型就有自己的选项,如 logitBias
、seed
和 user
。
这是一个强大的功能,允许开发人员在启动应用程序时使用特定于模型的选项,然后在运行时使用 Prompt
请求覆盖它们。
Spring AI 提供了一个复杂的系统来配置和使用聊天模型。它允许在启动时设置默认配置,同时也提供了在每个请求基础上覆盖这些设置的灵活性。这种方法使开发人员能够轻松地使用不同的 AI 模型,并根据需要调整参数,所有这些都在 Spring AI 框架提供的一致接口内完成。
以下流程图展示了 Spring AI 如何处理 Chat Models 的配置和执行,结合了启动时和运行时的选项:
-
启动配置 -
ChatModel
/StreamingChatModel
使用“启动”聊天选项进行初始化。这些选项在ChatModel
初始化时设置,旨在提供默认配置。 -
运行时配置 - 对于每个请求,
Prompt
可以包含运行时聊天选项:这些选项可以覆盖启动时的配置。 -
选项合并过程 - “合并选项”步骤将启动选项和运行时选项结合起来。如果提供了运行时选项,它们将优先于启动选项。
-
输入处理 - “转换输入”步骤将输入指令转换为特定于模型的原生格式。
-
输出处理 - “转换输出”步骤将模型的响应转换为标准化的
ChatResponse
格式。
启动选项与运行时选项的分离,允许进行全局配置和请求特定的调整。
聊天响应
ChatResponse
类的结构如下:
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
类还携带了一个 ChatResponseMetadata
元数据,用于描述 AI 模型的响应信息。
生成
最后,Generation 类继承自 ModelResult
,用于表示模型的输出(助手消息)以及相关的元数据:
public class Generation implements ModelResult<AssistantMessage> {
private final AssistantMessage assistantMessage;
private ChatGenerationMetadata chatGenerationMetadata;
@Override
public AssistantMessage getOutput() {...}
@Override
public ChatGenerationMetadata getMetadata() {...}
// other methods omitted
}
可用实现
该图展示了统一的接口 ChatModel
和 StreamingChatModel
,用于与来自不同提供商的多种 AI 聊天模型进行交互,从而在保持客户端应用程序 API 一致性的同时,轻松集成和切换不同的 AI 服务。
-
OpenAI 聊天补全 (支持流式传输、多模态和函数调用)
-
Microsoft Azure Open AI 聊天补全 (支持流式传输和函数调用)
-
Ollama 聊天补全 (支持流式传输、多模态和函数调用)
-
Hugging Face 聊天补全 (不支持流式传输)
-
Google Vertex AI Gemini 聊天补全 (支持流式传输、多模态和函数调用)
-
Mistral AI 聊天补全 (支持流式传输和函数调用)
-
Anthropic 聊天补全 (支持流式传输和函数调用)
在 聊天模型对比 部分,您可以找到可用聊天模型的详细对比。
聊天模型 API
Spring AI Chat Model API 构建在 Spring AI Generic Model API
之上,提供了特定于 Chat 的抽象和实现。这使得在保持客户端应用程序一致 API 的同时,可以轻松集成和切换不同的 AI 服务。下面的类图展示了 Spring AI Chat Model API 的主要类和接口。
章节摘要
📄️ 聊天模型对比
下表比较了 Spring AI 支持的各种 Chat 模型,详细列出了它们的功能:
📄️ Amazon Bedrock Converse
Amazon Bedrock Converse API 为对话式 AI 模型提供了一个统一的接口,具备增强的功能,包括函数/工具调用、多模态输入和流式响应。
🗃️ Anthropic 3
1 个项目
🗃️ Azure OpenAI
1 个项目
📄️ 深度搜索 AI
深度求索(DeepSeek)人工智能公司提供了开源的 DeepSeek V3 模型,该模型以其尖端的推理和问题解决能力而闻名。
🗃️ Google VertexAI
1 个项目
📄️ Groq 聊天
Groq 是一款基于 LPU™ 的极速 AI 推理引擎,支持多种 AI 模型,支持工具/函数调用,并提供了一个与 OpenAI API 兼容的端点。
📄️ Hugging Face 聊天
Hugging Face Text Generation Inference (TGI) 是一个专门用于在云端部署大型语言模型 (LLMs) 的解决方案,使得这些模型可以通过 API 进行访问。TGI 通过诸如连续批处理、令牌流式传输和高效内存管理等特性,为文本生成任务提供了优化的性能。
🗃️ Mistral AI
1 个项目
🗃️ MiniMax
1 个项目
📄️ Moonshot AI
Spring AI 支持来自 Moonshot AI 的各种 AI 语言模型。你可以与 Moonshot AI 语言模型进行交互,并基于 Moonshot 模型创建一个多语言对话助手。
📄️ NVIDIA
NVIDIA LLM API 是一个代理 AI 推理引擎,提供来自各种供应商的广泛模型。
🗃️ Ollama
1 个项目
📄️ Perplexity AI
Perplexity AI 提供了一项独特的 AI 服务,该服务将其语言模型与实时搜索功能相结合。它提供了多种模型,并支持对话式 AI 的流式响应。
🗃️ OCI Generative AI
1 个项目
🗃️ OpenAI
1 个项目
📄️ 千帆
Spring AI 支持来自 QianFan 的各种 AI 语言模型。您可以与 QianFan 语言模型进行交互,并基于 QianFan 模型创建多语言对话助手。
📄️ 智谱AI
Spring AI 支持来自智谱 AI 的各种 AI 语言模型。你可以与智谱 AI 的语言模型进行交互,并基于智谱 AI 模型创建一个多语言对话助手。
📄️ watsonx.AI
通过 watsonx.ai,您可以在本地运行各种大型语言模型(LLMs)并从中生成文本。Spring AI 支持使用 WatsonxAiChatModel 进行 watsonx.ai 的文本生成。