{"slug": "how-to-check-your-ai-s-data-answers-evals-for-each-stage", "title": "How to check your AI's data answers: evals for each stage", "summary": "A developer outlined a layered evaluation approach for AI data assistants, arguing that no single eval is sufficient: trusted queries with team-approved reference SQL catch regressions before launch, invariant checks run on every live answer, and a weekly human-reviewed sample of real user questions surfaces untested failure modes. The writeup cites the BIRD text-to-SQL benchmark, where Google reported Gemini-SQL2 at 80.04 percent versus human performance of 92.96 percent, and a CIDR 2026 audit finding annotation errors in 52.8 percent of BIRD Mini-Dev problems and 66.1 percent of released Spider 2.0-Snow reference queries.", "body_md": "**TL;DR.** Your assistant gives a number, and you cannot tell if it is right. An eval is a repeatable test of its answers against something you trust, and no single eval is enough. Trusted queries show that something broke, checks without an answer key catch errors on every answer, and a weekly sample finds what you never tested. An AI judge scales the review once people have checked it.\n\nStart with trusted queries before launch, and add layers as money and askers grow.\n\nThe [previous post](https://goagentdata.com/posts/ai-analytics-more-data-work) argued that judging answers is the new data work once AI makes answers cheap. This post shows how to do that judging without reading every query.\n\nHere is how I think about it. Each kind of eval catches one failure and misses others, so you add them in layers as the stakes grow.\n\nThe problem is not new, and it is not solved. The [BIRD benchmark](https://arxiv.org/abs/2305.03111) (2023) tests text-to-SQL, turning a question into a database query, on large and messy real databases. It scores execution accuracy: run both queries and compare the results. In 2023, people scored 92.96 percent and the best model, ChatGPT, scored 40.08 percent. In June 2026, Google Research [announced 80.04 percent](https://www.marktechpost.com/2026/06/12/google-releases-gemini-sql2-gemini-3-1-pro-text-to-sql-scores-80-04-on-bird-single-model-leaderboard/) for its Gemini-SQL2 on the BIRD single-model track, a figure Google reported itself. Models improved a lot, and are still below people on messy data.\n\nA fixed set is a short list of real questions, each paired with a query your team approved. The eval runs that query on today's data, runs the assistant's query, and compares the two results.\n\nA frozen number goes wrong the day new invoices arrive. A trusted query stays right as data changes, and needs an update only when a definition changes.\n\nThe limit: it covers only the questions you thought of, and the key itself can be wrong. [Researchers at the University of Illinois Urbana-Champaign](https://www.vldb.org/cidrdb/papers/2026/p5-jin.pdf) (CIDR 2026) audited public text-to-SQL benchmarks. They found annotation errors in 52.8 percent of BIRD Mini-Dev problems. Among the 121 Spider 2.0-Snow problems with released reference queries, 66.1 percent had errors. After fixing 100 BIRD Dev problems, five agents' scores changed by between 3 percent lower and 31 percent higher, and rankings moved by up to three places. If expert keys go wrong that often, your trusted queries need an owner and a review date.\n\nSome rules must hold whatever the right answer is, so they can run on every live answer.\n\nThis is metamorphic testing: checking how answers relate, not whether each matches a key. A March 2026 study, [\"Semantic Invariance in Agentic AI\"](https://arxiv.org/abs/2603.13173), rephrased multi-step scientific reasoning problems for seven models. Bigger models were not reliably more consistent. The most stable one kept its result nearly unchanged in 79.6 percent of cases. The test used only 19 science problems, not data questions.\n\nThe limit: if the assistant always uses the wrong definition, every check passes.\n\nIn my view, this is the layer small teams skip and need most. Each week, take a random handful of questions people actually asked. A person who knows the business marks each answer right or wrong, and gives each miss one cause:\n\nEach miss becomes a new case in the fixed set. This is where new question types show up first.\n\nAn AI judge is a second model that grades each answer. For data answers, I think it should answer narrow questions: did the answer use the definition it cites, and does the query fit the question?\n\nIn the [MT-Bench paper](https://arxiv.org/abs/2306.05685) (2023), strong judges agreed with human preferences over 80 percent of the time, but favored the first answer shown, longer answers and their own. A June 2026 study, [\"Reliability without Validity\"](https://arxiv.org/abs/2606.19544), tested 21 judges from nine providers across about 541,000 judgments. Plain match rate overstated judge quality: on MT-Bench, agreement beyond chance (kappa) was 33 to 41 points lower. Judges repeated their verdicts reliably on reruns, yet two judges used in production favored answers by position.\n\nSo calibrate it on your own answers: people and the judge mark the same set, and you measure agreement beyond chance. The limit: a stable judge is not a correct one. Never let it decide alone on money questions.\n\nI think the layers should arrive in this order.\n\n**Before launch.** Use the fixed set only: a handful of real questions, each with a trusted query and the definition behind it. Rephrase the key questions by hand and compare. If your people ask in Hebrew, rephrase in Hebrew too.\n\n**First paying customers.** Rerun the set automatically on every change to the model, the instructions or a definition, and once a week. Add the checks without an answer key to every money number. Start the weekly sample and the cause list.\n\n**Growing with a first data person.** Add an AI judge calibrated on human marks. Track the pass rate over time; only a fixed set makes improvement visible. Keep a set of cases you never use while tuning instructions, and fix (pin) the model version, recording it with each run.\n\nIn my estimate, not a measured figure, the cost looks like this:\n\n| Layer | Who owns it | Time | \n|---|---|---|\n| Fixed set | The owner of each definition | About an hour to write each case | \n| Checks | Whoever runs the assistant | A one-off setup | \n| Weekly sample | Someone who knows the business | About 30 minutes a week | \n| AI judge | The first data person | A set of human-marked answers to calibrate | \n\n**The trusted answers are wrong.** The key is wrong, and the team changes the assistant to match it.\n\nGuardrail: every trusted query has a named owner, a definition and a review date. Write it without the assistant's help, because two queries built on the same wrong definition will agree.\n\nCheck: when a case fails, have its owner rerun the trusted query by hand before anyone touches the assistant. A failing money case blocks the change until the owner decides which side is wrong.\n\n**The AI judge looks reliable but is not valid.** It gives the same verdict every time, yet marks wrong answers as right.\n\nGuardrail: calibrate it against human-marked answers using agreement beyond chance, and keep people on money questions.\n\nCheck: give the judge a few answers a person marked wrong. If it passes them, it is not ready.\n\n**Answers shift silently after a model change.** The provider updates the model and nothing shows an error.\n\nGuardrail: pin the model version, record it with each run, and rerun the full set before switching.\n\nCheck: compare this week's run with last week's. A case that changed result while its definition did not needs a person.\n\nThis part gets technical. One case file, with made-up values:\n\n```\n# evals/paying_customers.yaml\ncase: q-001\nquestion: \"How many paying customers did we have on 30 September 2026?\"\ntrusted_query: queries/paying_customers_at_date.sql   # run on today's data, not a stored number\nparams: {as_of: 2026-09-30}\ndefinition: metrics/paying_customer.md@v2\nowner: finance_lead\nlast_reviewed: 2026-10-01\ncompare: result_set          # execution accuracy\nholdout: false                # true = never used while tuning\ninvariants:\n  - rephrase: [\"How many customers were paying at the end of September?\"]\n  - parts_sum: {by: region, tolerance_pct: 0.1}   # amounts only\n  - cross_source: {other: crm.accounts, max_gap_pct: 2}   # set per metric\n  - cites_definition: true\n  - jump_vs_prior: {max_change_pct: 25}   # set per metric\nrun:\n  model: pinned-model-2026-09     # recorded with every run\n  repeats: 3                      # a case that passes only sometimes is a finding\n  triggers: [model_change, instruction_change, definition_change, weekly]\n```\n\nSee where your setup stands with the [two minute self-check](https://goagentdata.com/#self-check). Then read the [draft checks](https://goagentdata.com/guide#checks) your coding agent can run.\n\n*Originally published at [goagentdata.com](https://goagentdata.com/posts/evals-for-data-answers).*", "url": "https://wpnews.pro/news/how-to-check-your-ai-s-data-answers-evals-for-each-stage", "canonical_source": "https://dev.to/jacob_baruch_2a2aec3f6e3c/how-to-check-your-ais-data-answers-evals-for-each-stage-4pfn", "published_at": "2026-10-26 18:32:53+00:00", "updated_at": "2026-10-26 18:43:04.188485+00:00", "lang": "en", "topics": ["ai-tools", "large-language-models", "ai-agents", "mlops"], "entities": ["Google", "Google Research", "Gemini-SQL2", "University of Illinois Urbana-Champaign", "BIRD", "Spider 2.0-Snow", "ChatGPT"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/how-to-check-your-ai-s-data-answers-evals-for-each-stage", "markdown": "https://wpnews.pro/news/how-to-check-your-ai-s-data-answers-evals-for-each-stage.md", "text": "https://wpnews.pro/news/how-to-check-your-ai-s-data-answers-evals-for-each-stage.txt", "jsonld": "https://wpnews.pro/news/how-to-check-your-ai-s-data-answers-evals-for-each-stage.jsonld"}}