feat: add aiops lightweight verifier
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
package com.superbiz.agent.service;
|
||||
|
||||
import com.superbiz.agent.domain.entity.ToolInvocation;
|
||||
import com.superbiz.agent.dto.AIOpsRequest;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
class AiOpsRuleEvaluationServiceTest {
|
||||
|
||||
private final AiOpsRuleEvaluationService service = new AiOpsRuleEvaluationService();
|
||||
|
||||
@Test
|
||||
void evaluatePassesWhenReportFocusesPayloadAndHasEvidenceTools() {
|
||||
AIOpsRequest request = new AIOpsRequest();
|
||||
request.setAlertName("HighCPUUsage");
|
||||
request.setService("payment-service");
|
||||
|
||||
ToolInvocation invocation = ToolInvocation.builder()
|
||||
.toolName("lookup_knowledge")
|
||||
.build();
|
||||
|
||||
Map<String, Object> evaluation = service.evaluate(
|
||||
request,
|
||||
"HighCPUUsage alert on payment-service was diagnosed using metrics and knowledge evidence.",
|
||||
List.of(invocation)
|
||||
);
|
||||
|
||||
assertEquals("PASS", evaluation.get("verdict"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void evaluateWarnsWhenEvidenceToolsAreMissing() {
|
||||
AIOpsRequest request = new AIOpsRequest();
|
||||
request.setAlertName("HighCPUUsage");
|
||||
request.setService("payment-service");
|
||||
|
||||
Map<String, Object> evaluation = service.evaluate(
|
||||
request,
|
||||
"HighCPUUsage alert on payment-service has a likely resource saturation issue.",
|
||||
List.of()
|
||||
);
|
||||
|
||||
assertEquals("WARN", evaluation.get("verdict"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void evaluateFailsWhenReportIsMissing() {
|
||||
Map<String, Object> evaluation = service.evaluate(null, "too short", List.of());
|
||||
|
||||
assertEquals("FAIL", evaluation.get("verdict"));
|
||||
}
|
||||
}
|
||||
@@ -28,6 +28,8 @@ class AiOpsServiceTest {
|
||||
ReflectionTestUtils.setField(service, "diagnosisSessionRepository", diagnosisSessionRepository);
|
||||
ReflectionTestUtils.setField(service, "agentStepRepository", agentStepRepository);
|
||||
ReflectionTestUtils.setField(service, "toolInvocationRepository", toolInvocationRepository);
|
||||
ReflectionTestUtils.setField(service, "aiOpsRuleEvaluationService", new AiOpsRuleEvaluationService());
|
||||
ReflectionTestUtils.setField(service, "selfEvaluationMergeService", new SelfEvaluationMergeService());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -145,10 +147,12 @@ class AiOpsServiceTest {
|
||||
.agentFlow("AI_OPS")
|
||||
.build();
|
||||
when(diagnosisSessionRepository.findBySessionId("aiops-session-001")).thenReturn(Optional.of(session));
|
||||
when(toolInvocationRepository.findBySessionIdOrderByIdAsc("aiops-session-001")).thenReturn(List.of());
|
||||
|
||||
service.persistFinalReport("aiops-session-001", "# 告警分析报告");
|
||||
service.persistFinalReport("aiops-session-001", "# 告警分析报告\nHighCPUUsage payment-service analysis with evidence summary.");
|
||||
|
||||
assertEquals("# 告警分析报告", session.getAnswer());
|
||||
assertEquals("# 告警分析报告\nHighCPUUsage payment-service analysis with evidence summary.", session.getAnswer());
|
||||
assertTrue(session.getSelfEvaluation().contains("aiops_rule_evaluation"));
|
||||
verify(diagnosisSessionRepository).save(session);
|
||||
}
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ class DiagnosisTraceServiceTest {
|
||||
.stepCount(2)
|
||||
.toolCallCount(1)
|
||||
.answer("restart payment gateway pool")
|
||||
.selfEvaluation("{\"verifier_evaluation\":{\"verdict\":\"PASS\"}}")
|
||||
.selfEvaluation("{\"verifier_evaluation\":{\"verdict\":\"PASS\"},\"aiops_rule_evaluation\":{\"verdict\":\"WARN\"}}")
|
||||
.feedback("useful")
|
||||
.createdAt(now)
|
||||
.updatedAt(now)
|
||||
@@ -103,6 +103,7 @@ class DiagnosisTraceServiceTest {
|
||||
assertEquals(1, response.getSummary().getPersistedToolCallCount());
|
||||
assertEquals(1, response.getSummary().getReturnedToolCallCount());
|
||||
assertTrue(response.getSummary().isHasVerifierEvaluation());
|
||||
assertTrue(response.getSummary().isHasAiOpsRuleEvaluation());
|
||||
assertTrue(response.getSummary().isHasFeedback());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user