Procházet zdrojové kódy

龙虾模拟对话

lk před 1 měsícem
rodič
revize
cec072fbbc

+ 35 - 0
fs-company/src/main/java/com/fs/company/controller/companyWorkflow/CompanyWorkflowLobsterSimulateController.java

@@ -0,0 +1,35 @@
+package com.fs.company.controller.companyWorkflow;
+
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.utils.ServletUtils;
+import com.fs.company.param.CompanyWorkflowLobsterSimulateParam;
+import com.fs.company.service.ICompanyWorkflowLobsterService;
+import com.fs.framework.security.LoginUser;
+import com.fs.framework.service.TokenService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * AI工作流模拟对话Controller
+ */
+@RestController
+@RequestMapping("/workflow")
+public class CompanyWorkflowLobsterSimulateController extends BaseController {
+
+    @Autowired
+    private ICompanyWorkflowLobsterService lobsterService;
+
+    @Autowired
+    private TokenService tokenService;
+
+    /**
+     * 模拟对话
+     */
+    @PostMapping("/simulate")
+    public AjaxResult simulate(@RequestBody CompanyWorkflowLobsterSimulateParam params) {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        String reply = lobsterService.simulate(loginUser.getCompany().getCompanyId(), params.getTemplateId(), params.getContent(), params.getSimulateDate());
+        return AjaxResult.success(reply);
+    }
+}

+ 2 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyWorkflowLobsterNodeMapper.java

@@ -19,4 +19,6 @@ public interface CompanyWorkflowLobsterNodeMapper extends BaseMapper<CompanyWork
     void updateBatch(@Param("list") ArrayList<CompanyWorkflowLobsterNode> nodesNew);
 
     int checkNodeGreeting(@Param("templateId") Long templateId);
+
+    List<String> selectCallWordsByTemplateId(@Param("templateId") Long templateId);
 }

+ 16 - 0
fs-service/src/main/java/com/fs/company/param/CompanyWorkflowLobsterSimulateParam.java

@@ -0,0 +1,16 @@
+package com.fs.company.param;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class CompanyWorkflowLobsterSimulateParam implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private Long templateId;
+
+    private String content;
+
+    private String simulateDate;
+}

+ 2 - 0
fs-service/src/main/java/com/fs/company/service/ICompanyWorkflowLobsterService.java

@@ -63,4 +63,6 @@ public interface ICompanyWorkflowLobsterService {
     AjaxResult updateTemplateStatus(Long companyId, String username, Long templateId, Integer status);
 
     List<CompanyWorkflowLobster> listTemplateByStatus(Long companyId, Integer status);
+
+    String simulate(Long companyId, Long templateId, String content, String simulateDate);
 }

+ 48 - 22
fs-service/src/main/java/com/fs/company/service/impl/CompanyWorkflowLobsterServiceImpl.java

@@ -2,42 +2,28 @@ package com.fs.company.service.impl;
 
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fs.common.core.domain.AjaxResult;
 import com.fs.common.core.domain.R;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.spring.SpringUtils;
-import com.fs.company.domain.CompanyWorkflowLobster;
-import com.fs.company.domain.CompanyTagTemplateBinding;
-import com.fs.company.domain.CompanyWorkflowLobsterEdge;
-import com.fs.company.domain.CompanyWorkflowLobsterNode;
-import com.fs.company.domain.CompanyWorkflowLobsterRecord;
-import com.fs.company.domain.CompanyWorkflowLobsterVariable;
-import com.fs.company.mapper.CompanyWorkflowLobsterEdgeMapper;
-import com.fs.company.mapper.CompanyWorkflowLobsterMapper;
-import com.fs.company.mapper.CompanyWorkflowLobsterNodeMapper;
-import com.fs.company.mapper.CompanyWorkflowLobsterRecordMapper;
-import com.fs.company.mapper.CompanyWorkflowLobsterVariableMapper;
-import com.fs.company.mapper.CompanyTagTemplateBindingMapper;
-import com.fs.company.param.CompanyWorkflowLobsterCanvasParam;
-import com.fs.company.param.CompanyWorkflowLobsterConfirmParam;
-import com.fs.company.param.CompanyWorkflowLobsterEdgeParam;
-import com.fs.company.param.CompanyWorkflowLobsterGenerateParam;
-import com.fs.company.param.CompanyWorkflowLobsterNodeParam;
-import com.fs.company.param.CompanyWorkflowLobsterVariableParam;
+import com.fs.company.domain.*;
+import com.fs.company.mapper.*;
+import com.fs.company.param.*;
 import com.fs.company.service.ICompanyWorkflowLobsterService;
