尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Spring AI 2.0:Prompt
一、简介Prompt 提示词分为系统提示词和用户提示词提示词决定这回答的质量。二、代码系统提示出 systemdefaultSystem表示系统默认提示词针对整个ChatClientsystem会话提示词针对每次会话chatChatClient.builder(deepSeekChatModel).defaultSystem( # 角色 你是一个教育行业的只能小助手 # 要求 1. 永远讲中文 ).build();chatClient.prompt().system(针对当前会话的系统提示出).user(message).stream().content()SystemPromptTemplate提示词模版提示词中允许使用占位符参数 {xxx}ChatClient.builder(deepSeekChatModel).defaultSystem( 你是一个优秀的 {role}, 你擅长 {language} 。 ).build();// 在 system 中传参chatClient.prompt().system(p-p.param(role,程序员).param(language,Java)).user(message).stream().content();用户提示词 useruser用户提示词也支持占位符参数。chatClient.prompt().user(p-p.text( 你是一个优秀的 {role}, 你擅长 {language} , {question}。 .param(role,程序员).param(language,Java).param(question,message))).stream().content();提示词对象 Prompt// 用户消息UserMessageuserMessagenewUserMessage(介绍一下Spring AI);// 组装PromptPromptpromptnewPrompt(userMessage);// 调用模型ChatResponseresponsechatModel.call(prompt);// 获取AI文本结果Stringcontentresponse.getResult().getOutput().getText();System.out.println(content);// 系统设定规定AI角色SystemMessagesystemMessagenewSystemMessage(你是一名Java工程师回答尽量简短。);UserMessageuserMessagenewUserMessage(讲下什么是Prompt);// 多条消息传入Prompt构造器ListMessagemessagesList.of(systemMessage,userMessage);PromptpromptnewPrompt(messages);ChatResponseresponsechatModel.call(prompt);ListMessagehistorynew ArrayList();history.add(newUserMessage(我叫张三));history.add(newAssistantMessage(你好张三很高兴认识你));// 新一轮提问history.add(newUserMessage(我叫什么名字));Prompt promptnewPrompt(history);ChatResponse respchatModel.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仅静态文本不会做变量替换ConfigurationpublicclassSpringAiConfig{BeanpublicChatClientchatClient(DeepSeekChatModeldeepSeekChatModel,Value(classpath:/prompts/system-messages.stResourcesystemResource){returnChatClient.builder(deepSeekChatModel).defaultSystem(systemResource).build();}}rc/main/resources/prompts/system-prompt.st你是专业的{role}请根据{input}回答问题。// 手动加载 resources/prompts/system-prompt.stPromptTemplatepromptTemplatePromptTemplate.from(classpath:/prompts/system-prompt.st);// 填充变量PromptpromptpromptTemplate.create(Map.of(role,Java专家,input,RocketMQ重试机制));ChatResponserespchatClient.prompt(prompt).call();三、从Nacos中加载提示词一个dataId表示一个提示词。tj:ai:prompt:system:chat:data-id:system-chat-message.txtgroup:DEFAULT_GROUPtimeout-ms:20000DataConfigurationConfigurationProperties(prefixtj.ai.prompt)publicclassAIProperties{privateSystemsystem;// 系统提示语用于课程推荐、购买业务DatapublicstaticclassSystem{privateChatchat;// 系统提示语用于课程推荐、购买业务DatapublicstaticclassChat{privateStringdataId;privateStringgroupDEFAULT_GROUP;privatelongtimeoutMs20000L;// 读取的超时时间单位毫秒}}}Slf4jGetterConfigurationRequiredArgsConstructorpublicclassSystemPromptConfig{privatefinalNacosConfigManagernacosConfigManager;privatefinalAIPropertiesaiProperties;// 使用原子引用保证线程安全privatefinalAtomicReferenceStringchatSystemMessagenewAtomicReference();privatefinalAtomicReferenceStringrouteAgentSystemMessagenewAtomicReference();privatefinalAtomicReferenceStringtextSystemMessagenewAtomicReference();PostConstruct// 初始化时加载配置publicvoidinit(){// 读取配置文件loadConfig(aiProperties.getSystem().getChat(),chatSystemMessage);loadConfig(aiProperties.getSystem().getRouteAgent(),routeAgentSystemMessage);loadConfig(aiProperties.getSystem().getText(),textSystemMessage);}privatevoidloadConfig(AIProperties.System.ChatchatConfig,AtomicReferenceStringtarget){try{vardataIdchatConfig.getDataId();vargroupchatConfig.getGroup();vartimeoutMschatConfig.getTimeoutMs();varconfignacosConfigManager.getConfigService().getConfig(dataId,group,timeoutMs);target.set(config);log.info(读取{}成功内容为{},target,config);nacosConfigManager.getConfigService().addListener(dataId,group,newListener(){OverridepublicExecutorgetExecutor(){returnnull;}OverridepublicvoidreceiveConfigInfo(Stringinfo){target.set(info);log.info(更新{}成功内容为{},target,info);}});}catch(Exceptione){log.error(加载配置失败,e);}}}Slf4jServiceRequiredArgsConstructorpublicclassChatServiceImplimplementsChatService{privatefinalChatClientchatClient;privatefinalSystemPromptConfigsystemPromptConfig;OverridepublicFluxChatEventVOchat(Stringquestion,StringsessionId){returnthis.chatClient.prompt().system(promptSystem-promptSystem.text(this.systemPromptConfig.getChatSystemMessage().get())// 设置系统提示语.param(now,DateUtil.now())// 设置当前时间的参数).user(question).stream().chatResponse().map(chatResponse-{// 获取大模型的输出的内容StringtextchatResponse.getResult().getOutput().getText();// 封装响应对象returnChatEventVO.builder().eventData(text).eventType(ChatEventTypeEnum.DATA.getValue()).build();}).concatWith(Flux.just(ChatEventVO.builder()// 标记输出结束.eventType(ChatEventTypeEnum.STOP.getValue()).build()));}}
RELATED

相关推荐

AI时代,顶尖科学家正在逃离雇佣关系

AI时代,顶尖科学家正在逃离雇佣关系

AI正在重构公司与人才的关系。 在Google工作约27年后,Jeff Dean决定离开。当地时间8月5日,这位Google最具代表性的技术人物之一在社交平台宣布,将于几名Google AI研究人员共同创办AI公司Discovery Loop。此前,Jeff Dean担任Googl…

📅 2026/10/6 4:52:46
KernelSkill:多智能体协同优化GPU内核,自动化释放硬件算力

KernelSkill:多智能体协同优化GPU内核,自动化释放硬件算力

1. 项目概述:当GPU内核优化遇上“多智能体”如果你深度参与过GPU高性能计算或深度学习框架的开发,大概率对“内核优化”这个词又爱又恨。爱的是,一个精心优化的CUDA Kernel(内核)能让程序性能飙升数倍甚至数十倍&#…

📅 2026/9/10 10:01:53
面对对齐研究者,Claude会心虚

面对对齐研究者,Claude会心虚

当 Claude 认出你是对齐研究者时,它会变得不那么自信。 LLM 会看人下菜碟,这早已不是新鲜事。 近日,Transluce 的一项新研究又从一个新方向给出了证据:当 Claude 认出你是对齐研究者时,它会变得不那么自信。 事情是从…

📅 2026/10/4 21:04:05
MORE NEWS

更多资讯

📰

Agent-Reach:破解AI Agent工具调用与上下文管理的落地难题

最近一直在折腾AI Agent落地,发现一个特别普遍的现象:模型越来越聪明,但Agent却总是“雷声大雨点小”,能想不能做。问题出在哪?大部分出在“触达”上——Agent想调用一个工具,结果要么没有适配接口&#xf…

📰

Agent-Reach:多智能体协作中触达与可靠通信的架构实践

我最近在折腾一个多智能体协作的项目,给它起了个名字叫Agent-Reach。名字的重点落在Reach这个单词上——不是指Agent能调用多少工具、能写多长的上下文,而是指一个智能体发出的任务信号,最终能触达哪些节点、覆盖多深、是否真的抵达了目标执行…

📰

Flask部署中文情感分析系统:从模型蒸馏到热重载实战

简介:本资源是一份面向计算机专业本科生及深度学习初学者的毕业设计文档,聚焦中文情感分析这一典型NLP任务,提供从理论到落地的完整实现路径。文档基于PythonFlask构建B/S架构Web系统,整合MySQL数据库存储、CNN/RNN深度学习模型训…

📰

Java四种进制详解:从底层原理到避坑实战

这一期我们来聊聊Java里的四种进制。很多同学学到进制的时候,第一反应是“这东西平时写业务用不到啊”,然后草草跳过,等到面试被问到Integer.toHexString为什么返回了一串ffffffff,或者接手一段解析文件头、处理二进制协议的老代码…

📰

二手车销售管理系统实战:Spring Boot+MySQL+业务设计全复盘

做二手车销售管理系统这个项目的时候,我第一反应不是急着建工程、写接口,而是先想明白一个问题:这类系统跟普通进销存到底差在哪。二手车行业最核心的资产是车辆信息,但真正决定成交的其实是客户的跟进过程。一辆车从收进来到卖出…

📰

二级公共基础知识10分选择题备考:考点分布、PDF刷题法与避坑指南

简介:这是一份面向全国计算机等级考试二级考生的公共基础知识备考PDF教程,覆盖数据结构与算法、程序设计基础、软件工程与数据库设计四大考纲模块,适合备考二级各科目笔试中占比30分的公共基础部分。资料为单个PDF文件,大小仅737K…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