# Your first evaluation | PromptLens Docs

Build a ticket router and evaluate it with exact matching.



Build a prompt that routes a support ticket to `billing`, `technical`, or `account`. By the end, you will have five evaluated cases and saved version 1, with each output marked as passing or failing your rule.

These fixed labels make exact matching a useful first evaluator: a reply such as “This is a billing issue” should fail even when its meaning is correct. This tutorial uses the dashboard.

## Before you start [#before-you-start]

Check that you can:

* Open the dashboard after signing in and completing personal onboarding. If an access message asks you to wait for approval, wait until access is approved before continuing.
* Select an active [organization](https://www.promptlens.io/docs/organization/onboarding) and create a prompt in it.
* Select an available [model route](https://www.promptlens.io/docs/organization/providers). An administrator can connect a provider or fund an eligible route with [PromptLens Credits](https://www.promptlens.io/docs/organization/credits). Choosing a plan alone does not connect a provider.

You are ready when you can open a new prompt and select a usable model. Running the baseline makes model calls and may incur charges. All tickets below are fictional.

## 1. Create the prompt [#1-create-the-prompt]

Create a prompt named **Ticket router**. Select an available model, set temperature to `0`, and choose **User message** as the input mode. Add this system message:

```text
Classify the support ticket into exactly one team:
billing: invoices, charges, refunds, and payment failures.
technical: errors, broken features, and performance problems.
account: signing in, passwords, and profile changes.
Return only billing, technical, or account. No punctuation or explanation.
```

Each dataset input becomes the final user message. Keep the model route and settings unchanged while establishing your baseline.

Before continuing, confirm that the editor shows your system message, selected model, temperature `0`, and **User message** input mode.

## 2. Add five test cases [#2-add-five-test-cases]

Add these rows to the dataset, or import [ticket-routing.json](https://www.promptlens.io/docs/examples/ticket-routing.json). Use Text for both input and reference.

| Input                                    | Reference output |
| ---------------------------------------- | ---------------- |
| I was charged twice for my subscription. | billing          |
| The export button returns a 500 error.   | technical        |
| I forgot my password and cannot sign in. | account          |
| Please send me last month's invoice.     | billing          |
| How do I change my profile name?         | account          |

These cases establish a small starting set. Later, add ambiguous tickets and examples of actual failures. The reference is the answer you want, not a model-generated suggestion to accept without review.

You should now see five rows, each with an input and one of the three reference labels.

## 3. Configure exact matching [#3-configure-exact-matching]

Add an **Exact match** evaluator named **Correct team** and apply it to all cases. Enable trimming whitespace and leave ignoring case disabled. This accepts `billing` with a trailing newline but rejects `Billing`, `billing.`, and `Team: billing`.

If you create the evaluator from an individual case, check its scope: a case-specific evaluator must be expanded to cover the other rows. Every setup case needs an applicable evaluator.

Confirm that **Correct team** covers all five rows before running the baseline.

If you repeat ticket routing through the API or MCP, check [Scoring across interfaces](https://www.promptlens.io/docs/reference/scoring-methods): their `expected` mode normalizes case, while this evaluator deliberately rejects `Billing`.

## 4. Run the baseline [#4-run-the-baseline]

Choose **Run all test cases** and wait for every case to finish. Inspect the actual output and evaluator result for each row. A failed assertion means the generated answer did not meet the rule; an execution error means the call or evaluation did not finish successfully.

A completed baseline saves version 1 and assigns both `staging` and `production` to it. A baseline may contain failed assertions, so inspect the results before using it in an application. If a call errors, resolve the cause and rerun the affected work; an execution error does not establish a completed baseline.

You have completed the tutorial when all five cases have results, version 1 exists, and both labels point to it. Record the pass count you actually receive; model outputs are not guaranteed. If a call cannot finish, use [model access troubleshooting](https://www.promptlens.io/docs/troubleshooting#a-model-or-judge-cannot-run).

## 5. Make the next improvement [#5-make-the-next-improvement]

Do not change a reference simply to make a result pass. Decide whether the instructions, expected label, or test coverage needs improvement. Continue with [Take your prompt to production](https://www.promptlens.io/docs/production) to test an ambiguous ticket and publish a later version.
