瀏覽代碼

20250619-生成说明书修改

lrj 3 月之前
父節點
當前提交
d2881c6297

+ 11 - 0
src/main/java/cn/cslg/pas/common/model/dify/GenerateContentVO.java

@@ -0,0 +1,11 @@
+package cn.cslg.pas.common.model.dify;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class GenerateContentVO {
+    private List<String> claims;
+    private String effect;
+}

+ 14 - 0
src/main/java/cn/cslg/pas/domain/dify/GetInstructAnswerDTO.java

@@ -0,0 +1,14 @@
+package cn.cslg.pas.domain.dify;
+
+import lombok.Data;
+
+@Data
+public class GetInstructAnswerDTO {
+    private String claim;
+    private String background;
+    private Integer index;
+    private String type;
+    private String conversationId;
+    private String claims;
+    private String effects;
+}

+ 100 - 33
src/main/java/cn/cslg/pas/service/dify/GenerateInstructionService.java

@@ -5,6 +5,7 @@ import cn.cslg.pas.common.model.dify.confessionSession.AddConfessionSessionDTO;
 import cn.cslg.pas.common.utils.ClaimUtils.ClaimSplitUtils;
 import cn.cslg.pas.common.utils.DateUtils;
 import cn.cslg.pas.common.utils.FileUtils;
+import cn.cslg.pas.common.utils.LoginUtils;
 import cn.cslg.pas.common.utils.StringUtils;
 import cn.cslg.pas.common.vo.PatentRightParams;
 import cn.cslg.pas.common.vo.RePatentClaim;
@@ -12,6 +13,7 @@ import cn.cslg.pas.domain.business.ReportProject;
 import cn.cslg.pas.domain.business.ReportTemple;
 import cn.cslg.pas.domain.dify.AssoConfessionSessionFile;
 import cn.cslg.pas.domain.dify.ConfessionSession;
+import cn.cslg.pas.domain.dify.GetInstructAnswerDTO;
 import cn.cslg.pas.exception.ExceptionEnum;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.service.business.ReportTempleService;
