Benchmark · THUIR · Tsinghua University
Benchmark

MetaSyn

Benchmarking LLM agents on meta-analysis articles from Nature Portfolio.

A meta-analysis statistically combines results from independent studies that answer the same research question, usually inside a systematic review that retrieves candidate studies and screens them against predefined eligibility criteria — organized as Population, Intervention/Exposure, Comparison, and Outcome (PI/ECO).

MetaSyn turns 422 Nature Portfolio source reviews into linked benchmark tasks. Each task pairs a research question and PI/ECO fields with the published included-study list and reference synthesis, letting retrieval, protocol-based evidence selection, and report synthesis be evaluated end to end against one shared 140,585-article PubMed corpus.

Anzhe Xie, Weihang Su, Yujia Zhou, Yiqun Liu, Min Zhang, Qingyao Ai · THUIR, Tsinghua University · 2026

422
source reviews
140,585
shared PubMed corpus
7,374
review–article links
100%
PI/ECO coverage
Why a linked benchmark

One pipeline, three failure points

Retrieval, evidence selection, and synthesis are usually evaluated in isolation. MetaSyn keeps them linked to the same review, so a system's losses at each stage are attributable rather than confounded.

01 · corpus
Shared corpus
140,585
PubMed records shared across every task; source-review records are excluded from that review's search.
02 · retrieval
Retrieved pool
Top‑K candidates
Query built from the research question and PI/ECO fields, never the source-review title.
03 · selection
Included studies
Protocol screen
Candidates screened against the review's inclusion / exclusion criteria into a final list.
04 · synthesis
Report
6 metrics
Criteria consistency, conclusion direction, insight consistency, and PRISMA-style structure quality.

Each stage is scored against the same review, so retrieval, selection, and synthesis outcomes stay attributable to one another rather than evaluated in isolation.

P · Population I/E · Intervention / Exposure C · Comparison O · Outcome
Dataset

Two linked Hugging Face configs

THUIR/MetaSyn ships as two configs that share one ID space: reviews (the 422 tasks, split disjointly into train/test by source review) and corpus (the 140,585-record shared PubMed pool every task searches). A review's matched_corpus_ids point into the corpus, so retrieval, selection, and synthesis can all be scored against the same stable IDs.

422
source reviews
336 / 86
train / test reviews
140,585
shared PubMed corpus
7,374
review / article links
100%
PI/ECO structure available
1,032
released report / result pairs
reviews · train / test, 422 rows
ID
Integer review ID; joins to generation_results/review_<ID> and evaluation_results/review_<ID>.
Research_Question
The free-text question the source review set out to answer.
Population, Intervention, Exposure, Comparison, Outcome
PI/ECO protocol fields; reviews use whichever of Intervention or Exposure applies.
search_start_date, search_end_date
The original review's search window.
inclusion_criteria, exclusion_criteria
Protocol eligibility text a system screens candidates against.
source_review_corpus_ids
Corpus IDs of the source review's own record(s); withheld from that review's search to prevent leakage.
matched_corpus_ids
Corpus IDs of the published included studies — the reference set every metric scores against.
Effect_Direction, Key_Insights
Reference conclusion direction and key findings, used to score synthesis.
corpus · train split only, 140,585 rows
ID
Stable corpus ID referenced by matched_corpus_ids and source_review_corpus_ids.
title, abstract
Always present; the text every retriever encodes.
pmid, pmc_id, doi
Upstream identifiers for cross-referencing PubMed / PMC.
authors, journal, year
Standard bibliographic metadata.
sections
List of {heading, text} blocks with PMC full text, when available — otherwise a record is abstract-only.

Field names above are taken directly from src/metasyn/data.py, query.py, and agent_tools.py. Code and project-authored annotations are MIT licensed; PubMed metadata, abstracts, and PMC-derived text retain their upstream terms — see the dataset card for field-level detail.

Using it

Load the data, then plug in a system

Validated on Python 3.10 / 3.11. Every LLM call goes through a standard OpenAI-compatible client configured in .env; the dataset itself loads through the regular Hugging Face datasets library.

