Skip to content
Back to skills

Validation Driven Llm Workflow

ASecurity

Validation-driven LLM workflow pattern - using verification loops to ensure LLM-generated outputs are correct. Extracted from 'Generating Statistical Charts with Validation-Driven LLM Workflows' (arXiv 2026-05-01). Applicable to code generation, data visualization, document generation, and any task requiring correctness guarantees.

  • 3 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 11, 2026
testingpythonrustgo

Security analysis

A100/100

Scanned September 11, 2026

npx -y skills add hiyenwong/ai_collection --skill validation-driven-llm-workflow --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Validation Driven Llm Workflow?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Validation Driven Llm Workflow
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/hiyenwong-validation-driven-llm-workflow/badge)](https://www.skillsdirectory.com/skills/hiyenwong-validation-driven-llm-workflow)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: validation-driven-llm-workflow
description: "Validation-driven LLM workflow pattern - using verification loops to ensure LLM-generated outputs are correct. Extracted from 'Generating Statistical Charts with Validation-Driven LLM Workflows' (arXiv 2026-05-01). Applicable to code generation, data visualization, document generation, and any task requiring correctness guarantees."
category: "llm-patterns"
---

# Validation-Driven LLM Workflow

## Description
A reusable pattern for ensuring LLM-generated outputs meet correctness criteria through iterative verification loops. Instead of trusting LLM output directly, this pattern wraps generation in a validate-regenerate cycle until the output passes verification or reaches a maximum iteration limit.

## Activation Keywords
- validation-driven workflow
- verify LLM output
- LLM validation loop
- 验证驱动工作流
- LLM 验证循环
- generate with verification
- self-correcting generation

## Core Pattern

### Step 1: Define Validation Criteria
Before generation, establish clear, measurable validation criteria:
- **Syntax checks**: Code compiles, JSON parses, etc.
- **Semantic checks**: Output matches expected format, contains required fields
- **Execution checks**: Generated code runs without errors, produces expected results
- **Domain checks**: Statistical chart has correct axis labels, data matches source

### Step 2: Generate Initial Output
```
prompt = "Generate {task_description}"
output = llm.generate(prompt)
```

### Step 3: Validate Output
```
validation_result = validator.check(output)
if validation_result.passed:
    return output
else:
    feedback = validation_result.feedback
```

### Step 4: Regenerate with Feedback
```
improved_prompt = f"{original_prompt}\n\nPrevious attempt failed: {feedback}\nPlease fix these issues and regenerate."
output = llm.generate(improved_prompt)
```

### Step 5: Iterate with Limits
```
max_iterations = 3
for i in range(max_iterations):
    output = generate()
    result = validate(output)
    if result.passed:
        return output
    output = regenerate_with_feedback(result.feedback)
return best_output_so_far  # fallback
```

## Implementation Examples

### Code Generation
```python
def generate_validated_code(spec, max_retries=3):
    code = llm.generate(f"Write Python code: {spec}")
    for _ in range(max_retries):
        errors = run_syntax_check(code)
        if not errors:
            errors = run_unit_tests(code)
        if not errors:
            return code
        code = llm.generate(f"Fix these errors in the code:\n{errors}\n\nCode:\n{code}")
    return code
```

### Data Visualization
```python
def generate_validated_chart(data, chart_type, max_retries=3):
    spec = llm.generate(f"Create {chart_type} spec for this data: {data}")
    for _ in range(max_retries):
        chart = render_chart(spec, data)
        errors = validate_chart(chart)  # check axes, labels, data integrity
        if not errors:
            return chart
        spec = llm.generate(f"Fix chart issues: {errors}\n\nCurrent spec: {spec}")
    return chart
```

## Best Practices

1. **Make validators deterministic**: Use programmatic checks, not LLM-based validation (avoid LLM verifying LLM)
2. **Provide specific feedback**: Vague "this is wrong" feedback doesn't help; specify what failed and why
3. **Set reasonable iteration limits**: 3-5 retries is usually enough; more indicates a fundamental prompt issue
4. **Cache successful patterns**: When validation passes, save the prompt-output pair for future reference
5. **Graceful degradation**: Always return the best attempt, not just success/failure

## Error Handling

| Error | Recovery |
|-------|----------|
| Validator always fails | Review validation criteria - may be too strict or wrong |
| LLM produces same error repeatedly | Change the approach, not just the prompt |
| Timeout on validation | Set timeout limits for execution-based validators |
| Infinite regeneration loop | Hard cap iterations, return best result |

## Related Patterns

- **Constraint-Guided Execution**: Add constraints to the validation criteria
- **Self-Verification**: LLM verifies its own output (less reliable than external validators)
- **Test-Driven Development**: Write tests first, then generate code to pass them

## Resources

- Source paper: "Generating Statistical Charts with Validation-Driven LLM Workflows" (arXiv 2026-05-01)
- Related: "RunAgent: Interpreting Natural-Language Plans with Constraint-Guided Execution"

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…