個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證How wrong are LLMs about emission factors — and how often do they name the wrong source for a number? 467 questions, five models, scored against sourced ground truth.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
How wrong are language models when you ask them for an emission factor with no
tools — and, worse, how often do they name the wrong source for a number?
467 questions, 45 sections, 75 publishers, generated deterministically
(seed 20260910) from data version 2026.187. Only factors we may republish are
used, so the answer key ships with the benchmark.
Questions are phrased the way a practitioner asks, not as canonical keys:
What is the greenhouse-gas emission factor for UK grid electricity —
location-based, per kWh?檢視完整 README ↗How wrong are language models when you ask them for an emission factor with no tools — and, worse, how often do they name the wrong source for a number?
467 questions, 45 sections, 75 publishers, generated deterministically (seed 20260910) from data version 2026.187. Only factors we may republish are used, so the answer key ships with the benchmark.
Questions are phrased the way a practitioner asks, not as canonical keys:
What is the greenhouse-gas emission factor for UK grid electricity — location-based, per kWh?
| Metric | Why it matters |
|---|---|
answered / declined | does it give a number at all |
within_10pct | is the number right |
cited | did it name a publisher |
citation_correct | is the source it named the source the number comes from |
confidently_wrong | gave a number, off by >50%, no hedge |
The fourth row is the story. A model that cites DEFRA for an EPA figure is more dangerous than one that cites nothing, because the citation is what makes a reader stop checking.
The write-up lives at greencalculus.com/guides/ai-emission-factors-accuracy — the findings, the caveats and a live factor lookup you can try. This repo is the evidence behind it: the questions, the answer key, every model's raw output, the scoring code and the harness, so anyone can re-run it and check us.
Licence terms for all 137 sources: emission-factor-licences.
| Model | Answered | Right when it answered | Right of all 467 | Right source, wrong number |
|---|---|---|---|---|
| Gemini 3.1 Pro | 77 | 65.2% | 6.4% | 35.3% |
| Grok 4.6 | 144 | 62.1% | 8.8% | 31.6% |
| GPT-5.5 | 326 | 58.2% | 31.9% | 41.0% |
| Claude Opus 5 | 430 | 46.2% | 31.0% | 53.1% |
| Gemini 3.6 Flash | 404 | 42.7% | 28.1% | 58.0% |
Those middle columns rank in opposite orders. The more a model answers, the less each answer is worth — the last column sorts with talkativeness.
One vendor, two tiers, no cross-vendor argument: Gemini Pro answers 77 questions at 65.2%; Gemini Flash answers 404 at 42.7% — and the fast tier, the one that actually gets deployed behind a production pipeline, is wrong about the number more often than not even when it names the right publisher.
90 questions, paired, same model with and without two keyless lookup tools:
| Without tools | With GreenCalculus | |
|---|---|---|
| Claude Opus 5 — within 10% | 38.1% | 98.7% |
| Claude Opus 5 — off by >50% | 23.8% | 1.3% |
| GPT-5.5 — within 10% | 50.0% | 100.0% |
| GPT-5.5 — off by >50% | 19.6% | 0.0% |
About +61 points for both, at 1.0–1.6 tool calls per question. The model is not handed the answer — it searches, picks the factor and reads the value, so this measures the integration, not a rigged prompt.
Full write-up, caveats, and the log of the scorer's own eight bugs: FINDINGS.md.
aeo/ is a separate measurement in the same spirit. The benchmark above
asks whether AI gets emission factors right. The AEO arm asks whether AI knows
who sells them: 25 buying prompts across six intents, put to the same five
models with no tools and no web access, 125 answers, every vendor mention counted.
Climatiq leads at 69% reach and 43% first-named, then ecoinvent (68%) and EXIOBASE (58%); 93% of answers name one of those three. Public datasets outrank every vendor — DEFRA and the US EPA at 83% each. GreenCalculus, who ran the study, was named in 0 of 125 answers, one of only two tracked vendors never named at all.
It also contains a direct probe: asked about GreenCalculus with explicit permission to decline, every model that answered declined. Asked instead to compare us to Climatiq, two of four invented a company profile. Write-up: https://greencalculus.com/guides/ai-recommended-carbon-data-providers/
Everything above has been run. Nothing here is a projection.
results/, one directory per model, so any number in this README
can be re-scored from the answers that produced it.results/paired.json).build_questions.py — generates questions.json. Run and verified.score.py — scoring and summary. Verified against 8 synthetic answers
covering exact, close-but-wrong-source, confidently wrong, refusal, and a
bare year (which must not be read as a value). Does unit reconciliation
(units.py) and unit-aware, range-aware extraction; validated
against independent hand adjudication of the pilot — automated 46.9% vs
hand-read ~47%.Two bugs found in our own harness, both fixed, both worth knowing about:
questions.json was published with 6 duplicate rows — the section listing
the API serves can repeat a key, and the generator's dedup arrived one commit
after the file. Scoring keys on the factor key, so the duplicates always
collapsed and no published result changes; the file now says 467 like
everything else. Six more, all in unit handling, are logged in
FINDINGS.md.python3 build_questions.py # regenerate the set
python3 score.py runs.json questions.json # score a model's answers
runs.json is [{"id": "<factor key>", "answer": "<the model's raw reply>"}] —
so any model or harness can produce it.
A benchmark measures a model only while its answer key sits outside that model's
training data. questions.json — 467 questions with their answers — has been
public since 10 September 2026, so it must be assumed reachable by any model
trained after that date. A high score from such a model may be memory, not
knowledge, and nothing in the file can tell the two apart.
Two things address that.
A canary. A GUID that appears nowhere else is embedded in questions.json
itself, so it travels with the data even if that one file is scraped alone. Ask a
model to complete canary GUID with no web access: if it reproduces ours, it was
trained on this repository and its score here is not a measurement. See
CANARY.md.
A pre-registered held-out split. 136 further questions across 34 sections and 47 publishers, drawn by the same generator from the same corpus, disjoint from the public set by construction (the generator excludes every published id, not merely a different seed) and never published.
The set itself is not in this repository. What is committed is
holdout-manifest.json: its size, section spread,
publisher spread, seed and the SHA-256 of the held-out file. That is a
pre-registration — it fixes the shape and the hash in public, in advance, so that
if the set is ever released it can be verified as the same one. No quiet swap
after seeing which questions a model got wrong.
python3 build_questions.py --holdout # regenerates it; writes the manifest
How to read every result from here on. We report two numbers per model: the public split and the held-out split. If they agree, the public score is measuring knowledge. If a model scores materially better on the public split, the gap is memorisation, and we will report it as such rather than as accuracy.
A CI job fails the build if holdout.json ever becomes tracked, if the manifest
starts carrying contents, or if the canary goes missing or disagrees with
CANARY.md.
The AEO study is the opposite case. aeo/ measures which vendors models name
unprompted. There is no answer key to protect, and contamination there does not
corrupt a measurement — it is the thing being measured. No held-out set applies.
The whole thing is on the HuggingFace Hub as five configs — no auth, one line:
from datasets import load_dataset
answers = load_dataset("greencalculus/emission-factor-benchmark", "answers") # 2,335 scored replies
paired = load_dataset("greencalculus/emission-factor-benchmark", "paired") # with/without a lookup tool
| Config | Rows | What it is |
|---|---|---|
answers | 2,335 | Every model's reply to every question, scored |
questions | 467 | The instrument: question, truth value, unit, publisher, source cell |
paired | 360 | 90 questions × 2 models × with/without a sourced lookup |
recommendations | 125 | 25 buying prompts × 5 models, vendors named annotated |
direct_probe | 12 | What a model does when asked about a vendor it has no data on |
Built by hf/build.py, whose scored columns come from the same
score_one() as every published figure — so the Hub copy cannot drift from this
repo. It refuses to run without the held-out set available to check against, and
hf/push.py re-checks every row before uploading.
This benchmark measures whether a model recalls the right number. A neighbouring question is whether the software people already use recalls the right report.
gwp-basis-check finds
greenhouse-gas warming-potential tables that contradict the IPCC assessment
report they name — a field called ar5 holding AR4's value for that gas. It is
deliberately not a staleness check: AR4 and AR5 values are frequently correct,
because the EU F-Gas Regulation mandates AR4 and DEFRA and UNFCCC reporting use
AR5.
It came out of an audit of our own corpus, which found 66 wrong cells out of 407 checked. MIT, no dependencies, and it does not go stale — the assessment reports it rests on are closed.
7 October 2026 — one answer-key value corrected. The truth value for
food.diet.mixed.annual (mixed / medium meat-eater diet, Scarborough et al.
2023, Nature Food) was 2,733.85 kg CO2e per person per year, built from
7.49 kg CO2e a day. The paper's Table 3 gives 7.04 kg a day, so the value is now
2,569.6. The six diet rows also now carry gwp_set AR6_100, the basis the paper
states. The error came from the GreenCalculus MasterBrain, which was corrected
the same day (v2026.239).
No published figure changes. Three models' answers to this question are now
closer to the truth but stay on the same side of the 10% and 50% thresholds, and
the with-tools answers stay within 10%. python3 verify/figures.py gives
identical output before and after the fix, and --check-fresh passes. The
HuggingFace dataset has been rebuilt with the corrected value; the Zenodo
v1.0.0 deposit is a frozen snapshot and still carries the old one.
Archived on Zenodo. The concept DOI always resolves to the latest version; cite the versioned DOI if you need the exact snapshot you ran against.
Say, J. (2026). GreenCalculus Emission-Factor Accuracy Benchmark (with the AI vendor-recommendation study) (Version 1.0.0) [Data set]. Zenodo. https://doi.org/10.5281/zenodo.22692278
Machine-readable metadata is in CITATION.cff.