fix: flowise

This commit is contained in:
stream 2025-12-08 14:51:58 +08:00
parent 8e9312482f
commit 8876b4e70f
5 changed files with 121 additions and 16 deletions

View File

@ -20,19 +20,29 @@ import org.springframework.web.bind.annotation.RestController;
@RequiredArgsConstructor
public class TeFlowiseController extends BaseController {
private final FlowiseActionService flowiseActionService;
@ApiOperation("调用flowise")
@PostMapping("/start")
public AjaxResult start(String question) {
return AjaxResult.ok(flowiseActionService.start(question));
}
@ApiOperation("终止flowise")
@GetMapping("/abort")
public AjaxResult abort() {
return AjaxResult.ok(flowiseActionService.abort());
}
@ApiOperation("执行指令")
@PostMapping("/command")
public AjaxResult command(@RequestBody FlowiseActionRequestVO request) {
return AjaxResult.ok(flowiseActionService.command(request));
}
@ApiOperation("闲聊")
@GetMapping("/chat")
public AjaxResult chat(@RequestParam("terminalId") String terminalId,
@RequestParam("text") String text,
@RequestParam("bioId") String bioId) {
return AjaxResult.success(flowiseActionService.chat(terminalId, text,bioId));
public AjaxResult chat(@RequestParam("text") String text) {
return AjaxResult.ok(flowiseActionService.chat(text));
}
}

View File

@ -16,9 +16,9 @@ spring:
slave:
# 从数据源开关/默认关闭
enabled: false
url:
username:
password:
url:
username:
password:
# 初始连接数
initialSize: 5
# 最小连接池数量
@ -42,7 +42,7 @@ spring:
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
webStatFilter:
webStatFilter:
enabled: true
statViewServlet:
enabled: true
@ -119,4 +119,10 @@ api:
agents:
INTENT_RECOGNITION: # 意图识别
app-id: d3c98sp0gdon0fcf6l00
app-key: d3c98vp0gdon0fcf6n20
app-key: d3c98vp0gdon0fcf6n20
flowise:
tts: 192.168.0.222:8080/tts/
start: http://192.168.0.134:3000/api/v1/prediction/f99329e9-b33d-437d-90ed-69eaa8a05418
abort: http://192.168.0.134:3000/api/v1/chatmessage/abort/f99329e9-b33d-437d-90ed-69eaa8a05418/
api-key: pg61JW6W_GXyqmqSoURJ4mlSRrCMRzGLBJli_w3BFkg

View File

@ -119,4 +119,10 @@ api:
agents:
INTENT_RECOGNITION: # 意图识别
app-id: d3c98sp0gdon0fcf6l00
app-key: d3c98vp0gdon0fcf6n20
app-key: d3c98vp0gdon0fcf6n20
flowise:
tts: 192.168.0.222:8080/tts/
start: http://192.168.0.134:3000/api/v1/prediction/f99329e9-b33d-437d-90ed-69eaa8a05418
abort: http://192.168.0.134:3000/api/v1/chatmessage/abort/f99329e9-b33d-437d-90ed-69eaa8a05418/
api-key: pg61JW6W_GXyqmqSoURJ4mlSRrCMRzGLBJli_w3BFkg

View File

@ -114,7 +114,7 @@ public class SecurityConfig
requests.antMatchers("/login", "/register", "/captchaImage").permitAll()
// 静态资源可匿名访问
.antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
.antMatchers("/flowise/**","/kws/**","/ws/**","/api/grpc/**","/show/**","/node-red/**","/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
.antMatchers("/flow/**","/flowise/**","/kws/**","/ws/**","/api/grpc/**","/show/**","/node-red/**","/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
// 除上面外的所有请求全部需要鉴权认证
.anyRequest().authenticated();
})

View File

@ -1,14 +1,21 @@
package com.cmvr.test.service;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson2.JSONObject;
import com.cmvr.common.exception.GlobalException;
import com.cmvr.common.utils.http.CallAPIUtil;
import com.cmvr.common.utils.uuid.IdUtils;
import com.cmvr.edge.client.model.EdgeCommonVO;
import com.cmvr.edge.client.service.EdgeBioHeadService;
import com.cmvr.test.enums.FlowiseActionEnum;
import com.cmvr.test.model.vo.FlowiseActionRequestVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
@ -16,11 +23,87 @@ import java.util.Map;
@Service
@RequiredArgsConstructor
public class FlowiseActionService {
private final EdgeBioHeadService edgeBioHeadService;
@Value("${flowise.tts}")
private String flowiseTts;
@Value("${flowise.start}")
private String flowiseStart;
@Value("${flowise.abort}")
private String flowiseAbort;
@Value("${flowise.api-key}")
private String flowiseApiKey;
@Resource(name = "threadPoolTaskExecutor")
private final ThreadPoolTaskExecutor executor;
private final String terminalId = "4ed1246c465b97975f96c9ef8371a3bd";
private final String bioId = "bio_head";
private final Object lock = new Object();
private String chatId = null;
public String start(String question) {
synchronized (lock) {
if (chatId != null) {
return "Flow is already running: " + chatId;
}
chatId = IdUtils.fastUUID();
JSONObject body = new JSONObject();
body.put("question", question);
body.put("chatId", chatId);
body.put("streaming", true);
executor.submit(() -> {
try {
HttpRequest.post(flowiseStart)
.header("Content-Type", "application/json")
.body(body.toJSONString())
.timeout(0)
.execute()
.body();
} catch (Exception e) {
throw new GlobalException("flowise 流程执行失败: ", e.getMessage());
}
});
return chatId;
}
}
public String abort() {
EdgeCommonVO edgeCommonVO = new EdgeCommonVO();
edgeCommonVO.setDeviceId(bioId);
edgeCommonVO.setTerminalId(terminalId);
edgeBioHeadService.speakStop(edgeCommonVO);
CallAPIUtil.doPostJson(flowiseTts + "stop", null, null);
synchronized (lock) {
if (chatId == null) {
return "No flow running.";
}
String id = chatId;
String result = HttpRequest.put(flowiseAbort + id)
.header("Authorization", "Bearer " + flowiseApiKey)
.execute()
.body();
chatId = null;
return result;
}
}
public String command(FlowiseActionRequestVO request) {
String terminalId = "4ed1246c465b97975f96c9ef8371a3bd";
String bioId = "bio_head";
String action = request.getAction();
FlowiseActionEnum actionEnum = FlowiseActionEnum.fromAction(action);
switch (actionEnum) {
@ -45,7 +128,7 @@ public class FlowiseActionService {
}
}
public String chat(String terminalId, String text, String bioId) {
public String chat(String text) {
// 播放前调用张嘴
EdgeCommonVO edgeCommonVO = new EdgeCommonVO();
edgeCommonVO.setDeviceId(bioId);
@ -56,7 +139,7 @@ public class FlowiseActionService {
body.put("voice", "x4_yezi");
// edgeBioHeadService.speakStart(edgeCommonVO);
CallAPIUtil.doPostJson("192.168.0.222:8080/tts/play", null, body);
CallAPIUtil.doPostJson(flowiseTts + "play", null, body);
} finally {
// 播放完成调用闭嘴
// edgeBioHeadService.speakStop(edgeCommonVO);