Skip to main content
The Topics tab: a topic map of what users ask the agent, each bubble sized by traffic share, with per-topic sentiment and issue-type breakdowns and the Topics classification toggle with its sampling rate at the top.

Find out what people are talking about.

Monitor tells you when your agent fails; Topics tells you what people actually ask it. When enabled, an LLM classifier labels each monitored trace, and the results surface as Overview’s Topic map card and the dashboard’s own Topics tab - the fastest way to see that 40% of traffic is about one thing your prompt barely covers.

What Topics records

Each classified trace gets three labels:
  • Intent (wire field intent) - a short free-text label for what the user was trying to do.
  • Sentiment - positive / neutral / negative.
  • Issue type - none / refusal / hallucination / off_topic / incomplete / other.
An embedding is also stored for the map view - the embedding step needs OPENAI_API_KEY, and classification still works without it (the map just has no points).

Turning it on

Topics is off by default (every classification is an LLM call against your key). Turn it on with the Topics classification switch at the top of the Topics page - a single project-wide toggle, applied instantly - and pick the classification rate next to it (“Classifies X% of traffic”). Classification is per trace, not per session, since a topic describes an individual request. One number to check before enabling: the sample rate defaults to 1.0 - 100% of traffic classified, at one LLM call per trace, the moment the toggle goes on. Dial it down on busy agents so judge spend stays proportional to volume.

Label stability

Free-text intents could fragment (“reset password”, “password reset”, “resetting my password”). To keep them stable, the classifier is shown the 30 most common intents from the last 30 days and instructed to reuse an existing label verbatim when one fits - a new label is coined only when none of them do.

The map

The Topics Map view is a UMAP projection of the stored embeddings (up to 300 points, most recent first), each classified trace positioned by semantic similarity and grouped by its intent label. It needs at least 10 classified traces with embeddings; below that the view says there is not enough data yet rather than drawing a layout out of noise. It is a fixed taxonomy rendered spatially - intent as free text plus the small sentiment/issue enums - not unsupervised clustering.

From the SDK