feat: 新增风险图谱算法与系统仪表盘及操作反馈体系
后端新增风险图谱算法模块、风险观察与反馈服务、规则 DSL 校验器和可解释性引擎,完善系统仪表盘和财务仪表盘统计, 优化 agent 运行和编排执行链路,清理旧开发文档,前端新增 系统趋势、负载热力图等多种仪表盘图表组件,完善操作反馈 对话框和工作台日期选择器,优化报销创建和审批详情交互, 补充单元测试覆盖。
This commit is contained in:
@@ -40,7 +40,8 @@ def build_risk_rule_compiler_messages(
|
||||
"id": "稳定英文标识",
|
||||
"operator": (
|
||||
"exists_any | exists_all | in_scope | not_in_scope | overlap | "
|
||||
"not_overlap | date_outside_range | contains_any | not_contains_any"
|
||||
"not_overlap | date_outside_range | numeric_compare | duplicate_value | "
|
||||
"contains_any | not_contains_any"
|
||||
),
|
||||
"fields": ["exists/contains 类操作使用"],
|
||||
"left_fields": ["集合比较左侧字段"],
|
||||
@@ -48,6 +49,8 @@ def build_risk_rule_compiler_messages(
|
||||
"date_fields": ["日期字段"],
|
||||
"range_start_fields": ["日期范围开始字段"],
|
||||
"range_end_fields": ["日期范围结束字段"],
|
||||
"compare": "numeric_compare 使用:gt | gte | lt | lte | eq",
|
||||
"threshold": "numeric_compare 可选固定阈值;若与预算余额比较,应使用 right_fields",
|
||||
"keywords": ["例外或风险词"],
|
||||
}
|
||||
],
|
||||
@@ -74,8 +77,20 @@ def build_risk_rule_compiler_messages(
|
||||
"fail": "命中时说明",
|
||||
},
|
||||
}
|
||||
response_schema = {
|
||||
"semantic_plan": {
|
||||
"rule_intent": "用业务语言复述规则意图",
|
||||
"scope": "适用业务域、环节、费用领域",
|
||||
"required_fields": "字段本体映射,必须来自 available_fields",
|
||||
"judgment_steps": "逐步判断链,先事实、再条件、再例外、最后动作",
|
||||
"exception_conditions": "例外说明或豁免条件,不得当作风险关键词",
|
||||
"risk_action": "命中后的业务动作与评分证据",
|
||||
},
|
||||
"dsl": schema,
|
||||
}
|
||||
guardrails = [
|
||||
"只能输出 JSON 对象,不能输出 Markdown 或解释。",
|
||||
"输出结构必须包含 semantic_plan 和 dsl;semantic_plan 先解释业务判断链,dsl 再承载可执行规则。",
|
||||
"必须区分业务环节:费用申请是事前风控,费用报销是事后核验;不要把二者的字段和流程语义混用。",
|
||||
"费用申请阶段更关注预算余额、申请金额、申请事由、预计行程、预计费用科目、是否超预算或缺少前置审批。",
|
||||
"费用报销阶段更关注真实票据、报销明细、发生日期、附件识别结果和申请/行程/票据一致性。",
|
||||
@@ -84,7 +99,10 @@ def build_risk_rule_compiler_messages(
|
||||
"城市/地点/路线一致性必须用 field_compare_v1 或 semantic_type=travel_route_city_consistency。",
|
||||
"涉及多个字段、日期范围、金额范围、集合关系、例外说明的规则必须使用 composite_rule_v1。",
|
||||
"日期字段必须区分事实日期、票据日期和业务期间;如果只能拿到替代字段,要在 rule_ir 中说明这是 fallback evidence。",
|
||||
"composite_rule_v1 只能使用受控 operator:exists_any、exists_all、in_scope、not_in_scope、overlap、not_overlap、date_outside_range、contains_any、not_contains_any。",
|
||||
"composite_rule_v1 只能使用受控 operator:exists_any、exists_all、in_scope、not_in_scope、overlap、not_overlap、date_outside_range、numeric_compare、duplicate_value、contains_any、not_contains_any。",
|
||||
"预算、金额、阈值和超标规则必须用 numeric_compare;例如 claim.amount GT budget.remaining_amount,不得写成金额风险关键词匹配。",
|
||||
"人均超标规则必须优先使用字段本体中的人均金额字段,例如 claim.per_capita_amount GT 固定阈值,参与人数作为解释事实字段保留。",
|
||||
"重复发票、同一票据号、重复报销等规则必须用 duplicate_value;例如 attachment.invoice_no 在本次附件或明细中出现重复,不得写成重复风险关键词匹配。",
|
||||
"差旅路线规则中,交通票行程城市和住宿发票城市属于附件城市集合。",
|
||||
"申报目的地和明细发生地点属于申报行程城市集合。",
|
||||
"员工常驻地/出发地如可用,属于合理起终点集合,不等同于申报目的地。",
|
||||
@@ -167,7 +185,7 @@ def build_risk_rule_compiler_messages(
|
||||
"expense_category_label": expense_category_label,
|
||||
"natural_language": natural_language,
|
||||
"available_fields": available_fields,
|
||||
"required_json_shape": schema,
|
||||
"required_json_shape": response_schema,
|
||||
"examples": examples,
|
||||
},
|
||||
ensure_ascii=False,
|
||||
|
||||
Reference in New Issue
Block a user