Acceptance Rate — метрика того, насколько AI-результат пригоден для реальной работы после человеческой проверки. Она отвечает не «прошёл ли output внутренний verifier?», а что сделал реальный пользователь/ревьюер с результатом: принял как есть, слегка исправил, существенно переписал или отверг.
№47 Evals measures controlled task quality. №45 Verification checks a single result against rules/evidence. №88 Acceptance measures real reviewer/user disposition. №87 Time Savings measures labor delta; edit depth often explains it. №89 Escalation measures human handoff before/inside completion, not post-output acceptance.
Need stable output/task identity, review event, acceptance taxonomy, reviewer context, denominator eligibility and label coverage. Ideally also edit diff/time and reason codes.
CONTROL: acceptance classes, edit thresholds, eligible output types, review window. DATA: review events, edits/diffs, reviewer action, task/use-case metadata. RUNTIME: emit review outcome. OFFLINE: aggregation, cohorting, calibration vs evals and economic analysis.
Failure = treating missing review as acceptance, asking users to self-score with no behavioral event, mixing incompatible output types, changing minor/major edit thresholds silently, ignoring reviewer disagreement, or optimizing acceptance by routing only easy tasks.
Acceptance does not equal truth. A user may accept a wrong answer or reject a correct but stylistically inconvenient one. Acceptance owns workflow usefulness / human disposition, not epistemic correctness.
Output is used/submitted/published without material human modification.
Small wording, formatting, style or non-material corrections. Core structure/content remains.
Material restructuring, factual correction, significant rewriting or recomputation.
Output discarded, regenerated from scratch, or replaced by human/manual solution.
Strict Acceptance Rate = accepted_as_is ----------------------- reviewed eligible outputs × 100% Broad Acceptance Rate = accepted_as_is + minor_edit --------------------------- reviewed eligible outputs × 100% Major Edit Rate = major_edit ---------- reviewed eligible outputs Reject Rate = rejected -------- reviewed eligible outputs
Review Coverage = reviewed eligible outputs ------------------------- all eligible AI outputs × 100% Example: 1,000 AI outputs 600 reviewed 300 as-is 180 minor 80 major 40 rejected 400 unreviewed Strict Acceptance among reviewed: 300 / 600 = 50% Broad Acceptance among reviewed: (300 + 180) / 600 = 80% But overall review coverage: 60% You cannot claim: “80% of all outputs are accepted.” Correct: “80% broad acceptance among reviewed outputs, with 60% review coverage.”
Strong label if workflow meaning is clear.
Can imply acceptance if no further edits occurred.
Edit magnitude used to classify minor/major.
Strongest for high-risk/structured workflow.
Character diff alone can overstate punctuation/format edits and understate one crucial factual correction.
Line diff plus test/build outcome and changed logic.
Material key/value modifications, missing fields, schema corrections.
Example text heuristic: minor if: semantic structure preserved AND material facts unchanged AND edit_time < threshold AND edit_ratio < threshold major if: core argument/structure changed OR factual/material correction OR substantial rewrite OR reviewer says output unusable without rework Final policy should be use-case specific and versioned.
Possible text edit ratio: 1 − similarity(ai_output, final_output) or: changed_tokens -------------- max(ai_tokens, final_tokens) Useful: compare cohorts detect rewrite burden Not sufficient: one changed number may be critical while 30 formatting edits may be trivial.
Example utility score: as_is = 1.00 minor_edit = 0.75 major_edit = 0.25 rejected = 0.00 Weighted Acceptance Score = Σ(class_weight × count) ----------------------- reviewed eligible outputs CAUTION: weights are management assumptions, not universal truth. Always retain raw class distribution.
| Acceptance | Verification/Eval | Interpretation |
|---|---|---|
| High | High | Strong. Useful and objectively/externally validated enough. |
| High | Low | Dangerous trust gap: users accept outputs that fail quality checks. |
| Low | High | Output may be correct but poor UX/style/workflow fit. |
| Low | Low | Capability/product fit problem. |
Example: marketing draft: broad acceptance 91% research synthesis: 78% code patch: 66% contract analysis: 54% customer-facing action: 97% reviewed + mandatory approval Global: 76% The global number hides very different error tolerance, workflow and review semantics.
User acceptance may be sufficient primary online signal.
Acceptance should pair with verifier/evidence checks.
Formal human review + verification required; “accepted” alone is not enough.
Reviewer identity/role, reason and version may need durable record.
| Reviewer | Signal |
|---|---|
| End user | Workflow utility and preference. |
| Domain expert | Higher-confidence material correctness/usefulness. |
| Quality reviewer | Structured rubric/classification. |
| Approver / accountable owner | Formal authorization, not necessarily deep content expertise. |
| Automated verifier | Not Acceptance; store separately and join analytically. |
Possible record: reviewer_1: minor_edit reviewer_2: major_edit Do not silently: take majority without policy. Track: disagreement_rate adjudicated_label reviewer_role rubric_version High disagreement may mean: rubric unclear output type subjective reviewer calibration weak
Hallucination, wrong computation, unsupported claim.
Important field, argument, evidence or step absent.
Tone, formatting, excessive length, schema mismatch.
Unsafe, unauthorized, privacy/compliance issue.
Source freshness/ingestion issue.
Problem formulation/context/routing failure.
Operational rather than reasoning failure.
Keep category but avoid allowing it to dominate forever.
reason_code examples: style tone format brevity missing_detail factual_correction source_update logic_correction policy_correction user_preference brand_language code_bug test_failure schema_fix
| Class | Typical human-time pattern |
|---|---|
| As-is | Prompt + review only; highest savings potential. |
| Minor | Positive savings in many workflows. |
| Major | Benefit may remain, but substantial rework reduces savings. |
| Reject | Often negative or near-zero savings. |
Use case A: Acceptance = 92% Coverage = 5% Use case B: Acceptance = 80% Coverage = 70% Possible interpretation: A: excellent on narrow/easy slice B: lower acceptance but much broader real workload exposure Need: complexity/risk-adjusted analysis before declaring A “better”.
| Acceptance High | Acceptance Low | |
|---|---|---|
| Adoption High | Strong fit. Investigate Coverage/Time Savings. | Users keep trying despite rework; may be forced usage, novelty or partial utility. |
| Adoption Low | Good outputs but weak discoverability/integration/habit. | Weak product fit or immature capability. |
Acceptance gives rich label coverage.
Need sampled post-hoc review because acceptance labels disappear when no human is in loop.
Rely more on verification, audit samples, downstream outcome and exception metrics.
Model A: AI cost = $0.20 broad acceptance = 70% review/edit = 12 min Model B: AI cost = $0.80 broad acceptance = 90% review/edit = 5 min If human minute cost is high, Model B may have lower total Cost per Successful Operation. Acceptance is one bridge between model quality and human economics.
Two useful rates: Broad Acceptance among reviewed AI outputs = (as_is + minor) / reviewed AI outputs Accepted Coverage = accepted AI outputs / all eligible tasks Why both? Acceptance: output quality conditional on AI reaching review Accepted Coverage: total workflow value across eligible work, including attempts/failures/no-AI paths.
Useful for prompt/model/RAG quality.
Useful for workflow success.
High final acceptance with 4 revisions may be expensive/slow.
Attempt 1: verifier FAIL AI revises Attempt 2: verifier PASS Human: accepted as-is Acceptance class: AS-IS for final reviewed output But diagnostics retain: first_pass_acceptance = false self_repair_count = 1 final_acceptance = as_is added cost/latency = tracked
| Behavior | Possible interpretation | Confidence |
|---|---|---|
| User clicks “Accept” | Explicit acceptance | High |
| Output published unchanged | Accepted as-is | High |
| Copied to clipboard | Maybe useful | Low/Medium |
| No further interaction | Unknown / abandoned | Low |
| Task marked complete after output | Likely accepted if workflow semantics guarantee review | Medium/High |
Sample: 500 user-accepted outputs Expert audit: 440 valid 40 material issues 20 severe issues User acceptance: 100% for sample Expert-valid rate: 88% Severe miss rate: 4% Conclusion: high acceptance ≠ safe quality. Use: periodic expert audit by risk/use case especially before autonomy expansion.
Users review only simple outputs; acceptance inflated.
Only problematic outputs get explicit feedback; acceptance deflated.
Expert standards differ from average user.
Random review sample provides unbiased estimate.
Production: 50,000 autonomous outputs/month No human review: 46,000 Sample: 1,000 random outputs stratified by risk/use case Expert review: as-is 720 minor 180 major 80 reject 20 Estimated broad acceptance: 90% with confidence interval and sample design recorded. This is not identical to natural user acceptance, but provides a quality estimate when human-in-loop labels vanish.
Minor edits are expected and subjective.
Material corrections should be rare.
Human acceptance plus build/test success.
Formal verification/audit and policy controls required.
Use case: research_synthesis Reviewed N = 2,400 Review coverage = 82% AS-IS: 46% MINOR: 32% MAJOR: 15% REJECT: 7% Broad Acceptance: 78% Median review time: 4.8 min Median edit time: 2.1 min Top reject reason: missing evidence
Acceptance by selected model or escalation path.
With/without retrieval, source type, freshness.
Acceptance may degrade sharply on high-complexity tasks.
Detect prompt/workflow/model regressions.
Different models/sources can behave unevenly.
Bad ingestion/RAG may drive edits.
Separate actual model change from reviewer-mix shift.
High-risk thresholds and audit requirements differ.
Control: RAG + model Treatment: RAG + model + reranker Same eval / production cohort. Control: broad acceptance 76% cost $0.35 review 7.2 min Treatment: broad acceptance 82% cost $0.43 review 5.8 min Ablation Delta: +6pp acceptance +$0.08 AI cost −1.4 human review min Decision: evaluate net economics and confidence.
Always show how many outputs underpin the rate.
Especially for small cohorts / experiment deltas.
Task/reviewer mix changes can mimic quality change.
{
"review_id":"REV-...",
"task_id":"TASK-...",
"run_id":"RUN-...",
"output_ref":"artifact://.../output-v3",
"reviewer":{
"type":"end_user",
"role":"marketing_manager"
},
"review":{
"status":"reviewed",
"acceptance_class":"minor_edit",
"label_source":"explicit",
"reason_codes":["tone","brevity"],
"review_seconds":95,
"edit_seconds":130,
"edit_ratio":0.08
},
"task":{
"use_case":"draft_marketing_post",
"risk_class":"low",
"complexity":"medium"
},
"versions":{
"product":"2026.09.1",
"prompt":"post-v7",
"model_route":"router-v8",
"rubric":"acceptance-v2"
},
"occurred_at":"..."
}
acceptance_review( review_id task_id run_id output_ref occurred_at reviewer_type reviewer_role review_status acceptance_class label_source reason_codes[] review_seconds edit_seconds edit_ratio use_case complexity risk_class product_version model_route rubric_version )
WITH reviewed AS (
SELECT *
FROM acceptance_review
WHERE review_status = 'reviewed'
AND occurred_at >= :start
AND occurred_at < :end
)
SELECT
COUNT(*) FILTER (
WHERE acceptance_class = 'as_is'
)::float / NULLIF(COUNT(*),0)
AS strict_acceptance,
COUNT(*) FILTER (
WHERE acceptance_class IN ('as_is','minor_edit')
)::float / NULLIF(COUNT(*),0)
AS broad_acceptance,
COUNT(*) FILTER (
WHERE acceptance_class = 'major_edit'
)::float / NULLIF(COUNT(*),0)
AS major_edit_rate,
COUNT(*) FILTER (
WHERE acceptance_class = 'rejected'
)::float / NULLIF(COUNT(*),0)
AS reject_rate
FROM reviewed;
Missingness visible.
Minor/major thresholds versioned.
Review tied to what human actually saw.
Changes monitored across periods.
ACCEPTANCE ↓ ↓ Review coverage changed? yes → missingness / reviewer behavior no ↓ Reviewer mix changed? yes → stratify/calibrate no ↓ Task mix / complexity changed? yes → compare matched cohorts no ↓ Product/model/prompt version changed? yes → ablation / rollback / eval no ↓ Reject reason: factual → RAG/model/verification missing detail → prompt/context stale → ingestion/provenance style → prompt/UX/personalization schema → structured output contract tool failure → Tool/Production Fabric policy → guardrails/permissions ↓ Check: first-pass vs final acceptance review/edit time cost severe error rate
Accepted with no material human modification.
As-is + minor edit.
Large human rework.
Discarded / replaced output.
How much eligible output actually has labels.
Initial output quality before self-repair/retry.
Human verification burden.
Rubric/calibration quality where multi-review used.
DATA 1. task_id 2. output_ref/version 3. use_case 4. review_status 5. acceptance_class: as_is minor_edit major_edit rejected 6. label_source 7. review/edit seconds 8. reason_code 9. model/product version 10. risk / complexity MVP METRICS 1. Strict Acceptance Rate 2. Broad Acceptance Rate 3. Major Edit Rate 4. Reject Rate 5. Review Coverage 6. median review time 7. median edit time 8. acceptance by use case 9. acceptance by complexity 10. top rejection/edit reasons GUARDRAILS 1. offline eval quality 2. severe error rate 3. Time Savings 4. Coverage 5. Cost per Successful Operation
| Question | Status |
|---|---|
| What exactly is “as-is”? | Required |
| How are minor and major edits separated? | Required |
| Are unreviewed outputs excluded and shown separately? | Required |
| Is Review Coverage visible? | Required |
| Is the label attached to exact output version? | Required |
| Is reviewer role/source known? | Recommended / required for high-risk |
| Are rejection/edit reasons captured? | Recommended |
| Are use-case/risk/complexity slices shown? | Required for decisions |
| Is acceptance paired with eval/verification? | Required for correctness claims |
| Is review/edit time paired with acceptance? | Required for productivity claims |
| Is rubric versioned? | Required |
You are designing Acceptance Rate analytics for an AI product.
1. Define eligible AI outputs.
2. Define review states:
reviewed,
not_reviewed,
unknown.
3. For reviewed outputs classify:
accepted_as_is,
minor_edit,
major_edit,
rejected.
4. Define minor vs major edit rules
per output type/use case.
5. Never treat missing review as accepted.
6. Track Review Coverage separately.
7. Compute:
Strict Acceptance,
Broad Acceptance,
Major Edit Rate,
Reject Rate.
8. Store:
exact output version/ref,
reviewer type/role,
label source,
reason codes,
review/edit time,
rubric version.
9. Separate:
first-pass acceptance
from final acceptance after AI self-repair/retries.
10. Segment by:
use case,
risk,
complexity,
model route,
RAG mode,
product version,
reviewer cohort.
11. Pair with:
Evals / Verification,
Time Savings,
Coverage,
Cost per Operation.
12. Use random expert audit samples
when human review coverage is low or autonomy is high.
13. Official rates should be calculated deterministically
in SQL/code.
14. LLM may classify edit/rejection reasons
only if validated and auditable.
| Question | Answer |
|---|---|
| Separate component? | N/A. Acceptance is a governed metric; review UI/events/analytics implement it. |
| Minimum 80% value? | Four acceptance classes + not-reviewed status + Review Coverage + review/edit time + reason codes + exact output version. |
| When overkill? | Fully deterministic tasks where correctness is machine-verifiable and no human output consumption exists; then verifier success may be primary. |
| Trigger? | “Do people actually use AI outputs?”, “How much rewriting is needed?”, “Why does AI save/lose time?”, “Can we increase autonomy?”. |
| How to measure uplift? | Matched production cohorts / A/B / ablation with review coverage, task mix and reviewer mix controlled. |
| Can rules/code replace LLM? | Yes for calculation. Edit distance and deterministic rules can classify many cases; LLM may assist semantic edit/reason classification but must be validated. |
AI OUTPUT ↓ WAS IT REVIEWED? NO → NOT REVIEWED / UNKNOWN → contributes to Review Coverage denominator → does NOT count as accepted YES ↓ WHAT DID HUMAN DO? USED WITHOUT MATERIAL CHANGE → ACCEPTED AS-IS SMALL NON-MATERIAL CHANGES → MINOR EDIT SUBSTANTIAL REWRITE / MATERIAL FIX → MAJOR EDIT DISCARDED / REPLACED / REDONE → REJECTED ═══════════════════════════════════ PRIMARY METRICS: STRICT ACCEPTANCE as-is / reviewed BROAD ACCEPTANCE (as-is + minor) / reviewed MAJOR EDIT RATE REJECT RATE REVIEW COVERAGE reviewed / eligible outputs ═══════════════════════════════════ ALWAYS CONNECT TO: EVALS / VERIFICATION was output actually correct? TIME SAVINGS how much human work remained? COVERAGE how much real work reaches this quality? COST / SUCCESS is higher acceptance economically worth it? AUTONOMY can humans safely leave the loop? ═══════════════════════════════════ DO NOT CONFUSE: ACCEPTED with TRUE UNREVIEWED with ACCEPTED FINAL ACCEPTANCE with FIRST-PASS QUALITY HIGH ACCEPTANCE with HIGH COVERAGE HIGH ACCEPTANCE with LOW COST ═══════════════════════════════════ THE CENTRAL QUESTION IS NOT: “DID THE MODEL PRODUCE AN OUTPUT?” IT IS: “WHEN A REAL HUMAN HAD TO USE THIS OUTPUT IN REAL WORK, DID THEY TAKE IT AS-IS, MAKE A SMALL FIX, REBUILD A LARGE PART, OR THROW IT AWAY?” THAT DISTRIBUTION IS THE REAL ACCEPTANCE SIGNAL.
A. Related ECC ideas. Context-as-cache, scoped memory, lifecycle hooks, selective capabilities, feature flags, deterministic enforcement, provider-neutral adapters and eval-gated learning are applied only where relevant to №88 Acceptance Rate.
B–E. Existing boundary and placement. The existing conceptual boundary, class METRIC, default N/A and owner Evals / Analytics / Management remain authoritative. Runtime/control/data/offline placement is unchanged; durable state stays outside model context.
F–H. Hooks and contracts. Use bounded PRE_MODEL/POST_MODEL, PRE_TOOL/POST_TOOL, CHECKPOINT and TASK_COMPLETED events as applicable. Illustrative fields and canonical contracts are defined in NEW_CONTRACTS_SPEC.md; no universal schema is implied.
I–J. Security and evaluation. Host-side schema, permission, secret, budget, idempotency and audit checks take precedence over LLM output. Optional mechanisms require a feature flag and WITH/WITHOUT ablation; measure quality, acceptance, correction, latency, cost, escalations and severe errors.
K–L. Task profiles and cross-references. A TaskProfile selects the relevant skill, tool/context slice, memory scope and enforcement profile independently from FAST/STANDARD/DEEP. See cross-reference map, hook spec and ablation plan. Provider adapters remain outside the core.