提示词
什么是提示词?
Prompt 是引导 AI 模型生成特定输出的输入格式,Prompt 的设计和措辞会显著影响模型的响应。
Prompt 最开始只是简单的字符串,随着时间的推移,prompt 逐渐开始包含特定的占位符,例如 AI 模型可以识别的 “USER:”、“SYSTEM:” 等。阿里云通义模型可通过将多个消息字符串分类为不同的角色,然后再由 AI 模型处理,为 prompt 引入了更多结构。每条消息都分配有特定的角色,这些角色对消息进行分类,明确 AI 模型提示的每个部分的上下文和目的。这种结构化方法增强了与 AI 沟通的细微差别和有效性,因为 prompt 的每个部分在交互中都扮演着独特且明确的角色。
提示词样例库

网址:Prompt Library | DeepSeek API Docs
https://api-docs.deepseek.com/zh-cn/prompt-library/
三种传入方式
在 Spring AI Alibaba中,call() 方法是调用大模型的核心入口,其参数中涉及的 Message、String、Prompt 是三种不同层级的输入封装形式,对应不同的使用场景和灵活性。下面从定义含义、核心区别、应用场景、代码示例四个维度详细拆解:
SpringAI Alibaba 中的 call() 方法参数解析
在 Spring AI Alibaba(主要对接阿里云百炼 / 通义千问等大模型)中,call() 方法是与大模型交互的核心入口,而 message、String、prompt 是传入 call() 的三种核心参数形式,其本质是不同抽象层级的请求载体,适配不同的开发场景。下面从「定义含义」「核心区别」「应用场景」「代码示例」四个维度详细拆解:
一、先明确核心概念前提
Spring AI 对大模型交互做了标准化抽象,核心逻辑是:用户输入 → 封装为 Prompt → Prompt 拆分为 Message 列表 → 序列化为模型能识别的格式 → 调用模型 APIString 是最简化的输入,Message 是对话的最小单元,Prompt 是包含上下文 / 参数的完整请求体。
二、三种参数的详细解析
1. String 类型参数
(1)含义
最基础、最简化的输入形式,本质是「纯文本用户指令」,底层会被 Spring AI 自动封装为:SystemMessage(默认空) + UserMessage(传入的 String 内容) 的 Prompt,再调用模型。
(2)核心特点
- 极简:无需手动封装,一行文本即可调用;
- 无上下文:无法传递多轮对话历史、系统指令;
- 无参数配置:无法设置温度、topP 等模型参数;
- 适配单轮、无复杂需求的简单问答。
(3)应用场景
- 快速测试:验证模型连通性、简单问答(如 “你好”“1+1 等于几”);
- 无上下文的单次查询:如 “查询今天的天气”“解释什么是 Spring AI”;
- 原型开发:快速搭建 demo,无需关注对话结构。
(4)代码示例
@Autowired
private ChatClient chatClient;
// 直接传入 String 调用
public String simpleCall() {
// 底层自动封装为 UserMessage,再封装为 Prompt
String response = chatClient.call("解释一下 Spring AI 的核心功能");
return response;
}
2. Message 类型参数(通常是 List<Message>)
(1)含义
Message 是 Spring AI 定义的「对话最小单元」,代表一次单方向的消息传递(用户→模型 / 模型→用户 / 系统→模型),核心实现类:
| MessageType 枚举值 | 类型 | 作用 | 场景 |
|---|---|---|---|
| user | UserMessage |
用户输入的指令 / 问题 | 核心交互输入 |
| system | SystemMessage |
系统指令(定义模型角色 / 规则) | 约束模型行为(如 “作为 Java 讲师”) |
| assistant | AssistantMessage |
模型的历史回复 | 多轮对话上下文 |
| tool |
|
工具调用的返回结果 | 工具调用场景 |
传入 Message(或列表)时,底层会封装为包含这些 Message 的 Prompt,支持多轮对话上下文。
(2)核心特点
- 支持上下文:可拼接多轮对话的 UserMessage + AssistantMessage;
- 支持系统指令:通过 SystemMessage 定义模型角色;
- 轻量灵活:比 Prompt 更底层,可手动控制对话序列;
- 仍无法直接配置模型参数(需结合 PromptTemplate 或 PromptOptions)。
(3)应用场景
- 多轮对话:如 “先问‘什么是 Spring AI’,再问‘它和 OpenAI SDK 的区别’”;
- 定制模型角色:通过 SystemMessage 约束模型(如 “作为电商客服,语气友好,只回答商品相关问题”);
- 精准控制对话结构:需手动管理每一轮的消息顺序。
(4)代码示例
@Autowired
private ChatClient chatClient;
public String multiRoundCall() {
// 1. 系统指令:定义模型角色
Message systemMessage = new SystemMessage("作为Java技术专家,用简洁的语言回答问题");
// 2. 第一轮用户问题
Message userMsg1 = new UserMessage("Spring AI 是什么?");
// 3. 模型历史回复(模拟多轮)
Message assistantMsg1 = new AssistantMessage("Spring AI 是Spring生态下的AI开发框架,简化大模型集成");
// 4. 第二轮用户问题
Message userMsg2 = new UserMessage("它支持阿里云通义千问吗?");
// 拼接消息列表(上下文顺序:系统→第一轮用户→第一轮助手→第二轮用户)
List<Message> messages = Arrays.asList(systemMessage, userMsg1, assistantMsg1, userMsg2);
// 传入 Message 列表调用
ChatResponse response = chatClient.call(messages);
return response.getResult().getOutput().getContent();
}
3. Prompt 类型参数
(1)含义
Prompt 是 Spring AI 定义的「完整请求体」,是比 Message 更高层级的抽象,包含:
messages:核心对话列表(同上述 Message 列表);options:模型参数配置(温度、topP、最大生成长度、超时时间等);metadata:元数据(如请求 ID、自定义标签)。
简单说:Prompt = Message列表 + 模型参数 + 元数据。
(2)核心特点
- 完整可控:既包含对话上下文,又能配置模型行为参数;
- 支持模板化:结合
PromptTemplate实现动态参数替换(如 “查询 {城市} 的天气”); - 适配生产级场景:满足复杂的参数配置、动态模板需求。
(3)应用场景
- 生产级多轮对话:需配置模型参数(如温度 = 0.1 保证回答稳定);
- 动态模板生成:如电商场景中 “生成 {商品名称} 的营销文案”;
- 定制化模型行为:如设置最大生成长度、禁止模型调用工具、配置超时时间;
- 批量请求:结合 Prompt 模板批量生成不同参数的请求。
(4)代码示例
@Autowired
private ChatClient chatClient;
public String promptCall() {
// 1. 定义动态模板(参数化)
PromptTemplate promptTemplate = new PromptTemplate("作为电商运营,为{product}生成一段不超过50字的营销文案,风格{style}");
// 2. 填充模板参数
Map<String, Object> params = new HashMap<>();
params.put("product", "新款无线耳机");
params.put("style", "活泼、年轻化");
Prompt promptFromTemplate = promptTemplate.create(params);
// 3. 自定义模型参数(温度、最大长度等)
AlibabaChatOptions options = AlibabaChatOptions.builder()
.temperature(0.8) // 创造性:0(严谨)~1(灵活)
.topP(0.9)
.maxTokens(100) // 最大生成长度
.timeout(3000) // 超时时间
.build();
// 4. 构建完整 Prompt(模板消息 + 自定义参数)
Prompt prompt = new Prompt(promptFromTemplate.getMessages(), options);
// 5. 传入 Prompt 调用
ChatResponse response = chatClient.call(prompt);
return response.getResult().getOutput().getContent();
}
三、核心区别总结表
| 维度 | String | Message(List) | Prompt |
|---|---|---|---|
| 抽象层级 | 最低(纯文本) | 中等(对话单元) | 最高(完整请求) |
| 上下文支持 | ❌ 不支持 | ✅ 支持多轮上下文 | ✅ 支持(包含 Message) |
| 模型参数配置 | ❌ 无法配置(用默认) | ❌ 无法配置 | ✅ 可自定义(温度 / 长度等) |
| 动态模板 | ❌ 不支持 | ❌ 需手动拼接 | ✅ 结合 PromptTemplate 支持 |
| 核心场景 | 简单单轮问答、测试 | 多轮对话、角色定制 | 生产级复杂场景、模板化 |
| 灵活性 | 最低 | 中等 | 最高 |
四、选型建议
- 快速测试 / 简单问答 → 用
String; - 多轮对话 / 角色定制(无参数配置) → 用
Message列表; - 生产级场景(需参数配置 / 动态模板) → 用
Prompt; - 所有场景的底层最终都会封装为
Prompt调用模型,区别仅在于手动封装还是自动封装。
Prompt四大角色
| 类型 | value 值 | 作用 & 场景 |
|---|---|---|
| SYSTEM | "system" |
- 设定 AI 的边界、角色、定位- 指导 AI 的行为和响应方式- 决定 AI 如何理解、回复用户输入 |
| USER | "user" |
- 承载用户的原始提问 / 输入- 代表用户向 AI 发出的问题、命令或陈述 |
| ASSISTANT | "assistant" |
- 存储 AI 返回的响应信息(助手回复)- 用于多轮对话的上下文连贯交互- 实现 “记忆对话、积累回答” 的功能 |
| TOOL | "tool" |
- 桥接外部服务(如支付、数据查询)- 支持函数调用、调用第三方工具(后续章节会详细说明) |
关键总结
这 4 种类型是 AI 对话的基础单元,典型的多轮对话流程会按以下顺序组合:SYSTEM(设定AI角色)→ USER(用户提问)→ ASSISTANT(AI回复)→ USER(下一轮提问)→ ASSISTANT(下一轮回复)而TOOL则是扩展 AI 能力的模块,用于让 AI 调用外部工具完成更复杂的任务。
小试一手
新建Module
改pom
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--spring-ai-alibaba dashscope-->
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.38</version>
</dependency>
<!--hutool-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.22</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
新增配置文件
server.port=8005
server.servlet.encoding.enabled=true
server.servlet.encoding.force=true
server.servlet.encoding.charset=UTF-8
spring.application.name=SAA-05prompt
spring.ai.dashscope.api-key=${aliQwen-api}
启动类
@SpringBootApplication
public class Saa05Prompt {
public static void main(String[] args) {
SpringApplication.run(Saa05Prompt.class,args);
}
}
业务类
- 配置类
@SpringBootConfiguration
public class Saa05Config {
// ===================== 模型常量定义 =====================
/**
* DeepSeek-v3模型标识(阿里云百炼平台的模型名称)
* 常量定义便于统一维护,避免硬编码散落在代码中
*/
private static final String MODEL_DEEPSEEK = "deepseek-v3";
/**
* Qwen-plus(通义千问增强版)模型标识(阿里云百炼平台的模型名称)
*/
private static final String MODEL_QWEN = "qwen-plus";
@Bean
public DashScopeApi dashScopeApi() {
// 从系统环境变量中读取阿里云百炼API密钥(生产环境推荐此方式,避免密钥提交到代码仓库)
String apiKey = System.getenv("aliQwen-api");
// 校验API密钥有效性,为空则抛出异常,提前阻断无效配置
if (apiKey == null || apiKey.trim().isEmpty()) {
throw new IllegalArgumentException("Environment variable 'aliQwen-api' is not set or empty.");
}
// 构建并返回DashScopeApi实例,所有模型共享此实例
return DashScopeApi.builder()
.apiKey(apiKey) // 设置API密钥,用于阿里云百炼接口鉴权
.build();
}
@Bean(name = "deepseek") // 指定Bean名称,解决多ChatModel冲突问题
public ChatModel deepSeek(DashScopeApi dashScopeApi) {
// 构建DashScopeChatModel(Spring AI封装的百炼模型适配类)
return DashScopeChatModel.builder()
.dashScopeApi(dashScopeApi) // 注入公共API客户端
// 设置该模型的默认配置
.defaultOptions(DashScopeChatOptions.builder()
.withModel(MODEL_DEEPSEEK) // 指定使用DeepSeek-v3模型
.bui

最低0.47元/天 解锁文章
334

被折叠的 条评论
为什么被折叠?



