Prerequisites
Before running evaluations, make sure you have the following in place:-
Rasa Pro installed with the
rasa toolscomponent enabled. -
The
rasa-simulating-conversationsagent skill installed. Runrasa tools initin your project root to install it alongside other skills — no extra steps needed. -
To use a natural language interface for generating scenarios and running evaluations, you need an IDE agent (such as GitHub Copilot, Cursor, or any MCP-compatible AI agent) connected to the
rasa tools runFastMCP server. For more details, refer to the documentation on the Rasa MCP Tools- This skill has been most extensively tested with Claude Code (Sonnet 4.6) and Cursor with Composer 2.5. Either is a good starting point if you are unsure which to use.
-
The
restandinspectorchannel configured in yourcredentials.yml. -
If you want to inspect simulation results in the Inspector, start your server with the
--inspectflag:
Quick Start
Once the skill is installed and your server is running, type a prompt into your AI coding assistant (such as GitHub Copilot, Cursor, or any MCP-compatible agent). You can generate a single scenario:- Check whether
eval/conftest.ymlexists in your project. If it doesn’t, it creates a starter template and pauses for you to fill in your LLM provider details. - Read your flow definition to understand available slots, actions, and branching logic.
- Write one or more scenario YAMLs to
eval/scenarios/. - Call
validate_scenarioto check each scenario file for syntax and domain errors before running. - Call
evaluate_agentto run the simulation and evaluation and return a pass/fail summary with a link to each result file.
Writing Scenarios
Scenarios live ineval/scenarios/ as individual YAML files. Each scenario describes who the simulated user is, how the conversation should unfold, and what success looks like.
Generating Scenarios with the Agent
Instead of writing scenarios by hand, ask the agent to generate them. The skill reads your flow definition and applies evaluation best practices to produce grounded, useful scenarios. Minimal — generates a first batch from the flow definition alone:eval/scenarios/, you can edit them manually before running. Use this to refine criteria, adjust assertions, or add edge cases.
Full Scenario Reference
eval/scenarios/order_delay.yaml
Field Reference
simulation_context
A free-form natural language description of who the simulated user is and what the conversation should cover. The LLM uses this to generate realistic, consistent user turns across the whole conversation.
You can include any combination of:
- User behavior — emotional state or interaction style (e.g. impatient, cooperative, vague)
- Conversational intent — what the user wants to accomplish and how the conversation should unfold
- Contextual facts — account state, order details, or any background the user brings to the conversation
setup.initial_slots
Slot values injected into the conversation before the first user turn. Use this to pre-authenticate users, pre-fill context, or skip onboarding steps that are out of scope for the scenario being tested.
Slot names must exist in your domain with compatible types — the validate_scenario tool checks this before any simulation runs.
goals.criteria
A list of natural language statements describing what a successful conversation looks like. The LLM judge evaluates each criterion independently after the conversation ends and produces a pass/fail score with a written rationale.
Use criteria for outcomes that require judgment: goal achievement, tone, empathy, or appropriate handling of edge cases.
If you omit criteria, the run still produces a full transcript and assertion results — no LLM judgment is applied to criteria.
goals.assertions
Deterministic, binary checks run against the conversation’s event history. These match the assertion types supported in E2E tests with the addition of a new one (sequencing):
Configuring Evaluations
Theeval/conftest.yml file controls which LLM models power the simulation and evaluation steps. Create it at the root of your project:
eval/conftest.yml
simulation.llm model drives the simulated user turns. The evaluation.llm model acts as the judge, scoring each conversation against your quality criteria and computing quality metrics. Configure them independently — a smaller, cheaper model works well for simulation while a more capable model is recommended for judging.
Overriding Evaluation Prompts
Three built-in prompt templates can be overridden: two for the LLM judge (one for scoring your quality criteria, one for computing quality metrics) and one that controls how the simulated user behaves during a conversation. Override any of them if you have domain-specific requirements:eval/conftest.yml
MCP Tools
The evaluation feature exposes two MCP tools, both registered on therasa tools run FastMCP server.
validate_scenario
Validates a scenario YAML file before running any simulation. The agent skill calls this automatically after generating a scenario, and you can invoke it directly to check a scenario you’ve written or edited by hand.
It checks:
- YAML syntax and structure
- All assertion types are valid
- Slots referenced in
initial_slotsand assertion slot checks exist in your domain with compatible types - All validation errors are reported together, not one at a time
evaluate_agent
Runs the simulation and evaluation loop for a given scenario. It:
- Loads
eval/conftest.ymland the scenario YAML - Injects
initial_slotsinto a freshsim-<uuid>conversation - Starts the conversation with
/session_start. When the agent greets on session start, the transcript records that greeting as a leading bot-only turn before the first simulated user turn. - Runs an LLM-simulated multi-turn conversation against your running Rasa server over
POST /webhooks/rest/webhook?stream=true. If the server returns a classic JSON-array response body on that streaming request,evaluate_agentparses it in place. It does not re-POST the unary webhook. - Fetches the tracker and runs deterministic assertions against the event history
- Passes the transcript to the LLM judge, which scores criteria and computes quality metrics
- Writes a result file and updates the experiment summary
Running Evaluations
Use theevaluate_agent MCP tool by asking your IDE agent:
Reading Results
Results are written toeval/results/<timestamp>/ and preserved across runs:
run_N.txt— the human-readable report described in Result File.run_N.json— the machine-readable twin of the same run, with keyslatency,eval_passed,criteria, andtask_completion, plus assertions and scale metrics when present. Read this file when you want to script over results or feed them into another tool.
Result File
Eachrun_N.txt contains the full evaluation output for one simulated conversation:
ttft_ms) is populated only when the server responded on the streaming path. Otherwise the section reports turn latency only. Latency is reported for visibility and does not affect the run’s pass/fail result.
When your agent greets on session start, the transcript begins with one or more agent: lines and no leading blank user: line. That is the recorded welcome turn, not a missing simulator prompt.
Summary File
Each experiment folder contains asummary.txt with a summary of scenarios run, overall pass/fail counts across all scenarios and runs, total time, and a list of scenarios that need attention when any runs failed.
Inspecting a Simulated Conversation
Every result file includes an Inspector URL. Open it in your browser to step through the conversation turn by turn, inspect slot values and tracker events, and resume from a specific turn to test a fix without replaying from scratch. Simulated conversations use asim- prefix on the sender ID (e.g. sim-f3a1b2c4), so they are clearly distinguished from real user conversations.
Evaluations vs. E2E Tests
Both tools test your agent, but they serve different purposes. Use whichever fits the flow you’re testing — or both in parallel.
Evaluations are not yet suitable for blocking CI pipelines. Keep your E2E tests in CI for now and use evaluations in your local build loop.