The eval and observability tooling
Job ads name these tools directly, and being able to say what each one is separates someone who has run an eval from someone who has read about one. The concepts are in the rest of this folder; this is the landscape.
Note: versions verified 2026-08-12 — Langfuse 4.14.4, DeepEval 4.1.8, Ragas 0.4.3. This space moves fast; the categories below outlive the versions.
The two jobs, and why tools blur them
| Job | Question |
|---|---|
| Observability | what happened in that request? |
| Evaluation | is the system good, and did it regress? |
They started as separate products and converged, because the feedback loop between them is the whole point: a bad production trace becomes an eval case. Most tools now do both, which is why the category names are muddled.
Observability
| Tool | Character |
|---|---|
| Langfuse | open source, MIT, self-hostable, OTel-based |
| LangSmith | deepest LangChain/LangGraph integration |
| Phoenix (Arize) | open source, strong on eval and drift |
| Braintrust | evaluation-centric |
| Helicone | proxy-based, minimal integration effort |
Langfuse is the one to name in a regulated context, because self-hosting means prompts and completions — which contain PII — never leave your boundary. It also ships datasets, experiments, LLM-as-judge scoring and prompt management, so for many teams it is the whole stack.
LangSmith is the path of least resistance if you are already on LangChain/LangGraph: tracing appears with no instrumentation.
The vendor-neutral option is OpenTelemetry with the GenAI semantic conventions, exporting into whatever you already run. The argument for it: an LLM call is one span in a request that also touched Postgres and two services, and keeping them in one trace beats correlating across systems by timestamp. See LLM observability.
Evaluation
RAGAS — the RAG-specific one
The four metrics worth memorising, because they map onto the two halves of a RAG pipeline:
| Metric | Asks |
|---|---|
| Context precision | is the retrieved context relevant? |
| Context recall | did we retrieve everything needed? |
| Faithfulness | is the answer grounded in the context? |
| Answer relevancy | does the answer address the question? |
from ragas import EvaluationDataset, evaluate
from ragas.metrics import (
ContextRecall, Faithfulness,
)
report = evaluate(
EvaluationDataset.from_list(samples),
metrics=[ContextRecall(), Faithfulness()],
)The first two grade retrieval, the last two grade generation. That split is why RAGAS is worth naming: it forces the diagnosis this folder keeps insisting on — if faithfulness is high and context recall is low, prompting is not your problem.
DeepEval — pytest for LLMs
from deepeval import assert_test
from deepeval.metrics import FaithfulnessMetric
from deepeval.test_case import LLMTestCase
def test_grounded():
case = LLMTestCase(
input=q, actual_output=answer,
retrieval_context=chunks,
)
metric = FaithfulnessMetric(threshold=0.8)
assert_test(case, [metric])The framing is the selling point: evals as unit tests, run by pytest, so they live in CI next to everything else rather than in a notebook someone runs occasionally.
Its agentic metrics are the ones ads are starting to name — Task Completion, Tool Correctness, Step Efficiency, Plan Adherence — plus G-Eval for custom criteria and DAG for decision-tree scoring. If you are asked how to measure an agent rather than an answer, that list is the vocabulary.
The rest, briefly
- promptfoo — declarative YAML test cases, good for prompt A/B comparison and red-team scans, language-agnostic.
- TruLens — feedback functions over traces, research-flavoured.
- Giskard — leans toward scanning for vulnerabilities and bias.
- OpenAI Evals — provider-tied, fine if you are single-vendor.
Choosing, in one paragraph
Start with one observability tool wired to traces, because you cannot evaluate what you cannot see. Add RAGAS if you run RAG, since its four metrics answer the diagnostic question directly. Add DeepEval when you want evals gating CI, because pytest integration is the thing that makes them actually run. Reach for promptfoo when the task is comparing prompt variants rather than scoring a pipeline.
Gotcha: every LLM-judged metric here has the biases in LLM as judge — position, verbosity, self-preference — and they cost tokens per evaluation. A 200-case suite run on every PR is a real bill, and a judge scoring its own family’s output is a real bias. Calibrate against human labels on a subset.
What “we have evals” should mean
The tool is the least interesting part. The claim is credible when:
- A golden set from real queries exists and is versioned.
- It runs in CI, gating merges on regression, not on a laptop.
- Retrieval and generation are scored separately.
- Production failures flow back into the set.
- Someone can say what the numbers were last month.
A team with a spreadsheet and those five properties is ahead of a team with Langfuse and none of them — which is the honest thing to say when asked which tool you prefer.
Related
Interview angle 6
- “Which eval tools have you used?” - name the category before the logo: an observability tool wired to traces, RAGAS for RAG-specific metrics, and DeepEval when you want evals running in CI as pytest tests. Then say which and why.
- “What does RAGAS actually measure?” - context precision and recall grade retrieval; faithfulness and answer relevancy grade generation. The split is the point — high faithfulness with low context recall means the retrieval is broken and no prompt change fixes it.
- “Why Langfuse over LangSmith?” - self-hosting. Prompts and completions contain PII, and in a regulated environment keeping them inside your boundary decides the question. LangSmith wins on integration effort if you are already on LangChain.
- “How do you measure an agent rather than an answer?” - task completion, tool correctness, step efficiency and plan adherence — DeepEval names all four. Answer-quality metrics say nothing about whether the agent chose the right tools to get there.
- “What’s the catch with these tools?” - the LLM-judged metrics carry position, verbosity and self-preference bias, and they cost tokens per case, so a 200-case suite on every PR is a real bill. Calibrate the judge against human labels on a subset.
- “What would you set up first?” - tracing, because you cannot evaluate what you cannot see, and a golden set from real queries. The tool matters less than whether the suite runs in CI and whether production failures flow back into it.