Spring AI 2.0:Prompt

一、简介

Prompt 提示词分为系统提示词和用户提示词,提示词决定这回答的质量。

二、代码

系统提示出 system

  • defaultSystem:表示系统默认提示词,针对整个ChatClient
  • system:会话提示词,针对每次会话chat
java 复制代码
ChatClient.builder(deepSeekChatModel)
        	.defaultSystem("""
        	# 角色
        	你是一个教育行业的只能小助手
			# 要求
			1. 永远讲中文
			""")
        	.build();
java 复制代码
chatClient.prompt()
   		.system("针对当前会话的系统提示出")
        .user(message)
        .stream()
        .content()

SystemPromptTemplate:提示词模版,提示词中允许使用占位符参数 {xxx}

java 复制代码
ChatClient.builder(deepSeekChatModel)
        	.defaultSystem("""
        	你是一个优秀的 {role}, 你擅长 {language} 。
			""")
        	.build();

// 在 system 中传参
chatClient.prompt()
	.system(p -> p.param("role", "程序员").param("language", "Java"))
    .user(message)
    .stream()
    .content();

用户提示词 user

user用户提示词也支持占位符参数。

java 复制代码
chatClient.prompt()
    .user(p -> p.text("""
	你是一个优秀的 {role}, 你擅长 {language} , {question}。
	""".param("role", "程序员").param("language", "Java").param("question", message)))
    .stream()
    .content();

提示词对象 Prompt

java 复制代码
// 用户消息
UserMessage userMessage = new UserMessage("介绍一下Spring AI");
// 组装Prompt
Prompt prompt = new Prompt(userMessage);
// 调用模型
ChatResponse response = chatModel.call(prompt);
// 获取AI文本结果
String content = response.getResult().getOutput().getText();
System.out.println(content);
java 复制代码
// 系统设定:规定AI角色
SystemMessage systemMessage = new SystemMessage("你是一名Java工程师,回答尽量简短。");
UserMessage userMessage = new UserMessage("讲下什么是Prompt");

// 多条消息传入Prompt构造器
List<Message> messages = List.of(systemMessage, userMessage);
Prompt prompt = new Prompt(messages);

ChatResponse response = chatModel.call(prompt);
c 复制代码
List<Message> history = new ArrayList<>();
history.add(new UserMessage("我叫张三"));
history.add(new AssistantMessage("你好张三,很高兴认识你"));
// 新一轮提问
history.add(new UserMessage("我叫什么名字"));

Prompt prompt = new Prompt(history);
ChatResponse resp = chatModel.call(prompt);

提示词模版 PromptTemplate

提示词过多,放在代码中维护不方便,可以将提示词放入到文件中维护,在企业中常放入到配置中心中(如Nacos)。

.st = StringTemplate 的缩写,是 Spring AI 官方约定的提示词模板文件后缀,对应内部 StTemplateRenderer 模板渲染器。路径一般放在:src/main/resources/prompts/xxx.st。模板内占位符语法:{变量名},运行时自动替换变量值。

  • .st(推荐:需要变量渲染,SpringAI 模板)
    • 用途:带占位符变量的 Prompt 模板,需要 {xxx} 动态填充参数
    • SpringAI 会启用StTemplateRenderer解析文件,自动替换{变量}
    • 适合:业务系统提示词、需要传参、工程化模板
    • 文件内容可以写 markdown 格式文本,后缀依然用.st
    • .st 里面字面量大括号{、}需要转义;
    • IDE 不会识别 st 后缀,没有语法高亮,可以装 StringTemplate 插件;
    • 修改.st文件,devtools 要开启,否则不会热加载,需要重启;
  • .md(仅静态文本,不会做变量替换)
java 复制代码
@Configuration
public class SpringAiConfig {

    @Bean
    public ChatClient chatClient(DeepSeekChatModel deepSeekChatModel,
    @Value("classpath:/prompts/system-messages.st" Resource systemResource) {
        return ChatClient.builder(deepSeekChatModel)
        	.defaultSystem(systemResource)
        	.build();
    }
}

rc/main/resources/prompts/system-prompt.st

md 复制代码
你是专业的{role},请根据{input}回答问题。
java 复制代码
// 手动加载 resources/prompts/system-prompt.st
PromptTemplate promptTemplate = PromptTemplate.from("classpath:/prompts/system-prompt.st");

// 填充变量
Prompt prompt = promptTemplate.create(Map.of(
        "role", "Java专家",
        "input", "RocketMQ重试机制"
));

ChatResponse resp = chatClient.prompt(prompt).call();
相关推荐
鶴哥只手遮天3 小时前
Spring AI 2.0.1 深度解析-第 14 章 MCP 服务端(上):注解式实现与工具来源
java·人工智能·开源
鶴哥只手遮天3 小时前
Spring AI 2.0.1 深度解析-第 15 章 MCP 服务端(下):三种协议形态、Streamable 传输与状态管理
java·人工智能·开源
鶴哥只手遮天3 小时前
Spring AI 2.0.1 深度解析-第 16 章 向量存储(上):`VectorStore` 接口体系、`BatchingStrategy`
java·人工智能·开源
鶴哥只手遮天3 小时前
Spring AI 2.0.1 深度解析-第 12 章 工具循环的流式形态、Usage 累加与扩展体系
java·人工智能·开源
鶴哥只手遮天3 小时前
Spring AI 2.0.1 深度解析-第 23 章 模型供应商实现:从 `OpenAiSetup` 到 Bedrock
java·人工智能·开源
鶴哥只手遮天3 小时前
Spring AI 2.0.1 深度解析-第 06 章 内置 Advisor 全景:13 个实现逐个剖到源码级
java·人工智能·开源
鶴哥只手遮天3 小时前
Spring AI 2.0.1 深度解析-第 03 章 消息体系与 Prompt:不可变模型、`ChatOptions` 与模板渲染
java·人工智能·开源
鶴哥只手遮天3 小时前
Spring AI 2.0.1 深度解析-第 24 章 生产实践与 2.x 迁移:陷阱清单、AOT 与调优
java·人工智能·开源
鶴哥只手遮天3 小时前
Spring AI 2.0.1 深度解析-第 10 章 工具调用(中):执行链路、结果转换与工具限制
java·人工智能·开源
鶴哥只手遮天3 小时前
Spring AI 2.0.1 深度解析-第 13 章 MCP 客户端:传输、工具聚合与命名冲突
java·人工智能·开源