Intent and Schema Internals
Dialogue act resolution
DialogueActStep handles linguistic classification before intent resolution even begins. It supports three configuration modes via convengine.flow.dialogue-act.resolute:
REGEX_ONLYREGEX_THEN_LLMLLM_ONLY
Core Dialogue Acts
| Act | Meaning | Regex Sample |
|---|---|---|
| AFFIRM | User agrees or confirms | (?i)^\\s*(yes|yep|yeah|sure)\\s*$ |
| NEGATE | User disagrees or cancels | (?i)^\\s*(no|nope|cancel)\\s*$ |
| ANSWER | User answers an active clarification or slot question | short direct answer in active flow |
| EDIT | User requests a correction | (?i)^\\s*(edit|change|modify)\\s*$ |
| RESET | User requests a fresh start | (?i)^\\s*(reset|start over)\\s*$ |
| QUESTION | User asks a clarifying question | text ending in '?' |
| NEW_REQUEST | (Fallback) User begins a new topic | default fallback |
When the LLM path is engaged (confidence below llm-threshold), it must return a strict JSON payload containing the act and confidence to be parsed by the engine. It can also derive standaloneQuery, which becomes resolved_user_input when present.
Interaction policy decision
InteractionPolicyStep derives the routing policy for the current turn based on existing context.
Engine Routing Policies
| Policy Decision | Trigger Context | Pipeline Impact |
|---|---|---|
| EXECUTE_PENDING_ACTION | DialogueAct=AFFIRM + hasPendingAction | Triggers PendingActionStep; Skips Intent Resolution |
| REJECT_PENDING_ACTION | DialogueAct=NEGATE + hasPendingAction | Marks Pending task REJECTED; Skips Intent Resolution |
| FILL_PENDING_SLOT | DialogueAct!=NEW_REQUEST + hasPendingSlot | Passes input to SchemaExtractionStep; Skips Intent Resolution |
| RECLASSIFY_INTENT | DialogueAct=NEW_REQUEST (or no pending state) | Forces standard Intent Resolution |
Confirmation routing and correction
CorrectionStep runs after InteractionPolicyStep and before intent/schema rework. It handles confirmation-state turns without forcing full re-extraction:
AFFIRMin confirmation state can setrouting_decision=PROCEED_CONFIRMEDEDITin confirmation state can patch a single field in-place and keep the flow inCONFIRMATION- downstream rules can use
POST_SCHEMA_EXTRACTIONandPRE_AGENT_MCPto route the next state deterministically
Intent resolver behavior
The pipeline resolves intent in order of priority via CompositeIntentResolver.
The engine prevents intent drift during active schema collection automatically. You will see these audit signals in the trace when intent resolution is intentionally bypassed:
INTENT_RESOLVE_SKIPPED_POLICYINTENT_RESOLVE_SKIPPED_SCHEMA_COLLECTIONINTENT_RESOLVE_SKIPPED_STICKY_INTENT
Schema extraction
SchemaExtractionStep drives missing-field follow-up flows and automatically formats prompt templates utilizing ce_prompt_template.
Runtime facts are evaluated and written into the EngineSession context by AutoAdvanceStep, making them available for ce_rule evaluation:
missing_fieldsmissing_field_optionsschema_jsonschema_complete
Once extraction is complete, POST_SCHEMA_EXTRACTION rules can move the flow into confirmation without waiting for MCP execution.
Use schema extraction for required slot collection, and use dialogue acts + interaction policies for short confirmations (like replying "yes" to "Are you sure?"). This ensures intent reclassification does not disrupt your active multi-turn flows.