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.
Scanned 9/11/2026
Install to Claude Code
npx -y skills add hiyenwong/ai_collection --skill validation-driven-llm-workflow --agent claude-codeInstalls 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 automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/hiyenwong-validation-driven-llm-workflow-7dbe6309)More formats (shields.io, HTML) on the badges page.
---
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"
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!