Commit 8011205c authored by 何金镒's avatar 何金镒

dify聊天,必须一条一条的

parent 8555f0b0
//package com.ikonke.konkeaialibabamcp.config;
//
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.data.redis.connection.Message;
//import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
//import org.springframework.data.redis.listener.RedisMessageListenerContainer;
//import org.springframework.stereotype.Component;
//
//@Slf4j
//@Component
//public class RedisKeyExpireListener extends KeyExpirationEventMessageListener {
//
// public RedisKeyExpireListener(RedisMessageListenerContainer listenerContainer) {
// super(listenerContainer);
// }
//
// @Override
// public void doHandleMessage(Message message) {
//
// // 过期的 key
// byte[] body = message.getBody();
//
// // 消息通道
// byte[] channel = message.getChannel();
//
// log.info("redis 过期 ------> message = {}, channel = {}", new String(body), new String(channel));
// }
//}
...@@ -78,12 +78,13 @@ public class DifyControllerV2 { ...@@ -78,12 +78,13 @@ public class DifyControllerV2 {
@ResponseBody @ResponseBody
public JSONObject bottomSkill(@RequestBody JSONObject jsonObject) { public JSONObject bottomSkill(@RequestBody JSONObject jsonObject) {
Long timestamp = System.currentTimeMillis(); Long timestamp = System.currentTimeMillis();
log.info("思必驰 bottomSkill..请求参数:{}",jsonObject.toString());
JSONObject result = jsonObject.getJSONObject("request"); JSONObject result = jsonObject.getJSONObject("request");
JSONObject context = jsonObject.getJSONObject("context"); JSONObject context = jsonObject.getJSONObject("context");
JSONObject device = context.getJSONObject("device"); JSONObject device = context.getJSONObject("device");
String deviceName = device.getStr("deviceName");//这是屏端的sn String deviceName = device.getStr("deviceName");//这是屏端的sn
log.info("【{}】:思必驰 bottomSkill..请求参数:{}",deviceName,jsonObject.toString());
String type = result.get("type").toString(); String type = result.get("type").toString();
String input; //请求文本 String input; //请求文本
String res = "{'version': '1.0','response': {'speak': {'type': 'text','text': '%s','ssml': 'SSML markup text string to speak'}},'shouldEndSession': %b}"; //忽略了部分DSK协议字段,shouldEndSession字段决定是否结束本轮对话 String res = "{'version': '1.0','response': {'speak': {'type': 'text','text': '%s','ssml': 'SSML markup text string to speak'}},'shouldEndSession': %b}"; //忽略了部分DSK协议字段,shouldEndSession字段决定是否结束本轮对话
...@@ -104,14 +105,24 @@ public class DifyControllerV2 { ...@@ -104,14 +105,24 @@ public class DifyControllerV2 {
res = String.format(res, "未绑定主机绑定", false); res = String.format(res, "未绑定主机绑定", false);
response = JSONUtil.parseObj(res); response = JSONUtil.parseObj(res);
} }
// 异步执行对话????
eventPublisher.publishEvent(new DifyChatSteamEvent(this,token.getSn(), input));
String cleanedInput = input.replaceAll("\\[\\s*\\]", "").replaceAll("【\\s*】", "").trim();
if (cleanedInput.isEmpty() || cleanedInput.equals("[]") || cleanedInput.equals("【】")) {
// 处理空列表的情况
cleanedInput = ""; // 或者设置默认值
}
if(StrUtil.isNotBlank(cleanedInput)){
// 异步执行对话????
eventPublisher.publishEvent(new DifyChatSteamEvent(this,token.getSn(), cleanedInput));
}
res = String.format(res, "正在思考中", false); res = String.format(res, "正在思考中", false);
response = JSONUtil.parseObj(res); response = JSONUtil.parseObj(res);
}else if(list.size() > 1){ }else if(list.size() > 1){
log.error("获取CDCToken失败,CDCToken数量大于1"); log.error("【{}】:获取CDCToken失败,CDCToken数量大于1",deviceName);
res = String.format(res, "绑定异常", false); res = String.format(res, "绑定异常", false);
response = JSONUtil.parseObj(res); response = JSONUtil.parseObj(res);
}else{ }else{
...@@ -123,7 +134,7 @@ public class DifyControllerV2 { ...@@ -123,7 +134,7 @@ public class DifyControllerV2 {
response = JSONUtil.parseObj(res); response = JSONUtil.parseObj(res);
e.printStackTrace(); e.printStackTrace();
} finally { } finally {
log.info("思必驰 bottomSkill..响应时间="+(System.currentTimeMillis()-timestamp)); log.info("【{}】:思必驰 bottomSkill..响应时间={}",deviceName,(System.currentTimeMillis()-timestamp));
return response; return response;
} }
} }
...@@ -132,7 +143,7 @@ public class DifyControllerV2 { ...@@ -132,7 +143,7 @@ public class DifyControllerV2 {
@GetMapping("/chatSteamMessages") @GetMapping("/chatSteamMessages")
public Flux<String> chatSteamMessages(@RequestParam(name = "query") String query, public Flux<String> chatSteamMessages(@RequestParam(name = "query") String query,
@RequestHeader("sn") String sn){ @RequestHeader("sn") String sn){
log.info("开始 流式 对话 sn:{}, query:{}",sn,query); log.info("【{}】:开始 流式 对话, query:{}",sn,query);
QueryWrapper<CDCToken> wrapper = new QueryWrapper<>(); QueryWrapper<CDCToken> wrapper = new QueryWrapper<>();
wrapper.eq("sn", sn); wrapper.eq("sn", sn);
......
...@@ -32,37 +32,38 @@ public class DifyChatSteamEventListener { ...@@ -32,37 +32,38 @@ public class DifyChatSteamEventListener {
@EventListener @EventListener
public void handleUserRegisteredEvent(DifyChatSteamEvent event) { public void handleUserRegisteredEvent(DifyChatSteamEvent event) {
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
log.info("处理dify 异步 AI 聊天:sn:{},input:{}", event.getSn(), event.getInput()); log.info("【{}】:处理dify 异步 AI 聊天,input:{}", event.getSn(), event.getInput());
try { try {
synchronized(event.getSn()){
if (!webSocketUtil.getWebSocket(event.getSn())) {
log.error("未找到sn:{}的WebSocket连接,不处理对话", event.getSn());
return;
}
if (!webSocketUtil.getWebSocket(event.getSn())) { QueryWrapper<CDCToken> wrapper = new QueryWrapper<>();
log.error("未找到sn:{}的WebSocket连接,不处理对话", event.getSn()); wrapper.eq("sn", event.getSn());
return; List<CDCToken> list = tokenService.list(wrapper);
} CDCToken token = list.get(0);
QueryWrapper<CDCToken> wrapper = new QueryWrapper<>();
wrapper.eq("sn", event.getSn());
List<CDCToken> list = tokenService.list(wrapper);
CDCToken token = list.get(0);
String url = difyChatSteamMessages + "/dify/v2/chatSteamMessages?query="+event.getInput(); String url = difyChatSteamMessages + "/dify/v2/chatSteamMessages?query="+event.getInput();
log.info("开始 dify 请求:{}",url); log.info("【{}】:开始 dify 请求:{}",event.getSn(),url);
String ai_result = HttpRequest.get(url) String ai_result = HttpRequest.get(url)
.header("ccuName", token.getCcuId() ) .header("ccuName", token.getCcuId() )
.header("token", token.getAccessToken()) .header("token", token.getAccessToken())
.header("sn",token.getSn()) .header("sn",token.getSn())
.timeout(600000) .timeout(600000)
.execute().body(); .execute().body();
log.info("dify请求返回:{}",ai_result); log.info("【{}】:dify请求返回:{}",event.getSn(),ai_result);
// String result_end = ai_result.replaceAll("(?m)^\\s*$[\r\n]*", "").replaceAll("[\r\n]+", "\n").replaceAll("[\r\n]", "").trim(); // String result_end = ai_result.replaceAll("(?m)^\\s*$[\r\n]*", "").replaceAll("[\r\n]+", "\n").replaceAll("[\r\n]", "").trim();
// log.info("dify请求返回2--->:{}",result_end); // log.info("dify请求返回2--->:{}",result_end);
// 通过WebSocket发送消息给屏端 // 通过WebSocket发送消息给屏端
webSocketUtil.sendToSingle(event.getSn(), ai_result); webSocketUtil.sendToSingle(event.getSn(), ai_result);
log.info("dify异步请求耗时--->:{}",System.currentTimeMillis() - startTime); log.info("【{}】:dify异步请求耗时--->:{}",event.getSn(),System.currentTimeMillis() - startTime);
}
} catch (Exception e) { } catch (Exception e) {
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
e.printStackTrace(); e.printStackTrace();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment