From 1da5d283a93bbfa574c4b8f350aa1ca17667d187 Mon Sep 17 00:00:00 2001
From: sion123 <450702724@qq.com>
Date: Sun, 15 Mar 2026 21:38:14 +0800
Subject: [PATCH] feat: enhance prompt selector with category tags and improve
benchmark task processing
Add visual indicators for prompt categories and source types in the prompt selector component, and refactor benchmark task execution to use Dify streaming analysis with proper error handling and text extraction from Alibaba Cloud transcription results.
---
.../src/components/PromptSelector.vue | 39 ++-
.../src/views/content-style/Benchmark.vue | 204 +++++----------
.../components/BenchmarkTable.vue | 10 +-
.../components/CreateStyleTaskModal.vue | 135 ++++++++++
.../task-management/layout/TaskLayout.vue | 8 +-
.../views/task-center/BenchmarkTaskList.vue | 157 ++++++------
.../benchmark/job/BenchmarkTaskExecutor.java | 235 ++++++++++++++++--
.../module/tik/config/TikAsyncConfig.java | 96 ++-----
.../tikhup/controller/TikHupController.java | 7 -
.../tik/tikhup/service/TikHupService.java | 7 -
.../tik/tikhup/service/TikHupServiceImpl.java | 29 ---
11 files changed, 567 insertions(+), 360 deletions(-)
create mode 100644 frontend/app/web-gold/src/views/content-style/components/CreateStyleTaskModal.vue
diff --git a/frontend/app/web-gold/src/components/PromptSelector.vue b/frontend/app/web-gold/src/components/PromptSelector.vue
index 7c444cc18f..d87070cbb9 100644
--- a/frontend/app/web-gold/src/components/PromptSelector.vue
+++ b/frontend/app/web-gold/src/components/PromptSelector.vue
@@ -15,7 +15,13 @@
:value="prompt.id"
>
-
{{ prompt.name }}
+
+ {{ prompt.name }}
+ {{ prompt.category }}
+
+
+ {{ prompt.source === 'created' ? '自建' : '收藏' }}
+
@@ -313,6 +319,37 @@ onMounted(() => {
font-weight: 500;
}
+.prompt-option-left {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ flex: 1;
+ min-width: 0;
+}
+
+.prompt-option-tag {
+ font-size: 12px;
+ padding: 2px 8px;
+ border-radius: 10px;
+ white-space: nowrap;
+ flex-shrink: 0;
+}
+
+.prompt-option-tag.category {
+ background: rgba(24, 144, 255, 0.1);
+ color: var(--color-primary);
+}
+
+.prompt-option-tag.created {
+ background: rgba(16, 185, 129, 0.1);
+ color: #10b981;
+}
+
+.prompt-option-tag.favorite {
+ background: rgba(245, 158, 11, 0.1);
+ color: #f59e0b;
+}
+
/* 标签模式 */
.prompt-tags-container {
margin-bottom: 12px;
diff --git a/frontend/app/web-gold/src/views/content-style/Benchmark.vue b/frontend/app/web-gold/src/views/content-style/Benchmark.vue
index ce567ef921..92e7d3b87b 100644
--- a/frontend/app/web-gold/src/views/content-style/Benchmark.vue
+++ b/frontend/app/web-gold/src/views/content-style/Benchmark.vue
@@ -1,24 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ videoUrls.length }} 个视频
+
+
+
+
+
+ 取消
+
+ 创建任务
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/views/system/task-management/layout/TaskLayout.vue b/frontend/app/web-gold/src/views/system/task-management/layout/TaskLayout.vue
index 686c1525ee..3abe4eb6f4 100644
--- a/frontend/app/web-gold/src/views/system/task-management/layout/TaskLayout.vue
+++ b/frontend/app/web-gold/src/views/system/task-management/layout/TaskLayout.vue
@@ -27,7 +27,7 @@
-
diff --git a/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/benchmark/job/BenchmarkTaskExecutor.java b/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/benchmark/job/BenchmarkTaskExecutor.java
index e5d2a06c98..3660037ab1 100644
--- a/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/benchmark/job/BenchmarkTaskExecutor.java
+++ b/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/benchmark/job/BenchmarkTaskExecutor.java
@@ -2,13 +2,20 @@ package cn.iocoder.yudao.module.tik.benchmark.job;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.tik.benchmark.dal.dataobject.BenchmarkTaskDO;
import cn.iocoder.yudao.module.tik.benchmark.dal.mysql.BenchmarkTaskMapper;
import cn.iocoder.yudao.module.tik.benchmark.enums.BenchmarkTaskStatusEnum;
import cn.iocoder.yudao.module.tik.benchmark.vo.BenchmarkTaskCreateReqVO;
+import cn.iocoder.yudao.module.tik.dify.service.DifyService;
+import cn.iocoder.yudao.module.tik.dify.vo.DifyBenchmarkReqVO;
+import cn.iocoder.yudao.module.tik.dify.vo.DifyChatRespVO;
import cn.iocoder.yudao.module.tik.tikhup.service.TikHupService;
import cn.iocoder.yudao.module.tik.userprompt.service.UserPromptService;
import cn.iocoder.yudao.module.tik.userprompt.vo.UserPromptSaveReqVO;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
@@ -17,6 +24,7 @@ import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.atomic.AtomicReference;
/**
* 对标分析任务异步执行器
@@ -31,13 +39,16 @@ public class BenchmarkTaskExecutor {
@Resource
private TikHupService tikHupService;
+ @Resource
+ private DifyService difyService;
+
@Resource
private UserPromptService userPromptService;
/**
* 异步执行对标分析任务
*/
- @Async("benchmarkTaskExecutor")
+ @Async("benchmarkAsyncExecutor")
public void executeAsync(Long taskId, BenchmarkTaskCreateReqVO createReqVO) {
log.info("[executeAsync][taskId={}] 开始异步执行对标分析任务", taskId);
@@ -51,35 +62,28 @@ public class BenchmarkTaskExecutor {
// 1. 更新状态为执行中
updateTaskProgress(taskId, 0, BenchmarkTaskStatusEnum.RUNNING.getStatus());
- // 2. 获取视频转写
+ // 2. 批量获取视频转写(使用 DashScope API)
updateTaskProgress(taskId, 10, BenchmarkTaskStatusEnum.RUNNING.getStatus());
List videoUrls = createReqVO.getVideoUrls();
List transcriptions = new ArrayList<>();
- // 批量获取转写(使用 videoToCharacters2)
try {
+ updateTaskProgress(taskId, 30, BenchmarkTaskStatusEnum.RUNNING.getStatus());
Object result = tikHupService.videoToCharacters2(videoUrls);
- if (result instanceof List) {
- List> resultList = (List>) result;
- for (Object item : resultList) {
- if (item != null && StrUtil.isNotBlank(item.toString())) {
- transcriptions.add(item.toString());
- }
- }
- }
- } catch (Exception e) {
- log.warn("[executeAsync][taskId={}] 批量转写失败,尝试逐个转写: {}", taskId, e.getMessage());
- // 降级:逐个转写
- for (String videoUrl : videoUrls) {
- try {
- Object result = tikHupService.videoToCharacters(videoUrl);
- if (result != null && StrUtil.isNotBlank(result.toString())) {
- transcriptions.add(result.toString());
- }
- } catch (Exception ex) {
- log.warn("[executeAsync][taskId={}, videoUrl={}] 转写失败: {}", taskId, videoUrl, ex.getMessage());
+ log.info("[executeAsync][taskId={}] videoToCharacters2 返回类型: {}",
+ taskId, result != null ? result.getClass().getName() : "null");
+
+ if (result instanceof CommonResult) {
+ CommonResult> commonResult = (CommonResult>) result;
+ if (commonResult.getData() != null) {
+ String rawData = commonResult.getData().toString();
+ transcriptions = extractBatchTranscriptionTexts(rawData);
+ log.info("[executeAsync][taskId={}] 批量转写成功,视频数: {}, 结果数: {}",
+ taskId, videoUrls.size(), transcriptions.size());
}
}
+ } catch (Exception ex) {
+ log.warn("[executeAsync][taskId={}] 批量转写失败: {}", taskId, ex.getMessage());
}
updateTaskProgress(taskId, 60, BenchmarkTaskStatusEnum.RUNNING.getStatus());
@@ -99,13 +103,39 @@ public class BenchmarkTaskExecutor {
updateTaskProgress(taskId, 70, BenchmarkTaskStatusEnum.RUNNING.getStatus());
- // 5. 调用 AI 生成提示词
+ // 5. 调用 Dify 生成提示词(流式)
String generatedPrompt;
try {
- Object result = tikHupService.deepseekAnalysis("benchmark", mergedText);
- generatedPrompt = result != null ? result.toString() : "";
+ DifyBenchmarkReqVO difyReq = new DifyBenchmarkReqVO();
+ difyReq.setContent(mergedText);
+ difyReq.setVideoCount(transcriptions.size());
+
+ // 收集流式响应
+ StringBuilder resultBuilder = new StringBuilder();
+ AtomicReference errorMsgRef = new AtomicReference<>();
+
+ difyService.benchmarkAnalyzeStream(difyReq, String.valueOf(task.getUserId()))
+ .filter(resp -> resp != null)
+ .doOnNext(resp -> {
+ if (DifyChatRespVO.EVENT_MESSAGE.equals(resp.getEvent())
+ && StrUtil.isNotBlank(resp.getContent())) {
+ resultBuilder.append(resp.getContent());
+ } else if (DifyChatRespVO.EVENT_ERROR.equals(resp.getEvent())) {
+ errorMsgRef.set(resp.getErrorMessage());
+ }
+ })
+ .blockLast();
+
+ String errorMsg = errorMsgRef.get();
+ if (errorMsg != null) {
+ throw new RuntimeException(errorMsg);
+ }
+
+ generatedPrompt = resultBuilder.toString();
+ log.info("[executeAsync][taskId={}] Dify 分析完成,生成内容长度: {}", taskId, generatedPrompt.length());
+
} catch (Exception e) {
- log.warn("[executeAsync][taskId={}] AI 生成失败,使用默认提示词: {}", taskId, e.getMessage());
+ log.warn("[executeAsync][taskId={}] Dify 分析失败,使用默认提示词: {}", taskId, e.getMessage());
// 降级:使用合并文本的前2000字符
generatedPrompt = "请参考以下视频文案风格生成内容:\n\n" +
mergedText.substring(0, Math.min(2000, mergedText.length()));
@@ -191,4 +221,157 @@ public class BenchmarkTaskExecutor {
return userPromptService.createUserPrompt(saveReqVO);
}
+ /**
+ * 从阿里云转写结果中提取纯文本
+ * 支持多种 JSON 格式:
+ * 1. {"sentences": [{"text": "xxx"}, ...]}
+ * 2. {"transcripts": [{"text": "xxx"}]}
+ * 3. 纯文本
+ */
+ private String extractTranscriptionText(String rawData) {
+ if (StrUtil.isBlank(rawData)) {
+ return null;
+ }
+
+ try {
+ JSONObject json = JSON.parseObject(rawData);
+
+ // 格式1&2: sentences 或 transcripts 数组
+ String result = extractFromArray(json.getJSONArray("sentences"), "text");
+ if (result == null) {
+ result = extractFromArray(json.getJSONArray("transcripts"), "text");
+ }
+ if (result != null) {
+ return result;
+ }
+
+ // 格式3: 直接的 text 字段
+ String text = json.getString("text");
+ if (StrUtil.isNotBlank(text)) {
+ return text;
+ }
+
+ // 格式4: Result 字段嵌套
+ String resultField = json.getString("Result");
+ if (StrUtil.isNotBlank(resultField)) {
+ return extractTranscriptionText(resultField);
+ }
+
+ log.warn("[extractTranscriptionText] 未知的 JSON 格式: {}", rawData.substring(0, Math.min(200, rawData.length())));
+ } catch (Exception e) {
+ log.info("[extractTranscriptionText] 非JSON格式,直接返回原文,长度: {}", rawData.length());
+ return rawData;
+ }
+ return null;
+ }
+
+ /**
+ * 从 JSON 数组中提取文本
+ */
+ private String extractFromArray(JSONArray array, String textField) {
+ if (array == null || array.isEmpty()) {
+ return null;
+ }
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < array.size(); i++) {
+ Object item = array.get(i);
+ String text = null;
+ if (item instanceof JSONObject) {
+ text = ((JSONObject) item).getString(textField);
+ } else if (item != null) {
+ text = item.toString();
+ }
+ if (StrUtil.isNotBlank(text)) {
+ if (sb.length() > 0) {
+ sb.append(" ");
+ }
+ sb.append(text);
+ }
+ }
+ return sb.length() > 0 ? sb.toString() : null;
+ }
+
+ /**
+ * 从 DashScope 批量转写结果中提取所有文本
+ * 格式: {"results":[{"transcription_url":"https://..."},...]}
+ */
+ private List extractBatchTranscriptionTexts(String rawData) {
+ List results = new ArrayList<>();
+ if (StrUtil.isBlank(rawData)) {
+ return results;
+ }
+
+ try {
+ JSONObject json = JSON.parseObject(rawData);
+ JSONArray resultsArray = json.getJSONArray("results");
+ if (resultsArray == null || resultsArray.isEmpty()) {
+ log.warn("[extractBatchTranscriptionTexts] 未找到 results 数组");
+ return results;
+ }
+
+ for (int i = 0; i < resultsArray.size(); i++) {
+ JSONObject item = resultsArray.getJSONObject(i);
+ String transcriptionUrl = item.getString("transcription_url");
+ if (StrUtil.isBlank(transcriptionUrl)) {
+ continue;
+ }
+
+ try {
+ // 获取转写结果 URL 的内容
+ String transcriptionJson = fetchUrlContent(transcriptionUrl);
+ if (StrUtil.isBlank(transcriptionJson)) {
+ continue;
+ }
+
+ // 解析转写内容
+ JSONObject transJson = JSON.parseObject(transcriptionJson);
+ JSONArray transcripts = transJson.getJSONArray("transcripts");
+ if (transcripts != null && !transcripts.isEmpty()) {
+ JSONObject firstTranscript = transcripts.getJSONObject(0);
+ String text = firstTranscript.getString("text");
+ if (StrUtil.isNotBlank(text)) {
+ results.add(text);
+ log.info("[extractBatchTranscriptionTexts][{}/{}] 提取成功,长度: {}",
+ i + 1, resultsArray.size(), text.length());
+ }
+ }
+ } catch (Exception ex) {
+ log.warn("[extractBatchTranscriptionTexts][{}] 获取转写内容失败: {}", i, ex.getMessage());
+ }
+ }
+ } catch (Exception e) {
+ log.error("[extractBatchTranscriptionTexts] 解析失败: {}", e.getMessage());
+ }
+
+ return results;
+ }
+
+ /**
+ * 获取 URL 内容
+ */
+ private String fetchUrlContent(String url) {
+ try {
+ java.net.HttpURLConnection conn = (java.net.HttpURLConnection) new java.net.URL(url).openConnection();
+ conn.setConnectTimeout(10000);
+ conn.setReadTimeout(30000);
+ conn.setRequestMethod("GET");
+
+ if (conn.getResponseCode() == 200) {
+ try (java.io.InputStream is = conn.getInputStream();
+ java.io.BufferedReader reader = new java.io.BufferedReader(
+ new java.io.InputStreamReader(is, java.nio.charset.StandardCharsets.UTF_8))) {
+ StringBuilder sb = new StringBuilder();
+ String line;
+ while ((line = reader.readLine()) != null) {
+ sb.append(line);
+ }
+ return sb.toString();
+ }
+ }
+ } catch (Exception e) {
+ log.warn("[fetchUrlContent] 获取 URL 内容失败: {}, error: {}", url, e.getMessage());
+ }
+ return null;
+ }
+
}
diff --git a/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/config/TikAsyncConfig.java b/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/config/TikAsyncConfig.java
index daf78841e6..50d83f4401 100644
--- a/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/config/TikAsyncConfig.java
+++ b/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/config/TikAsyncConfig.java
@@ -7,12 +7,11 @@ import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
+import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadPoolExecutor;
/**
* Tik模块异步任务配置 - 限流保护
- *
- * @author 芋道源码
*/
@Slf4j
@Configuration
@@ -20,83 +19,42 @@ import java.util.concurrent.ThreadPoolExecutor;
public class TikAsyncConfig {
/**
- * 数字人任务专用线程池 - 限流保护
+ * 创建线程池执行器
*/
- @Bean("taskExecutor")
- public Executor taskExecutor() {
+ private Executor createExecutor(String prefix, int coreSize, int maxSize, int queueCapacity,
+ int keepAlive, RejectedExecutionHandler handler) {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
-
- // 核心线程数:10(CPU核心数)
- executor.setCorePoolSize(10);
-
- // 最大线程数:20
- executor.setMaxPoolSize(20);
-
- // 队列长度:50(超过的请求会被拒绝)
- executor.setQueueCapacity(50);
-
- // 线程名前缀
- executor.setThreadNamePrefix("digital-human-");
-
- // 线程空闲时间:60秒
- executor.setKeepAliveSeconds(60);
-
- // 关闭时等待任务完成
+ executor.setCorePoolSize(coreSize);
+ executor.setMaxPoolSize(maxSize);
+ executor.setQueueCapacity(queueCapacity);
+ executor.setThreadNamePrefix(prefix);
+ executor.setKeepAliveSeconds(keepAlive);
executor.setWaitForTasksToCompleteOnShutdown(true);
-
- // 等待时间:60秒
- executor.setAwaitTerminationSeconds(60);
-
- // 拒绝策略:抛出异常(也可以改为 CallerRunsPolicy 回退到调用者线程)
- executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
-
- // 初始化
+ executor.setAwaitTerminationSeconds(keepAlive);
+ executor.setRejectedExecutionHandler(handler);
executor.initialize();
-
- log.info("[TikAsyncConfig][数字人任务线程池已初始化][corePoolSize={}, maxPoolSize={}, queueCapacity={}]",
- executor.getCorePoolSize(), executor.getMaxPoolSize(), executor.getQueueCapacity());
-
return executor;
}
- /**
- * Latentsync轮询专用线程池 - 轻量化处理
- */
+ /** 数字人任务专用线程池 */
+ @Bean("taskExecutor")
+ public Executor taskExecutor() {
+ return createExecutor("digital-human-", 10, 20, 50, 60,
+ new ThreadPoolExecutor.AbortPolicy());
+ }
+
+ /** Latentsync轮询专用线程池 */
@Bean("latentsyncPollingExecutor")
public Executor latentsyncPollingExecutor() {
- ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+ return createExecutor("latentsync-poll-", 5, 10, 100, 30,
+ new ThreadPoolExecutor.DiscardOldestPolicy());
+ }
- // 核心线程数:5(轮询任务不需要太多线程)
- executor.setCorePoolSize(5);
-
- // 最大线程数:10
- executor.setMaxPoolSize(10);
-
- // 队列长度:100
- executor.setQueueCapacity(100);
-
- // 线程名前缀
- executor.setThreadNamePrefix("latentsync-poll-");
-
- // 线程空闲时间:30秒
- executor.setKeepAliveSeconds(30);
-
- // 关闭时等待任务完成
- executor.setWaitForTasksToCompleteOnShutdown(true);
-
- // 等待时间:30秒
- executor.setAwaitTerminationSeconds(30);
-
- // 拒绝策略:直接丢弃最旧的任务
- executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardOldestPolicy());
-
- // 初始化
- executor.initialize();
-
- log.info("[TikAsyncConfig][Latentsync轮询线程池已初始化][corePoolSize={}, maxPoolSize={}, queueCapacity={}]",
- executor.getCorePoolSize(), executor.getMaxPoolSize(), executor.getQueueCapacity());
-
- return executor;
+ /** 对标分析任务专用线程池 */
+ @Bean("benchmarkAsyncExecutor")
+ public Executor benchmarkAsyncExecutor() {
+ return createExecutor("benchmark-task-", 5, 10, 30, 60,
+ new ThreadPoolExecutor.AbortPolicy());
}
}
diff --git a/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/tikhup/controller/TikHupController.java b/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/tikhup/controller/TikHupController.java
index d6a74ff7bf..2147894551 100644
--- a/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/tikhup/controller/TikHupController.java
+++ b/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/tikhup/controller/TikHupController.java
@@ -32,13 +32,6 @@ public class TikHupController {
return tikHupService.postTikHup(type, methodType, urlParams, paramType);
}
- @PostMapping("/videoToCharacters")
- @Operation(summary = "音频转文字", description = "音频转文字接口")
- public Object videoToCharacters(@RequestBody Map fileLinkMap) {
- String fileLink = (String) fileLinkMap.get("fileLink");
- return tikHupService.videoToCharacters(fileLink);
- }
-
@PostMapping("/videoToCharacters2")
@Operation(summary = "批量音频转文字", description = "批量音频转文字接口")
public Object videoToCharacters2(@RequestBody Map fileLinkMap) {
diff --git a/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/tikhup/service/TikHupService.java b/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/tikhup/service/TikHupService.java
index 376e8ee2a1..0de26fd610 100644
--- a/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/tikhup/service/TikHupService.java
+++ b/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/tikhup/service/TikHupService.java
@@ -9,13 +9,6 @@ public interface TikHupService {
Object postTikHup(String type, String methodType, String urlParams, String paramType);
- /**
- * 音频转文字
- * @param downloadUrl 下载地址
- * @return 语音文字
- */
- Object videoToCharacters(String downloadUrl);
-
/**
* 批量音频转文字
* @param fileLinkList 音频地址
diff --git a/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/tikhup/service/TikHupServiceImpl.java b/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/tikhup/service/TikHupServiceImpl.java
index 513c8c1711..d3dd0d4412 100644
--- a/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/tikhup/service/TikHupServiceImpl.java
+++ b/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/tikhup/service/TikHupServiceImpl.java
@@ -51,7 +51,6 @@ public class TikHupServiceImpl implements TikHupService {
// 日志前缀
private static final String LOG_PREFIX_TIKHUP = "[postTikHup]";
- private static final String LOG_PREFIX_VIDEO = "[videoToCharacters]";
private static final String LOG_PREFIX_VIDEO2 = "[videoToCharacters2]";
private static final String LOG_PREFIX_DEEPSEEK = "[deepseekAnalysis]";
@@ -66,11 +65,6 @@ public class TikHupServiceImpl implements TikHupService {
private static final String DEEPSEEK_API_KEY = "sk-7f666f993b144d279ae375a015e4de56";
private static final String DEEPSEEK_API_URL = "https://api.deepseek.com/chat/completions";
- // 阿里云语音识别配置
- private final String appKey = "sldJ4XSpYp3rKALZ";
- private final String accessKeyId = "LTAI5tPV9Ag3csf41GZjaLTA";
- private final String accessKeySecret = "kDqlGeJTKw6tJtFYiaY8vQTFuVIQDs";
-
// 流式处理配置
private static final Duration STREAM_TIMEOUT = Duration.ofMinutes(30);
@@ -269,29 +263,6 @@ public class TikHupServiceImpl implements TikHupService {
}
}
- @Override
- public Object videoToCharacters(String fileLink) {
- log.info("{} 开始识别,文件链接: {}", LOG_PREFIX_VIDEO, fileLink);
- TikFileTransCharacters transCharacters = new TikFileTransCharacters(accessKeyId, accessKeySecret);
- String taskId = transCharacters.submitFileTransRequest(appKey, fileLink);
-
- if (taskId == null) {
- log.error("{} 提交识别请求失败,taskId为null,fileLink: {}", LOG_PREFIX_VIDEO, fileLink);
- return CommonResult.error(500, "录音文件识别请求失败!");
- }
-
- log.info("{} 提交识别请求成功,taskId: {}", LOG_PREFIX_VIDEO, taskId);
- String transResult = transCharacters.getFileTransResult(taskId);
-
- if (transResult == null) {
- log.error("{} 识别结果查询失败,taskId: {}", LOG_PREFIX_VIDEO, taskId);
- return CommonResult.error(501, "录音文件识别请求失败!");
- }
-
- log.info("{} 识别成功,taskId: {},结果长度: {}", LOG_PREFIX_VIDEO, taskId, transResult.length());
- return CommonResult.success(transResult);
- }
-
@Override
public Object videoToCharacters2(List fileLinkList) {
log.info("{} 开始识别,文件数量: {},文件URL: {}",