一、引言:AI 应用的“Prompt 痛点”在 AI 应用开发中,Prompt(提示词)是连接人类意图与 AI 模型的核心桥梁。例如: - 电商推荐:“根据用户最近浏览的手机,推荐 3 款性价比高的机型”;
- 客服回复:“针对用户的退款问题,生成友好的安抚话术”;
- 内容生成:“列出鲁迅最著名的 5 本小说,只需要书名”。
然而,传统 Prompt 管理方式存在明显缺陷: - 静态 Prompt:Prompt 写死在代码中,修改需重启应用,影响开发效率;
- 分散管理:不同模块的 Prompt 散落在各处,难以统一维护;
- 动态需求:业务需要根据用户行为、场景变化实时调整 Prompt(如促销活动期间的推荐话术)。
为解决这些问题,Spring AI Alibaba提供了Nacos 动态 Prompt 管理方案,通过 Nacos 配置中心实现 Prompt 的实时更新、统一管理、版本控制,无需重启应用即可调整 AI 模型的输入。 二、技术背景:Spring AI Alibaba 与 Nacos 的协同1. Spring AI AlibabaSpring AI Alibaba 是 Spring 生态下的 AI 开发框架,整合了阿里云的 AI 服务(如通义千问)和配置中心(如 Nacos),简化了 AI 应用的开发流程。其核心功能包括: - Prompt 模板管理:支持静态模板、动态模板(从配置中心加载);
- AI 模型集成:无缝对接通义千问、ChatGPT 等模型;
- 配置动态刷新:通过 Nacos 实现 Prompt 实时更新。
2. Nacos 配置中心Nacos 是阿里巴巴开源的动态服务发现、配置管理工具,具备: - 实时配置推送:配置变更后,立即通知所有订阅的应用;
- 版本管理:保存配置的历史版本,支持回滚;
- 高可用性:支持集群部署,保证配置服务的稳定性。
三、环境准备1. Nacos 安装- 下载 Nacos:Nacos 官方下载页;
- 启动 Nacos:
sh bin/startup.sh -m standalone(单机模式); - 访问 Nacos 控制台:
http://localhost:8848/nacos(默认用户名/密码:nacos/nacos)。
2. 项目依赖在pom.xml中添加以下依赖(需引入 Spring AI Alibaba Bom 和 Spring Boot Bom): <!-- Web 依赖 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>
<!-- 阿里云 AI 模型依赖(如通义千问) --><dependency> <groupId>com.alibaba.cloud.ai</groupId> <artifactId>spring-ai-alibaba-starter-dashscope</artifactId></dependency>
<!-- Nacos 动态 Prompt 依赖 --><dependency> <groupId>com.alibaba.cloud.ai</groupId> <artifactId>spring-ai-alibaba-starter-nacos-prompt</artifactId></dependency>
四、实现步骤:动态 Prompt 管理1. 配置文件:application.yml在application.yml中配置 Nacos 连接信息和 Prompt 监听: server:port:10010
spring:application: name: nacos-demo
# Nacos 配置中心nacos: server-addr:127.0.0.1:8848 # Nacos 服务地址
ai:# 开启 nacos 的 prompt template 监听功能nacos: prompt: template: enabled: truedashscope: api-key {AI_DASHSCOPE_API_KEY}
2. 代码实现:动态获取 Prompt在 Controller 中使用ConfigurablePromptTemplateFactory动态获取 Nacos 中的 Prompt: @RestController@RequestMapping("/nacos")publicclassPromptController{
privatestaticfinalLoggerlogger = org.slf4j.LoggerFactory.getLogger(PromptController.class);
privatefinalChatClientclient;
privatefinalConfigurablePromptTemplateFactorypromptTemplateFactory;
publicPromptController( ChatModelchatModel, ConfigurablePromptTemplateFactorypromptTemplateFactory ) {
this.client=ChatClient.builder(chatModel).build(); this.promptTemplateFactory= promptTemplateFactory; }
@GetMapping("/books") publicFlux<String>generateJoke( @RequestParam(value ="author", required =false)StringauthorName, HttpServletResponse response ) {
// 防止输出乱码 response.setCharacterEncoding("UTF-8");
// 1. 获取模板实例(优先使用Nacos配置) ConfigurablePromptTemplatetemplate = promptTemplateFactory.getTemplate("author");
// 2. 无配置时使用默认值 if(template ==null) { template = promptTemplateFactory.create( "author", "请列出这位{author}最著名的三本书。", Map.of("author","鲁迅") ); }
Map<String,Object> model =newHashMap<>(); if(StringUtils.hasText(authorName)){ // 3. 添加动态参数(覆盖模版变量) model.put("author", authorName); }
// 4. 创建Prompt对象 Promptprompt = template.create(model);
// 5. 记录日志(便于调试) logger.info("最终构建的 prompt 为:{}", prompt.getContents());
// 6. 调用AI服务 returnclient.prompt(prompt) .stream() .content(); }
}
3. Nacos 配置:添加 Prompt 模板登录 Nacos 控制台,添加以下配置: - DataID:
spring.ai.alibaba.configurable.prompt(参考源码ConfigurablePromptTemplateFactory); - Group:
DEFAULT_GROUP; - 配置内容:
[{"name":"author","template":"列出{author}有名的著作,只需要书名清单","model":{"author":"鲁迅"}}]五、功能演示:动态更新 Prompt1. 启动验证启动项目后,查看日志: 说明 Nacos 中的 Prompt 已成功加载。 2. 发送请求发送 GET 请求:http://127.0.0.1:10010/nacos/books?author=鲁迅,返回结果: 3. 动态更新 Prompt在 Nacos 控制台修改配置中的template: [{"name":"author","template":"介绍{author},列出其生平经历和文学成就","model":{"author":"鲁迅"}}]点击“发布”后,无需重启应用,再次发送请求,返回结果: 六、应用场景1. 电商推荐根据用户浏览记录动态调整推荐 Prompt:
[{ "name":"product_recommendation", "template":"根据用户最近浏览的 {product_type},推荐 3 款性价比高的产品,包括价格和特点。", "model":{"temperature":0.6}}]
2. 客服回复根据用户问题类型动态切换回复 Prompt:
[{ "name":"refund_reply", "template":"针对用户的退款问题,生成友好的安抚话术,说明退款流程。", "model":{"temperature":0.5}},{ "name":"delivery_reply", "template":"回答用户的物流查询问题,提供预计送达时间和快递单号。", "model":{"temperature":0.5}}]
七、总结Spring AI Alibaba 结合 Nacos 实现动态 Prompt 管理,解决了传统 AI 应用中 Prompt 静态化的痛点,具备以下优势: - 实时更新:无需重启应用,即可调整 Prompt;
- 统一管理:所有 Prompt 集中在 Nacos 配置中心,便于维护;
- 灵活扩展:支持版本控制、模型参数分离、监控告警等高级功能。
在 AI 应用日益普及的今天,动态 Prompt 管理已成为提升 AI 应用灵活性和开发效率的关键手段。通过 Spring AI Alibaba 和 Nacos 的协同,开发人员可以快速实现动态 Prompt 功能,满足业务的动态需求。 |