上一篇文章《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已完成初始化");
};
}
}











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