+import com.fs.company.utils.JsonUtils;
 import com.fs.fastgptApi.param.ChatParam;
 import com.fs.fastgptApi.service.ChatService;
-import com.fs.wxwork.dto.WxWorkSendTextMsgDTO;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 
-import java.sql.Time;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -70,7 +56,10 @@ public class CompanyWorkflowLobsterServiceImpl implements ICompanyWorkflowLobste
         return all.subList(start, end);
     }
 
-    private static final String LOBSTER_KEY = "fastgpt-lDP6kVelHf2p8j80vfz2Kl7g9PjacwJoTmCplEBGWBaGMCRtv7SueW5mZ4iXe";
+    @Value("${company.lobsterKey:fastgpt-lDP6kVelHf2p8j80vfz2Kl7g9PjacwJoTmCplEBGWBaGMCRtv7SueW5mZ4iXe}")
+    private String LOBSTER_KEY;
+    @Value("${company.lobsterShowKey:fastgpt-hgf4m8QRTAm2pv3SievqRLPHKSJHeX3t8tc4Li15eq0lkNQXXxSDXLKf}")
+    private String LOBSTER_SHOW_KEY;
     private static final ObjectMapper mapper = new ObjectMapper();
     private static final String AI_API = "http://129.28.170.206:3000/api";
 
@@ -707,4 +696,41 @@ public class CompanyWorkflowLobsterServiceImpl implements ICompanyWorkflowLobste
         return all;
     }
 
+    @Override
+    public String simulate(Long companyId, Long templateId, String content, String simulateDate) {
+        JSONObject requestJson = new JSONObject();
+        requestJson.set("userContent", content);
+        requestJson.set("createTime", simulateDate);
+        List<String> callWords = nodeMapper.selectCallWordsByTemplateId(templateId);
+        requestJson.set("callWord", callWords);
+        String requestStr = requestJson.toString();
+        try {
+            R r = callAiService(requestStr, templateId, LOBSTER_SHOW_KEY);
+            
+            if (r.get("data") != null) {
+                Object data = r.get("data");
+                String jsonStr = JSONUtil.toJsonStr(data);
+                ObjectMapper mapper = new ObjectMapper();
+                JsonNode root = mapper.readTree(jsonStr);
+
+                // 提取 choices[0].message.content
+                String choiceContent = root.path("choices")
+                        .path(0)
+                        .path("message")
+                        .path("content")
+                        .asText();
+
+                // 解析 content 中的 JSON 字符串,提取 aiContent
+                JsonNode contentJson = mapper.readTree(choiceContent);
+                String aiContent = contentJson.path("aiContent").asText();
+
+                return aiContent;
+            }
+            return r.toString();
+        } catch (Exception e) {
+            log.error("模拟对话失败: {}", e.getMessage(), e);
+            throw new RuntimeException("模拟对话失败: " + e.getMessage());
+        }
+    }
+
 }

+ 7 - 0
fs-service/src/main/resources/mapper/company/CompanyWorkflowLobsterNodeMapper.xml

@@ -56,5 +56,12 @@
         and del_flag = 0
         and node_type = 2
     </select>
+    <select id="selectCallWordsByTemplateId" resultType="java.lang.String">
+        select message_template from company_workflow_lobster_node
+        where workflow_id = #{templateId}
+          and del_flag = 0
+          and node_type = 2
+          and message_template is not null
+    </select>
 
 </mapper>