Guide

Majority voting vs independent verification for LLM agents

20 October 2026

Majority voting vs independent verification for LLM agents

Short answer: Majority voting works when agents make independent mistakes. Verification checks an answer against something outside the agents, such as evidence, criteria or a separate judge. Use voting to pick a candidate. Then verify the candidate whenever the agreement looks copied, thin or split, because a vote can't catch an error that every agent shares.

Screwtape.ai is an agent validation API. It is not the arXiv paper that is also called Screwtape.

What the research says

Side by side

Majority votingIndependent verification
Question it answers"Which answer is most common?""Is this answer supported?"
Needs2+ answersOne answer plus evidence or criteria
Fails whenErrors are shared (same prompt, same source, same model family, agents reading each other)The evidence is missing or wrong, or the judge is biased
CostOne generation per agentOne extra check per answer
Screwtape endpointPOST /v1/consensusPOST /v1/judge

The two approaches complement each other. Vote to choose a candidate, and verify when the vote can't be trusted.

Example: vote, then verify only when needed

"""Do not trust a majority on its own: score consensus, then verify the winner against evidence."""
import json
import os
import urllib.request

API = "https://screwtape.ai"


def screwtape_post(path: str, payload: dict) -> dict:
    """POST JSON to Screwtape.ai. Reads SCREWTAPE_API_KEY from the environment."""
    request = urllib.request.Request(
        API + path,
        data=json.dumps(payload).encode(),
        headers={
            "Authorization": "Bearer " + os.environ["SCREWTAPE_API_KEY"],
            "Content-Type": "application/json",
        },
        method="POST",
    )
    with urllib.request.urlopen(request, timeout=60) as response:
        return json.load(response)


def settle(task: str, answers: list[dict], evidence: list[str]) -> dict:
    """answers: 2 to 16 items shaped like {"agent_id": "a", "output": "..."}."""
    c = screwtape_post("/v1/consensus", {"task": task, "answers": answers})
    # Majority alone is not enough when the agreement looks copied or thin, or when there is no stable majority.
    if c["false_consensus_risk"] == "low" and c["agreement_score"] >= 0.6:
        return {"answer": c["consensus_answer"], "consensus": c, "verified": None}
    v = screwtape_post("/v1/judge", {
        "task": task,
        "agent_output": c["consensus_answer"],
        "evidence": evidence,
    })
    return {"answer": c["consensus_answer"] if v["verdict"] == "pass" else None,
            "consensus": c, "verified": v}


if __name__ == "__main__":
    out = settle(
        "State the crew size.",
        [
            {"agent_id": "alpha", "output": "The crew size was 4."},
            {"agent_id": "beta", "output": "The crew size was 4."},
            {"agent_id": "gamma", "output": "The crew size was 4."},
        ],
        ["The crew size was 4."],
    )
    print(json.dumps(out, indent=2))

The 0.6 threshold mirrors the documented deterministic rules: below 0.6 agreement, Screwtape reports no stable majority. It's a reasonable default, not a value the API requires. Tune it for your workload.

When to skip verification

FAQ

Is majority voting enough for a multi-agent LLM system?

It's enough only when the agents' errors are independent. If they share a prompt, a retrieved document or each other's messages, they can agree on the same mistake. Verify the winner against evidence in those cases.

What is the difference between self-consistency and multi-agent consensus?

Self-consistency samples several reasoning paths from one model and takes the most common answer. Multi-agent consensus compares answers from separate agents, which may use different prompts, tools or models. Both rely on errors being independent.

Does multi-agent debate fix false consensus?

Not reliably. Smit et al. (2023) found that debate did not reliably beat self-consistency or ensembling without tuning. Debate also lets agents read each other's answers, which can produce agreement that isn't independent.

Which Screwtape endpoint is the vote and which is the verification?

POST /v1/consensus scores agreement across 2 to 16 answers and returns false_consensus_risk. POST /v1/judge checks one answer against optional evidence and criteria and returns pass, fail or retry with a 0 to 1 score and reasons.

Sources