diff --git a/backend/ai_services/bailian_service.py b/backend/ai_services/bailian_service.py index e798739..b9ecef5 100644 --- a/backend/ai_services/bailian_service.py +++ b/backend/ai_services/bailian_service.py @@ -96,51 +96,3 @@ class BailianService: evaluation.error_message = str(e) evaluation.save() return evaluation - - def summarize_task(self, task): - """ - 使用 AI 模型总结转写和章节数据 - """ - if not self.client: - logger.error("DashScope client not initialized") - return - - try: - summary_data = json.dumps(task.summary_data or {}, ensure_ascii=False) - chapters_data = json.dumps(task.auto_chapters_data or {}, ensure_ascii=False) - - prompt = f""" -你是一个专业的会议摘要和内容分析助手。请根据以下提供的“总结原始数据”和“章节原始数据”,生成一个结构清晰、专业且易于阅读的 Markdown 格式总结。 - -要求: -1. 包含一个总体的“核心摘要”。 -2. 包含一个详细的“内容大纲”。 -3. 如果有问答或对话信息,请包含“关键问答”或“发言人观点”。 -4. 包含一个带有时间戳的“章节回顾”,格式为 [HH:MM:SS] 标题。 -5. 语言简练,重点突出。 - -总结原始数据: -{summary_data} - -章节原始数据: -{chapters_data} -""" - messages = [ - {'role': 'system', 'content': '你是一个专业的文档总结助手。请直接返回 Markdown 格式的内容,不要包含任何引导性文字。'}, - {'role': 'user', 'content': prompt} - ] - - completion = self.client.chat.completions.create( - model="qwen-turbo", - messages=messages, - temperature=0.7 - ) - - ai_summary = completion.choices[0].message.content - if ai_summary: - task.summary = ai_summary - task.save() - logger.info(f"AI summary generated for task {task.id}") - - except Exception as e: - logger.error(f"Failed to generate AI summary: {e}") diff --git a/backend/ai_services/views.py b/backend/ai_services/views.py index b7ec931..32d810f 100644 --- a/backend/ai_services/views.py +++ b/backend/ai_services/views.py @@ -234,10 +234,19 @@ class TranscriptionTaskViewSet(viewsets.ModelViewSet): """ task = self.get_object() - # 如果任务已经完成或失败,但逐字稿为空,允许重新刷新 - if task.status == TranscriptionTask.Status.SUCCEEDED and not task.transcription: - pass # 继续执行刷新逻辑 - elif task.status in [TranscriptionTask.Status.SUCCEEDED, TranscriptionTask.Status.FAILED]: + # 允许刷新的条件: + # 1. 任务未完成 (PENDING, PROCESSING) + # 2. 任务已完成但逐字稿 (transcription) 为空 + # 3. 任务已完成但 AI总结 (summary) 为空 (新增) + + should_refresh = False + if task.status not in [TranscriptionTask.Status.SUCCEEDED, TranscriptionTask.Status.FAILED]: + should_refresh = True + elif task.status == TranscriptionTask.Status.SUCCEEDED: + if not task.transcription or not task.summary: + should_refresh = True + + if not should_refresh: serializer = self.get_serializer(task) return Response(serializer.data) @@ -273,7 +282,18 @@ class TranscriptionTaskViewSet(viewsets.ModelViewSet): # 调用 Service 进行解析和更新 service.parse_and_update_task(task, result) - # 重新获取 task 以包含更新后的关联字段 (如 ai_evaluations) + # 如果任务成功但 AI 总结仍为空 (可能之前解析没触发,或者大模型调用失败) + # 再次尝试强制触发 summarize_task (如果原始数据存在) + if task.status == TranscriptionTask.Status.SUCCEEDED and not task.summary: + if task.summary_data or task.auto_chapters_data: + try: + from .bailian_service import BailianService + bailian_service = BailianService() + bailian_service.summarize_task(task) + except Exception as e: + logger.error(f"Force trigger AI summarization failed: {e}") + + # 重新获取 task 以包含更新后的关联字段 task.refresh_from_db() serializer = self.get_serializer(task)