> ## Documentation Index
> Fetch the complete documentation index at: https://arize-ax.mintlify.site/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Align evals to human feedback

> Validate evals against human labels before relying on them at scale.

export const AskAlyx = ({children}) => {
  const gradientId = `askAlyxGradient-${Math.random().toString(36).slice(2)}`;
  return <div style={{
    display: "flex",
    alignItems: "flex-start",
    gap: "0.625rem",
    margin: "1rem 0",
    padding: "0.75rem 1rem",
    borderRadius: "10px",
    border: "1px solid rgba(120, 115, 245, 0.25)",
    background: "linear-gradient(135deg, rgba(255, 110, 196, 0.08), rgba(120, 115, 245, 0.08))"
  }}>
      <svg width="18" height="18" viewBox="0 0 21 17" xmlns="http://www.w3.org/2000/svg" style={{
    flexShrink: 0,
    marginTop: "0.2rem"
  }}>
        <defs>
          <linearGradient id={gradientId} x1="0%" y1="100%" x2="100%" y2="0%">
            <stop offset="0%" stopColor="#FF3CA8" />
            <stop offset="100%" stopColor="#4827C1" />
          </linearGradient>
        </defs>
        <path d="M6.28906 12.7223C6.28889 11.3831 5.24007 10.3385 3.98926 10.3385C2.73859 10.3387 1.68963 11.3832 1.68945 12.7223C1.68945 14.0616 2.73849 15.1059 3.98926 15.1061C5.24018 15.1061 6.28906 14.0617 6.28906 12.7223ZM7.81152 0.557254C9.70554 -0.563135 12.1081 0.0645388 13.2607 1.91468L13.3691 2.09827V2.09925L20.7266 15.402C20.8713 15.6637 20.8667 15.9823 20.7148 16.2399C20.5629 16.4975 20.2864 16.6559 19.9873 16.6559H14.5459C13.0953 16.6474 11.7648 15.848 11.0469 14.5748V14.5739L6.33301 6.19104C5.22656 4.2273 5.87813 1.706 7.80957 0.558231L7.81152 0.557254ZM11.8906 2.91761C11.2374 1.74047 9.78961 1.34962 8.67188 2.01038L8.67285 2.01136C7.61521 2.64 7.19477 3.99924 7.69336 5.13733L7.80566 5.36194V5.36292L12.5186 13.7448C12.9466 14.5038 13.7274 14.9616 14.5557 14.9664H18.5547L11.8906 2.91663V2.91761ZM7.97949 12.7223C7.97949 14.9527 6.21527 16.7965 3.98926 16.7965C1.7634 16.7963 0 14.9526 0 12.7223C0.000173728 10.4921 1.76351 8.64923 3.98926 8.64905C6.21516 8.64905 7.97932 10.492 7.97949 12.7223Z" fill={`url(#${gradientId})`} />
      </svg>
      <span>{children}</span>
    </div>;
};

## Your evals are only as good as your criteria

Automated evals are only as good as what they measure. Before writing criteria, review real interactions and understand how a human would judge them - then build evals that reflect that standard.

![Arize AX Playgrounds view for an align eval task with a prompt editor using GPT-3.5 to classify clarity and tone, and an experiment table comparing human annotation labels to Human v AI align badges showing aligned or not aligned per row with an average agreement score](https://storage.googleapis.com/arize-phoenix-assets/assets/images/arize-docs-images/evaluate/align%20eval%20main.png)

## Start from human labels

Use [Human review](/docs/ax/evaluate/human-review) to define annotation configs, review traces or dataset rows, and build a ground truth set that reflects your rubric. These labels become the ground truth reference you compare eval scores against.

## Measure agreement

On a fixed sample of examples (typically 50 to a few hundred, covering edge cases), run your evaluator and compare its labels to your human annotations. Check accuracy, systematic bias, and per-label precision and recall. Follow the workflow below to run this loop and iterate until you hit a target threshold.

<AskAlyx>**Ask Alyx** to align an evaluator to your human annotations for you -- it attaches your labeled dataset, builds a scoring evaluator, runs the comparison loop, and stops once agreement lands in the ideal 75-85% range, then saves the aligned evaluator as a new version.</AskAlyx>

### Workflow

<Tabs>
  <Tab title="By Arize Skills">
    Use the [**Arize skills plugin**](/docs/ax/skills/overview) with the [**arize-align-evaluator**](https://github.com/Arize-ai/arize-skills/pull/45) skill in your coding agent. It walks you through aligning **LLM-as-a-judge** evaluators to human ground truth by composing **ax** CLI steps into a loop: run the evaluator, compare its labels to human judgments, measure agreement (accuracy, confusion matrix, per-label precision and recall), diagnose systematic bias, revise the evaluator template, and repeat until you hit a target threshold.

    Get started with a prompt like:

    * "Use the arize-align-evaluator skill to align my correctness evaluator against human annotations on my customer-support project."

    ![Claude Code terminal after asking to align evals: skill loaded successfully and assistant lists numbered questions for evaluator, ground-truth labels, project or dataset, and space](https://storage.googleapis.com/arize-phoenix-assets/assets/images/arize-docs-images/evaluate/Screenshot%202026-04-23%20at%2012.34.50%E2%80%AFPM.png)
  </Tab>

  <Tab title="By UI">
    1. Annotate dataset
    2. Configure your [evals](/docs/ax/evaluate/create-evaluators) with the same choices as your annotation config
    3. Navigate to the [Prompt Playground](/docs/ax/prompts/prompt-playground) and select your dataset and evaluator
    4. Set up a second eval to compare results, either the Exact Match code eval or the Human vs AI eval. You will be comparing the experiment output to the ground truth annotation column in your dataset
    5. Run the experiment
    6. Refine evaluator prompt

    Use a second LLM-as-judge or exact match code eval to compare the output your primary eval produces with the ground truth column from your dataset.

    ![Create eval UI for Human v AI align with span scope, Claude judge prompt comparing expert ground truth to model output, choice labels correct and incorrect, and optional test mapping to a dataset](https://storage.googleapis.com/arize-phoenix-assets/assets/images/arize-docs-images/evaluate/human%20vs%20ai.png)

    You can also compute alignment using an exact match code eval.

    ![Edit eval for an exact\_match code eval showing ExactMatch eval class, imports, signature, and Configure Task Mappings with dataset preview and output column mapping](https://storage.googleapis.com/arize-phoenix-assets/assets/images/arize-docs-images/evaluate/code%20eval%20alignment.png)

    ![Playground align eval session with prompt editor and model selector, floating menu open on Evaluator with From Evaluator Hub list to load a saved evaluator, and dataset table with input variables and annotation labels](https://storage.googleapis.com/arize-phoenix-assets/assets/images/arize-docs-images/evaluate/align%20apr%2016.png)

    ![Playground experiment table comparing annotation labels to Human v AI align eval tags showing aligned or not aligned per row with aggregate agreement score](https://storage.googleapis.com/arize-phoenix-assets/assets/images/arize-docs-images/evaluate/aligned%20evals.png)
  </Tab>
</Tabs>

## Common issues

* **High human disagreement:** if annotators disagree with each other, evals cannot align to a single standard until the rubric is clarified
* **Small calibration sets:** a handful of rows can miss long-tail failures. Aim for at least 50 to 100 labeled examples before trusting metrics or changing production monitors
* **Criteria mismatch:** your evals may be scoring a different dimension than your annotations (e.g. fluency vs factual accuracy)

## Troubleshooting

If agreement is low but humans are consistent, iterate the judge prompt and confirm your variable mappings match the fields humans reviewed.

If scores look good on average but fail on a specific slice, stratify your sample by product area, language, or tool-use path and recheck alignment per slice.

## Further reading

* [Hamel Husain: Why is error analysis so important in LLM evals](https://hamel.dev/blog/posts/evals-faq/#q-why-is-error-analysis-so-important-in-llm-evals-and-how-is-it-performed)
* [Eugene Yan: AlignEval](https://eugeneyan.com/writing/aligneval/)
