diff --git a/backend/ai_services/services.py b/backend/ai_services/services.py index 3f8053a..3e1ab81 100644 --- a/backend/ai_services/services.py +++ b/backend/ai_services/services.py @@ -297,15 +297,35 @@ class AliyunTingwuService: # 调用大模型生成总结 (如果 summary_data 或 auto_chapters_data 存在) if task.summary_data or task.auto_chapters_data: try: + # 设置占位状态 + task.summary = "AI总结生成当中..." + task.save(update_fields=['summary']) + + # 异步执行总结 + import threading from .bailian_service import BailianService - bailian_service = BailianService() - bailian_service.summarize_task(task) + + def async_summarize_in_service(task_id): + try: + # 重新获取 task 以避免线程安全问题 + from .models import TranscriptionTask + t = TranscriptionTask.objects.get(id=task_id) + bailian_service = BailianService() + bailian_service.summarize_task(t) + except Exception as e: + logger.error(f"Async summary generation failed in service: {e}") + + threading.Thread(target=async_summarize_in_service, args=(task.id,)).start() + logger.info(f"Triggered async summary generation for task {task.id}") + except Exception as e: logger.error(f"Failed to trigger AI summarization: {e}") # 4. 自动触发 AI 评估 (如果任务首次成功且有启用的模板) if previous_status != 'SUCCEEDED' and task.status == 'SUCCEEDED' and task.transcription: - self.trigger_ai_evaluations(task) + # 同样改为异步触发 + import threading + threading.Thread(target=self.trigger_ai_evaluations, args=(task,)).start() def trigger_ai_evaluations(self, task): """ diff --git a/backend/ai_services/views.py b/backend/ai_services/views.py index 9218359..7492b57 100644 --- a/backend/ai_services/views.py +++ b/backend/ai_services/views.py @@ -284,6 +284,7 @@ class TranscriptionTaskViewSet(viewsets.ModelViewSet): # 如果任务成功但 AI 总结仍为空 (可能之前解析没触发,或者大模型调用失败) # 再次尝试强制触发 summarize_task (如果原始数据存在) + # 注意:service.parse_and_update_task 内部已经尝试异步触发,这里作为补救措施 if task.status == TranscriptionTask.Status.SUCCEEDED and not task.summary: if task.summary_data or task.auto_chapters_data: try: