feat: 重构资料包模型与会话绑定主链路
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
# Generated by Django 5.2.14 on 2026-06-03 16:39
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("audit", "0002_demobusinessrecord"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name="NotificationRecord",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
("batch_id", models.CharField(db_index=True, max_length=64)),
|
||||
("conversation_id", models.CharField(db_index=True, max_length=64)),
|
||||
(
|
||||
"product_name",
|
||||
models.CharField(blank=True, db_index=True, max_length=255),
|
||||
),
|
||||
("trigger_source", models.CharField(blank=True, max_length=64)),
|
||||
("notify_reason", models.CharField(db_index=True, max_length=32)),
|
||||
("owner_role", models.CharField(blank=True, max_length=100)),
|
||||
("feishu_user_id", models.CharField(blank=True, max_length=100)),
|
||||
(
|
||||
"message_status",
|
||||
models.CharField(db_index=True, default="pending", max_length=32),
|
||||
),
|
||||
("web_detail_url", models.URLField(blank=True)),
|
||||
("receipt", models.JSONField(blank=True, default=dict)),
|
||||
("created_at", models.DateTimeField(auto_now_add=True, db_index=True)),
|
||||
],
|
||||
options={
|
||||
"ordering": ["-created_at"],
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="agentauditlog",
|
||||
name="batch_id",
|
||||
field=models.CharField(blank=True, db_index=True, max_length=64),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="agentauditlog",
|
||||
name="conversation_id",
|
||||
field=models.CharField(blank=True, db_index=True, max_length=64),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="agentauditlog",
|
||||
name="product_name",
|
||||
field=models.CharField(blank=True, db_index=True, max_length=255),
|
||||
),
|
||||
]
|
||||
@@ -16,6 +16,9 @@ class AgentAuditLog(models.Model):
|
||||
|
||||
scenario_id = models.CharField(max_length=100, db_index=True)
|
||||
scenario_name = models.CharField(max_length=200, blank=True)
|
||||
batch_id = models.CharField(max_length=64, blank=True, db_index=True)
|
||||
conversation_id = models.CharField(max_length=64, blank=True, db_index=True)
|
||||
product_name = models.CharField(max_length=255, blank=True, db_index=True)
|
||||
user_input = models.TextField()
|
||||
retrieved_chunks = models.JSONField(default=list, blank=True)
|
||||
tool_calls = models.JSONField(default=list, blank=True)
|
||||
@@ -66,3 +69,33 @@ class DemoBusinessRecord(models.Model):
|
||||
|
||||
def __str__(self) -> str:
|
||||
return self.title
|
||||
|
||||
|
||||
class NotificationRecord(models.Model):
|
||||
"""
|
||||
飞书通知留痕。
|
||||
|
||||
首版只保存离线通知载荷与结果状态,不直接依赖真实飞书网络。
|
||||
"""
|
||||
|
||||
STATUS_PENDING = "pending"
|
||||
STATUS_SENT = "sent"
|
||||
STATUS_FAILED = "failed"
|
||||
|
||||
batch_id = models.CharField(max_length=64, db_index=True)
|
||||
conversation_id = models.CharField(max_length=64, db_index=True)
|
||||
product_name = models.CharField(max_length=255, blank=True, db_index=True)
|
||||
trigger_source = models.CharField(max_length=64, blank=True)
|
||||
notify_reason = models.CharField(max_length=32, db_index=True)
|
||||
owner_role = models.CharField(max_length=100, blank=True)
|
||||
feishu_user_id = models.CharField(max_length=100, blank=True)
|
||||
message_status = models.CharField(max_length=32, default=STATUS_PENDING, db_index=True)
|
||||
web_detail_url = models.URLField(blank=True)
|
||||
receipt = models.JSONField(default=dict, 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.notify_reason}:{self.batch_id}"
|
||||
|
||||
@@ -8,6 +8,9 @@ def create_audit_log(
|
||||
scenario_name: str,
|
||||
user_input: str,
|
||||
agent_result: AgentResult,
|
||||
batch_id: str = "",
|
||||
conversation_id: str = "",
|
||||
product_name: str = "",
|
||||
) -> AgentAuditLog:
|
||||
"""
|
||||
将一次 Agent 执行结果落库为审计日志。
|
||||
@@ -20,6 +23,9 @@ def create_audit_log(
|
||||
return AgentAuditLog.objects.create(
|
||||
scenario_id=scenario_id,
|
||||
scenario_name=scenario_name,
|
||||
batch_id=batch_id,
|
||||
conversation_id=conversation_id,
|
||||
product_name=product_name,
|
||||
user_input=user_input,
|
||||
retrieved_chunks=agent_result.references,
|
||||
tool_calls=agent_result.tool_calls,
|
||||
|
||||
Reference in New Issue
Block a user