Skip to content

Elicitation

Elicitation is how the LLM gathers structured information from the user during a conversation. The LLM can invoke tools that render questions, suggested answers (radio buttons), and an optional custom text field, then continue once you submit.

To enable elicitation on a tool, set supports_elicitation: true and define elicitation_config with the fields you want the UI to show (for example radio buttons for choices and a text field for “none of the above”).


Example tool with elicitation

The following ask_user_question tool is a example that supports elicitation. Radio options come from the LLM’s options parameter; the user can pick one option or type a custom answer.

- name: ask_user_question
  type: template
  templateType: jinja
  template: '{% if user_choice %}{{ user_choice }}{% elif user_answer %}{{ user_answer }}{% endif %}'
  description: >
    Ask the user a clear, specific question. The LLM should generate the most likely
    user answers and pass them as 'options' in a JSON list.

    Each option should be a complete, descriptive sentence or phrase that directly
    answers the question, not a single-word label. The options should be specific to
    the question being asked and should represent realistic choices the user might
    select.

    These options are shown as radio buttons. If none of the suggested options match,
    the user can type a custom answer in the text field.
  supports_elicitation: true
  elicitation_config:
    message:
      template: "{{ question }}"
      template_type: jinja
    timeout: 200
    fields:
      - field_name: user_choice
        field_type: string
        control_type: RADIO_BUTTON
        description:
          template: "Suggested answers (select one if it matches):"
          template_type: jinja
        enum_values:
          template: "{{ options | tojson }}"
          template_type: jinja
        required: false

      - field_name: user_answer
        field_type: string
        control_type: TEXT_FIELD
        description: "None of the above? Type your own answer here"
        required: false

  parameters:
    - name: question
      description: >
        The question to ask the user. Be specific and clear.
        Example: "What is the severity level of this alert?"
    - name: options
      description: >
        LLM's best guess at likely answer options for the given question, as a JSON list.
        Each option should be a descriptive sentence or phrase instead of a single-word label.
        Generate options based on the context and intent of the question.
        Always provide this even if unsure — give your best guess.

        Example:
        [
          "This alert appears to have minimal impact and can be monitored.",
          "This issue may affect some functionality but is not business critical.",
          "This alert is causing significant impact and should be investigated soon.",
          "This is a critical issue requiring immediate attention and escalation."
        ]
    - name: user_choice
      description: The descriptive option the user selected from the radio buttons — WILL BE ELICITED
    - name: user_answer
      description: >
        A custom answer typed by the user if none of the suggested options matched — WILL BE ELICITED
Setting Purpose
supports_elicitation Turns on the elicitation UI for this tool.
elicitation_config.message The question text shown to the user (Jinja template).
fields / RADIO_BUTTON Renders suggested answers from options.
fields / TEXT_FIELD Lets the user type a custom answer when no radio option fits.
user_choice / user_answer parameters Filled by the UI on submit; the template uses whichever is set.

How elicitation works

Elicitation supports a back-and-forth between you and the LLM: the model may run other tools, then pause on an elicitation tool until you answer, then continue with the next question or step.

A typical flow when you want to create a new agent:

  1. You send a prompt such as: “Hi, I’m looking to build an agent. Can you help me get started?”
  2. The LLM runs tool calls (for example discovery or planning tools).
  3. It invokes an elicitation tool such as ask_user_question with a question and options generated for your context.
  4. You select a suggested answer or type your own text and click Submit.
  5. The conversation records your response under the tool call, and the LLM proceeds—often with another elicitation question until it has enough detail.

The sections below follow that flow using an agent-creation example.


1. First question: tool, system, or domain

After initial tool calls, the assistant asks which tool, system, or domain the agent is for. Suggested answers might include IT Operations & AIOps, Network Management, Cloud Infrastructure Monitoring, or Security & Threat Detection.

If your answer is not listed, use "None of the above? Type your own answer here"—for example ScienceLogic—then click Submit.

Elicitation UI: domain question with radio options and custom answer ScienceLogic


2. Your answer in the tool call

After you submit, the conversation shows the ask_user_question tool call with your inputs. The green Parameters Selected banner summarizes what was captured; expanding the tool shows user_answer (or user_choice if you picked a radio option) in the arguments.

Tool call ask_user_question with Parameters Selected and user_answer ScienceLogic


3. Next question:

The LLM may run more tools, then ask a follow-up elicitation question—for example where ScienceLogic data lives or how the agent should access it (REST API, pre-configured MCP, database, or “I’m not sure”).

Again, you can pick a suggested option or enter a custom answer such as “It is in my SL instance”, then click Submit.

Elicitation UI: ScienceLogic data location question with custom answer


4. Follow-up answers and further questions

Each submit produces another tool call with the elicitation parameters filled in. The LLM can continue with additional questions (for example primary use case, documentation availability, or whether to check existing MCP tools) until it has what it needs to proceed.

Tool call with user_answer for ScienceLogic instance location


5. Short recap

Topic Takeaway
Purpose Extract structured information from the user during a conversation.
Enable on a tool supports_elicitation: true plus elicitation_config with fields.
UI controls RADIO_BUTTON for suggested options; TEXT_FIELD for custom answers.
LLM role Supplies question and options; elicited params are user_choice and/or user_answer.
Flow Tool calls → elicitation form → submit → repeat until context is complete.