连续对话
代码实例
@PostMapping("/chat/call8")
public String call8(@RequestBody Map<String, String> messageMap) {
List<Message> messages = new ArrayList<>(16);
String userRequest = messageMap.getOrDefault("userMessage", StrUtil.EMPTY);
if (StrUtil.isNotBlank(userRequest)) {
System.out.println(">>>>> USER request:" + userRequest);
UserMessage userMessage = new UserMessage(userRequest);
messages.add(userMessage);
}
String aiRequest = messageMap.getOrDefault("aiMessage", StrUtil.EMPTY);
if (StrUtil.isNotBlank(aiRequest)) {
//System.out.println(">>>>> AI request:" + aiRequest);
AssistantMessage aiMessage = new AssistantMessage(aiRequest);
messages.add(aiMessage);
}
Prompt prompt = new Prompt(messages);
ChatResponse chatResponse = chatClient.call(prompt);
AssistantMessage output = chatResponse.getResult().getOutput();
System.out.println(">>>>> AI response:" + output.getContent());
ThreadUtil.sleep(1000);
return output.getContent();
}
单元测试
@Test
public void call8Test() throws Exception {
String url = "/chat/call8";
Map<String, String> messageMap = new HashMap<>(16);
List<String> list = new ArrayList<>();
list.add("深圳的天气如何?");
list.add("今天是否会下雨?");
list.add("深圳的天气如何?");
list.add("exit");
for (String str : list) {
if (str.equals("exit")) {
break;
}
//添加到消息历史
messageMap.put("userMessage", str);
String content = JSONUtil.toJsonStr(messageMap);
String response = mockMvc.perform(postRequestBuilder(url, content)).andReturn().getResponse().getContentAsString();
// 响应乱码处理
String aiMessage = new String(response.getBytes("ISO-8859-1"), "UTF-8");
messageMap.put("aiMessage", aiMessage);
}
}
执行结果
>>>>> USER request:深圳的天气如何?
>>>>> AI response:深圳属于亚热带季风气候,四季分明,雨量充沛。
>>>>> USER request:今天是否会下雨?
>>>>> AI response:今天深圳的天气预报显示为阴天,所以今天不会下雨。
>>>>> USER request:深圳的天气如何?
>>>>> AI response:建议您出门前关注实时天气预报信息,以便更好地规划出行。
预设上下文
代码实例
@PostMapping("/chat/call8")
public String call8(@RequestBody Map<String, String> messageMap) {
List<Message> messages = new ArrayList<>(16);
String sysRequest = messageMap.getOrDefault("sysMessage", StrUtil.EMPTY);
if (StrUtil.isNotBlank(sysRequest)) {
//System.out.println(">>>>> SYS request:" + aiRequest);
SystemMessage sysMessage = new SystemMessage(sysRequest);
messages.add(sysMessage);
}
String userRequest = messageMap.getOrDefault("userMessage", StrUtil.EMPTY);
if (StrUtil.isNotBlank(userRequest)) {
System.out.println(">>>>> USER request:" + userRequest);
UserMessage userMessage = new UserMessage(userRequest);
messages.add(userMessage);
}
String aiRequest = messageMap.getOrDefault("aiMessage", StrUtil.EMPTY);
if (StrUtil.isNotBlank(aiRequest)) {
//System.out.println(">>>>> AI request:" + aiRequest);
AssistantMessage aiMessage = new AssistantMessage(aiRequest);
messages.add(aiMessage);
}
Prompt prompt = new Prompt(messages);
ChatResponse chatResponse = chatClient.call(prompt);
AssistantMessage output = chatResponse.getResult().getOutput();
System.out.println(">>>>> AI response:" + output.getContent());
ThreadUtil.sleep(1000);
return output.getContent();
}
单元测试
@Test
public void call8Test() throws Exception {
String url = "/chat/call8";
Map<String, String> messageMap = new HashMap<>(16);
messageMap.put("sysMessage", "深圳市,简称“深”,别称鹏城,广东省辖地级市、副省级市、国家计划单列市,超大城市,地处广东省南部,珠江口东岸,北回归线以南,东临大亚湾和大鹏湾,西濒珠江口和伶仃洋,南与香港特别行政区相连,北部与东莞市、惠州市接壤。");
List<String> list = new ArrayList<>();
list.add("深圳的天气如何?");
list.add("今天是否会下雨?");
list.add("深圳的天气如何?");
list.add("exit");
for (String str : list) {
if (str.equals("exit")) {
break;
}
//添加到消息历史
messageMap.put("userMessage", str);
String content = JSONUtil.toJsonStr(messageMap);
String response = mockMvc.perform(postRequestBuilder(url, content)).andReturn().getResponse().getContentAsString();
// 响应乱码处理
String aiMessage = new String(response.getBytes("ISO-8859-1"), "UTF-8");
messageMap.put("aiMessage", aiMessage);
}
}
执行结果
>>>>> USER request:深圳的天气如何?
>>>>> AI response:深圳属于亚热带季风性气候,四季分明,雨量充沛。
>>>>> USER request:今天是否会下雨?
>>>>> AI response:根据天气预报,今天深圳可能会有小雨,建议出门携带雨具。
>>>>> USER request:深圳的天气如何?
>>>>> AI response:明天深圳可能会有中雨,建议出门携带雨具,并尽量避免外出。
增加上下文后,AI的回答更满足期望了。