feat: 新增风险图谱算法与系统仪表盘及操作反馈体系
后端新增风险图谱算法模块、风险观察与反馈服务、规则 DSL 校验器和可解释性引擎,完善系统仪表盘和财务仪表盘统计, 优化 agent 运行和编排执行链路,清理旧开发文档,前端新增 系统趋势、负载热力图等多种仪表盘图表组件,完善操作反馈 对话框和工作台日期选择器,优化报销创建和审批详情交互, 补充单元测试覆盖。
This commit is contained in:
@@ -31,7 +31,17 @@ const SESSION_SCOPE_CONFIG = {
|
||||
const SESSION_SCOPE_TYPES = Object.keys(SESSION_SCOPE_CONFIG)
|
||||
|
||||
const APPLICATION_PATTERN =
|
||||
/费用申请|发起申请|申请单|事前申请|事前审批|前置审批|出差申请|采购申请|用款申请|预算申请|申请材料|材料清单|先申请|立项申请/
|
||||
/费用申请|发起申请|申请单|事前申请|事前审批|前置审批|出差申请|申请出差|差旅申请|申请差旅|采购申请|用款申请|预算申请|申请材料|材料清单|先申请|立项申请/
|
||||
const APPLICATION_PLANNING_PATTERN =
|
||||
/计划|安排|准备|需要|打算|预计|申请|发起|提交|提出|先走|先办|要去|将要|下周|下月|明天|后天|近期|月底|去|到|赴|前往|参加/
|
||||
const APPLICATION_BUSINESS_PATTERN =
|
||||
/出差|差旅|客户现场|现场|客户|项目|部署|实施|支撑|支持|协助|拜访|调研|培训|会议|会务|驻场|上线|验收|采购|购置|用款|立项/
|
||||
const APPLICATION_FUTURE_OR_DURATION_PATTERN =
|
||||
/明天|后天|下周|下月|近期|月底|预计|计划|安排|准备|将要|[0-9]+天|[一二两三四五六七八九十]+天/
|
||||
const APPLICATION_ROUTE_PATTERN =
|
||||
/(?:去|到|赴|前往)[^,,。;;!??!\n]{0,24}(?:出差|差旅|客户|现场|项目|部署|实施|支撑|支持|协助|拜访|调研|培训|会议|驻场|上线|验收)|(?:出差|差旅)[^,,。;;!??!\n]{0,24}(?:[0-9]+天|[一二两三四五六七八九十]+天|客户|现场|项目|部署|实施|支撑|支持|协助|拜访|调研|培训|会议|驻场|上线|验收)/
|
||||
const COMPLETED_EXPENSE_PATTERN =
|
||||
/已经|已|昨天|前天|上周|上月|去年|花了|花销|消费|垫付|支付|付了|买了|采购了|招待了|发生了/
|
||||
const EXPENSE_PATTERN =
|
||||
/报销|报销单|票据|发票|火车票|高铁票|机票|飞机票|的士票|出租车|网约车|酒店票|住宿票|住宿单据|保存草稿|草稿|费用明细|归集|上传.*票|关联单据|继续下一步/
|
||||
const APPROVAL_PATTERN =
|
||||
@@ -52,6 +62,34 @@ function normalizeText(rawText) {
|
||||
.toLowerCase()
|
||||
}
|
||||
|
||||
export function hasReimbursementIntentSignal(rawText) {
|
||||
return EXPENSE_PATTERN.test(normalizeText(rawText))
|
||||
}
|
||||
|
||||
export function hasExpenseApplicationIntentSignal(rawText) {
|
||||
const text = normalizeText(rawText)
|
||||
if (!text) {
|
||||
return false
|
||||
}
|
||||
|
||||
if (APPLICATION_PATTERN.test(text)) {
|
||||
return true
|
||||
}
|
||||
if (hasReimbursementIntentSignal(text) || COMPLETED_EXPENSE_PATTERN.test(text)) {
|
||||
return false
|
||||
}
|
||||
if (KNOWLEDGE_PATTERN.test(text) && !EXPENSE_OPERATION_PATTERN.test(text)) {
|
||||
return false
|
||||
}
|
||||
|
||||
const hasBusinessSignal = APPLICATION_BUSINESS_PATTERN.test(text)
|
||||
const planningScore = APPLICATION_PLANNING_PATTERN.test(text) ? 1 : 0
|
||||
const timingScore = APPLICATION_FUTURE_OR_DURATION_PATTERN.test(text) ? 1 : 0
|
||||
const routeScore = APPLICATION_ROUTE_PATTERN.test(text) ? 2 : 0
|
||||
|
||||
return hasBusinessSignal && planningScore + timingScore + routeScore >= 2
|
||||
}
|
||||
|
||||
function resolveScopeConfig(sessionType) {
|
||||
return SESSION_SCOPE_CONFIG[normalizeSessionType(sessionType)] || SESSION_SCOPE_CONFIG[ASSISTANT_SCOPE_SESSION_EXPENSE]
|
||||
}
|
||||
@@ -62,7 +100,7 @@ export function inferAssistantScopeTarget(rawText, options = {}) {
|
||||
return ''
|
||||
}
|
||||
|
||||
const applicationMatched = APPLICATION_PATTERN.test(text)
|
||||
const applicationMatched = hasExpenseApplicationIntentSignal(text)
|
||||
const expenseMatched = EXPENSE_PATTERN.test(text)
|
||||
const approvalMatched = APPROVAL_PATTERN.test(text)
|
||||
const knowledgeMatched = KNOWLEDGE_PATTERN.test(text)
|
||||
|
||||
Reference in New Issue
Block a user