调用dify联调客户画像

This commit is contained in:
spllzh
2025-09-13 21:28:28 +08:00
parent 206275317f
commit d321af7e7c
53 changed files with 4783 additions and 345 deletions

View File

@@ -2,6 +2,7 @@ package com.rj.controller;
import com.rj.dto.DifyWorkflowRequestDto;
import com.rj.dto.DifyWorkflowResponseDto;
import com.rj.dto.CustomerProfileAnalysisRequestDto;
import com.rj.service.DifyWorkflowService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -15,7 +16,7 @@ import java.util.HashMap;
import java.util.Map;
/**
* Dify工作流测试控制器
* Dify工作流控制器
*
* @author 李中华
* @date 2025/1/3
@@ -23,18 +24,18 @@ import java.util.Map;
@Slf4j
@RestController
@RequestMapping("/api/dify")
@Tag(name = "Dify工作流测试", description = "Dify工作流API测试接口")
@Tag(name = "Dify工作流", description = "Dify工作流API接口")
public class DifyWorkflowController {
@Autowired
private DifyWorkflowService difyWorkflowService;
/**
* 测试企微对话分析工作流
* 企微对话分析工作流
*/
@PostMapping("/workflow/consulting-scenario")
@Operation(summary = "企微对话分析工作流测试", description = "调用Dify企微对话分析工作流进行测试")
public ResponseEntity<DifyWorkflowResponseDto> testConsultingScenarioWorkflow(
@Operation(summary = "企微对话分析工作流", description = "调用Dify企微对话分析工作流")
public ResponseEntity<DifyWorkflowResponseDto> consultingScenarioWorkflow(
@Valid @RequestBody DifyWorkflowRequestDto requestDto) {
try {
@@ -79,57 +80,106 @@ public class DifyWorkflowController {
}
}
/**
* 使用预设测试数据测试工作流
*/
@PostMapping("/workflow/consulting-scenario/test")
@Operation(summary = "使用预设数据测试企微对话分析工作流", description = "使用预设的测试数据调用工作流")
public ResponseEntity<DifyWorkflowResponseDto> testWithPresetData() {
// 创建预设测试数据
DifyWorkflowRequestDto requestDto = new DifyWorkflowRequestDto();
requestDto.setUnionId("test_union_12345");
requestDto.setConsultantId("consultant_67890");
requestDto.setCommunicateDate("2025-01-03 10:30:00");
requestDto.setAnalysisScene("sales_consultation");
requestDto.setAiAnalysisRequestId("ai_req_20250103_001");
requestDto.setVersion(1);
// 模拟企微对话内容
String chat = "客户你好我想了解一下沃尔沃XC60这款车。\n" +
"顾问您好很高兴为您介绍沃尔沃XC60。这是一款非常优秀的中型SUV请问您主要关注哪些方面呢\n" +
"客户:我比较关心安全性能和油耗表现。\n" +
"顾问XC60在安全方面表现非常出色配备了City Safety城市安全系统还有Pilot Assist领航辅助系统。油耗方面2.0T发动机百公里综合油耗约8.5L。\n" +
"客户:价格大概是多少?\n" +
"顾问XC60的指导价在37.39-47.49万元之间目前有优惠活动可以优惠3万元左右。\n" +
"客户我预算在40万以内有什么推荐的配置吗\n" +
"顾问根据您的预算我推荐智逸豪华版指导价39.69万优惠后36.69万,完全符合您的预算。\n" +
"客户:好的,我考虑一下,什么时候可以试驾?\n" +
"顾问明天下午2点可以安排试驾您方便吗\n" +
"客户:可以的,我明天下午过去。\n" +
"顾问好的我为您预约明天下午2点的试驾地址是...";
requestDto.setChat(chat);
return testConsultingScenarioWorkflow(requestDto);
/**
* DCC对话分析工作流
*/
@PostMapping("/workflow/dcc-scenario")
@Operation(summary = "DCC对话分析工作流", description = "调用Dify DCC对话分析工作流")
public ResponseEntity<DifyWorkflowResponseDto> dccScenarioWorkflow(
@Valid @RequestBody DifyWorkflowRequestDto requestDto) {
try {
log.info("开始调用DCC对话分析工作流参数 " + requestDto.toString());
// 构建工作流输入参数
Map<String, Object> inputs = new HashMap<>();
inputs.put("unionId", requestDto.getUnionId());
inputs.put("consultantId", requestDto.getConsultantId());
inputs.put("communicateDate", requestDto.getCommunicateDate());
inputs.put("analysisScene", requestDto.getAnalysisScene());
inputs.put("aiAnalysisRequestId", requestDto.getAiAnalysisRequestId());
inputs.put("version", requestDto.getVersion());
inputs.put("chat", requestDto.getChat());
// 创建请求对象
DifyWorkflowService.DifyWorkflowRequest request =
new DifyWorkflowService.DifyWorkflowRequest(inputs, requestDto.getConsultantId());
// 调用DCC工作流Service层会自动保存数据到数据库
DifyWorkflowService.DifyWorkflowResponse response =
difyWorkflowService.callDCCScenarioWorkflow(request);
// 构建返回结果
DifyWorkflowResponseDto result = DifyWorkflowResponseDto.success(
response.getWorkflowRunId(),
response.getTaskId(),
response.getData(),
response.getMetadata()
);
return ResponseEntity.ok(result);
} catch (Exception e) {
log.error("调用DCC对话分析工作流失败", e);
DifyWorkflowResponseDto errorResult = DifyWorkflowResponseDto.failure(
"DCC工作流调用失败: " + e.getMessage(),
e.getClass().getSimpleName()
);
return ResponseEntity.status(500).body(errorResult);
}
}
/**
* 获取工作流配置信息
* 客户画像分析工作流
*/
@GetMapping("/workflow/config")
@Operation(summary = "获取工作流配置信息", description = "获取当前Dify工作流的配置信息")
public ResponseEntity<Map<String, Object>> getWorkflowConfig() {
Map<String, Object> config = new HashMap<>();
config.put("message", "工作流配置信息");
config.put("workflowName", "企微对话分析工作流");
config.put("description", "对企微对话内容进行深度剖析,输出客户需求、顾问方案等信息");
config.put("inputParameters", new String[]{
"unionId", "consultantId", "communicateDate",
"analysisScene", "aiAnalysisRequestId", "version", "chat"
});
config.put("outputFormat", "JSON格式包含analysisResult和analysisDetail");
@PostMapping("/workflow/customer-profile-analysis")
@Operation(summary = "客户画像分析工作流", description = "调用Dify客户画像分析工作流")
public ResponseEntity<DifyWorkflowResponseDto> customerProfileAnalysisWorkflow(
@Valid @RequestBody CustomerProfileAnalysisRequestDto requestDto) {
return ResponseEntity.ok(config);
try {
log.info("开始调用客户画像分析工作流,参数: " + requestDto.toString());
// 构建工作流输入参数
Map<String, Object> inputs = new HashMap<>();
inputs.put("chat", requestDto.getChat());
inputs.put("communicateDate", requestDto.getCommunicateDate());
inputs.put("analysisScene", requestDto.getAnalysisScene());
inputs.put("aiAnalysisRequestld", requestDto.getAiAnalysisRequestId()); // 注意Dify工作流期望的参数名是aiAnalysisRequestld
inputs.put("businessId", requestDto.getBusinessId());
inputs.put("customerFlowId", requestDto.getCustomerFlowId());
inputs.put("businessType", requestDto.getBusinessType());
// 创建请求对象
DifyWorkflowService.DifyWorkflowRequest request =
new DifyWorkflowService.DifyWorkflowRequest(inputs, requestDto.getBusinessId());
// 调用客户画像分析工作流Service层会自动保存数据到数据库
DifyWorkflowService.DifyWorkflowResponse response =
difyWorkflowService.callCustomerProfileAnalysisWorkflow(request);
// 构建返回结果
DifyWorkflowResponseDto result = DifyWorkflowResponseDto.success(
response.getWorkflowRunId(),
response.getTaskId(),
response.getData(),
response.getMetadata()
);
return ResponseEntity.ok(result);
} catch (Exception e) {
log.error("调用客户画像分析工作流失败", e);
DifyWorkflowResponseDto errorResult = DifyWorkflowResponseDto.failure(
"客户画像分析工作流调用失败: " + e.getMessage(),
e.getClass().getSimpleName()
);
return ResponseEntity.status(500).body(errorResult);
}
}
}