调用ai模型分析家居场景

This commit is contained in:
zhonghua1
2026-01-11 10:06:00 +08:00
parent 599110d1a1
commit aca05abd73
5 changed files with 438 additions and 43 deletions

View File

@@ -7,6 +7,7 @@ import com.rj.common.AudioManagementConstants;
import com.rj.common.DataEnrichmentUtil;
import com.rj.entity.AudioManagement;
import com.rj.entity.AudioManagementSegments;
import com.rj.entity.AudioTextAnalysisFurniture;
import com.rj.entity.CustomerManagement;
import com.rj.service.*;
import com.rj.dto.AsrRequest;
@@ -44,7 +45,7 @@ import java.util.UUID;
public class AudioManagementController {
// 场景常量,避免在解析逻辑中硬编码字符串
private static final String SCENARIO_FURNITURE_SALE = "FURNITURE_SALE";
private static final String SCENARIO_FURNITURE_SALE = "FURNITURE";
private static final String SCENARIO_MEETING_SUMMARY = "MEETING_SUMMARY";
private static final String SCENARIO_CAR_SALE = "CAR_SALE";
private static final String SCENARIO_SPEAKING_TRAINING= "SPEAKING_TRAINING"; //租赁模式
@@ -637,6 +638,7 @@ public class AudioManagementController {
@Parameter(description = "录音信息", required = true)
@RequestBody AudioManagement audioManagement) {
Map<String, Object> result = new HashMap<>();
boolean success = true;
try {
if (audioManagement.getId() == null || audioManagement.getId().trim().isEmpty()) {
result.put("success", false);
@@ -651,6 +653,14 @@ public class AudioManagementController {
result.put("message", "记录不存在");
return ResponseEntity.badRequest().body(result);
}
// 2. 检查summary字段如果已存在总结内容直接返回提示不进行AI分析
String summary = audioManagement.getSummary();
if (summary != null && !summary.trim().isEmpty()) {
result.put("success", true);
result.put("message", "AI分析已完成");
result.put("data", audioManagement);
return ResponseEntity.ok(result);
}
// 3. 获取录音文本;如主表为空,则从分段表拼接
String recordingText = audioManagementFromDB.getRecordingText();
if (recordingText == null || recordingText.trim().isEmpty()) {
@@ -688,23 +698,35 @@ public class AudioManagementController {
// 4. 根据场景动态选择业务场景类型,调用业务层通用服务生成总结
AudioAnalysisSceneType sceneType = resolveSceneType(audioManagementFromDB.getScenario());
String rawContent = audioTextAnalysisLlmService.generateSummaryByLLM(
if (recordingText == null || recordingText.trim().isEmpty()) {
result.put("success", false);
result.put("message", "录音文本为空");
return ResponseEntity.badRequest().body(result);
}
// 4. 通过业务层通用服务调用大模型生成总结并保存数据
AudioTextAnalysisFurniture furniture = audioTextAnalysisLlmService.generateSummaryAndSave(
sceneType,
recordingText
recordingText,
audioManagement.getId(),
audioManagement.getSalesName(),
audioManagement.getSalesPhone(),
audioManagement.getCustomerName(),
audioManagement.getCustomerPhone()
);
boolean success = true;
if (success) {
log.info("llm return furniture Analysis : ",furniture.toString() );
if (recordingText == null || recordingText.trim().isEmpty()) {
result.put("success", false);
result.put("message", "录音文本为空");
return ResponseEntity.badRequest().body(result);
} else {
result.put("success", true);
result.put("message", "录音finishServiceById更新成功");
result.put("data", audioManagement);
return ResponseEntity.ok(result);
} else {
result.put("success", false);
result.put("message", "录音finishServiceById更新失败");
return ResponseEntity.badRequest().body(result);
}
} catch (Exception e) {
result.put("success", false);
result.put("message", "更新异常:" + e.getMessage());

View File

@@ -237,6 +237,14 @@ public class AudioTextAnalysisFurnitureController {
result.put("message", "记录不存在");
return ResponseEntity.badRequest().body(result);
}
// 2. 检查summary字段如果已存在总结内容直接返回提示不进行AI分析
String summary = audioManagement.getSummary();
if (summary != null && !summary.trim().isEmpty()) {
result.put("success", true);
result.put("message", "AI分析已完成");
result.put("data", audioManagement);
return ResponseEntity.ok(result);
}
// 3. 获取录音文本
String recordingText = audioManagement.getRecordingText();
if (recordingText == null || recordingText.trim().isEmpty()) {
@@ -244,16 +252,10 @@ public class AudioTextAnalysisFurnitureController {
result.put("message", "录音文本为空");
return ResponseEntity.badRequest().body(result);
}
AudioTextAnalysisFurniture furniture = new AudioTextAnalysisFurniture();
furniture.setRecordingText(recordingText);
// 4. 通过业务层通用服务调用大模型生成总结,然后解析结构化结果
String rawContent = audioTextAnalysisLlmService.generateSummaryByLLM(
AudioAnalysisSceneType.SCENARIO_MEETING_SUMMARY,
furniture.getRecordingText()
);
applyStructuredResult(
furniture,
rawContent,
// 4. 通过业务层通用服务调用大模型生成总结并保存数据
AudioTextAnalysisFurniture furniture = audioTextAnalysisLlmService.generateSummaryAndSave(
AudioAnalysisSceneType.SCENARIO_FURNITURE_SALE,
recordingText,
id,
audioManagement.getSalesName(),
audioManagement.getSalesPhone(),
@@ -261,34 +263,14 @@ public class AudioTextAnalysisFurnitureController {
audioManagement.getCustomerPhone()
);
audioManagement = new AudioManagement();
audioManagement.setSummary(furniture.getSummarySentence());
audioManagement.setId(id);
audioManagementService.updateById(audioManagement);
// 5. 保存总结到数据库
LambdaQueryWrapper<AudioTextAnalysisFurniture> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(AudioTextAnalysisFurniture::getParentId, id);
AudioTextAnalysisFurniture one = furnitureService.getOne(wrapper);
if (one != null) {
furniture.setId(one.getId());
}
furniture.setUpdatedAt(LocalDateTime.now());
furniture.setParentId( id);
furniture.setRecordingText(null);
boolean updateSuccess = furnitureService.saveOrUpdate(furniture);
if (updateSuccess) {
if (furniture != null) {
result.put("success", true);
result.put("message", "生成总结成功");
result.put("data", furniture);
return ResponseEntity.ok(result);
} else {
result.put("success", false);
result.put("message", "保存总结失败");
result.put("message", "生成总结并保存失败");
return ResponseEntity.badRequest().body(result);
}