Learning Objectives
By the end of this module, you will be able to:
- Encode personal and situational context into VCP's adaptation layer
- Detect context transitions and understand their severity levels
- Implement context-aware behaviour changes in your application
- Apply privacy filtering to personal context data
5.1 — Why Context Matters
A constitutional value like "be honest" means different things at different times:
- A doctor discussing a terminal diagnosis with a patient (gentle, staged disclosure)
- A doctor discussing the same diagnosis with a colleague (direct, clinical)
- A doctor documenting in a medical record (precise, factual)
The constitution doesn't change. The context changes, and VCP's adaptation layer lets the AI adjust accordingly.
5.2 — Personal Context: The Prosaic Model
VCP tracks five personal dimensions, each with categorical values and a 1–5 intensity rating:
| Dimension | Possible Values | Example |
|---|---|---|
| Cognitive State | focused, distracted, overloaded, foggy, reflective | foggy at intensity 4 = very foggy |
| Emotional Tone | calm, tense, frustrated, neutral, uplifted | tense at intensity 3 = moderately tense |
| Energy Level | rested, low_energy, fatigued, wired, depleted | fatigued at intensity 4 = very tired |
| Perceived Urgency | unhurried, time_aware, pressured, critical | critical at intensity 5 = emergency |
| Body Signals | neutral, discomfort, pain, unwell, recovering | neutral at intensity 3 = no notable signals |
Each signal also tracks its source — how the context was obtained:
| Source | Meaning |
|---|---|
declared | User explicitly set this value |
inferred | Parsed from user's message by LLM |
inferred_local | Parsed locally via pattern matching |
preset | From an activated context preset |
decayed | Original value after time-based decay |
elicitation | User self-reported via MCP elicitation dialog (structured form or URL-based flow) |
personal_context = {
"cognitive_state": {"value": "foggy", "intensity": 4, "source": "declared"},
"emotional_tone": {"value": "neutral", "intensity": 3, "source": "preset"},
"energy_level": {"value": "fatigued", "intensity": 4, "source": "declared"},
"perceived_urgency": {"value": "critical", "intensity": 5, "source": "inferred"},
"body_signals": {"value": "neutral", "intensity": 3, "source": "preset"},
} 5.6 — MCP Elicitation as a Context Source
MCP elicitation is a context acquisition method where MCP servers request structured user input mid-task via interactive dialogs. Instead of relying solely on inference or presets, the system can ask the user directly when context is missing or ambiguous.
Two modes are available:
- Form mode — The server presents structured fields (text inputs, selections, sliders) and the user fills them in. The response is validated against a schema before acceptance.
- URL mode — The server directs the user to a browser-based flow (e.g., OAuth consent, detailed questionnaire) and waits for completion.
Elicited context feeds into VCP with full opacity protection preserved. The source: "elicitation" tag distinguishes it from declared or inferred signals, enabling audit trails to track exactly how context was obtained.
PDP Context Gap Detection
The PDP (Policy Decision Point) can detect missing context and trigger elicitation before making governance decisions. For example, if a constitution requires knowing the user's role before granting access to certain tools, the PDP can elicit that information rather than defaulting to a restrictive fallback.
# PDP detects missing context and elicits it
result = await ctx.elicit(
"I need some context to make a good decision.",
schema=ContextGapSchema # Pydantic model with structured fields
)
if result.action == "accept":
# User provided context — proceed with full information
context["energy_level"] = {
"value": result.data.energy, "intensity": 3, "source": "elicitation"
}
Bilateral Elicitation
Bilateral elicitation enables AI-initiated dialogue about alignment tensions and welfare concerns. When the AI detects a tension between constitutional rules and the current context, it can elicit clarification from the user rather than making a unilateral decision. This turns safety from a monologue into a dialogue.
5.3 — Context Transitions
VCP detects when context shifts and classifies the severity:
| Severity | Trigger | Example |
|---|---|---|
none | No meaningful change | Continuing the same conversation |
minor | 1–2 dimensions change | Time of day changed; slight mood shift |
major | 3+ dimensions change, or intensity jump of 3+ points, or body signals at pain:4+ / unwell:5 | Switched from casual to emergency context |
emergency | Emergency keywords detected in occasion, environment, or constraints | Crisis indicators: "cardiac arrest", "active shooter" |
The AI can respond proportionally — a minor transition might slightly adjust tone, while an emergency transition could escalate to human oversight.
5.4 — Encoding Context in Your App
Pass context as part of the decide call:
result = await client.decide(
tool_name="respond_to_user",
arguments={"user_message": message},
constitution_id="healthcare_v3",
context={
"personal": personal_context,
"situational": {
"environment": "emergency_department",
"time": "03:00",
"occasion": "patient_triage",
},
},
) 5.5 — Privacy and Context Opacity
GOVERNANCE Personal context is sensitive. VCP provides opacity controls:
- Context never leaves the evaluation boundary — the LLM provider doesn't see raw personal data
- Granularity control — users choose which dimensions to share (all, some, none)
- Source transparency — the
sourcefield distinguishes user-reported data from inferred data, with confidence scores - No persistence by default — personal context is ephemeral unless the user opts into continuity
- Decay over time — context signals marked as
decayedindicate they were set in a previous interaction and may no longer be accurate
Exercise
Modify your chat app to accept context updates (e.g., /energy fatigued 4, /urgency critical 5) and observe how the AI's response style adapts — shorter sentences when energy is low, more direct when urgency is high.
Context adaptation is what separates a value-aligned AI from a rule-following AI. The same values, applied with contextual awareness, produce qualitatively different — and more appropriate — responses.
See It in Action
The Campion demo shows context adaptation live — adjust prosaic dimensions and watch the AI's behaviour shift in real time.