If your prompt still contains three paragraphs pleading "respond ONLY with valid JSON, no markdown, no explanation…", you're solving a 2023 problem. Every major API now ships a structured-output / JSON-schema mode that constrains generation at the decoding level: the model literally cannot emit invalid JSON or unknown fields.
The prompt's job shifts: the schema handles shape, your prompt handles semantics — what each field means, how to decide values, what to do when information is missing. Put field-by-field decision rules in the prompt (or in the schema's description fields), and reserve an explicit place for uncertainty, like a confidence field or nullable values, so the model isn't forced to fabricate.
Triage the support ticket below. A JSON schema is enforced separately with fields: category (enum: billing|bug|feature_request|account|other), priority (enum: p0|p1|p2|p3), sentiment (enum: angry|frustrated|neutral|positive), summary (string, ≤20 words), missing_info (array of strings).
Decision rules:
TICKET: "Second time writing. Export has been spinning for 3 days and our quarterly report is due Friday. If this isn't fixed we're moving to Retool."
Extract fields from the contract excerpt below. Schema (enforced): each field is an object {value: string|null, quote: string|null, confidence: high|medium|low}. Fields: party_a, party_b, start_date (ISO), end_date (ISO), payment_terms, auto_renewal.
Rules:
EXCERPT: "This agreement between Vitae Inc. and BlueHarbor LLC commences January 5, 2026 and continues for twelve (12) months. Fees are payable net-45."
Claude supports structured outputs via tool-use schemas and a dedicated structured-output mode — both constrain shape hard. Put per-field guidance in the schema 'description' keys; Claude reads them like inline prompt text.