tingwu_new
All checks were successful
Deploy to Server / deploy (push) Successful in 17s

This commit is contained in:
jeremygan2021
2026-03-11 21:01:28 +08:00
parent 2c17e3bcd7
commit 852bc74bc1
7 changed files with 273 additions and 63 deletions

View File

@@ -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}")