install
# create an environment and install
python -m venv .venv
source .venv/bin/activate
pip install -e .
cp .env.example .env
load reviews and the shared corpus
from metasyn.data import load_reviews, load_corpus, review_by_id

train_reviews = load_reviews("train")  # 336 reviews
test_reviews  = load_reviews("test")   # 86 held-out reviews
corpus        = load_corpus()          # 140,585 shared PubMed records

review = review_by_id(63)
review["Research_Question"], review["Population"], review["Outcome"]
review["matched_corpus_ids"]           # gold included-study corpus IDs
build the retrieval query
from metasyn.query import build_protocol_query

# joins Research_Question + PI/ECO fields; the source-review title is never included
query = build_protocol_query(review)
build an index, retrieve, run one-pass RAG
python scripts/build_index.py --output artifacts/ma_retriever_index

python scripts/run_retrieval.py \
  --retriever ma_retriever --review-id 63 \
  --index artifacts/ma_retriever_index --top-k 200 \
  --output outputs/retrieval_63.json

python scripts/run_rag.py \
  --review-id 63 --index artifacts/ma_retriever_index \
  --top-k 200 --mode actual --output outputs/rag_63
evaluate a report
python scripts/evaluate.py \
  --result outputs/rag_63/results.json \
  --report outputs/rag_63/report.md \
  --output outputs/rag_63/evaluation.json \
  --id-only # drop --id-only to add evaluator-dependent metrics
plug in your own agent
from metasyn.agent_tools import AgentCorpusTools, build_agent_prompt

# leakage-safe search/fetch tools, scoped to one review's task
tools = AgentCorpusTools(retriever, review, k=20, max_distinct_articles=200)
hits = tools.search("focused protocol query")
article = tools.fetch(hits[0]["corpus_id"])
prompt = build_agent_prompt(review)

# expose tools.search / tools.fetch through any agent framework's tool
# interface (used as-is for GPT-Researcher and Open Deep Research)

See the full README and BASELINES.md for exact reproduction settings, the strict-JSON evaluator schema, and MA-Retriever training.

Benchmark

Three linked tasks

Twelve baseline configurations are released end to end: three retrievers, three one‑pass RAG generators, and three agentic / deep‑research systems.

Task 01

Retrieval

Query the shared corpus with the research question and PI/ECO fields — never the source-review title — and retrieve a candidate pool.

  • retrieval_recall
  • retrieval_precision
Task 02

Protocol-based selection

Screen the retrieved pool against the review's eligibility criteria and output a final included-article list.

  • inclusion_recall / precision / f1
  • screening_accuracy
  • conditional_retention, post_retrieval_loss
Task 03

Report synthesis

Write the final synthesis: inclusion/exclusion reasoning, conclusion direction, and key insights, judged against the published review.

  • inclusion_consistency, exclusion_consistency
  • conclusion_direction_accuracy
  • insights_consistency, structure_quality
Results

Released, not restated here

Twelve baseline configurations — three retrievers, three one‑pass RAG generators, and three agentic / deep‑research systems — are released end to end, but their retrieval and evidence-selection numbers are intentionally left off this page. Baseline scores age quickly as retrievers and models improve, and a snapshot here would read as a leaderboard rather than the reference point it's meant to be.

Per-review metrics

evaluation_results/ — all 1,032 review–configuration records.

Generated reports

generation_results/ — the original report and result pair behind each score.

Exact settings

BASELINES.md — the configuration behind every released number.

Full writeup

arXiv paper — discussion and analysis of the baseline runs.

Citation

Cite MetaSyn

Code and project-authored annotations are MIT licensed. PubMed metadata, abstracts, identifiers, and PMC-derived text retain their upstream terms.

bibtex
@misc{metasyn2026,
  title         = {Benchmarking {LLM} Agents on Meta-Analysis Articles from {Nature} Portfolio},
  author        = {Anzhe Xie and Weihang Su and Yujia Zhou and Yiqun Liu and Min Zhang and Qingyao Ai},
  year          = {2026},
  eprint        = {2606.17041},
  archivePrefix = {arXiv},
  primaryClass  = {cs.CL},
  url           = {https://arxiv.org/abs/2606.17041}
}