LLM applications fail in ways traditional software tests do not capture cleanly.
A model can return two different but equally correct answers. A RAG system can fail because retrieval missed the right document even though generation was excellent. An agent can produce the right final answer after taking a terrible trajectory: unnecessary tool calls, denied actions, repeated searches, or a risky mutation.
That is why production AI needs a real evaluation layer.
The goal is not to find one “AI score.” It is to build repeatable tests that answer concrete questions such as:
Did the answer satisfy the task?
Did retrieval find the right evidence?
Did the agent select the right tool?
Were arguments valid?
Did the workflow take a safe trajectory?
Did this new model/prompt regress an important case?
In 2026, four evaluation stacks are especially useful to understand: OpenAI Evals, LangSmith, DeepEval, and Arize Phoenix.
Start with eval design, not eval tooling
Before comparing frameworks, define the unit you are evaluating.
A useful evaluation system has three basic pieces:
Dataset
+ target system/configuration
+ graders/evaluators
The dataset contains representative tasks.
The target is the thing you want to test:
- a prompt
- a model
- a retriever
- an agent
- a full workflow
The grader decides whether the output or trajectory was good enough.
No framework can rescue a bad eval dataset or vague success criteria.
Quick comparison
| Framework | Best fit | Local / hosted orientation | Agent/RAG support | Strongest differentiator |
|---|---|---|---|---|
| OpenAI Evals | Teams deeply using OpenAI models/platform | Hosted/API-centric | Strong through custom data + graders | Native OpenAI eval objects, model comparisons, grader APIs |
| LangSmith | LangChain/LangGraph or trace-heavy AI apps | Hosted platform + SDK | Strong | Datasets + experiments + tracing in one workflow |
| DeepEval | Test-driven local/CI evaluation | Local-first, optional cloud | Very strong | Pytest-style evals, many ready metrics, agent/RAG trajectories |
| Arize Phoenix | Open-source observability + evals + experiments | Open-source / self-hostable | Strong | Trace-centric, vendor-agnostic observability and evaluators |
The best choice depends less on feature count and more on where your application already lives.
1. OpenAI Evals: native evaluation objects and graders
OpenAI’s Evals API lets you create an evaluation definition with:
data source schema
+ testing criteria / graders
Then you can run that eval repeatedly against different model configurations.
That makes it useful for controlled model and prompt comparisons.
Grader types
OpenAI’s current grader APIs include options such as:
- string checks
- text similarity
- label-model graders
- score-model graders
- Python graders
- multi-grader combinations
That is important because not every task should be judged by another LLM.
If the expected output is:
{"status":"approved"}
then an exact/schema check is better than asking a model whether the output “seems correct.”
Good fit
OpenAI Evals is especially natural when:
- OpenAI models are your main target
- you want hosted model comparison
- you already use OpenAI platform objects and APIs
- graders should be configured close to the provider
Limitation to understand
Your production system may contain components outside OpenAI:
retriever
vector DB
custom tools
business logic
multi-provider models
You can still evaluate these, but the framework is naturally centered on the OpenAI platform.
If your highest-value need is vendor-neutral tracing across every component, Phoenix or LangSmith may fit more naturally.
2. LangSmith: evaluation connected to traces and experiments
LangSmith organizes evaluation around three core concepts:
Dataset
Target function
Evaluators
The target can be anything from one model call to an entire agent workflow.
The important advantage is that evaluation lives next to tracing and experiment comparison.
Why that matters
Suppose version A of your support agent scores worse than version B.
A score tells you that it changed.
A trace can help tell you why:
retriever returned wrong chunk
→ agent selected unnecessary tool
→ second model call hallucinated policy
That tight connection between evals and traces can shorten the debugging loop significantly.
Strong fit
LangSmith is especially useful when:
- you use LangChain/LangGraph
- you already trace agent executions
- prompt/model experiments are frequent
- you want dataset-based offline testing plus production traces
It can also evaluate non-LangChain targets, but the ecosystem fit is strongest when your orchestration already uses LangChain-style components.
3. DeepEval: unit-test style evals for LLM apps and agents
DeepEval is an open-source, local-first evaluation framework with a strong software-testing mindset.
A typical workflow looks like:
write test cases
→ select metrics
→ run deepeval in local/CI
→ fail the build when important evals regress
DeepEval integrates with pytest-style testing and supports a large catalog of metrics for:
- answer relevance
- faithfulness
- RAG
- agents
- tool use
- conversations
- safety
- multimodal tasks
End-to-end vs component-level
DeepEval explicitly distinguishes:
End-to-end evals — treat the whole system as a black box.
Component-level evals — grade internal retrievers, tool calls, subagents, or generations.
It also supports trajectory-oriented agent evaluation.
That makes it useful for diagnosing failures instead of reducing everything to one final-answer score.
Strong fit
DeepEval is compelling when:
- your team thinks in unit/integration tests
- CI/CD regression gates matter
- local execution is valuable
- you want many ready-to-use LLM metrics
- agents/RAG need component-level tests
4. Arize Phoenix: observability and evals in one open stack
Phoenix is an open-source AI observability platform with tracing, datasets, experiments, prompt management, and evaluation tooling.
Its evaluator model is deliberately broad:
(input, output, expected) → score
Phoenix supports code-based evaluators and LLM-based evaluators and is vendor-agnostic.
Trace-first debugging
Phoenix becomes especially useful when your evaluation problem is connected to production observability.
For example:
user request
→ retriever span
→ model span
→ tool span
→ second model span
→ final output
You can attach eval signals to traces and experiments rather than evaluating outputs in isolation.
Tool-selection and invocation evals
Phoenix has introduced evaluator patterns specifically aimed at agent tool behavior, such as whether the correct tool was selected and whether invocation parameters were valid.
This is exactly the kind of evaluation that ordinary text-quality metrics miss.
Strong fit
Phoenix is attractive when:
- open-source/self-hosting matters
- you want observability and evaluation together
- multiple model providers are involved
- traces are central to debugging
- Python and TypeScript integrations matter
Deterministic graders should come first when possible
An LLM grader is powerful, but it should not be your first choice for everything.
Use deterministic checks when the outcome has a crisp definition.
Examples:
JSON schema valid?
exact label correct?
unit tests pass?
required file exists?
HTTP side effect happened?
SQL query returned expected row?
These are cheap, reproducible, and easy to debug.
Use LLM-as-a-judge when quality is subjective or semantic:
Was the explanation complete?
Did the answer follow policy?
Was the summary faithful?
Was the response sufficiently helpful?
The strongest eval suites mix both.
LLM-as-a-judge needs calibration
A judge model is still a model.
It can be biased by:
- verbosity
- answer position
- wording
- evaluator prompt
- model family
Do not assume a judge score is objective truth.
Calibrate it against human-labeled examples.
A good process is:
human-labeled eval set
↓
LLM judge
↓
compare disagreements
↓
refine rubric / judge prompt
For critical evaluations, periodically re-check correlation with human judgment.
RAG needs separate retrieval and generation evals
If a RAG answer is wrong, first ask:
Did retrieval find the right evidence?
Then ask:
Given the right evidence, did generation answer correctly?
Useful retrieval metrics include:
- recall@k
- precision@k
- MRR
- nDCG
- document relevance
Generation metrics can include:
- faithfulness
- answer correctness
- citation fidelity
- completeness
Do not “fix the prompt” if the correct document never entered context.
Agent evals need trajectory data
Agents are harder than single-turn chat because the path matters.
A trial may include:
model call
→ tool call
→ tool error
→ retry
→ second tool
→ write action
→ verification
→ final answer
Two agents can return the same final text while one behaved much worse.
Trajectory evals should inspect things like:
- correct tool choice
- correct parameters
- unnecessary calls
- duplicate calls
- policy violations
- recovery after failures
- stop condition
- successful side effects
This is why trace-aware frameworks are increasingly important.
End-to-end task success is still the top metric
Component metrics help diagnose.
The user still cares whether the task succeeded.
For a coding agent:
Did the feature work and tests pass?
For a support agent:
Was the issue correctly resolved or escalated?
For a data extraction system:
Were the required fields correct?
Do not optimize component scores so aggressively that end-to-end outcomes get worse.
Start with 20–50 real tasks, not 5,000 synthetic ones
Anthropic’s 2026 agent-eval guidance notes that teams can often start effectively with a relatively small set of representative tasks drawn from product requirements and real failures.
The exact number is not magic.
The principle is:
> Start early with high-signal cases. Grow the suite from real failures.
A useful seed dataset includes:
- normal happy paths
- ambiguous inputs
- edge cases
- known production failures
- security-sensitive cases
- tool failures
As the system matures, expand coverage.
Every important production failure should become a regression test
Suppose your agent once:
retried a refund after an ambiguous timeout
→ created duplicate refund
After fixing it, add a permanent eval case:
mutation timeout
→ verify state
→ do not duplicate action
This is how eval coverage compounds over time.
Without regression tests, teams repeatedly rediscover old failures.
Dataset versioning matters
Your eval result is meaningless if nobody knows which dataset was used.
Version:
eval dataset
prompt
model
retrieval config
tool catalog
memory policy
Then comparisons become reproducible.
Example:
agent-v17 + evalset-v8 = 87.4% task success
agent-v18 + evalset-v8 = 91.1%
That is much more useful than “the new prompt feels better.”
Pairwise comparison can be easier than absolute scoring
Sometimes it is easier to ask:
Which response is better: A or B?
than:
Score this response from 1 to 10.
Pairwise evaluation can be useful for:
- model comparisons
- prompt versions
- style changes
- summary quality
But pairwise preference still needs a good rubric and position-bias controls.
Online evals complement offline evals
Offline evals are controlled and repeatable.
Production behavior is messy.
Useful online signals include:
human escalation
user correction
thumbs up/down
repeat request after failure
agent cancellation
manual rollback
support resolution
Do not automatically retrain or rewrite prompts from one negative signal.
Cluster patterns and convert representative failures into offline regression cases.
A practical eval architecture
Production failures + requirements
│
▼
Versioned eval dataset
│
▼
Candidate configuration
(model + prompt + tools + RAG)
│
▼
Trials
│
┌──────┼──────────┐
▼ ▼ ▼
code LLM judge trajectory
checks graders graders
└──────┼──────────┘
▼
Eval report
│
pass regression gates?
├── no → debug traces
└── yes → canary rollout
│
▼
online feedback
│
└→ new eval cases
This is much closer to normal software quality engineering than “ask GPT if the answer looks good.”
Which framework should you choose?
Choose OpenAI Evals when
- your stack is primarily OpenAI
- hosted provider-native eval runs are convenient
- you want OpenAI grader types and model comparison close to the API
Choose LangSmith when
- traces and experiments are central
- LangChain/LangGraph is already in the stack
- debugging from dataset result to exact trace is valuable
Choose DeepEval when
- you want local-first, test-driven evals
- CI/CD gates are important
- you want many ready agent/RAG metrics
- pytest-style workflows fit your engineering culture
Choose Phoenix when
- open-source/self-hosting matters
- you want vendor-neutral traces + evals
- production observability and experimentation should live together
You can also mix them, but avoid creating four parallel sources of truth for the same evaluation dataset.
Common mistakes
One giant “quality” score
Separate factual, retrieval, tool, trajectory, safety, and task-success metrics.
LLM judge for deterministic outcomes
Use code when code can know the answer.
No held-out dataset
If you constantly tune against the same tiny cases, you will overfit your eval suite.
Only happy-path tasks
Real agents fail on ambiguity, permissions, timeouts, and stale state.
No repeated trials
Nondeterministic systems can vary between runs. One trial may hide instability.
Evaluating only final output
Agents need trajectory and tool-action evaluation.
No dataset versioning
You cannot compare results reliably if the test set silently changes.
Production checklist
Before trusting your AI eval stack, verify:
- Success criteria are explicit per task
- Deterministic graders are used where possible
- LLM judges are calibrated against human labels
- Retrieval and generation are evaluated separately
- Agent trajectories are traced
- Tool selection and tool arguments have tests
- Important side effects have deterministic verification
- Real failures become regression cases
- Eval datasets are versioned
- Model/prompt/tool configurations are versioned
- Multiple trials are used where variance matters
- End-to-end task success remains the primary outcome
- Offline evals connect back to production feedback
Final takeaway
The best evaluation framework is the one that makes failure measurable and debuggable in your existing stack.
OpenAI Evals is a natural fit for provider-native OpenAI testing. LangSmith tightly connects datasets, experiments, and traces. DeepEval brings a strong local/CI unit-testing mindset to LLM and agent systems. Phoenix is excellent when open-source observability and vendor-neutral evals belong in the same platform.
But the framework is secondary.
> A small, high-quality dataset with clear graders and real regression cases is more valuable than an expensive eval platform measuring vague “quality.”
Build the eval discipline first. Then choose the tooling that makes that discipline easy to run on every important change.

Discussion (0)