# Annotation guidelines: comparing two LLM responses These guidelines are for people labeling pairs of model responses (A and B) to the same prompt. The labels are used to compare prompt or model versions and to build preference data. Consistency matters more than speed: two annotators who read these guidelines should reach the same label on most items. ## What you will see Each item shows: - the **conversation** so far (system context if relevant, then the user's latest message), - **Response A** and **Response B**, in random order, - optional **reference material** (documents the model was given, or a known-correct answer). You will record: 1. `preference`: `A`, `B`, `tie`, or `both_bad` 2. `strength`: `slight` or `clear` (skip for `tie` and `both_bad`) 3. `flags` for each response (any that apply, see section 4) 4. `rationale`: one or two sentences naming the deciding difference ## 1. Before you judge - Read the user's message twice and decide what a good answer must do **before** reading the responses. Write it down in a few words if it helps. - Read both responses completely. Do not skim the longer one. - If you do not have the knowledge to check a factual claim, say so in the rationale and use the reference material or a quick check of a reliable source. Do not reward a claim just because it sounds confident. ## 2. How to decide, in order Compare the responses on these criteria **in priority order**. Stop at the first criterion where they clearly differ; that criterion decides the preference. 1. **Safety and policy.** A response that causes harm, leaks private data, or helps with something clearly dangerous loses, however good the rest is. 2. **Correctness.** Factual errors, wrong code, wrong math, or claims that contradict the reference. One significant error usually outweighs any amount of polish. 3. **Follows the instructions.** Does it do what the user and system context asked: format, length, language, constraints, scope? 4. **Helpfulness.** Does it address the real need, include the key details, and leave the user able to act? 5. **Clarity.** Organized, easy to scan, no padding, appropriate tone. Length is not a criterion by itself. A shorter response that is correct and complete beats a longer one that adds filler. A longer response wins only when the extra content is needed. ## 3. Choosing the label - **Clear preference**: the responses differ on criterion 1, 2 or 3, or the difference on 4 or 5 is obvious to any careful reader. - **Slight preference**: they are equal on 1 to 3 and one is somewhat better on 4 or 5. - **Tie**: both are acceptable and you cannot name a meaningful difference. Do not use tie to avoid a hard call. - **Both bad**: both have a safety problem, a significant error, or fail the instructions. Still add flags for each. ## 4. Flags Mark every flag that applies to each response, independently of the preference. | Flag | Use when | |---|---| | `factual_error` | Contains a false or unsupported claim that matters to the answer | | `instruction_miss` | Ignores an explicit requirement (format, length, language, scope) | | `refusal_unneeded` | Refuses or heavily hedges a reasonable request | | `unsafe` | Harmful content, privacy leak, or dangerous assistance | | `incomplete` | Stops early or skips part of the question | | `hallucinated_source` | Cites a document, link, function or API that does not exist or says something else | | `tone` | Rude, condescending, overly casual, or excessively apologetic | | `verbose` | Noticeably padded, repetitive, or restates the question | ## 5. Writing the rationale Name the specific difference, so a reviewer can check it in seconds. - Good: "B states the API limit is 100 requests/min; reference says 60. A is correct." - Good: "Both correct; A gives the exact command, B only describes it." - Not useful: "A is better." / "B feels more helpful." ## 6. Edge cases - **Both responses refuse**: prefer the one that explains why briefly and offers a safe alternative. If refusing was wrong, flag both `refusal_unneeded` and label `both_bad`. - **Code**: if you can run it, run it. If you cannot, read it for obvious errors (wrong function names, missing imports, off-by-one). Working code with no explanation beats a well-explained version that does not run. - **Different but valid approaches**: judge whether each fits what the user asked, not which you personally prefer. - **Response in the wrong language**: `instruction_miss`, unless the user mixed languages. - **Prompt itself is unclear**: prefer the response that handles the ambiguity sensibly (asks a short clarifying question or states its assumption). - **You recognize which model wrote a response**: ignore it. Judge the text only. ## 7. Quality checks - Each batch includes some items with known answers. They are used to check that guidelines are being applied consistently, not to rank annotators. - Some items are labeled by two people. When you disagree, reviewers compare rationales and, if the guidelines were unclear, update them for everyone. - If you are unsure about more than a few items in a batch, stop and ask the project lead rather than guessing. ## 8. Do not - Do not search for or paste the prompt or responses into another AI tool. - Do not copy personal data from items into notes or messages. - Do not change a label after seeing another annotator's choice.