feat: 增强规则资产管理与审计页面运行时调试
后端新增规则资产版本管理和规则文件 CRUD 接口,优化风险 规则生成模板执行和员工数据模型字段,知识库 RAG 增强本 地回退和文档提取能力,清理旧风险规则文件统一由生成引擎 管理,前端审计页面增加运行时调试面板和规则资产编辑交互, 补充单元测试覆盖。
This commit is contained in:
@@ -112,8 +112,111 @@ class AgentAssetRuleJsonRead(BaseModel):
|
||||
|
||||
class AgentAssetRiskRuleGenerateRequest(BaseModel):
|
||||
business_domain: AgentAssetDomain = AgentAssetDomain.EXPENSE
|
||||
expense_category: str | None = Field(default=None, max_length=40)
|
||||
risk_level: str = Field(default="medium", pattern="^(low|medium|high)$")
|
||||
natural_language: str = Field(min_length=8, max_length=2000)
|
||||
requires_attachment: bool = False
|
||||
|
||||
|
||||
class AgentAssetRiskRuleSampleCase(BaseModel):
|
||||
case_id: str | None = Field(default=None, max_length=60)
|
||||
name: str = Field(default="测试样例", min_length=1, max_length=80)
|
||||
values: dict[str, Any] = Field(default_factory=dict)
|
||||
expected_hit: bool = True
|
||||
expected_severity: str | None = Field(default=None, max_length=20)
|
||||
note: str | None = None
|
||||
|
||||
|
||||
class AgentAssetRiskRuleSampleTestRequest(BaseModel):
|
||||
version: str | None = Field(default=None, max_length=30)
|
||||
cases: list[AgentAssetRiskRuleSampleCase] = Field(default_factory=list)
|
||||
|
||||
|
||||
class AgentAssetRiskRuleScenarioTestRequest(BaseModel):
|
||||
version: str | None = Field(default=None, max_length=30)
|
||||
intent: str = Field(default="", max_length=1000)
|
||||
filters: dict[str, Any] = Field(default_factory=dict)
|
||||
|
||||
|
||||
class AgentAssetRiskRuleReportRequest(BaseModel):
|
||||
version: str | None = Field(default=None, max_length=30)
|
||||
confirm_passed: bool = True
|
||||
note: str | None = Field(default=None, max_length=1000)
|
||||
|
||||
|
||||
class AgentAssetRiskRuleSimulationAttachment(BaseModel):
|
||||
name: str = Field(default="", max_length=240)
|
||||
content_type: str | None = Field(default=None, max_length=120)
|
||||
size: int | None = Field(default=None, ge=0)
|
||||
note: str | None = Field(default=None, max_length=500)
|
||||
ocr_text: str | None = Field(default=None, max_length=20000)
|
||||
summary: str | None = Field(default=None, max_length=2000)
|
||||
document_type: str | None = Field(default=None, max_length=80)
|
||||
document_type_label: str | None = Field(default=None, max_length=120)
|
||||
scene_code: str | None = Field(default=None, max_length=80)
|
||||
scene_label: str | None = Field(default=None, max_length=120)
|
||||
avg_score: float | None = Field(default=None, ge=0.0, le=1.0)
|
||||
recognition_status: str | None = Field(default=None, max_length=40)
|
||||
document_fields: list[dict[str, Any]] = Field(default_factory=list)
|
||||
|
||||
|
||||
class AgentAssetRiskRuleSimulationRequest(BaseModel):
|
||||
version: str | None = Field(default=None, max_length=30)
|
||||
message: str = Field(default="", max_length=4000)
|
||||
field_values: dict[str, Any] = Field(default_factory=dict)
|
||||
attachments: list[AgentAssetRiskRuleSimulationAttachment] = Field(default_factory=list)
|
||||
|
||||
|
||||
class AgentAssetRiskRuleSimulationRead(BaseModel):
|
||||
version: str
|
||||
ready: bool = True
|
||||
stage: str = "executed"
|
||||
hit: bool
|
||||
severity: str = "none"
|
||||
severity_label: str = "未命中"
|
||||
summary: str
|
||||
blocking_reason: str = ""
|
||||
message: str = ""
|
||||
field_values: dict[str, Any] = Field(default_factory=dict)
|
||||
evidence: dict[str, Any] = Field(default_factory=dict)
|
||||
attachments: list[dict[str, Any]] = Field(default_factory=list)
|
||||
recognized_fields: list[dict[str, Any]] = Field(default_factory=list)
|
||||
missing_fields: list[dict[str, Any]] = Field(default_factory=list)
|
||||
recognition_summary: list[dict[str, Any]] = Field(default_factory=list)
|
||||
execution_mode: str = "risk_rule_simulation"
|
||||
created_at: datetime
|
||||
|
||||
|
||||
class AgentAssetRiskRuleReturnRequest(BaseModel):
|
||||
note: str = Field(min_length=1, max_length=1000)
|
||||
|
||||
|
||||
class AgentAssetRiskRuleEnabledUpdate(BaseModel):
|
||||
enabled: bool
|
||||
|
||||
|
||||
class AgentAssetRiskRuleTestRunRead(BaseModel):
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
id: str
|
||||
asset_id: str
|
||||
version: str
|
||||
test_type: str
|
||||
status: str
|
||||
passed: bool
|
||||
summary: str
|
||||
input_json: dict[str, Any] = Field(default_factory=dict)
|
||||
result_json: dict[str, Any] = Field(default_factory=dict)
|
||||
created_by: str
|
||||
created_at: datetime
|
||||
|
||||
|
||||
class AgentAssetRiskRuleLatestTestSummary(BaseModel):
|
||||
version: str = ""
|
||||
sample: AgentAssetRiskRuleTestRunRead | None = None
|
||||
scenario: AgentAssetRiskRuleTestRunRead | None = None
|
||||
report: AgentAssetRiskRuleTestRunRead | None = None
|
||||
test_passed: bool = False
|
||||
|
||||
|
||||
class AgentAssetVersionTimelineItemRead(BaseModel):
|
||||
@@ -187,6 +290,8 @@ class AgentAssetListItem(BaseModel):
|
||||
config_json: dict[str, Any]
|
||||
change_count: int = 0
|
||||
modified_by: str | None = None
|
||||
published_by: str | None = None
|
||||
published_at: datetime | None = None
|
||||
created_at: datetime
|
||||
updated_at: datetime
|
||||
|
||||
@@ -197,3 +302,4 @@ class AgentAssetRead(AgentAssetListItem):
|
||||
current_version_change_note: str | None = None
|
||||
recent_versions: list[AgentAssetVersionRead] = Field(default_factory=list)
|
||||
latest_review: AgentAssetReviewRead | None = None
|
||||
latest_test_summary: AgentAssetRiskRuleLatestTestSummary | None = None
|
||||
|
||||
Reference in New Issue
Block a user