提示词管理代码架构

This commit is contained in:
2026-04-19 21:19:40 +08:00
parent 27a55bb0b6
commit 18ecd2f78f
12 changed files with 437 additions and 19 deletions

View File

@@ -0,0 +1,10 @@
package com.rj.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.rj.entity.AiPrompts;
/**
* 表 ai_prompts 服务;常规 CRUD 与分页见 {@link IService}。
*/
public interface IAiPromptsService extends IService<AiPrompts> {
}

View File

@@ -77,6 +77,15 @@ public interface IAudioTextAnalysisLlmService {
String ownerPhone,
String customerName,
String customerPhone);
AudioTextAnalysisFurniture generateSummaryAndSaveForDetail(
AudioAnalysisSceneType sceneType,
String recordingText,
String parentId,
String ownerName,
String ownerPhone,
String customerName,
String customerPhone);
}

View File

@@ -0,0 +1,14 @@
package com.rj.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.rj.entity.AiPrompts;
import com.rj.mapper.AiPromptsMapper;
import com.rj.service.IAiPromptsService;
import org.springframework.stereotype.Service;
/**
* 表 ai_prompts 服务实现
*/
@Service
public class AiPromptsServiceImpl extends ServiceImpl<AiPromptsMapper, AiPrompts> implements IAiPromptsService {
}

View File

@@ -14,10 +14,7 @@ import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.rj.common.AudioAnalysisSceneType;
import com.rj.common.LocalLlmSummaryResult;
import com.rj.entity.AudioManagement;
import com.rj.entity.AudioTextAnalysisFurniture;
import com.rj.entity.AudioTextAnalysisSop;
import com.rj.entity.TodoItem;
import com.rj.entity.*;
import com.rj.service.IAudioManagementService;
import com.rj.service.IAudioTextAnalysisFurnitureService;
import com.rj.service.IAudioTextAnalysisLlmService;
@@ -37,10 +34,7 @@ import jakarta.annotation.PostConstruct;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.Map;
import java.util.Scanner;
import java.util.UUID;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@@ -532,6 +526,56 @@ public class AudioTextAnalysisLlmServiceImpl implements IAudioTextAnalysisLlmSer
return furniture;
}
@Autowired
private com.rj.service.IAudioManagementSegmentsService audioManagementSegmentsService;
@Override
public AudioTextAnalysisFurniture generateSummaryAndSaveForDetail(
AudioAnalysisSceneType sceneType,
String recordingText,
String parentId,
String ownerName,
String ownerPhone,
String customerName,
String customerPhone) {
LambdaQueryWrapper<AudioManagementSegments> segQuery = new LambdaQueryWrapper<>();
segQuery.eq(AudioManagementSegments::getParentId, parentId)
.orderByAsc(AudioManagementSegments::getChunkIndex);
List<AudioManagementSegments> segmentList = audioManagementSegmentsService.list(segQuery);
int emptyCount = 0 ;
StringBuilder mergedText = new StringBuilder();
if (segmentList != null && !segmentList.isEmpty()) {
for (AudioManagementSegments seg : segmentList) {
String segText = seg.getRecordingText();
if (segText != null && !segText.trim().isEmpty()) {
if (mergedText.length() > 0) {
mergedText.append("\n");
}
mergedText.append(segText.trim());
}else {
emptyCount ++;
}
}
}
log.info(" AudioManagementSegments 总数是: {} ,未转文本记录条数是: {}",segmentList.size(), emptyCount);
LocalLlmSummaryResult llmResult = generateSummaryByLocalLLM(sceneType, mergedText.toString());
String rawContent = llmResult.rawContent();
if (rawContent == null || rawContent.trim().isEmpty()) {
log.warn("大模型返回内容为空");
return null;
}
AudioTextAnalysisFurniture furniture = new AudioTextAnalysisFurniture();
AudioManagement audioManagement = new AudioManagement();
audioManagement.setId(parentId);
audioManagement.setSummary(rawContent);
applyLocalLlmTokenCountsToAudioManagement(audioManagement, llmResult);
audioManagementService.updateById(audioManagement);
return furniture;
}
private void applyDashScopeUsageToAudioManagement(AudioManagement target, GenerationResult result) {
if (result == null || result.getUsage() == null) {