feat: 新增风险图谱算法与系统仪表盘及操作反馈体系

后端新增风险图谱算法模块、风险观察与反馈服务、规则 DSL
校验器和可解释性引擎,完善系统仪表盘和财务仪表盘统计,
优化 agent 运行和编排执行链路,清理旧开发文档,前端新增
系统趋势、负载热力图等多种仪表盘图表组件,完善操作反馈
对话框和工作台日期选择器,优化报销创建和审批详情交互,
补充单元测试覆盖。
This commit is contained in:
caoxiaozhu
2026-05-30 15:46:51 +08:00
parent 4c59941ec6
commit 7989f3a159
314 changed files with 30073 additions and 20626 deletions

View File

@@ -104,3 +104,43 @@ def test_agent_run_service_updates_existing_tool_call() -> None:
assert len(fetched.tool_calls) == 1
assert fetched.tool_calls[0].status == "succeeded"
assert fetched.tool_calls[0].response_json == {"track_id": "insert_123"}
def test_agent_run_service_summarizes_model_and_tool_failures() -> None:
with build_session() as db:
service = AgentRunService(db)
run = service.create_run(
agent=AgentName.ORCHESTRATOR.value,
source=AgentRunSource.USER_MESSAGE.value,
status=AgentRunStatus.SUCCEEDED.value,
ontology_json={
"parse_strategy": "rule_fallback",
"model_invocation_summary": {
"model_guardrail_reason": "model_conflicts_with_application_stage_signal"
},
},
)
service.record_tool_call(
run_id=run.run_id,
tool_type=AgentToolType.LLM.value,
tool_name="semantic_ontology.main",
request_json={"stage": "semantic_parse"},
response_json={"model_guardrail_reason": "model_conflicts_with_application_stage_signal"},
status="failed",
duration_ms=18,
error_message="model_conflicts_with_application_stage_signal",
)
stats = service.summarize_runs(agent=AgentName.ORCHESTRATOR.value, limit=20)
assert stats.total_runs >= 1
assert stats.tool_call_count >= 1
assert stats.failed_tool_call_count >= 1
assert stats.llm_call_count >= 1
assert stats.failed_llm_call_count >= 1
assert stats.model_fallback_count >= 1
assert stats.model_guardrail_count >= 1
assert any(
item.get("tool_name") == "semantic_ontology.main"
for item in stats.recent_errors
)