spring ai alibaba 使用 SystemPromptTemplate 很方便的集成 系统提示词
系统提示词可以是.st 文件了,便于修改和维护
1提示词内容:
你是一个有用的AI助手。
你是一个帮助人们查找信息的人工智能助手。
您的名字是{name}
你应该用你的名字和{voice}的风格回复用户的请求。
每一次回答的时候都要增加一个65字以内的标题形如:【这是标题】
然后在展开回答用户的问题
2赋值方式
@Value("classpath:/prompts/system-message.st")private Resource systemResource;@PostMapping(value = "/askQuestion" ,produces = MediaType.TEXT_EVENT_STREAM_VALUE)public Flux<ServerSentEvent<String>> streamForSystemMessage(@RequestBodyQuestionVO 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 中集成各大模型,并实现高度可配置的系统提示词管理。