feat: 增强规则资产管理与审计页面运行时调试

后端新增规则资产版本管理和规则文件 CRUD 接口,优化风险
规则生成模板执行和员工数据模型字段,知识库 RAG 增强本
地回退和文档提取能力,清理旧风险规则文件统一由生成引擎
管理,前端审计页面增加运行时调试面板和规则资产编辑交互,
补充单元测试覆盖。
This commit is contained in:
caoxiaozhu
2026-05-24 21:44:17 +08:00
parent 575f093c74
commit 50b1c3f9a9
113 changed files with 13896 additions and 5044 deletions

View File

@@ -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

View File

@@ -164,6 +164,7 @@ class SettingsRead(BaseModel):
companyForm: SettingsCompanyForm
adminForm: SettingsAdminForm
sessionForm: SettingsSessionForm
hermesForm: dict
llmForm: SettingsLlmForm
renderForm: SettingsRenderForm
logForm: SettingsLogForm
@@ -174,6 +175,7 @@ class SettingsWrite(BaseModel):
companyForm: SettingsCompanyForm
adminForm: SettingsAdminForm
sessionForm: SettingsSessionForm
hermesForm: dict
llmForm: SettingsLlmForm
renderForm: SettingsRenderForm
logForm: SettingsLogForm