This commit is contained in:
@@ -16,6 +16,8 @@ from django.conf import settings
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
from .models import TranscriptionTask, AIEvaluation, AIEvaluationTemplate
|
||||
|
||||
class AliyunTingwuService:
|
||||
def __init__(self):
|
||||
self.access_key_id = settings.ALIYUN_ACCESS_KEY_ID
|
||||
@@ -157,6 +159,9 @@ class AliyunTingwuService:
|
||||
:param task: TranscriptionTask 实例
|
||||
:param result: get_task_info 返回的完整 JSON (或 Data 部分)
|
||||
"""
|
||||
# 记录之前的状态,用于判断是否是首次完成
|
||||
previous_status = task.status
|
||||
|
||||
# 1. 提取 Data 对象
|
||||
if isinstance(result, dict):
|
||||
data_obj = result.get('Data', result)
|
||||
@@ -269,6 +274,14 @@ class AliyunTingwuService:
|
||||
# 结构: {"MindMapSummary": [{"Title": "...", "Topic": [...]}]}
|
||||
summary_text = []
|
||||
|
||||
# 1. 优先提取段落标题和摘要
|
||||
if 'ParagraphTitle' in summarization:
|
||||
summary_text.append(f"### {summarization['ParagraphTitle']}")
|
||||
if 'ParagraphSummary' in summarization:
|
||||
summary_text.append(summarization['ParagraphSummary'])
|
||||
summary_text.append("") # 空行分隔
|
||||
|
||||
# 2. 提取思维导图作为大纲
|
||||
def parse_mindmap_topic(topic_list, level=0):
|
||||
indent = " " * level
|
||||
for topic in topic_list:
|
||||
@@ -281,13 +294,37 @@ class AliyunTingwuService:
|
||||
parse_mindmap_topic(sub_topics, level + 1)
|
||||
|
||||
if 'MindMapSummary' in summarization:
|
||||
summary_text.append("### 内容大纲")
|
||||
parse_mindmap_topic(summarization['MindMapSummary'])
|
||||
elif 'Text' in summarization:
|
||||
summary_text.append(summarization['Text'])
|
||||
elif 'Headline' in summarization:
|
||||
summary_text.append(summarization['Headline'])
|
||||
elif 'ParagraphSummary' in summarization:
|
||||
summary_text.append(summarization['ParagraphSummary'])
|
||||
summary_text.append("")
|
||||
|
||||
# 3. 提取对话总结 (ConversationalSummary)
|
||||
if 'ConversationalSummary' in summarization and isinstance(summarization['ConversationalSummary'], list):
|
||||
summary_text.append("### 对话总结")
|
||||
for conv in summarization['ConversationalSummary']:
|
||||
speaker = conv.get('SpeakerName', '发言人')
|
||||
summary = conv.get('Summary', '')
|
||||
if summary:
|
||||
summary_text.append(f"- **{speaker}**: {summary}")
|
||||
summary_text.append("")
|
||||
|
||||
# 4. 提取问答总结 (QuestionsAnsweringSummary)
|
||||
if 'QuestionsAnsweringSummary' in summarization and isinstance(summarization['QuestionsAnsweringSummary'], list):
|
||||
summary_text.append("### 问答回顾")
|
||||
for qa in summarization['QuestionsAnsweringSummary']:
|
||||
question = qa.get('Question', '')
|
||||
answer = qa.get('Answer', '')
|
||||
if question and answer:
|
||||
summary_text.append(f"**Q: {question}**")
|
||||
summary_text.append(f"A: {answer}")
|
||||
summary_text.append("")
|
||||
|
||||
# 兼容旧逻辑:如果上述都为空,尝试 Text 或 Headline
|
||||
if not summary_text:
|
||||
if 'Text' in summarization:
|
||||
summary_text.append(summarization['Text'])
|
||||
elif 'Headline' in summarization:
|
||||
summary_text.append(summarization['Headline'])
|
||||
|
||||
if summary_text:
|
||||
task.summary = "\n".join(summary_text)
|
||||
@@ -336,3 +373,37 @@ class AliyunTingwuService:
|
||||
task.summary = "\n".join(summary_text)
|
||||
|
||||
task.save()
|
||||
|
||||
# 4. 自动触发 AI 评估 (如果任务首次成功且有启用的模板)
|
||||
if previous_status != 'SUCCEEDED' and task.status == 'SUCCEEDED' and task.transcription:
|
||||
self.trigger_ai_evaluations(task)
|
||||
|
||||
def trigger_ai_evaluations(self, task):
|
||||
"""
|
||||
根据启用的模板自动触发 AI 评估
|
||||
"""
|
||||
active_templates = AIEvaluationTemplate.objects.filter(is_active=True)
|
||||
if not active_templates.exists():
|
||||
logger.info("No active AI evaluation templates found.")
|
||||
return
|
||||
|
||||
from .bailian_service import BailianService
|
||||
service = BailianService()
|
||||
|
||||
for template in active_templates:
|
||||
# 创建评估记录
|
||||
evaluation = AIEvaluation.objects.create(
|
||||
task=task,
|
||||
template=template,
|
||||
model_selection=template.model_selection,
|
||||
prompt=template.prompt,
|
||||
status=AIEvaluation.Status.PENDING
|
||||
)
|
||||
|
||||
# 触发评估 (同步执行,或者放入 Celery 任务)
|
||||
# 这里为了简单直接调用,生产环境建议使用 Celery
|
||||
try:
|
||||
service.evaluate_task(evaluation)
|
||||
logger.info(f"Triggered evaluation {evaluation.id} for template {template.name}")
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to trigger evaluation {evaluation.id}: {e}")
|
||||
|
||||
Reference in New Issue
Block a user