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