在 AI 应用开发中,Prompt(提示词)是连接人类意图与 AI 模型的核心桥梁。例如:
然而,传统 Prompt 管理方式存在明显缺陷:
为解决这些问题,Spring AI Alibaba提供了Nacos 动态 Prompt 管理方案,通过 Nacos 配置中心实现 Prompt 的实时更新、统一管理、版本控制,无需重启应用即可调整 AI 模型的输入。
Spring AI Alibaba 是 Spring 生态下的 AI 开发框架,整合了阿里云的 AI 服务(如通义千问)和配置中心(如 Nacos),简化了 AI 应用的开发流程。其核心功能包括:
Nacos 是阿里巴巴开源的动态服务发现、配置管理工具,具备:
sh bin/startup.sh -m standalone(单机模式);http://localhost:8848/nacos(默认用户名/密码:nacos/nacos)。在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>
在application.yml中配置 Nacos 连接信息和 Prompt 监听:
server:port:10010spring: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}
在 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();}}
登录 Nacos 控制台,添加以下配置:
spring.ai.alibaba.configurable.prompt(参考源码ConfigurablePromptTemplateFactory);DEFAULT_GROUP;[{"name":"author","template":"列出{author}有名的著作,只需要书名清单","model":{"author":"鲁迅"}}]启动项目后,查看日志:
说明 Nacos 中的 Prompt 已成功加载。
发送 GET 请求:http://127.0.0.1:10010/nacos/books?author=鲁迅,返回结果:
在 Nacos 控制台修改配置中的template:
[{"name":"author","template":"介绍{author},列出其生平经历和文学成就","model":{"author":"鲁迅"}}]点击“发布”后,无需重启应用,再次发送请求,返回结果:
根据用户浏览记录动态调整推荐 Prompt:
[{"name":"product_recommendation","template":"根据用户最近浏览的 {product_type},推荐 3 款性价比高的产品,包括价格和特点。","model":{"temperature":0.6}}]
根据用户问题类型动态切换回复 Prompt:
[{"name":"refund_reply","template":"针对用户的退款问题,生成友好的安抚话术,说明退款流程。","model":{"temperature":0.5}},{"name":"delivery_reply","template":"回答用户的物流查询问题,提供预计送达时间和快递单号。","model":{"temperature":0.5}}]
Spring AI Alibaba 结合 Nacos 实现动态 Prompt 管理,解决了传统 AI 应用中 Prompt 静态化的痛点,具备以下优势:
在 AI 应用日益普及的今天,动态 Prompt 管理已成为提升 AI 应用灵活性和开发效率的关键手段。通过 Spring AI Alibaba 和 Nacos 的协同,开发人员可以快速实现动态 Prompt 功能,满足业务的动态需求。
| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |