Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
K
konke-ai-alibaba-mcp
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
何金镒
konke-ai-alibaba-mcp
Commits
8011205c
Commit
8011205c
authored
Sep 16, 2025
by
何金镒
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
dify聊天,必须一条一条的
parent
8555f0b0
Changes
4
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
211 additions
and
220 deletions
+211
-220
src/main/java/com/ikonke/konkeaialibabamcp/config/RedisKeyExpireListener.java
...onke/konkeaialibabamcp/config/RedisKeyExpireListener.java
+0
-28
src/main/java/com/ikonke/konkeaialibabamcp/controller/DifyControllerV2.java
...ikonke/konkeaialibabamcp/controller/DifyControllerV2.java
+17
-6
src/main/java/com/ikonke/konkeaialibabamcp/event/listener/DifyChatSteamEventListener.java
...alibabamcp/event/listener/DifyChatSteamEventListener.java
+25
-24
src/test/java/com/ikonke/konkeaialibabamcp/KonkeAiAlibabaMcpApplicationTests.java
.../konkeaialibabamcp/KonkeAiAlibabaMcpApplicationTests.java
+169
-162
No files found.
src/main/java/com/ikonke/konkeaialibabamcp/config/RedisKeyExpireListener.java
deleted
100644 → 0
View file @
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));
// }
//}
src/main/java/com/ikonke/konkeaialibabamcp/controller/DifyControllerV2.java
View file @
8011205c
...
...
@@ -78,12 +78,13 @@ public class DifyControllerV2 {
@ResponseBody
public
JSONObject
bottomSkill
(
@RequestBody
JSONObject
jsonObject
)
{
Long
timestamp
=
System
.
currentTimeMillis
();
log
.
info
(
"思必驰 bottomSkill..请求参数:{}"
,
jsonObject
.
toString
());
JSONObject
result
=
jsonObject
.
getJSONObject
(
"request"
);
JSONObject
context
=
jsonObject
.
getJSONObject
(
"context"
);
JSONObject
device
=
context
.
getJSONObject
(
"device"
);
String
deviceName
=
device
.
getStr
(
"deviceName"
);
//这是屏端的sn
log
.
info
(
"【{}】:思必驰 bottomSkill..请求参数:{}"
,
deviceName
,
jsonObject
.
toString
());
String
type
=
result
.
get
(
"type"
).
toString
();
String
input
;
//请求文本
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 {
res
=
String
.
format
(
res
,
"未绑定主机绑定"
,
false
);
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
);
response
=
JSONUtil
.
parseObj
(
res
);
}
else
if
(
list
.
size
()
>
1
){
log
.
error
(
"
获取CDCToken失败,CDCToken数量大于1"
);
log
.
error
(
"
【{}】:获取CDCToken失败,CDCToken数量大于1"
,
deviceName
);
res
=
String
.
format
(
res
,
"绑定异常"
,
false
);
response
=
JSONUtil
.
parseObj
(
res
);
}
else
{
...
...
@@ -123,7 +134,7 @@ public class DifyControllerV2 {
response
=
JSONUtil
.
parseObj
(
res
);
e
.
printStackTrace
();
}
finally
{
log
.
info
(
"
思必驰 bottomSkill..响应时间="
+
(
System
.
currentTimeMillis
()-
timestamp
));
log
.
info
(
"
【{}】:思必驰 bottomSkill..响应时间={}"
,
deviceName
,
(
System
.
currentTimeMillis
()-
timestamp
));
return
response
;
}
}
...
...
@@ -132,7 +143,7 @@ public class DifyControllerV2 {
@GetMapping
(
"/chatSteamMessages"
)
public
Flux
<
String
>
chatSteamMessages
(
@RequestParam
(
name
=
"query"
)
String
query
,
@RequestHeader
(
"sn"
)
String
sn
){
log
.
info
(
"
开始 流式 对话 sn:{}
, query:{}"
,
sn
,
query
);
log
.
info
(
"
【{}】:开始 流式 对话
, query:{}"
,
sn
,
query
);
QueryWrapper
<
CDCToken
>
wrapper
=
new
QueryWrapper
<>();
wrapper
.
eq
(
"sn"
,
sn
);
...
...
src/main/java/com/ikonke/konkeaialibabamcp/event/listener/DifyChatSteamEventListener.java
View file @
8011205c
...
...
@@ -32,37 +32,38 @@ public class DifyChatSteamEventListener {
@EventListener
public
void
handleUserRegisteredEvent
(
DifyChatSteamEvent
event
)
{
long
startTime
=
System
.
currentTimeMillis
();
log
.
info
(
"
处理dify 异步 AI 聊天:sn:{}
,input:{}"
,
event
.
getSn
(),
event
.
getInput
());
log
.
info
(
"
【{}】:处理dify 异步 AI 聊天
,input:{}"
,
event
.
getSn
(),
event
.
getInput
());
try
{
synchronized
(
event
.
getSn
()){
if
(!
webSocketUtil
.
getWebSocket
(
event
.
getSn
()))
{
log
.
error
(
"未找到sn:{}的WebSocket连接,不处理对话"
,
event
.
getSn
());
return
;
}
if
(!
webSocketUtil
.
getWebSocket
(
event
.
getSn
()))
{
log
.
error
(
"未找到sn:{}的WebSocket连接,不处理对话"
,
event
.
getSn
());
return
;
}
QueryWrapper
<
CDCToken
>
wrapper
=
new
QueryWrapper
<>();
wrapper
.
eq
(
"sn"
,
event
.
getSn
());
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
();
log
.
info
(
"开始 dify 请求:{}"
,
url
);
String
ai_result
=
HttpRequest
.
get
(
url
)
.
header
(
"ccuName"
,
token
.
getCcuId
()
)
.
header
(
"token"
,
token
.
getAccessToken
())
.
header
(
"sn"
,
token
.
getSn
())
.
timeout
(
600000
)
.
execute
().
body
();
String
url
=
difyChatSteamMessages
+
"/dify/v2/chatSteamMessages?query="
+
event
.
getInput
();
log
.
info
(
"【{}】:开始 dify 请求:{}"
,
event
.
getSn
()
,
url
);
String
ai_result
=
HttpRequest
.
get
(
url
)
.
header
(
"ccuName"
,
token
.
getCcuId
()
)
.
header
(
"token"
,
token
.
getAccessToken
())
.
header
(
"sn"
,
token
.
getSn
())
.
timeout
(
600000
)
.
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();
// log.info("dify请求返回2--->:{}",result_end);
// String result_end = ai_result.replaceAll("(?m)^\\s*$[\r\n]*", "").replaceAll("[\r\n]+", "\n").replaceAll("[\r\n]", "").trim();
// log.info("dify请求返回2--->:{}",result_end);
// 通过WebSocket发送消息给屏端
webSocketUtil
.
sendToSingle
(
event
.
getSn
(),
ai_result
);
// 通过WebSocket发送消息给屏端
webSocketUtil
.
sendToSingle
(
event
.
getSn
(),
ai_result
);
log
.
info
(
"dify异步请求耗时--->:{}"
,
System
.
currentTimeMillis
()
-
startTime
);
log
.
info
(
"【{}】:dify异步请求耗时--->:{}"
,
event
.
getSn
(),
System
.
currentTimeMillis
()
-
startTime
);
}
}
catch
(
Exception
e
)
{
Thread
.
currentThread
().
interrupt
();
e
.
printStackTrace
();
...
...
src/test/java/com/ikonke/konkeaialibabamcp/KonkeAiAlibabaMcpApplicationTests.java
View file @
8011205c
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment