Skip to content
Testing
Skill

/06-prompt-regression

Use when the user has changed a prompt (system prompt, RAG template, agent instruction, etc.) and wants to know whether the candidate is better or worse than the baseline. Also use when the user mentions prompt A/B testing, prompt comparison, prompt optimization validation, "did

From plugin
openjudge
1.1k21 skills

Claude Code

$ npx -y skills add agentscope-ai/OpenJudge --skill 06-prompt-regression --agent claude-code

SKILL.md

06-prompt-regression.SKILL.md
name: prompt-regression
description: >
  Use when the user has changed a prompt (system prompt, RAG template, agent instruction,
  etc.) and wants to know whether the candidate is better or worse than the baseline.
  Also use when the user mentions prompt A/B testing, prompt comparison, prompt
  optimization validation, "did my prompt change help," or prompt regression testing.
  Outputs per-dimension win rates with statistical significance using OpenJudge
  PairwiseAnalyzer.

<HARD-GATE> NO conclusion about which prompt is better WITHOUT bootstrap 95% CI reported. NO candidate declared "better" WITHOUT position-debiased (swap-aggregate) comparison. NO comparison with fewer than 10 samples per axis — CI is too wide to be meaningful. </HARD-GATE>

Prompt Regression

Compare two prompts head-to-head and determine, with statistical rigor, whether the candidate is better, worse, or tied on each evaluation dimension.

When to Activate

  • You changed the system prompt and want to verify it's actually better
  • You're iterating on RAG answer templates
  • You're optimizing agent step-by-step instructions
  • You want data to support a prompt change decision

Checklist

You MUST create a task for each item and complete them in order:

1. **Load and analyze prompts** — diff the baseline vs candidate 2. **Derive comparison dimensions** — from the prompt changes + task type 3. **Select graders per dimension** — pairwise, judge, or rule 4. **Run position-debiased comparison** — swap-aggregate to eliminate order bias 5. **Compute statistics** — win rates + bootstrap 95% CI per dimension 6. **Present results** — per-dimension verdict with confidence intervals

Fast path: run the bundled script

Don't hand-write the win-rate + bootstrap math (the swap-aggregation and CI are easy to get wrong). Run the bundled, tested script (`scripts/pairwise.py`, standard library only, **no OpenJudge dependency**):

python scripts/pairwise.py --comparisons comparisons.jsonl --candidate candidate --baseline baseline

Each comparison row: `{"id","model_a","model_b","score","dimension"?}` where `score >= 0.5` means `model_a` won. Emit two rows per query with A/B **swapped** to debias position. The script reports per-dimension candidate/baseline/tie rates, bootstrap 95% CI, and a verdict (`BETTER` / `WORSE` / `TIED` / `INSUFFICIENT_EVIDENCE` / `INCONCLUSIVE`; exit 0 only if better). `--self-test` to verify it.

Steps below explain how to derive dimensions and produce the comparisons (with OpenJudge or any judge); the inline snippets are the reference behind the script.

Step 1: Load and Analyze Prompts

Read the baseline and candidate prompts. Identify:

  • **Task type**: chatbot / RAG generation / code review / translation / summarization

/ agent instruction / other

  • **What changed**: added constraints, changed tone, new examples, different output

format, expanded/shortened instructions

  • **Intent of change**: what problem was the user trying to fix?

Step 2: Derive Comparison Dimensions

Based on the task type and what changed, derive 3-5 comparison dimensions.

Dimension templates by task type

**Chatbot / Conversational**:

  • Answer relevance — does it address the user's question?
  • Tone appropriateness — does the tone match context?
  • Factual accuracy — no fabricated information
  • Conciseness — doesn't ramble or over-explain
  • Instruction following — obeys system prompt constraints

**RAG Generation**:

  • Faithfulness — grounded in retrieved documents
  • Citation accuracy — correctly references sources
  • Completeness — covers all aspects of the query
  • No hallucination — no claims beyond documents

**Code Review / Generation**:

  • Bug detection — finds real issues
  • False positive rate — doesn't flag correct code
  • Actionability — suggestions are specific and implementable
  • Code style — follows conventions

**Agent Instructions**:

  • Tool selection — picks the right tool
  • Step efficiency — minimal steps to goal
  • Error recovery — handles failures gracefully
  • Output format — follows specified structure

Each dimension gets:

  • An `id` (slug)
  • A one-sentence description
  • A grader type: `pairwise` or `judge` or `rule`

Step 3: Select Graders

Decision priority: 1. **Can a rule check this?** → `FunctionGrader` or `StringMatchGrader`. Free, deterministic. Example: output length, keyword presence, JSON validity. 2. **Is there a reference answer?** → `pairwise` against reference. 3. **Subjective quality, no reference?** → `pairwise` A/B comparison. 4. **Single-output judgment needed?** → `judge` (binary pass/fail per output).

Step 4: Run Position-Debiased Comparison

Pairwise comparison with swap-aggregate

LLM judges have position bias — the first response shown wins 5-15% more often. Swap-aggregate eliminates this: run each comparison twice with swapped positions, keep only consistent wins:

from openjudge.graders.llm_grader import LLMGrader
from openjudge.graders.schema import GraderMode
from openjudge.runner.grading_runner import GradingRunner
from openjudge.analyzer.pairwise_analyzer import PairwiseAnalyzer

# Judge prompt for relevance comparison
relevance_judge = LLMGrader(
    model=model,
    name="relevance_compare",
    mode=GraderMode.POINTWISE,
    template="""
Compare Response A and Response B for the query below.
Which response better addresses the user's question?

Query: {query}
Response A: {response_a}
Response B: {response_b}

Score 1.0 if A is better, 0.0 if B is better, 0.5 if tied.
Respond in JSON: {{"score": <float>, "reason": "<explanation>"}}
""",
)

# Build pairwise dataset with position swap
dataset = []
for sample in test_samples:
    # Original order
    dataset.append({
        "query": sample["query"],
        "response_a": baseline_outputs[sample["id"]],
        "response_b": candidate_outputs[sample["id"]],
        "metadata": {"model_a": "baseline", "model_b": "candidate"},
    })
    # Swapped order — critical for debiasing
Read more
@agentscope-ai
Ships withopenjudge

OpenJudge: A Unified Framework for Holistic Evaluation and Quality Rewards

Stars on GitHub

Momentum

stars in total
1.1k
Star history of agentscope-ai/OpenJudge on GitHub, a chart by star-history.com

Other skills on openjudge.

00-academic-router

00-academic-router

Use when the user wants help with academic papers or citations but it's unclear which specific workflow fits — reviewing a paper,…

01-paper-review

01-paper-review

Review academic papers for correctness, quality, and novelty using OpenJudge's multi-stage pipeline. Supports PDF files and LaTeX…

02-bib-verify

02-bib-verify

Verify a BibTeX file for hallucinated or fabricated references by cross-checking every entry against CrossRef, arXiv, and DBLP.…

00-arena-router

00-arena-router

Use when the user wants to compare or benchmark multiple LLMs/agents arena-style but it's unclear which specific workflow fits —…

01-auto-arena

01-auto-arena

Automatically evaluate and compare multiple AI models or agents without pre-existing test data. Generates test queries from a…

More skills from other plugins.

api-review

api-review

Produce the "Playwright 1.xx API Review" artifact for a range of commits - the public API additions and the breaking or behavior…

@microsoft@microsoftInstall Skill
add-e2e-selectors

add-e2e-selectors

Add reliable @grafana/e2e-selectors to interactive elements and key containers in the Grafana frontend. Use when adding e2e…

grafana5d78k
@grafana@grafanaInstall Skill
promptfoo-evals

promptfoo-evals

Write, refine, run, and QA promptfoo evaluation suites: promptfooconfig.yaml, prompts, providers, vars, tests, assertions,…

promptfoo13d27k
@promptfoo@promptfooInstall Skill
deepeval

deepeval

DeepEval evaluation workflow for AI agents and LLM applications. TRIGGER when the user wants to evaluate or improve an AI agent,…

@confident-ai@confident-aiInstall Skill

Questions about 06-prompt-regression.

Which coding agents can use 06-prompt-regression?
06-prompt-regression installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.