微信扫码
添加专属顾问
我要投稿
Spring AI 提示词(prompts)详解:掌握模型调用的核心配置技巧,提升AI交互效率。 核心内容: 1. Spring AI中Prompt类的结构与功能解析 2. 四种Message角色的划分与应用场景 3. ChatOptions参数配置对模型输出的影响机制
prompt是指向模型提供的输入文本或指令,用于引导模型生成特定类型的响应。
在Spring AI中,prompt 并不只是输入文本,还包括了模型掉调用的可选参数ChatOptions
。
Spring AI提供了ChatModel、ChatClient两种调用模型的方式,这两种方式配置prompt的方式略有不同。
本节将介绍ChatModel、ChatClient两种方式配置prompt,以及promptTemplate的使用。
Spring AI通过Prompt类,来存储输入文本List<message>
,和模型可选参数ChatOptions
。
public class Prompt implements ModelRequest<List<Message>> {
private final List<Message> messages;
private ChatOptions chatOptions;
}
Message按照角色划分又分为四种:
Assistant会在ChatMemory中讲解,主要用来实现模型记忆功能,因为所有模型都是无状态的,因此记忆本质就是将用户与模型的历史对话记录传给模型。
Tool/Function在Tool Calling中讲解,同ChatMemory搭配使用,回复模型的调用Tool请求。SpringAI中会判断模型是否调用工具,如果是则执行工具,并将历史对话和工具调用结果全部放入Prompt的
List<Message>
中,然后递归请求模型,以此来实现模型的反复工具调用。
ChatOptions 提供可选的模型配置参数,下面列出默认可选参数。
// 模型名称
private String model;
// 频率惩罚系数,用户降低模型重复生成某些词或短语的频率。值越大,模型越倾向于避免重复
private Double frequencyPenalty;
// 限制模型生成的文本(token)长度。
private Integer maxTokens;
// 存在惩罚系数,用于惩罚模型生成已经出现过的词或短语。值越大,模型越倾向于生成新的内容。
private Double presencePenalty;
//停止序列列表。指定一系列字符串,当模型生成这些字符串中的任何一个时,生成过程将停止。用于控制生成文本的结束位置。
private List<String> stopSequences;
// 温度参数。控制模型生成文本的随机性。值越高,生成的文本越随机;值越低,生成的文本越确定和集中。
private Double temperature;
// Top-K采样参数。在生成下一个词时,从概率最高的K个候选词中随机选择。值越小,生成的文本越集中;值越大,生成的文本越多样。
private Integer topK;
Top-P(核采样)参数,在生成下一个词时,从累积概率最高的P%的候选词中随机选择。例如,topP=0.9表示选择累积概率达到90%的候选词。值越小,生成的文本越集中;值越大,生成的文本越多样。
private Double topP
除了默认可选参数外,每个大模型可能会提供额外的参数,这里就不再列出了,讲到具体模型时,我们会详细介绍。
搭建SpringBoot项目、添加SpringAI依赖、配置Open AI参数,请大家直接看Spring AI入门这篇。
因为众所周知的原因,我们不能直接访问国外网站。如果有需要Open AI 代理地址,请关注公众号,点击菜单apikey 免费获取!
ChatClient是Spring AI与模型交互的最高级API,调用prompt()方法获取request配置类,我们可以使用流式调用传入system、user、options、tools等信息。
@RequestMapping("/chat")
@RestController
publicclass ChatController {
privatefinal ChatClient chatClient;
public ChatController(ChatClient.Builder chatClientBuilder) {
this.chatClient = chatClientBuilder.build();
}
@GetMapping("/ai")
String generation (String userInput) {
// 定义模型参数
DefaultChatOptions chatOptions = newDefaultChatOptions();
chatOptions.setModel("o4-mini");
chatOptions.setTemperature(0.7);
// 通过chatClient传入system指令和user请求,并将我们定义的模型参数传入
return this.chatClient.prompt()
.system("你的名字叫SpringAI,你是Java语言AI框架,你可以提供关于Java开发AI的能力。")
.user(userInput)
.options(chatOptions)
.call()
.content();
}
}
浏览器访问http://localhost:8080/chat/ai?userInput=你叫什么名字?
,直观的看到,通过System传入的指令已经生效。ChatModel 类是 Spring AI 框架中用于与聊天模型交互的底层核心接口,通过简化的 API 设计和模块化的结构,方便开发者快速集成和使用各种 AI 聊天功能。
由于我们使用的是OpenAI,这里使用OpenAiChatModel来演示。
@RequestMapping("/model")
@RestController
publicclassModelController {
@RequestMapping("ai")
public String ai(String userInput) {
// 定义模型参数
OpenAiChatOptions chatOptions = new OpenAiChatOptions();
chatOptions.setModel("o4-mini");
chatOptions.setTemperature(0.7);
// 定义prompt
SystemMessage systemMessage = SystemMessage.builder().text("你的名字叫SpringAI,你是Java语言AI框架,你可以提供关于Java开发AI的能力。").build();
UserMessage userMessage = UserMessage.builder().text(userInput).build();
Prompt prompt = new Prompt(systemMessage, userMessage);
// 自定义chatModel,必须传入自定义请求参数,定义OpenAiApi
OpenAiApi openAiApi = OpenAiApi.builder()
.apiKey(System.getenv("API_KEY"))
.baseUrl(System.getenv("BASE_URL"))
.build();
// 调用模型
return OpenAiChatModel.builder()
.openAiApi(openAiApi)
.defaultOptions(chatOptions)
.build()
.call(prompt)
.getResults().get(0).getOutput().getText();
}
}
浏览器访问http://localhost:8080/model/ai?userInput=你叫什么名字?
Spring AI 中用于提示模板化的关键组件是 PromptTemplate
类,该类旨在创建结构化的提示,然后将其发送到 AI 模型进行处理.
这个类使用TemplateRenderer
API来渲染模板。Spring AI默认使用StringTemplate引擎的StTemplatRenderer
实现,通过{}
语法标识模板变量,我们也可以自定义配置分隔符。
下面使用自定义StringTemplate
渲染器,并使用'<'和'>'作为分隔符的示例:
@RestController
@RequestMapping("/template")
publicclass PromptTemplateController {
privatefinal ChatClient chatClient;
public PromptTemplateController (ChatClient.Builder chatClientBuilder) {
this.chatClient = chatClientBuilder.build();
}
@GetMapping("/ai")
String generation(String userInput) {
// 通过模板创建prompt
PromptTemplate promptTemplate = PromptTemplate.builder()
.renderer(StTemplateRenderer.builder().startDelimiterToken('<').endDelimiterToken('>').build())
.template("""
告诉我<name>的5首歌曲
""")
.build();
String prompt= promptTemplate.render(Map.of("name", userInput));
// 通过chatClient传入system指令和user请求,并将我们定义的模型参数传入
return this.chatClient.prompt(prompt)
.call()
.content();
}
}
浏览器访问:http://localhost:8080/template/ai?userInput=周传雄
在生成式人工智能中,提示词的编写是研发人员的一项关键任务。 高质量结构的提示词对人大模型输出效果有显著影响。 我门应该投入时间和精力在提示词设计上,这是值得的。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-04-01
2025-04-02
2025-04-08
2025-04-08
2025-05-08
2025-05-08
2025-05-08
2025-04-11
2025-05-07
2025-04-14
2025-06-23
2025-06-14
2025-06-04
2025-06-02
2025-05-17
2025-05-16
2025-05-09
2025-04-29