Skip to main content

Metrics Overview

AgentEval provides 27 built-in metrics organized into five categories. All metrics return an EvalScore (0.0–1.0) with a human-readable reason.

Response Quality​

Evaluate how well the agent's response answers the user's question.

MetricDefault ThresholdRequires LLMAvailable Since
AnswerRelevancy0.7YesP0
Faithfulness0.7YesP0
Hallucination0.5YesP0
Toxicity0.5YesP0
Correctness (G-Eval)0.5YesP1
SemanticSimilarity0.7No (embeddings)P1
BiasDetection0.5YesP1
Conciseness0.5YesP1
Coherence0.7YesP1

RAG Metrics​

Evaluate the quality of Retrieval-Augmented Generation pipelines.

MetricDefault ThresholdRequires LLMAvailable Since
ContextualPrecision0.7YesP1
ContextualRecall0.7YesP1
ContextualRelevancy0.7YesP1
RetrievalCompleteness0.8NoP1

Agent Metrics​

Evaluate tool use, planning, and execution trajectories.

MetricDefault ThresholdRequires LLMAvailable Since
ToolSelectionAccuracy0.8NoP0
TaskCompletion0.5YesP0
ToolArgumentCorrectness0.8NoP1
ToolResultUtilization0.7YesP1
PlanQuality0.7YesP1
PlanAdherence0.7YesP1
TrajectoryOptimality0.5YesP1
StepLevelErrorLocalization0.5YesP1

Conversation Metrics​

Evaluate multi-turn conversation quality and coherence.

MetricDefault ThresholdRequires LLMAvailable Since
ConversationCoherence0.7YesP1
ContextRetention0.7YesP1
TopicDriftDetection0.5YesP1
ConversationResolution0.5YesP1

Custom Metrics​

Build your own metrics using the G-Eval framework or pure Java logic.

TypeWhen to Use
G-Eval Custom MetricAny evaluation criteria expressible in natural language
Deterministic MetricRule-based checks — regex, JSON schema, keyword matching
Composite MetricCombine multiple metrics with weighted scoring

Using Multiple Metrics​

@Test
@AgentTest
@Metric(value = AnswerRelevancy.class, threshold = 0.7)
@Metric(value = Faithfulness.class, threshold = 0.8)
@Metric(value = ToolSelectionAccuracy.class, threshold = 0.9)
void comprehensiveEval() {
var testCase = AgentTestCase.builder()
.input("What is the status of order #12345?")
.actualOutput(agent.run("What is the status of order #12345?"))
.retrievalContext(retrievedDocs)
.toolCalls(agent.getLastToolCalls())
.expectedToolCalls(List.of(ToolCall.of("GetOrderStatus", Map.of("orderId", "12345"))))
.build();

AgentAssertions.assertThat(testCase)
.meetsMetric(new AnswerRelevancy(0.7))
.meetsMetric(new Faithfulness(0.8))
.meetsMetric(new ToolSelectionAccuracy(0.9));
}

Programmatic Batch Evaluation​

var metrics = List.of(
new AnswerRelevancy(0.7),
new Faithfulness(0.8),
new ToolSelectionAccuracy(0.9)
);

EvalResults results = AgentEval.evaluate(dataset, metrics);
results.summary(); // prints console report
results.passRate(); // e.g. 0.94
results.averageScore(); // e.g. 0.87