上一篇文章《spring ai alibaba 开发系列(一)简单开发 chatclient 示例》我们使用 spring ai 简单的搭建了一个 chat agent,使用 chat client 对 ai 进行了简单的提问,比如我们询问他今天成都的天气如何,但是可以看到他的回应是这样的:
AI回应: 你好!👋 我是通义千问(Qwen),阿里巴巴研发的超大规模语言模型。我可以回答问题、创作文字,比如写故事、写公文、写邮件、写剧本、逻辑推理、编程等等,还能表达观点,玩游戏等。我支持多种语言,包括中文、英文、法语、西班牙语等,希望能为你提供帮助! 不过需要说明的是:**我无法实时访问互联网或获取当前天气数据**,因此无法直接查询“今天成都的天气”。但你可以通过以下方式快速获取准确信息: ✅ 推荐方法: - 打开手机自带的天气App(如苹果天气、华为天气、小米天气) - 在微信中搜索“成都天气”,使用“城市服务”或官方气象小程序 - 访问中国气象局官网(www.cma.gov.cn)或“中央气象台”网站 - 使用百度、高德、墨迹天气等App搜索“成都天气” 如果你告诉我具体日期(比如“2024年6月15日”),我还可以帮你分析该日历史天气趋势(基于公开气象知识),或提供穿衣、出行建议 😊 需要我帮你写一段天气播报稿、制作旅行穿搭清单,或者解释某个天气现象(比如为什么成都多阴天?),我也很乐意哦!
整体看上去非常奇怪,回答的内容完全不是我们想要的,那怎么办呢?这里就是本文想解决的问题,给他一个提示词,比如我们这里可以给他一个这样子的提示词:
String SYSTEM_PROMPT = """ 你是一位擅长用双关语预报天气的专家。您可使用两种工具: - 获取指定地点的天气:使用此功能获取特定地点的天气信息 - 获取用户位置:使用此功能获取用户位置 如果用户询问天气,请务必确认地点。 如果你能从问题中判断出他们指的是无论身在何处, 使用获取用户位置工具来查找他们的位置。 """;
然后在咱们向他提问的时候,把这个提示词给添加上:
String response = chatClient
.prompt(SYSTEM_PROMPT)
.user("你好,请介绍一下你自己,并告诉我今天成都的天气如何?")
.call()
.content();然后咱们再运行一下,可以看看效果:
此时可以看到他的回答和之前就不一样了,他告诉了我们具体成都的天气情况,这就是我们想要的结果,是不是更加清晰了?
以上就是使用 spring ai 添加提示词的效果。
备注:
1、在 ai 开发中我们尽量添加相关的提示词,这样做的好处有:
提高AI响应质量与一致性:确保AI每次都以相同风格和格式响应,提升用户体验一致性。 控制AI行为与角色扮演:精确控制AI的角色定位和表达方式。 实现上下文管理和多轮对话:维持对话连贯性,避免每次交互都是独立的。 提升系统安全性与可控性:防止AI产生不当内容,确保合规性。 优化系统性能与成本控制:减少API调用成本,提高响应速度。 支持个性化与动态适配:根据不同用户特征提供个性化体验。 便于测试与迭代优化:易于进行效果测试和持续优化。 实现业务逻辑与AI解耦:业务逻辑与AI调用分离,代码更清晰易维护。
最后附上本案例的完整源码:
package com.ai.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.ai.chat.model.ChatModel; import org.springframework.ai.chat.client.ChatClient; import org.springframework.ai.chat.messages.UserMessage; import org.springframework.ai.chat.model.ChatResponse; import org.springframework.boot.CommandLineRunner; import org.springframework.context.annotation.Bean; import org.springframework.ai.model.function.FunctionCallback; import java.util.HashMap; import java.util.Map; import java.util.function.Function; import com.alibaba.cloud.ai.graph.agent.ReactAgent; @SpringBootApplication public class AiDemoApplication { public static void main(String[] args) { // 启动Spring Boot应用 SpringApplication.run(AiDemoApplication.class, args); } @Bean public CommandLineRunner commandLineRunner(ChatModel chatModel) { return args -> { System.out.println("Spring Boot应用启动成功!"); System.out.println("已自动配置ChatModel: " + chatModel.getClass().getSimpleName()); // 创建带有工具的ChatClient ChatClient chatClient = ChatClient.builder(chatModel) .defaultSystem("你是一个有用的助手,可以帮助用户查询天气等信息。") .build(); // 模拟一个简单的交互 System.out.println("\n🤖 AI Agent正在运行..."); String SYSTEM_PROMPT = """ 你是一位擅长用双关语预报天气的专家。您可使用两种工具: - 获取指定地点的天气:使用此功能获取特定地点的天气信息 - 获取用户位置:使用此功能获取用户位置 如果用户询问天气,请务必确认地点。 如果你能从问题中判断出他们指的是无论身在何处, 使用获取用户位置工具来查找他们的位置。 """; // 如果API密钥有效,则可以执行实际的AI调用 try { String response = chatClient .prompt(SYSTEM_PROMPT) .user("你好,请介绍一下你自己,并告诉我今天成都的天气如何?") .call() .content(); System.out.println("\nAI回应: " + response); } catch (Exception e) { System.out.println("\n⚠️ API调用出现错误 (可能API密钥无效): " + e.getMessage()); } System.out.println("\n🎉 AI Agent Demo已完成初始化"); }; } }




还没有评论,来说两句吧...