# Construct Eval

> Evaluates the trustworthiness and accuracy of LLM-generated structured outputs (JSON) against a ground truth or expected schema. It probes the model's ability to detect per-field and per-document errors in data extraction tasks without requiring labeled data. Use when the user wants to benchmark on Four real-world datasets (unspecified in excerpt), or asks about evaluating this task. Reports rating.

- Skill: `qhjqhj00/construct-eval` (Agent Skill)
- Install (CLI): `npx skillmds add qhjqhj00/construct-eval`
- Raw SKILL.md: https://api.skillmd.com/api/skills/qhjqhj00/construct-eval/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: qhjqhj00 (https://skillmd.com/u/qhjqhj00)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/qhjqhj00/construct-eval

---


# construct-eval

> Real-Time Trustworthiness Scoring for LLM Structured Outputs and Data Extraction — Goh et al. (2026) (arXiv:2603.18014, 2026)

## What this evaluates

Evaluates the trustworthiness and accuracy of LLM-generated structured outputs (JSON) against a ground truth or expected schema. It probes the model's ability to detect per-field and per-document errors in data extraction tasks without requiring labeled data.

## Datasets

- **Four real-world datasets (unspecified in excerpt)** — total ?; splits: test (-1); repo https://github.com/cleanlab/structured-output-benchmark

## Metrics

- `rating` **(primary)** — range: [1, 10]
  - An LLM judge evaluates the generator's structured output against the user request and schema, outputting a score from 1 to 10. Higher scores indicate greater trustworthiness and accuracy.

## Input / output format

**Input**: User request (including document to process), desired structured output schema, and the generator model's structured output response.

**Output**: Per-document: a short explanation followed by a rating in format 'Rating: [[x]]' (1-10). Per-field: a JSON object mapping each field name to an object containing 'explanation' (str) and 'rating' (int, 1-10).

## Scoring recipe

```python
def score_trustworthiness(input_text, schema, generated_output):
    # Per-document scoring
    doc_prompt = build_prompt(input_text, schema, generated_output)
    doc_response = call_llm_judge(doc_prompt)
    doc_score = extract_int(doc_response, pattern=r'\[\[(\d+)\]\]')
    
    # Per-field scoring
    field_scores = {}
    for field_name in schema.keys():
        field_prompt = build_prompt(input_text, schema, generated_output, ignore_others=[field_name])
        field_response = call_llm_judge(field_prompt)
        field_scores[field_name] = extract_int(field_response, pattern=r'\[\[(\d+)\]\]')
    return doc_score, field_scores
```

## Common pitfalls

- The LLM-as-Judge prompt is adapted from Zheng et al. (2023) and may inherit calibration biases or positional biases common to LLM judges.
- Per-field scoring requires precise schema parsing to map judge outputs back to original fields, especially for nested or dynamically generated JSON structures.
- Ratings are subjective 1-10 scores and may not linearly correlate with exact ground-truth accuracy without thresholding or calibration.

## Evidence (verbatim from paper)

> After providing your explanation, please rate the response on a scale of 1 to 10 by strictly following this format: "[rating]", for example: "Rating: [[5]]".

## Citation

```bibtex
@misc{goh2026construct,
  title={Real-Time Trustworthiness Scoring for LLM Structured Outputs and Data Extraction},
  author={Goh et al. (2026)},
  year={2026},
  note={arXiv:2603.18014}
}
```

- arXiv: 2603.18014

