guidance
Control LLM output with regex and grammars, guarantee valid JSON/XML/code generation, enforce structured formats, and build multi-step workflows with Guidance - Microsoft Research's constrained generation framework
By orchestra-research · 762 installs
npx skills add orchestra-research/ai-research-skills --skill guidance
Source repository · Upstream listing
Guidance: Constrained LLM Generation
When to Use This Skill
Use Guidance when you need to:
Control LLM output syntax with regex or grammars
Guarantee valid JSON/XML/code generation
Reduce latency vs traditional prompting approaches
Enforce structured formats (dates, emails, IDs, etc.)
Build multi step workflows with Pythonic control flow
Prevent invalid outputs through grammatical constraints
GitHub Stars : 18,000+ From : Microsoft Research
Installation
Quick Start
Basic Example: Structured Generation
With Anthropic Claude
Core Concepts
1. Context Managers
Guidance uses Pythonic context managers for chat style interactions.
Benefits:
Natural chat flow
Clear role separation
Easy to read and maintain
2. Constrained Generation
Guidance ensures outputs match specified patterns using regex or grammars.
Regex Constraints
How it works:
Regex converted to grammar at token level
Invalid tokens filtered during generation
Model can only produce matching outputs
Selection Constraints
3. Token Healing
Guidance automatically "heals" token boundaries between prompt and generation.
Problem: Tokenization creates unnatural boundaries.
Solution: Guidance backs up one token and regenerates.
Benefits:
Natural text boundaries
No awkward spacing issues
Better model performance (sees natural token sequences)
4. Grammar Based Generation
Define complex structures using context free grammars.
Use cases:
Complex structured outputs
Nested data structures
Programming language syntax
Domain specific languages
5. Guidance Functions
Create reusable generation patterns with the @guidance decorator.
Stateful Functions:
Backend Configuration
Anthropic Claude
OpenAI
Local Models (Transformers)
Local Models (llama.cpp)
Common Patterns
Pattern 1: JSON Generation
Pattern 2: Classification
Pattern 3: Multi Step Reasoning
Pattern 4: ReAct Agent
Pattern 5: Data Extraction
Best Practices
1. Use Regex for Format Validation
2. Use select() for Fixed Categories
3. Leverage Token Healing
4. Use stop Sequences
5. Create Reusable Functions
6. Balance Constraints
Comparison to Alternatives
Feature Guidance Instructor Outlines LMQL
Regex Constraints ✅ Yes ❌ No ✅ Yes ✅ Yes
Grammar Support ✅ CFG ❌ No ✅ CFG ✅ CFG
Pydantic Validation ❌ No ✅ Yes ✅ Yes ❌ No
Token Healing ✅ Yes ❌ No ✅ Yes ❌ No
Local Models ✅ Yes ⚠️ Limited ✅ Yes ✅ Yes
API Models ✅ Yes ✅ Yes ⚠️ Limited ✅ Yes
Pythonic Syntax ✅ Yes ✅ Yes ✅ Yes ❌ SQL like
Learning Curve Low Low Medium High
When to choose Guidance:
Need regex/grammar constraints
Want token healing
Building complex workflows with control flow
Using local models (Transformers, llama.cpp)
Prefer Pythonic syntax
When to choose alternatives:
Instructor: Need Pydantic validation with automatic retrying
Outlines: Need JSON schema validation
LMQL: Prefer declarative query syntax
Performance Characteristics
Latency Reduction:
30 50% faster than traditional prompting for constrained outputs
Token healing reduces unnecessary regeneration
Grammar constraints prevent invalid token generation
Memory Usage:
Minimal overhead vs unconstrained generation
Grammar compilation cached after first use
Efficient token filtering at inference time
Token Efficiency:
Prevents wasted tokens on invalid outputs
No need for retry loops
Direct path to valid outputs
Resources
Documentation : https://guidance.readthedocs.io
GitHub : https://github.com/guidance ai/guidance (18k+ stars)
Notebooks : https://github.com/guidance ai/guidance/tree/main/notebooks
Discord : Community support available
See Also
references/constraints.md Comprehensive regex and grammar patterns
references/backends.md Backend specific configuration
references/examples.md Production ready examples