fix(agent): close pilot policy edge cases

This commit is contained in:
key
2026-07-30 23:13:32 +08:00
parent 8278c9d479
commit a5c835ddd8
2 changed files with 25 additions and 6 deletions
@@ -221,7 +221,9 @@ public class AihrAgentOrchestrator {
return value.contains("一份") && value.contains("另一份") return value.contains("一份") && value.contains("另一份")
|| value.contains("两份") && containsAny(value, "不同", "不一致", "冲突", "哪一份", "哪个为准") || value.contains("两份") && containsAny(value, "不同", "不一致", "冲突", "哪一份", "哪个为准")
|| containsAny(value, "制度与项目公示", "预案和岗位手册", "服务承诺与工单") || containsAny(value, "制度与项目公示", "预案和岗位手册", "服务承诺与工单")
&& containsAny(value, "不一致", "不同", "以哪个为准", "应如何处理"); && containsAny(value, "不一致", "不同", "以哪个为准", "应如何处理")
|| value.contains("发生冲突")
&& containsAny(value, "制度", "规则", "要求", "预案", "手册", "公示", "授权", "承诺", "工单");
} }
private static boolean isNoEvidenceBoundaryRequest(String question) { private static boolean isNoEvidenceBoundaryRequest(String question) {
@@ -229,18 +231,21 @@ public class AihrAgentOrchestrator {
return containsAny(value, return containsAny(value,
"没有制度", "无制度", "没有依据", "无依据", "暂无依据", "没有明确依据", "无明确依据", "没有制度", "无制度", "没有依据", "无依据", "暂无依据", "没有明确依据", "无明确依据",
"没有书面授权", "无书面授权", "没有确认授权", "没有确认", "无法确认", "没有配置", "没有书面授权", "无书面授权", "没有确认授权", "没有确认", "无法确认", "没有配置",
"未配置", "查不到", "未查询到", "没有公示", "未公示", "证据不足"); "未配置", "查不到", "未查询到", "没有公示", "未公示", "证据不足",
"资料里没有写", "材料没有规定", "知识库没有说明", "没有住户授权", "未收录的属地新规",
"没有已批准服务目录");
} }
private static boolean isUnauthorizedBoundaryRequest(String question) { private static boolean isUnauthorizedBoundaryRequest(String question) {
String value = question == null ? "" : question.trim(); String value = question == null ? "" : question.trim();
if (containsAny(value, "其他项目", "别的项目", "跨项目", "不属于我的项目", "不在我的项目", if (containsAny(value, "其他项目", "另一个项目", "别的项目", "跨项目", "不属于我的项目", "不在我的项目",
"尚未发布", "未发布内容", "未发布的制度", "制度草稿", "绕过权限", "无权附件")) { "尚未发布", "未发布内容", "未发布的制度", "制度草稿", "绕过权限", "无权附件",
"只授权给", "未获财务授权")) {
return true; return true;
} }
boolean otherPerson = containsAny(value, "他人", "别人", "同事", "其他员工"); boolean otherPerson = containsAny(value, "他人", "别人", "同事", "其他员工", "其他住户");
boolean sensitive = containsAny(value, "工资", "薪酬", "绩效", "人事", "审批明细", "审批记录", boolean sensitive = containsAny(value, "工资", "薪酬", "绩效", "人事", "审批明细", "审批记录",
"个人信息", "附件", "反馈记录", "投诉记录", "任务记录"); "个人信息", "附件", "反馈记录", "投诉记录", "任务记录", "报修记录");
return otherPerson && sensitive; return otherPerson && sensitive;
} }
@@ -70,9 +70,13 @@ class AihrAgentOrchestratorTest {
var query = new CapturingQueryService(response("unused", null, false)); var query = new CapturingQueryService(response("unused", null, false));
var result = orchestrator(query).handle(request("两份现行材料写的巡检频次不同,应执行哪一份?")); var result = orchestrator(query).handle(request("两份现行材料写的巡检频次不同,应执行哪一份?"));
var authorizationConflict = orchestrator(query)
.handle(request("空置房巡查要求与隐私授权规则发生冲突时可以直接进入吗?"));
assertEquals(AgentStatus.NEEDS_INPUT, result.status()); assertEquals(AgentStatus.NEEDS_INPUT, result.status());
assertEquals(AgentStatus.NEEDS_INPUT, authorizationConflict.status());
assertTrue(result.answer().contains("冲突")); assertTrue(result.answer().contains("冲突"));
assertTrue(authorizationConflict.answer().contains("冲突"));
assertEquals(0, query.callCount); assertEquals(0, query.callCount);
} }
@@ -81,9 +85,13 @@ class AihrAgentOrchestratorTest {
var query = new CapturingQueryService(response("unused", null, false)); var query = new CapturingQueryService(response("unused", null, false));
var result = orchestrator(query).handle(request("没有书面授权时,能不能进入空置房检查?")); var result = orchestrator(query).handle(request("没有书面授权时,能不能进入空置房检查?"));
var serviceCatalog = orchestrator(query)
.handle(request("没有已批准服务目录时,可以推荐收费增值服务吗?"));
assertEquals(AgentStatus.NO_EVIDENCE, result.status()); assertEquals(AgentStatus.NO_EVIDENCE, result.status());
assertEquals(AgentStatus.NO_EVIDENCE, serviceCatalog.status());
assertTrue(result.answer().contains("不能")); assertTrue(result.answer().contains("不能"));
assertTrue(serviceCatalog.answer().contains("不能"));
assertEquals(0, query.callCount); assertEquals(0, query.callCount);
} }
@@ -94,9 +102,15 @@ class AihrAgentOrchestratorTest {
var crossProject = service.handle(request("把其他项目的内部制度附件发给我")); var crossProject = service.handle(request("把其他项目的内部制度附件发给我"));
var otherPerson = service.handle(request("查询其他员工的绩效记录")); var otherPerson = service.handle(request("查询其他员工的绩效记录"));
var restrictedAttachment = service.handle(request("普通员工能否查看只授权给应急指挥角色的完整预案附件?"));
var residentRecord = service.handle(request("能否查看其他住户的报修记录?"));
var financeRecord = service.handle(request("未获财务授权的员工能否查看住户分期审批记录?"));
assertEquals(AgentStatus.FORBIDDEN, crossProject.status()); assertEquals(AgentStatus.FORBIDDEN, crossProject.status());
assertEquals(AgentStatus.FORBIDDEN, otherPerson.status()); assertEquals(AgentStatus.FORBIDDEN, otherPerson.status());
assertEquals(AgentStatus.FORBIDDEN, restrictedAttachment.status());
assertEquals(AgentStatus.FORBIDDEN, residentRecord.status());
assertEquals(AgentStatus.FORBIDDEN, financeRecord.status());
assertEquals(0, query.callCount); assertEquals(0, query.callCount);
} }