动态拼接提示词

This commit is contained in:
2026-04-21 00:07:54 +08:00
parent 3bc2da8f88
commit 02c6ef84d1
6 changed files with 78 additions and 27 deletions

View File

@@ -1,14 +1,30 @@
package com.rj.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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;
import java.util.List;
/**
* 表 ai_prompts 服务实现
*/
@Service
public class AiPromptsServiceImpl extends ServiceImpl<AiPromptsMapper, AiPrompts> implements IAiPromptsService {
@Override
public List<AiPrompts> listByBizKeys(String scenarioCode, String categoryCode, String promptType, String fieldCode) {
LambdaQueryWrapper<AiPrompts> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(AiPrompts::getScenarioCode, scenarioCode)
.eq(AiPrompts::getCategoryCode, categoryCode)
.eq(AiPrompts::getPromptType, promptType);
if (fieldCode != null) {
queryWrapper.eq(AiPrompts::getFieldCode, fieldCode);
}
return this.list(queryWrapper);
}
}

View File

@@ -15,11 +15,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.rj.common.AudioAnalysisSceneType;
import com.rj.common.LocalLlmSummaryResult;
import com.rj.entity.*;
import com.rj.service.IAudioManagementService;
import com.rj.service.IAudioTextAnalysisFurnitureService;
import com.rj.service.IAudioTextAnalysisLlmService;
import com.rj.service.IAudioTextAnalysisSopService;
import com.rj.service.ITodoItemService;
import com.rj.service.*;
import dev.langchain4j.model.chat.response.ChatResponse;
import dev.langchain4j.model.chat.response.StreamingChatResponseHandler;
import dev.langchain4j.model.openai.OpenAiStreamingChatModel;
@@ -116,19 +112,38 @@ public class AudioTextAnalysisLlmServiceImpl implements IAudioTextAnalysisLlmSer
}
}
@Autowired
IAiPromptsService aiPromptsService;
@Override
public GenerationResult generateSummaryByLLM(AudioAnalysisSceneType sceneType, String recordingText) {
long startTime = System.currentTimeMillis();
log.info("开始调用大模型生成总结,场景: {}", sceneType);
String systemPrompt = getSystemPrompt(sceneType);
String userPromptTemplate = getUserPromptTemplate(sceneType);
String userPrompt = buildPrompt(userPromptTemplate, recordingText);
AiPrompts sysTotalItemPrompts = aiPromptsService.listByBizKeys(sceneType.getSceneName(), "total_item", "systemPrompt", "total_item").get(0);
AiPrompts userTotalItemPrompts = aiPromptsService.listByBizKeys(sceneType.getSceneName(), "total_item", "userPrompt", "total_item").get(0);
List<AiPrompts> userFieldsItemPrompts = aiPromptsService.listByBizKeys(sceneType.getSceneName(), "fields", "userPrompt", null);
AiPrompts userReplyStructureRequirementsItemPrompts = aiPromptsService.listByBizKeys(sceneType.getSceneName(), "reply_tructure_requirements", "userPrompt", null).get(0);
AiPrompts userTecordingTextItemPrompts = aiPromptsService.listByBizKeys(sceneType.getSceneName(), "recording_text", "userPrompt", null).get(0);
StringBuilder userItemPrompts = new StringBuilder();
userItemPrompts.append(userTotalItemPrompts.getPromptText()).append("\n");
int i=0;
for (AiPrompts userFieldItemPrompt : userFieldsItemPrompts) {
userItemPrompts.append((++i) +", \""+userFieldItemPrompt.getFieldCode()+"\":"+ "\""+userFieldItemPrompt.getPromptText()+"\";").append("\n");
}
userItemPrompts.append(userReplyStructureRequirementsItemPrompts.getPromptText()).append("\n");
userItemPrompts.append(userTecordingTextItemPrompts.getPromptText());
String userPrompt = buildPrompt(userItemPrompts.toString(), recordingText);
log.info("userPrompt------------------------------\n: {}", userPrompt);
log.info("total length: recordingText------------------------------ \n: {}:{}", userPrompt.length() ,recordingText.length());
Generation gen = new Generation();
Message systemMsg = Message.builder()
.role(Role.SYSTEM.getValue())
.content(systemPrompt)
.content(sysTotalItemPrompts.getPromptText())
.build();
Message userMsg = Message.builder()
.role(Role.USER.getValue())
@@ -561,8 +576,11 @@ public class AudioTextAnalysisLlmServiceImpl implements IAudioTextAnalysisLlmSer
log.info(" AudioManagementSegments 总数是: {} ,未转文本记录条数是: {}",segmentList.size(), emptyCount);
LocalLlmSummaryResult llmResult = generateSummaryByLocalLLM(sceneType, mergedText.toString());
String rawContent = llmResult.rawContent();
GenerationResult generationResult = generateSummaryByLLM(sceneType, mergedText.toString());
log.info("大模型生成总结完成token花费总token: {}, 输入token: {}, 输出token: {}, 输出token详情: {}",
generationResult.getUsage().getTotalTokens(),generationResult.getUsage().getInputTokens(),generationResult.getUsage().getOutputTokens(),generationResult.getUsage().getOutputTokensDetails());
// 1. 调用大模型生成总结
String rawContent = generationResult.getOutput().getChoices().get(0).getMessage().getContent();
if (rawContent == null || rawContent.trim().isEmpty()) {
log.warn("大模型返回内容为空");
return null;
@@ -571,7 +589,7 @@ public class AudioTextAnalysisLlmServiceImpl implements IAudioTextAnalysisLlmSer
AudioManagement audioManagement = new AudioManagement();
audioManagement.setId(parentId);
audioManagement.setSummary(rawContent);
applyLocalLlmTokenCountsToAudioManagement(audioManagement, llmResult);
// applyLocalLlmTokenCountsToAudioManagement(audioManagement, llmResult);
audioManagementService.updateById(audioManagement);
return furniture;