Methodology for systematically designing a chatbot's intent classification taxonomy. Use this skill for 'intent taxonomy design', 'intent system', 'NLU intent list', 'entity dictionary', 'slot design', and other chatbot intent classification taxonomy design tasks. Note: actual NLU model training and cloud NLU service deployment are outside the scope of this skill.
Scanned 5/29/2026
Install via CLI
openskills install sideprojectmate/sideProjectMate---
name: intent-taxonomy-builder
description: "Methodology for systematically designing a chatbot's intent classification taxonomy. Use this skill for 'intent taxonomy design', 'intent system', 'NLU intent list', 'entity dictionary', 'slot design', and other chatbot intent classification taxonomy design tasks. Note: actual NLU model training and cloud NLU service deployment are outside the scope of this skill."
---
# Intent Taxonomy Builder — Intent Classification Taxonomy Design Methodology
A skill that enhances intent classification design for the nlu-developer and conversation-designer.
## Target Agents
- **nlu-developer** — Used when designing intent/entity/slot systems
- **conversation-designer** — Used when mapping conversation scenarios to intents
## Intent Classification Taxonomy Design Framework
### Step 1: Domain Intent Collection
```
Collect user utterances > Group > Derive intent candidates
Collection sources:
- Existing FAQ documents
- Customer service inquiry logs
- Competitor chatbot analysis
- User interviews/surveys
- Domain expert brainstorming
```
### Step 2: Intent Hierarchy
```
Level 0 (Domain)
├── Level 1 (Category)
│ ├── Level 2 (Specific intent)
│ └── Level 2
└── Level 1
└── Level 2
Example (E-commerce):
commerce
├── order
│ ├── order.place — "I want to place an order"
│ ├── order.status — "Check my order status"
│ ├── order.cancel — "Cancel my order"
│ └── order.modify — "I want to change my order"
├── product
│ ├── product.search — "Do you have this kind of product?"
│ ├── product.detail — "Details about this product"
│ └── product.compare — "Compare these two products"
├── payment
│ ├── payment.method — "What payment methods are available?"
│ ├── payment.refund — "Refund request"
│ └── payment.receipt — "Issue a receipt"
└── general
├── general.greeting — "Hello"
├── general.goodbye — "Thank you"
└── general.fallback — (unrecognized)
```
### Step 3: Intent Quality Checklist
| Criterion | Description | Pass Condition |
|-----------|------------|----------------|
| Mutual exclusivity | No overlap between intents | 1 utterance = 1 intent |
| Completeness | Covers all user scenarios | fallback < 10% |
| Balance | Even training data per intent | Minimum 20 utterances/intent |
| Clarity | Purpose clear from name alone | `verb.noun` format |
| Appropriate count | Manageable range | 20-50 (small-scale), 50-150 (large-scale) |
## Entity Design Methodology
### Entity Types
| Type | Description | Examples |
|------|------------|---------|
| System entity | Platform built-in | @sys.date, @sys.number, @sys.email |
| Dictionary entity | Domain fixed list | Menu items, sizes, colors |
| Pattern entity | Regex-based | Order number (`ORD-\d{8}`), phone number |
| Composite entity | Entity combinations | Address (city+district+street), date range |
### Entity-Slot Mapping
```
Intent: order.place
Required slots:
- product_name (@product) — "Americano"
- quantity (@sys.number) — "two"
Optional slots:
- size (@size) — "tall size"
- option (@option) — "less ice"
- takeout (@boolean) — "to go"
When slot is unfilled > Prompt:
- product_name missing: "What would you like to order?"
- quantity missing: "How many would you like?"
```
## Training Data Generation Guide
### Utterance Variation Patterns
```
Original: "I want to cancel my order"
Variation strategies:
1. Ending variation: "Please cancel", "Cancel this", "I'd like to cancel please"
2. Expression substitution: "Revoke order", "Undo order", "I don't want my order anymore"
3. Context addition: "Cancel the order I just placed", "Cancel what I ordered earlier"
4. Typos/abbreviations: "cancle order", "cancel plz", "cxl"
5. Indirect expression: "I don't want to receive my order", "I changed my mind"
6. With entity: "Cancel ORD-12345678"
```
### Utterance Count Guide
| Intent Complexity | Minimum Utterances | Recommended Utterances |
|------------------|-------------------|----------------------|
| Simple (greeting/goodbye) | 10 | 20 |
| Medium (lookup/confirmation) | 20 | 50 |
| Complex (order/modification) | 30 | 80 |
| Easily confused (similar intents) | 50 | 100+ |
## Intent Confusion Matrix Analysis
```
High-confusion pair examples:
- order.cancel <> payment.refund (cancel vs refund)
- product.search <> product.detail (search vs detail)
- order.modify <> order.cancel (modify vs cancel)
Resolution strategies:
1. Add distinguishing utterances (strengthen unique keywords for each intent)
2. Merge intents (when distinction is unnecessary)
3. Context-dependent separation (based on dialog state)
4. Clarifying question ("Do you want to cancel or get a refund?")
```
## Deliverable Template
```yaml
intent_taxonomy:
- intent: order.place
description: "Place a new order"
examples:
- "I'd like to order two Americanos"
- "I want to order this"
required_slots:
- name: product_name
entity: "@product"
prompt: "What would you like to order?"
optional_slots:
- name: quantity
entity: "@sys.number"
default: 1
responses:
success: "Your order for {quantity} {product_name}(s) has been placed."
slot_missing: "Please tell me what you'd like to order."
```
No comments yet. Be the first to comment!