Measure whether users keep the answer

You can have an AI feature that's fast, cheap, stays on-topic, and passes its evals – but users still regenerate outputs consistently. Every regeneration is a user telling you the first answer wasn't good enough.

Typical monitoring won't show why because the call succeeded and the cost was normal, nothing errored.

When you monitor for this scenario, Fig. 1 is what that looks like.

new model

~2,100 answers a day shown and discarded – no error, no complaint

Answers shownAnswers accepted · 84% → 55%

Fig. 1Every answer arrived and monitoring looked normal, but two in five got thrown away.

How PostHog connects the two

The signal already exists in your product as a "regenerate" click or a copy button, but they probably aren't attached to the LLM call that produced the answer.

Every LLM event carries a $ai_trace_id. Put that same ID on your own events as a custom property, and each product event joins back to the generation behind it, along with its model, prompt version, and cost.

Which events to send

There are four moments that follow a generation worth tracking:

EventFires whenWhat it tells you
ShownThe answer reaches the userYour denominator – not every generation gets seen
AcceptedThe user copies, sends, applies, or keeps itThe answer did its job
RegeneratedThe user asks for another oneRejection, counted
EditedThe user changes it before using itClose, but not right

If you already have events for these moments, use them. If not, create new ones. The names of the events don't matter, just be sure to add the $ai_trace_id custom property to each one.

What the numbers tell you

With those events flowing, you can start answering valuable questions:

  • Is this surface working? Look at accepted ÷ shown, per feature. A rate that's fine on one surface and poor on another might signal a product problem, not necessarily a model one.
  • Which model wins on your work? Split acceptance by $ai_model. Benchmarks tell you which model wins on someone else's test set – this tells you which one wins on your users'. Ship the change behind a feature flag and read acceptance for each variant.
  • Wrong, or just unwanted? Read acceptance next to the eval pass rate from Score your AI's answers with evals. A high pass rate with low acceptance means the answers are correct and nobody wants them which is a different fix entirely.

Thumbs up and down interactions through user feedback adds an explicit rating on top, currently in beta. Acceptance costs nothing extra and doesn't ask the user to stop and rate anything.

Build it with PostHog AI

This prompt builds three things against your own data:

  • The funnel from generation to shown to accepted, joined on $ai_trace_id
  • That funnel broken down by model and feature
  • And a trend for how often people regenerate.

Rename the events to match yours before you send it:

Prompt for PostHog AI
Build me an AI outcome funnel in PostHog. Step 1 is the $ai_generation event, step 2 is my ai_suggestion_shown event, step 3 is my ai_suggestion_accepted event, all joined on the $ai_trace_id property. Break the conversion down by $ai_model and by the ai_product property, and add a second insight showing the rate of ai_suggestion_regenerated per trace over time. Then tell me which model has the best acceptance rate once volume is accounted for. If my project doesn't have these events yet, build the full funnel anyway and tell me how to instrument AI observability using the wizard or manual install.
Build this with PostHog AIOpens PostHog AI with the prompt ready. Rename the events to match your own.
Measure whether users keep the answerBuild this with PostHog AI