55 lines
2.1 KiB
Python
55 lines
2.1 KiB
Python
from django.db import models
|
|
|
|
|
|
class AgentAuditLog(models.Model):
|
|
# 审计状态需要同时服务数据库检索和前端展示。
|
|
STATUS_SUCCESS = "success"
|
|
STATUS_FAILED = "failed"
|
|
|
|
scenario_id = models.CharField(max_length=100, db_index=True)
|
|
scenario_name = models.CharField(max_length=200, blank=True)
|
|
user_input = models.TextField()
|
|
retrieved_chunks = models.JSONField(default=list, blank=True)
|
|
tool_calls = models.JSONField(default=list, blank=True)
|
|
structured_output = models.JSONField(default=dict, blank=True)
|
|
final_answer = models.TextField(blank=True)
|
|
raw_output = models.TextField(blank=True)
|
|
model_name = models.CharField(max_length=100, blank=True)
|
|
latency_ms = models.PositiveIntegerField(default=0)
|
|
status = models.CharField(max_length=20, default=STATUS_SUCCESS, db_index=True)
|
|
error_message = models.TextField(blank=True)
|
|
created_at = models.DateTimeField(auto_now_add=True, db_index=True)
|
|
|
|
class Meta:
|
|
ordering = ["-created_at"]
|
|
|
|
def __str__(self) -> str:
|
|
return f"{self.scenario_name or self.scenario_id} #{self.pk}"
|
|
|
|
def get_status_display_text(self) -> str:
|
|
"""返回更适合页面展示的中文状态。"""
|
|
return {
|
|
self.STATUS_SUCCESS: "执行成功",
|
|
self.STATUS_FAILED: "执行失败",
|
|
}.get(self.status, self.status)
|
|
|
|
def get_user_input_summary(self, max_length: int = 28) -> str:
|
|
"""在列表页展示用户输入摘要,避免长文本撑破表格。"""
|
|
if len(self.user_input) <= max_length:
|
|
return self.user_input
|
|
return f"{self.user_input[:max_length]}..."
|
|
|
|
|
|
class DemoBusinessRecord(models.Model):
|
|
scenario_id = models.CharField(max_length=100, db_index=True)
|
|
record_type = models.CharField(max_length=100, db_index=True)
|
|
title = models.CharField(max_length=255)
|
|
payload = models.JSONField(default=dict, blank=True)
|
|
created_at = models.DateTimeField(auto_now_add=True)
|
|
|
|
class Meta:
|
|
ordering = ["-created_at"]
|
|
|
|
def __str__(self) -> str:
|
|
return self.title
|