diff --git a/apps/audit/models.py b/apps/audit/models.py index 5a2dc7d..48edd01 100644 --- a/apps/audit/models.py +++ b/apps/audit/models.py @@ -2,6 +2,7 @@ from django.db import models class AgentAuditLog(models.Model): + # 审计状态需要同时服务数据库检索和前端展示。 STATUS_SUCCESS = "success" STATUS_FAILED = "failed" @@ -25,6 +26,19 @@ class AgentAuditLog(models.Model): 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) diff --git a/apps/audit/views.py b/apps/audit/views.py index 11484fd..594c3d2 100644 --- a/apps/audit/views.py +++ b/apps/audit/views.py @@ -4,8 +4,19 @@ from .models import AgentAuditLog def log_list(request): + # 列表页支持按场景筛选,方便演示时快速定位同一类场景的执行记录。 + scenario_id = (request.GET.get("scenario_id") or "").strip() logs = AgentAuditLog.objects.all() - return render(request, "audit/log_list.html", {"logs": logs}) + if scenario_id: + logs = logs.filter(scenario_id=scenario_id) + return render( + request, + "audit/log_list.html", + { + "logs": logs, + "selected_scenario_id": scenario_id, + }, + ) def log_detail(request, log_id: int): diff --git a/templates/audit/log_list.html b/templates/audit/log_list.html index 94f6ffc..cca078b 100644 --- a/templates/audit/log_list.html +++ b/templates/audit/log_list.html @@ -7,6 +7,12 @@ 执行留痕
每次 Agent 执行都会记录模型、检索片段、工具调用和最终结果,方便演示链路可解释性。
+ {% if selected_scenario_id %} ++ + 清空筛选 +
+ {% endif %}