@@ -70,10 +72,11 @@ public class GenerateInstructionService {
     private Integer SESSION_ID;
     @Value("${DIFY.gInstructionKey}")
     private String gInstructionKey;
-
+    @Autowired
+    private LoginUtils loginUtils;
 
     public String getClaimContent(String claim) {
-       claim= claim.replaceAll("所述","");
+        claim = claim.replaceAll("所述", "");
         // 正则表达式模式(注意 Java 中需要双反斜杠转义)
         String regex = "其特征在于[,。;!?、::]+(.+)";
         Pattern pattern = Pattern.compile(regex);
@@ -88,21 +91,23 @@ public class GenerateInstructionService {
     }
 
     public String getMainClaimContent(String claim) {
-        claim= claim.replaceAll("所述","");
+        claim = claim.replaceAll("所述", "");
         // 正则表达式模式(注意 Java 中需要双反斜杠转义)
-        claim= claim.replaceAll("^(\\d+[.、]|\\[[0-9]+])","");
-        claim =claim.replaceAll("其特征在于[,。;!?、::]+(.+)","");
+        claim = claim.replaceAll("^(\\d+[.、]|\\[[0-9]+])", "");
+        claim = claim.replaceAll("其特征在于[,。;!?、::]", "");
         return claim; // 未找到匹配时返回空字符串
 
 
     }
+
     public String getClaimText(String claim) {
         String combinedRegex = "^(\\d+[.、]|\\[[0-9]+])";
         String output = claim.replaceAll(combinedRegex, "").replaceAll("[\\n\\r]+$", "");
 
-        return  output; // 未找到匹配时返回空字符串
+        return output; // 未找到匹配时返回空字符串
 
     }
+
     private XWPFTemplate getTemplate(Map<String, Object> map, String filePath) {
         //装载标的专利信息
         XWPFTemplate template = null;
@@ -120,7 +125,8 @@ public class GenerateInstructionService {
 
     public Flux<String> generateInstruction2(GenerateClaimDTO generateClaimDTO) throws Exception {
         Integer templeId = 19;
-        String claim = generateClaimDTO.getClaim();
+        String orgClaim = generateClaimDTO.getClaim();
+        String claim = orgClaim.replaceAll("\n", "").replaceAll("\\\\n", "");
         String background = generateClaimDTO.getBackground();
         Map<String, Object> addMap = new HashMap<>();
         Map<String, Object> queryMap = new HashMap<>();
@@ -144,6 +150,7 @@ public class GenerateInstructionService {
         return Flux.create(emitter -> {
             new Thread(() -> {
                 try {
+
                     //;流程开始
                     String startMess = getFluxMessage("", ALL_START, "");
                     emitter.next(startMess);
@@ -161,7 +168,7 @@ public class GenerateInstructionService {
                     map.put("conversionId", conversionId);
                     map.put("technical", technical);
                     //生成背景技术
-                    GenerateInstructAnswerVO generateInstructAnswerVO4 =  this.generateBackGround(emitter, background);
+                    GenerateInstructAnswerVO generateInstructAnswerVO4 = this.generateBackGround(emitter, background);
                     map.put("background", generateInstructAnswerVO4.getAnswers());
                     //更新会话
                     String name = DateUtils.dateTimeToStr(new Date(), "yyyyMMdd");
@@ -174,8 +181,8 @@ public class GenerateInstructionService {
                     String startMessage = getFluxMessage(FIELD_CONTENT, START, "");
                     emitter.next(startMessage);
                     ClaimExplainVO claimExplainVO = this.getFirstImplementation(rePatentClaims.get(0), background, conversionId);
-                    GenerateInstructAnswerVO generateInstructAnswerVO3 = this.generateContent(emitter, rePatentClaims, claimExplainVO);
-                    map.put("content",generateInstructAnswerVO3.getAnswers());
+                    GenerateInstructAnswerVO generateInstructAnswerVO3 = this.generateContent(emitter, rePatentClaims, claimExplainVO, conversionId, title);
+                    map.put("content", generateInstructAnswerVO3.getAnswers());
                     //生成具体实施方式
                     GenerateInstructAnswerVO generateInstructAnswerVO2 = this.generateImplementation(emitter, claimExplainVO, background, conversionId, rePatentClaims);
                     map.put("implementation", generateInstructAnswerVO2.getImplementations());
@@ -239,7 +246,11 @@ public class GenerateInstructionService {
         fluxSink.next(startMessage);
         Boolean ifError = false;
         try {
-            generateInstructAnswerVO = this.getAnswerFromAI(claim, background, null, "g&technical", null);
+            GetInstructAnswerDTO getInstructAnswerDTO = new GetInstructAnswerDTO();
+            getInstructAnswerDTO.setBackground(background);
+            getInstructAnswerDTO.setClaim(claim);
+            getInstructAnswerDTO.setType("g&technical");
+            generateInstructAnswerVO = this.getAnswerFromAI(getInstructAnswerDTO);
             String answer = generateInstructAnswerVO.getAnswer();
             generateTechnicalVO = JSONObject.parseObject(answer, GenerateTechnicalVO.class);
         } catch (Exception e) {
@@ -284,7 +295,13 @@ public class GenerateInstructionService {
         ClaimExplainVO claimExplainVO = null;
         try {
             String claimContent = rePatentClaim.getContent();
-            GenerateInstructAnswerVO generateInstructAnswerVO = this.getAnswerFromAI(claimContent, background, 0, "g&implementation", conversationId);
+            GetInstructAnswerDTO getInstructAnswerDTO = new GetInstructAnswerDTO();
+            getInstructAnswerDTO.setClaim(claimContent);
+            getInstructAnswerDTO.setIndex(0);
+            getInstructAnswerDTO.setBackground(background);
+            getInstructAnswerDTO.setType("g&implementation");
+            getInstructAnswerDTO.setConversationId(conversationId);
+            GenerateInstructAnswerVO generateInstructAnswerVO = this.getAnswerFromAI(getInstructAnswerDTO);
             String answer = generateInstructAnswerVO.getAnswer();
             claimExplainVO = JSONObject.parseObject(answer, ClaimExplainVO.class);
         } catch (Exception e) {
@@ -322,7 +339,13 @@ public class GenerateInstructionService {
                 try {
 
                     String claimContent = rePatentClaim.getContent();
-                    GenerateInstructAnswerVO generateInstructAnswerVO = this.getAnswerFromAI(claimContent, background, i, "g&implementation", conversationId);
+                    GetInstructAnswerDTO getInstructAnswerDTO = new GetInstructAnswerDTO();
+                    getInstructAnswerDTO.setClaim(claimContent);
+                    getInstructAnswerDTO.setBackground(background);
+                    getInstructAnswerDTO.setIndex(i);
+                    getInstructAnswerDTO.setType("g&implementation");
+                    getInstructAnswerDTO.setConversationId(conversationId);
+                    GenerateInstructAnswerVO generateInstructAnswerVO = this.getAnswerFromAI(getInstructAnswerDTO);
                     String answer = generateInstructAnswerVO.getAnswer();
                     if (generateInstructAnswerVO.getConversionId() != null) {
                         mainVO.setConversionId(generateInstructAnswerVO.getConversionId());
@@ -338,8 +361,8 @@ public class GenerateInstructionService {
             String message = "";
             String reStr = null;
             if (claimExplainVO != null) {
-               List<String> contents = this.formatImplementation(claimExplainVO,rePatentClaim);
-                if(contents.size()>0){
+                List<String> contents = this.formatImplementation(claimExplainVO, rePatentClaim);
+                if (contents.size() > 0) {
                     reContents.addAll(contents);
                     reStr = StringUtils.join(contents, "\n");
                 }
@@ -368,18 +391,18 @@ public class GenerateInstructionService {
      * @param claimExplainVO
      * @return
      */
-    private List<String> formatImplementation(ClaimExplainVO claimExplainVO,RePatentClaim rePatentClaim) {
+    private List<String> formatImplementation(ClaimExplainVO claimExplainVO, RePatentClaim rePatentClaim) {
         String reStr = null;
         List<String> contents = new ArrayList<>();
         String explainVOClaim = claimExplainVO.getClaim();
         String effect = claimExplainVO.getEffects();
         String explain = claimExplainVO.getExplain();
         if (explainVOClaim != null && !explainVOClaim.trim().equals("")) {
-            String tem="";
+            String tem = "";
             if (rePatentClaim != null && rePatentClaim.getType() != null && rePatentClaim.getType().equals(1)) {
-                tem =  this.getMainClaimContent(rePatentClaim.getContent());
+                tem = explainVOClaim;
             } else {
-                tem = "在一实施方式中,"+this.getClaimContent(rePatentClaim.getContent());
+                tem = "在一实施方式中," + explainVOClaim;
             }
 
             contents.add(tem);
@@ -404,7 +427,14 @@ public class GenerateInstructionService {
         return json;
     }
 
-    public GenerateInstructAnswerVO getAnswerFromAI(String claim, String background, Integer index, String type, String conversationId) throws Exception {
+    public GenerateInstructAnswerVO getAnswerFromAI(GetInstructAnswerDTO getInstructAnswerDTO) throws Exception {
+        String type = getInstructAnswerDTO.getType();
+        String conversationId = getInstructAnswerDTO.getConversationId();
+        String claim = getInstructAnswerDTO.getClaim();
+        String claims = getInstructAnswerDTO.getClaims();
+        String background = getInstructAnswerDTO.getBackground();
+        Integer index = getInstructAnswerDTO.getIndex();
+        String effects = getInstructAnswerDTO.getEffects();
         GenerateInstructAnswerVO generateInstructAnswerVO = new GenerateInstructAnswerVO();
         DifyChatMessageDTO difyChatMessageDTO = new DifyChatMessageDTO();
         difyChatMessageDTO.setUser("1");
@@ -415,6 +445,8 @@ public class GenerateInstructionService {
         map.put("claim", claim);
         map.put("background", background);
         map.put("num_index", index);
+        map.put("effect", effects);
+        map.put("claims", claims);
         difyChatMessageDTO.setInputs(map);
         String re = difyService.chatMessage(difyChatMessageDTO, gInstructionKey);
         JSONObject jsonObject = JSONObject.parseObject(re);
@@ -441,8 +473,8 @@ public class GenerateInstructionService {
         fluxSink.next(message);
         String endMessage = getFluxMessage(FIELD_BACKGROUND, END, "");
         fluxSink.next(endMessage);
-      List<String> answers =Arrays.asList( background.split("\n"));
-      generateInstructAnswerVO.setAnswers(answers);
+        List<String> answers = Arrays.asList(background.split("\n"));
+        generateInstructAnswerVO.setAnswers(answers);
         return generateInstructAnswerVO;
     }
 
@@ -453,20 +485,55 @@ public class GenerateInstructionService {
      * @param rePatentClaims
      * @return
      */
-    public GenerateInstructAnswerVO generateContent(FluxSink fluxSink, List<RePatentClaim> rePatentClaims, ClaimExplainVO claimExplainVO) {
+    public GenerateInstructAnswerVO generateContent(FluxSink fluxSink, List<RePatentClaim> rePatentClaims, ClaimExplainVO claimExplainVO, String conversationId, String title) {
         GenerateInstructAnswerVO generateInstructAnswerVO = new GenerateInstructAnswerVO();
 
         List<String> contentStrs = new ArrayList<>();
-        for (RePatentClaim rePatentClaim : rePatentClaims) {
-            String claimContent = rePatentClaim.getContent();
-            String temContent = "";
-            if (rePatentClaim != null && rePatentClaim.getType() != null && rePatentClaim.getType().equals(1)) {
-                temContent =  this.getMainClaimContent(claimContent);
-            } else {
-                temContent = "其中,"+this.getClaimContent(claimContent);
+        List<String> claimStrsList = rePatentClaims.stream().map(RePatentClaim::getContent).collect(Collectors.toList());
+        String claimStrJson = JSONObject.toJSONString(claimStrsList);
+        GetInstructAnswerDTO getInstructAnswerDTO = new GetInstructAnswerDTO();
+        getInstructAnswerDTO.setClaims(claimStrJson);
+        getInstructAnswerDTO.setConversationId(conversationId);
+        getInstructAnswerDTO.setType("g&content");
+        GenerateInstructAnswerVO generateInstructAnswerVO2 = new GenerateInstructAnswerVO();
+        Boolean flag = true;
+        List<String> formClaims = new ArrayList<>();
+        String effects = "";
+        try {
+            Integer a = 0;
+            while (flag && a < 3) {
+                generateInstructAnswerVO2 = this.getAnswerFromAI(getInstructAnswerDTO);
+                String answer = generateInstructAnswerVO2.getAnswer();
+                GenerateContentVO generateTechnicalVO = JSONObject.parseObject(answer, GenerateContentVO.class);
+                List<String> claimList = generateTechnicalVO.getClaims();
+                if (claimList.size() != claimStrsList.size()) {
+                    a++;
+                    continue;
+                } else {
+                    flag = false;
+                    formClaims = claimList;
+                    effects = generateTechnicalVO.getEffect();
+                }
             }
-            contentStrs.add(temContent);
+
+        } catch (Exception e) {
+           e.printStackTrace();
         }
+        contentStrs.add("本申请主要解决的技术问题是" + title + "," + effects);
+        for (int i = 0; i < rePatentClaims.size(); i++) {
+            RePatentClaim rePatentClaim = rePatentClaims.get(i);
+            if (formClaims.size() >= i + 1) {
+                String claim = formClaims.get(i);
+                String temContent = "";
+                if (rePatentClaim != null && rePatentClaim.getType() != null && rePatentClaim.getType().equals(1)) {
+                    temContent = this.getMainClaimContent(rePatentClaim.getContent());
+                } else {
+                    temContent = "其中," + claim;
+                }
+                contentStrs.add(temContent);
+            }
+        }
+
         String reContent = "";
         if (contentStrs.size() != 0) {
             reContent = StringUtils.join(contentStrs, "\n");
@@ -474,9 +541,9 @@ public class GenerateInstructionService {
         String message = getFluxMessage(FIELD_CONTENT, MESSAGE, reContent);
         fluxSink.next(message);
         if (claimExplainVO != null) {
-            String temContent="有益效果是:" + claimExplainVO.getEffects();
+            String temContent = "有益效果是:" + claimExplainVO.getEffects();
             contentStrs.add(temContent);
-            message = getFluxMessage(FIELD_CONTENT, MESSAGE,"\n"+temContent);
+            message = getFluxMessage(FIELD_CONTENT, MESSAGE, "\n" + temContent);
             fluxSink.next(message);
         } else {
             message = getFluxMessage(FIELD_CONTENT, ERROR, "生成有益效果异常");

+ 1 - 1
src/main/resources/application-dev.yml

@@ -91,5 +91,5 @@ DIFY:
   OAApiKey: app-NvKwdHvEK2UmJdmjTGDR0xu6
   checkApiKey: aa
   cliamKey: app-jF3akhYKgljPLdpeIpTNbs6f
-  gInstructionKey: app-YfoUDlED4oJNO9hVk6hfdKSw
+  gInstructionKey: app-7ImBmlr7kvBTSvBj1mTvgKyp
   url: http://192.168.2.24/v1/