Learners working through a lab regularly hit questions the static instructions don't answer, and their only options are to guess, leave the lab to search elsewhere, or raise a support request. Chat Assistant embeds a topic-scoped conversation directly in the Lab Instructions so learners can ask questions in place and get answers that stay tied to the lab's subject matter. This article covers how to configure Chat Assistant, how to scope it so responses stay useful, and when to choose it over the other learner-led tools.
Best Practices for Chat Assistant
Treat Chat Assistant as a scoped tutor, not an open assistant. Almost every quality problem traces back to one of two causes: a Topic that is too broad, or a System Prompt that doesn't constrain the response. Get those two right and the rest is fine-tuning.
- Scope the Topic to the task, not the technology.
ai-chat[Configuring lifecycle rules on an Azure Storage Account]produces far more useful conversation thanai-chat[Azure]. Interactions are held to the Topic you supply, and a broad Topic means a broad guardrail. - Use the System Prompt to set audience, depth and format. State the learner's assumed experience level, the boundaries you don't want crossed (for example, "don't provide the completed command — describe the approach"), and the response shape you want.
- Don't let the conversation give away scored answers. In a validation or scored lab, constrain the System Prompt so the model coaches rather than completes. This is the single most common authoring mistake.
- Use one conversation across several pages rather than several independent ones. Assign a shared
idso the same conversation follows the learner through the lab and keeps its context, instead of restarting cold on every page. - Write a Placeholder that tells the learner what to ask. "Ask a question about storage redundancy options" gets used. The default "Ask a question…" mostly doesn't.
- Check the token budget before you publish. Each interaction consumes AI tokens against the Max AI Tokens allowance configured on the Lab Profile. A conversation-heavy lab with a low ceiling will cut learners off mid-thread.
- Consider revealing a conversation only when it's needed. A tutor placed inside a conditional section — shown when a learner fails a knowledge check, for example — is more useful than one sitting on the page from the start, and it keeps token consumption to the learners who need help. See the remediation example below.
- Test as a learner before publishing. Launch the lab and try to push the conversation off topic, ask for the answer outright, and ask something genuinely ambiguous. Fix the System Prompt, not the Topic, if responses drift.
If you only need learners to request a fixed set of explanations — teach, show, quiz or find resources — use Menu Assistant instead. Menu Assistant is cheaper, more predictable and easier to review. Reach for Chat Assistant when the value is in the learner's own question.
Who Uses Chat Assistant, and When
Lab Developers configure Chat Assistant in Skillable Studio while authoring a lab. Learners use it inside the lab client during an active lab session.
Use Chat Assistant when the learning value depends on the learner's own line of enquiry:
- Concept labs where the "why" matters as much as the "how". A learner following configuration steps can ask why a particular setting exists, without you writing that explanation into every branch of the instructions.
- Labs with a wide skill spread. Experienced learners ask deeper questions; newer learners ask for clarification of a step. One conversation serves both, where static instructions can only be pitched at one level.
- Long or multi-page labs. A single shared conversation carried across pages lets learners build on earlier questions rather than repeating context.
- Troubleshooting and diagnostic scenarios. Learners describe what they're seeing and work towards the cause, which is closer to real practice than reading a fixed answer.
- Remediation after a failed knowledge check. A conversation held in a conditional section can appear only for learners who answered incorrectly, giving them a tutor at the point of difficulty. See the worked example below.
Avoid Chat Assistant where a factual, reviewable answer is required — compliance content, exam preparation with a defined answer key, or anything a customer must be able to audit. Generated responses vary between learners by design.
How Chat Assistant Works in Skillable Studio
Chat Assistant is one of the learner-led tools in the Skillable AI suite. You insert it into an instruction set as an element; at lab launch it renders as a chat box in the Lab Instructions pane, and the learner types into it directly.
Insert Chat Assistant from the Instructions Editor
- From Skillable Studio, open your lab's Instructions Editor.
- Place your cursor where the conversation should appear in the instructions.
- On the ribbon bar, select AI > Chat. The Insert Chat dialog opens.
- Complete the configuration fields:
- Topic — the subject the conversation is held to. Required. Keep it specific and aligned to the surrounding instructions.
- Model — the model that serves the conversation. This field only appears if your organization has more than one model available. Organizations using the default Skillable model alone have nothing to select, and the conversation uses that model automatically. If your organization has added alternative models or Bring Your Own (BYO) models, select the one you want here — model choice affects response style, depth and cost.
- System Prompt — additional instructions and constraints that shape every response. Use it to set experience level, restrict scope, define output format and prevent the model from revealing scored answers.
- Placeholder text that will appear in the AI chat input box — optional learner-facing prompt text. Defaults to "Ask a question…" if left blank.
- Select Insert. The element is added to your instructions.
Existing Chat Assistant elements can be reopened and edited by double-clicking them in the visual editor.
Underlying syntax
The dialog writes an IDLX element into the instruction markdown. The basic form is:
ai-chat[Configuring lifecycle rules on an Azure Storage Account]
Parameters are added in braces after the Topic:
ai-chat[Configuring lifecycle rules on an Azure Storage Account]{"id":"storage-tutor", "prompt":"The learner is an intermediate cloud administrator. Explain the reasoning behind each option. Do not provide completed CLI commands.", "placeholder":"Ask about redundancy or lifecycle rules", "max_tokens":1000, "temperature":0.5}
Everything between the braces is JSON, so keys must be in double quotes, string values in double quotes, and numbers written in full — 0.5, not .5. A malformed value will stop the element rendering.
The System Prompt field in the dialog maps to the prompt parameter in the syntax, the same as it does for Menu Assistant and Dynamic Teaching. The dialog also writes a model_id recording the model you selected — that value is specific to your organization's configuration, so remove it before sharing a snippet with another organization. Code mode gives you access to parameters the dialog doesn't expose — id in particular, which is how you link conversations across pages.
| Parameter | Description |
|---|---|
prompt |
Instructions and constraints applied to every response. This is where the dialog's System Prompt content is written. Use it to seed context, set the learner's assumed level, or restrict what the model will answer. Default: null. |
id |
An identifier for the conversation. Two ai-chat elements in the same lab instance sharing an id are linked, so one conversation appears in both places. Default: auto-generated. |
placeholder |
Placeholder text in the input box before the learner interacts with it. Default: "Ask a question…". |
user_level |
Nudges the model towards simpler or more advanced phrasing. Values: default, simple, advanced. Default: default. |
max_tokens |
Maximum length of a response. Default: 1000. |
temperature |
0.0–1.0. Controls randomness. Lower values give more deterministic, repetitive responses; higher values give more varied ones. Default: 0.7. |
top_p |
0.0–1.0. Controls randomness by narrowing or widening token selection. Default: 0.95. |
frequency_penalty |
0.0–2.0. Reduces the chance of repeating a token in proportion to how often it has already appeared. Default: 0.5. |
presence_penalty |
0.0–2.0. Reduces the chance of repeating any token that has already appeared, which encourages new topics. Default: 0. |
stop |
Ends the response at a chosen point. Default: null. |
For guidance on writing the System Prompt, see Effective AI Prompting.
How the conversation behaves at runtime
- Responses are held to the Topic. If a learner asks something outside it, the model replies politely that the discussion must stay on topic.
- History accumulates within the lab instance. Each exchange is appended to the conversation, so later questions carry earlier context. If the learner saves and resumes, or closes and relaunches the lab, the history is still there.
- Nothing is retained beyond the lab instance. Conversation history exists only for the life of that instance. A new launch of the same lab starts a fresh conversation with no history from any previous session.
- Usage counts towards Max AI Tokens per Lab Instance. When the ceiling is reached, AI features stop responding and the message configured on the Lab Profile is displayed instead.
Worked examples
Concept tutor alongside a configuration task. The instructions walk the learner through creating a storage account. A conversation sits beside step 4, scoped to redundancy options, so learners who want to understand LRS versus GRS can ask without derailing the task:
ai-chat[Azure Storage redundancy options]{"prompt":"Explain trade-offs between redundancy options in plain terms. Keep responses under 150 words.", "placeholder":"Ask about redundancy trade-offs"}
One tutor carried through a multi-page lab. A five-page Kubernetes lab places the same element on pages 1, 3 and 5 using a shared id, so a learner who asked about pod scheduling on page 1 can follow up on page 5 without re-explaining:
ai-chat[Kubernetes scheduling and resource limits]{"id":"k8s-tutor"}
Coaching in a scored lab. In a validation lab, the System Prompt blocks direct answers so the conversation supports the learner without undermining the assessment:
ai-chat[Troubleshooting failed pod scheduling]{"prompt":"Guide the learner with questions and diagnostic suggestions. Never give the final command or the completed answer."}
A remediation tutor that only appears after a failed knowledge check. Rather than showing a conversation to everyone, hold it in a conditional section that reveals itself only when a learner gets an activity wrong. The learner who answered correctly moves on undistracted; the learner who struggled gets targeted support at the moment it's useful.
Set this up in three parts:
- On the activity, add an Activity Outcome with the event set to Answered (or Evaluated for an automated activity with On-Demand Evaluation), the condition set to Incorrect, and the action set to Set Variable — for example, setting
subnettingHelptotrue. - Wrap the conversation in a section keyed to that variable. Sections are hidden by default and appear only when a matching variable is set:
:::remediation(subnettingHelp=true)
### Need a hand with this one?
Work through it with the tutor below — it won't give you the answer, but it will help you find it.
ai-chat[Calculating subnet masks and usable host ranges]{"id":"subnetting-tutor", "prompt":"The learner has just answered a subnetting knowledge check incorrectly. Diagnose the misunderstanding by asking what they calculated and why. Explain the underlying method. Do not state the correct answer to any specific question.", "placeholder":"Tell me how you worked it out"}
:::
- Give the conversation a persistent
idif the same topic is checked again later in the lab, so a learner who fails twice continues the same thread rather than starting over.
The System Prompt is doing the important work here. Because the tutor is triggered by a wrong answer, it should diagnose rather than correct — telling the learner what they got wrong teaches far less than working out why they got there, and in a scored lab handing over the answer defeats the assessment entirely.
Next Steps
Before publishing a lab that uses Chat Assistant, set the AI token ceiling and the message learners see when it's reached. Both are configured on the lab's Lab Profile under Max AI Tokens per Lab Instance. Labs that rely heavily on conversation consume tokens quickly, so this step decides whether learners hit a wall mid-thread.
Related Topics
- Menu Assistant — the structured alternative to open conversation, with Teach, Show, Quiz and Resources options.
- Dynamic Teaching — content generated at launch, for when it should be there before the learner asks.
- Practice Assistant — for learner-generated hands-on scenarios rather than discussion.
- Skillable AI — how Chat Assistant fits alongside the rest of the suite, and the difference between Skillable pre-integrated and BYO models.
- Instructions Editor — the full authoring surface, including code mode for editing Chat Assistant parameters directly.
- Activity Outcomes — how to set a variable based on a correct or incorrect activity result, which is what drives the remediation use case above.
- Variably Display Instructions — section syntax and the other ways to set and consume lab variables.
- Effective AI Prompting — principles for writing System Prompts that produce consistent responses.



