This commit is contained in:
@@ -96,51 +96,3 @@ class BailianService:
|
|||||||
evaluation.error_message = str(e)
|
evaluation.error_message = str(e)
|
||||||
evaluation.save()
|
evaluation.save()
|
||||||
return evaluation
|
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}")
|
|
||||||
|
|||||||
@@ -234,10 +234,19 @@ class TranscriptionTaskViewSet(viewsets.ModelViewSet):
|
|||||||
"""
|
"""
|
||||||
task = self.get_object()
|
task = self.get_object()
|
||||||
|
|
||||||
# 如果任务已经完成或失败,但逐字稿为空,允许重新刷新
|
# 允许刷新的条件:
|
||||||
if task.status == TranscriptionTask.Status.SUCCEEDED and not task.transcription:
|
# 1. 任务未完成 (PENDING, PROCESSING)
|
||||||
pass # 继续执行刷新逻辑
|
# 2. 任务已完成但逐字稿 (transcription) 为空
|
||||||
elif task.status in [TranscriptionTask.Status.SUCCEEDED, TranscriptionTask.Status.FAILED]:
|
# 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)
|
serializer = self.get_serializer(task)
|
||||||
return Response(serializer.data)
|
return Response(serializer.data)
|
||||||
|
|
||||||
@@ -273,7 +282,18 @@ class TranscriptionTaskViewSet(viewsets.ModelViewSet):
|
|||||||
# 调用 Service 进行解析和更新
|
# 调用 Service 进行解析和更新
|
||||||
service.parse_and_update_task(task, result)
|
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()
|
task.refresh_from_db()
|
||||||
|
|
||||||
serializer = self.get_serializer(task)
|
serializer = self.get_serializer(task)
|
||||||
|
|||||||
Reference in New Issue
Block a user