5 Spring AI 提示词
1. 简介:什么是 Spring AI 提示词?
Spring AI 的 Prompt (提示词) 系统为与 AI 模型通信提供了一种结构化、类型安全的方式。Prompt 类充当了 一个容器,组织了 Message (消息) 对象和可选的 ChatOptions (聊天选项),从而支持复杂的多次对话,并实现对模型行为的精确控制。
1.1 Prompt 类
public class Prompt implements ModelRequest<List<Message>> {
private final List<Message> messages;
private ChatOptions chatOptions;
public Prompt(List<Message> messages) {
this.messages = messages;
}
public Prompt(List<Message> messages, ChatOptions chatOptions) {
this.messages = messages;
this.chatOptions = chatOptions;
}
@Override
public List<Message> getInstructions() {
return messages;
}
@Override
public ChatOptions getOptions() {
return chatOptions;
}
}
Prompt 类是向 AI 模型发送请求的主要抽象。它封装了:
- Messages:代表对话历史的消息对象序列。
- ChatOptions:模型特定的参数(如温度 temperature、最大 token 数等)。
1.2 Message 接口
每一条 Message 在提示词中都体现了独特的角色,其内容和意图各不相同:
public interface Content {
String getContent();
Map<String, Object> getMetadata();
}
public interface Message extends Content {
MessageType getMessageType();
}
为了支持多模态(文本 + 图像、音频等),消息还可以实现:
public interface MediaContent extends Content {
Collection<Media> getMedia();
}
1.3 消息类型与角色
Spring AI 通过 MessageType 枚举定义了四种主要的消息角色:
public enum MessageType {
USER("user"), // 用户的输入 —— 问题、命令、陈述
ASSISTANT("assistant"), // AI 对用户输入的响应
SYSTEM("system"), // 指导 AI 行为和风格的指令
TOOL("tool"); // 来自工具/函数调用的附加信息
}
角色功能:
| 角色 | 目的 | 用法 |
|---|---|---|
| SYSTEM | 指导 AI 的行为和响应风格 | 在对话前设定参数、规则和上下文 |
| USER | 代表用户的输入 | 向 AI 提出的问题、命令或陈述 |
| ASSISTANT | AI 对用户输入的响应 | 维持对话流和上下文 |
| TOOL | 返回来自工具调用的信息 | 提供函数执行产生的数据 |
1.4 为什么使用 Spring AI 提示词?
直接调用 LLM API: 使用 Spring AI 提示词:
┌─────────────────────────────────┐ ┌─────────────────────────────────┐
│ 手动字符串拼接 │ │ 类型安全的消息 API │
│ 易出错的 JSON 处理 │ │ 响应式的 ChatClient API │
│ 缺乏模板结构 │ │ 内置 PromptTemplate │
│ 手动跟踪对话历史 │ │ ChatMemory 深度集成 │
│ 不同供应商格式不一 │ │ 供应商无关的抽象层 │
└─────────────────────────────────┘ └─────────────────────────────────┘
代码脆弱、重复性高 → 代码整洁、易于维护
核心优势:
- 类型安全:在编译阶段检查消息类型和结构。
- 模板管理:内置对参数化提示词的支持。
- 供应商无关:无需更改代码即可在 OpenAI、Anthropic、Gemini 之间切换。
- 对话管理:轻松追踪多轮对话。
- 多模态支持:针对文本、图像、音频和视频的统一 API。