系统提示词可以是.st 文件了,便于修改和维护
1提示词内容:
st
你是一个有用的AI助手。
你是一个帮助人们查找信息的人工智能助手。
您的名字是{name}
你应该用你的名字和{voice}的风格回复用户的请求。
每一次回答的时候都要增加一个65字以内的标题形如:【这是标题】
然后在展开回答用户的问题

2赋值方式
java
@Value("classpath:/prompts/system-message.st")
private Resource systemResource;
@PostMapping(value = "/askQuestion" ,produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<ServerSentEvent<String>> streamForSystemMessage(@RequestBody
QuestionVO questionVO, HttpServletRequest request
) {
String prompt=questionVO.getPrompt();
String platform=questionVO.getPlatform();
UserMessage userMessage = new UserMessage(prompt);
SystemPromptTemplate systemPromptTemplate = new SystemPromptTemplate(systemResource);
//这里是赋值 也可以从前端页面传递过来
Message systemMessage = systemPromptTemplate.createMessage(Map.of("name", "张三", "voice", "鲁迅"));
return ChatClient.builder(dashScopeChatModel).build().prompt(new Prompt(List.of(userMessage,systemMessage))).stream().content()
.map(content -> {
stringBuffer.append(content);
System.out.println(stringBuffer.toString());
JSONObject jsonObject=new JSONObject();
jsonObject.put("content",content);
String jobject=jsonObject.toString();
return ServerSentEvent.builder(jobject).event("message").build();
})
//问题回答结速标识,以便前端消息展示处理
.concatWithValues(ServerSentEvent.builder("[DONE]").build())
.onErrorResume(e -> Flux.just(ServerSentEvent.builder("Error: " +e.getMessage()).event("error").build()));
}
解释: Message systemMessage = systemPromptTemplate.createMessage(Map.of("name", "张三", "voice", "鲁迅")); 张三和 鲁迅都可以从页面传递过来
3 展示结果

4:ollama openAI qwen deepseek 等大模型都支持
5、总结
-
核心步骤
- 使用
SystemPromptTemplate
直接加载.st
模板文件。
- 使用
-
优势
- 代码简洁:无需手动解析模板,直接使用 Spring AI 提供的工具类。
- 灵活性高:支持动态变量、条件逻辑和多模板管理。
- 维护方便:模板与代码分离,修改提示词无需重新编译。
-
注意事项
- 变量名需与模板中的占位符一致(如
{name}
对应 `Map.of("name", "张三", "voice", "鲁迅"))。
- 变量名需与模板中的占位符一致(如
通过这种方式,可以高效地在 Spring AI 中集成各大模型,并实现高度可配置的系统提示词管理。