Author or refine a Phoenix evaluator — code or LLM-as-a-judge — that scores a run's output. Trigger when the user wants to create a new evaluator, improve an existing one's logic or rubric, choose labels, or decide what to measure on a dataset or experiment. Do NOT trigger on: (1) manual prompt drafting (use `playground`), (2) running or comparing experiments themselves (use `experiments`), (3) cross-trace failure diagnosis with no evaluator in scope (use `phoenix-error-analysis`).
70
88%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
A Phoenix evaluator scores a run: it reads some subset of the run's input, output, reference,
and metadata and returns named annotations — a label, a score, or both. The two artifact kinds —
a code evaluator (a Python or TypeScript function) and an LLM evaluator (a judge prompt
sent to a model) — share the loop and discipline below; judgment structure follows task need and
environment capability, not artifact kind. The experiments skill reads the scores you design
here; the explanations you enable are its evidence channel when comparing runs.
correct/incorrect, pass/fail). Add labels only to distinguish failure modes that
matter; every extra label adds boundary ambiguity.messages array,
assistant content parts, tool_calls, or a function_call — by inspecting the actual shape.The first fork is reference-based versus reference-free: does the judgment compare the
output against something stored with the example, or against the input and rubric criteria alone?
When reference-based, triage what the reference actually is before trusting it as an answer key:
Discover the environment first: read the capability fingerprint of the sandbox the evaluator will run in — which model credentials its environment variables name, whether it has internet access, which packages are installed, and any restricted-language runtime notes. Choose by environment capability and task need, not artifact kind. The ladder, floor to heaviest:
tool_calls
checks. Prefer one whenever the judgment can be computed.output against reference, returning a winner or tie.A credentialed sandbox with LLM access subsumes the LLM-evaluator artifact: a code evaluator there can call models, so Composite, LLM Jury, and Pairwise become layered code evaluators recording steps and votes in explanation or metadata. Design a suite, not a single check: a deterministic floor of primitives plus judged dimensions for what the floor cannot settle.
output is the new run's output; a dataset-backed evaluator receives the example's
output as reference — data the run never saw, provenance triaged above. Don't conflate the two.output always has the fixed LLM-span shape: a messages array
(role, content, and tool_calls with function.name/function.arguments) plus a top-level
available_tools; shape calibration cases accordingly. A dataset example's output keeps the
user-defined dataset shape — evidence for where the signal lives, not a guarantee; inspect it
rather than assuming a top-level key.output.
Add reference for relational checks against the example's expected, golden, or subset data.output and reference the same way before
comparing, or matching values will spuriously diverge.Arize-ai/phoenix
8ac3caf
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.