Files
market_page/backend/ai_services/models.py
jeremygan2021 7612c09571
All checks were successful
Deploy to Server / deploy (push) Successful in 1m8s
tingwu_new
2026-03-11 20:46:25 +08:00

99 lines
4.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import uuid
from django.db import models
from django.utils.translation import gettext_lazy as _
class TranscriptionTask(models.Model):
class Status(models.TextChoices):
PENDING = 'PENDING', _('等待中')
PROCESSING = 'PROCESSING', _('处理中')
SUCCEEDED = 'SUCCEEDED', _('成功')
FAILED = 'FAILED', _('失败')
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
file_url = models.URLField(verbose_name=_('文件链接'), max_length=1024)
task_id = models.CharField(verbose_name=_('听悟任务ID'), max_length=100, blank=True, null=True)
status = models.CharField(
verbose_name=_('状态'),
max_length=20,
choices=Status.choices,
default=Status.PENDING
)
# 存储阿里云听悟返回的原始 JSON 结构
transcription_data = models.JSONField(verbose_name=_('转写原始数据'), blank=True, null=True, help_text=_('阿里云返回的Transcription完整JSON'))
summary_data = models.JSONField(verbose_name=_('总结原始数据'), blank=True, null=True, help_text=_('阿里云返回的Summarization完整JSON'))
auto_chapters_data = models.JSONField(verbose_name=_('章节原始数据'), blank=True, null=True, help_text=_('阿里云返回的AutoChapters完整JSON'))
transcription = models.TextField(verbose_name=_('逐字稿'), blank=True, null=True)
summary = models.TextField(verbose_name=_('AI总结'), blank=True, null=True)
# 已解耦到 AIEvaluation 模型
# score = models.IntegerField(verbose_name=_('AI评分'), blank=True, null=True, help_text=_('基于转写内容的评分'))
# evaluation = models.TextField(verbose_name=_('AI评语'), blank=True, null=True)
error_message = models.TextField(verbose_name=_('错误信息'), blank=True, null=True)
created_at = models.DateTimeField(verbose_name=_('创建时间'), auto_now_add=True)
updated_at = models.DateTimeField(verbose_name=_('更新时间'), auto_now=True)
class Meta:
verbose_name = _('转写任务')
verbose_name_plural = _('转写任务')
ordering = ['-created_at']
def __str__(self):
return f"{self.id} - {self.get_status_display()}"
class AIEvaluation(models.Model):
class Status(models.TextChoices):
PENDING = 'PENDING', _('等待中')
PROCESSING = 'PROCESSING', _('生成中')
COMPLETED = 'COMPLETED', _('已完成')
FAILED = 'FAILED', _('失败')
task = models.OneToOneField(
TranscriptionTask,
on_delete=models.CASCADE,
related_name='ai_evaluation',
verbose_name=_('关联任务')
)
# 评分与评语
score = models.IntegerField(verbose_name=_('AI评分'), blank=True, null=True, help_text=_('0-100分'))
evaluation = models.TextField(verbose_name=_('AI评语'), blank=True, null=True)
# 配置选项 (可在Admin中设置)
model_selection = models.CharField(
verbose_name=_('模型选择'),
max_length=50,
default='qwen-plus',
help_text=_('例如: qwen-plus, qwen-turbo, qwen-max')
)
prompt = models.TextField(
verbose_name=_('评分提示词'),
default='你是一个专业的评分助手。请根据提供的转写内容对内容质量、逻辑清晰度、语言表达等方面进行综合评分0-100分并给出详细的评语。请以JSON格式返回包含"score""evaluation"字段。',
help_text=_('用于指导AI评分的提示词')
)
# 原始数据与推理
raw_response = models.JSONField(verbose_name=_('原始响应'), blank=True, null=True, help_text=_('大模型返回的完整JSON'))
reasoning = models.TextField(verbose_name=_('推理过程'), blank=True, null=True, help_text=_('AI的推理过程如果有'))
status = models.CharField(
verbose_name=_('评估状态'),
max_length=20,
choices=Status.choices,
default=Status.PENDING
)
error_message = models.TextField(verbose_name=_('错误信息'), blank=True, null=True)
created_at = models.DateTimeField(verbose_name=_('创建时间'), auto_now_add=True)
updated_at = models.DateTimeField(verbose_name=_('更新时间'), auto_now=True)
class Meta:
verbose_name = _('AI智能评估')
verbose_name_plural = _('AI智能评估')
ordering = ['-created_at']
def __str__(self):
return f"Evaluation for Task {self.task.id}"