Browse Source

算法服务对接修改

master
luoweijian 2 months ago
parent
commit
085679ae9d
  1. 36
      src/main/java/com/project/interaction/domain/dto/AiExtractRequestDTO.java
  2. 4
      src/main/java/com/project/interaction/domain/service/impl/PostToAiExtractDomainServiceImpl.java
  3. 51
      src/main/java/com/project/interaction/domain/service/impl/SaveDataExtractResultDomainServiceImpl.java

36
src/main/java/com/project/interaction/domain/dto/AiExtractRequestDTO.java

@ -1,32 +1,44 @@
package com.project.interaction.domain.dto; package com.project.interaction.domain.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;
/** /**
* 算法服务 - 知识点提取请求 DTO * 算法服务 - 知识点提取请求 DTO
* 入参结构待算法服务确认后调整
*/ */
@Data @Data
public class AiExtractRequestDTO { public class AiExtractRequestDTO {
/** 虚拟资料ID */ /** 虚拟资料ID */
@JsonProperty("information_id")
private Long informationId; private Long informationId;
/** 文件内容分类(产品类/知识类/规范类/流程类) */ /** 子文件解析后的分段列表(直接取 parsed_text 的 segments) */
private String contentCategory; private List<Segment> segments;
/** 子文件解析文本列表 */ /** 回调URL(配置注入) */
private List<FileContent> files; @JsonProperty("callback_url")
private String callbackUrl;
@Data @Data
public static class FileContent { public static class Segment {
/** 文件名 */ /** 片段内容 */
private String fileName; private String content;
/** 内容分类 */
private String contentCategory; /** 补充内容 */
/** 数据服务解析后的纯文本 */ private String supplement;
private String parsedText;
/** 章节标识 */
private String chapter;
/** 解析来源文件名(对应 JSON 的 chunk_size 字段) */
@JsonProperty("chunk_size")
private String parseName;
/** 内容类型 */
@JsonProperty("content_type")
private String contentType;
} }
} }

4
src/main/java/com/project/interaction/domain/service/impl/PostToAiExtractDomainServiceImpl.java

@ -21,8 +21,8 @@ public class PostToAiExtractDomainServiceImpl implements PostToAiExtractDomainSe
@Resource(name = "algorithmWebClient") @Resource(name = "algorithmWebClient")
private WebClient algorithmWebClient; private WebClient algorithmWebClient;
/** 算法服务知识点提取路径(待确认) */ /** 算法服务知识点提取路径 */
@Value("${algo.extractUrl:/ai-extract}") @Value("${algo.extractUrl:http://172.16.204.50:8000/v1/key_points/extract}")
private String extractUrl; private String extractUrl;
@Override @Override

51
src/main/java/com/project/interaction/domain/service/impl/SaveDataExtractResultDomainServiceImpl.java

@ -1,6 +1,8 @@
package com.project.interaction.domain.service.impl; package com.project.interaction.domain.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.project.information.domain.entity.InformationFileEntity; import com.project.information.domain.entity.InformationFileEntity;
import com.project.information.domain.enums.FileParseStatusEnum; import com.project.information.domain.enums.FileParseStatusEnum;
import com.project.information.domain.service.InformationFileBaseService; import com.project.information.domain.service.InformationFileBaseService;
@ -10,10 +12,12 @@ import com.project.interaction.domain.service.PostToAiExtractDomainService;
import com.project.interaction.domain.service.SaveDataExtractResultDomainService; import com.project.interaction.domain.service.SaveDataExtractResultDomainService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 保存数据服务解析结果域服务实现 * 保存数据服务解析结果域服务实现
@ -28,6 +32,13 @@ public class SaveDataExtractResultDomainServiceImpl implements SaveDataExtractRe
@Autowired @Autowired
private PostToAiExtractDomainService postToAiExtractDomainService; private PostToAiExtractDomainService postToAiExtractDomainService;
@Autowired
private ObjectMapper objectMapper;
/** 算法服务回调地址 */
@Value("${algo.callbackUrl:http://172.16.204.50/evaluator-api/api/interaction/aiExtractCallback}")
private String callbackUrl;
@Override @Override
public void handleCallback(DataExtractCallbackDTO callback) { public void handleCallback(DataExtractCallbackDTO callback) {
Long fileId = callback.getFileId(); Long fileId = callback.getFileId();
@ -71,28 +82,46 @@ public class SaveDataExtractResultDomainServiceImpl implements SaveDataExtractRe
return; return;
} }
// 4. 全部成功 → 调用算法服务知识点提取 // 4. 全部成功 → 解析 parsedText JSON,构建 segments 列表,调用算法服务
log.info(">>> [数据服务回调] 虚拟资料 {} 下所有子文件解析成功,开始调用算法服务", informationId); log.info(">>> [数据服务回调] 虚拟资料 {} 下所有子文件解析成功,开始调用算法服务", informationId);
List<AiExtractRequestDTO.FileContent> fileContents = new ArrayList<>(); List<AiExtractRequestDTO.Segment> allSegments = new ArrayList<>();
for (InformationFileEntity f : allFiles) { for (InformationFileEntity f : allFiles) {
if (f.getParsedText() != null) { if (f.getParsedText() == null || f.getParsedText().isBlank()) {
AiExtractRequestDTO.FileContent fc = new AiExtractRequestDTO.FileContent(); continue;
fc.setFileName(f.getFileName()); }
fc.setContentCategory(String.valueOf(f.getContentCategory())); // 解析 parsed_text JSON: {"segments": [{"content": "...", "supplement": "", "chapter": "...", "content_type": "..."}]}
fc.setParsedText(f.getParsedText()); try {
fileContents.add(fc); Map<String, List<Map<String, String>>> parsed = objectMapper.readValue(
f.getParsedText(), new TypeReference<Map<String, List<Map<String, String>>>>() {});
List<Map<String, String>> segments = parsed.get("segments");
if (segments == null || segments.isEmpty()) {
continue;
}
String fileName = f.getFileName();
for (Map<String, String> seg : segments) {
AiExtractRequestDTO.Segment segment = new AiExtractRequestDTO.Segment();
segment.setContent(seg.get("content"));
segment.setSupplement(seg.get("supplement"));
segment.setChapter(seg.get("chapter"));
segment.setParseName(fileName); // parseName = 文件名
segment.setContentType(seg.get("content_type"));
allSegments.add(segment);
}
} catch (Exception e) {
log.error(">>> [数据服务回调] 解析 parsedText 失败, fileId={}, error={}", f.getId(), e.getMessage());
} }
} }
if (fileContents.isEmpty()) { if (allSegments.isEmpty()) {
log.warn(">>> [数据服务回调] 虚拟资料 {} 下所有子文件已解析成功但 parsedText 均为空", informationId); log.warn(">>> [数据服务回调] 虚拟资料 {} 下所有子文件已解析但无有效 segments", informationId);
return; return;
} }
AiExtractRequestDTO request = new AiExtractRequestDTO(); AiExtractRequestDTO request = new AiExtractRequestDTO();
request.setInformationId(informationId); request.setInformationId(informationId);
request.setFiles(fileContents); request.setSegments(allSegments);
request.setCallbackUrl(callbackUrl);
postToAiExtractDomainService.postToAiExtract(request); postToAiExtractDomainService.postToAiExtract(request);
} }

Loading…
Cancel
Save