Nearly every project I picked up this year had an LLM wired somewhere into the customer lifecycle, usually under the heading of automating engagement. The emails read fine, but the logic underneath them is usually a wreck. Most of the advice going around is about making the copy sound fluent, which is the wrong thing to tune, because AI customer journeys require structural metrics before tone counts for anything.
After 14 years of debugging checkout flows and race conditions, I have stopped caring how empathetic a message sounds. A “first-time buyer” coupon that lands two days after someone’s third order is broken no matter how warm the wording is. That is a structural failure, and if nothing in your stack measures how the AI moves a user through a defined taxonomy, you are shipping noise.
Why standard LLM metrics fail your business
Developers reach for benchmarks first, and for customer journeys the usual ones do not help. Perplexity tells you how surprised a model was by a token. BLEU compares output against a reference text. A real customer journey has no single correct reference to compare against, because the next message depends on what the customer just did.
Hand the job to an LLM-as-a-judge and you get the same blind spot back: it grades the prose, not the progression. What I want is a deterministic score that answers whether the journey went anywhere. That is what the CDP framework is for.
The CDP framework: continuity, deepening, and progression
The fix starts by mapping journey messages onto a taxonomic tree, with stages like motivation, purchase, delivery, and loyalty. Once that structure exists, you can calculate three things:
- Continuity: Does message B follow from the context of message A, or does it jump from a how-to-use-your-product note straight back into a sales pitch?
- Deepening: Does the content get more specific as the customer goes further in? Someone at the ownership stage should be getting real maintenance detail rather than a second “thanks for buying” note.
- Progression: Is the customer moving forward? Once the paperwork is signed, the sequence should be talking about delivery logistics instead of booking another test drive.
None of this stays theoretical for long. In my recent WordPress AI dev updates I have been working through how semantic embeddings let you calculate these scores deterministically.
The technical gotcha: mapping the taxonomy
There is no clever prompt involved. You embed your journey stages (the anchors) and your generated messages into the same vector space, then use cosine similarity to find the closest node for each message. Plot the sequence. If the path zigzags across the taxonomy tree, the model is inventing the journey logic instead of following it.
<?php
/**
* A simple conceptual check for journey progression in WordPress.
* This is how you might store taxonomy-mapped stages as metadata.
*/
function bbioon_check_journey_progression( $user_id, $new_message_stage_id ) {
$current_stage = get_user_meta( $user_id, 'bbioon_current_journey_stage', true );
// Progression check: Stage IDs should generally increment
if ( (int) $new_message_stage_id < (int) $current_stage ) {
// We are backtracking. This might be a structural failure.
error_log( 'Potential journey regression for User: ' . $user_id );
return false;
}
update_user_meta( $user_id, 'bbioon_current_journey_stage', $new_message_stage_id );
return true;
}
Plenty of legacy codebases already encode these rules, buried in long if/else chains. Switching to an LLM does not mean deleting them. It means the LLM writes the content and a structural metric validates it before anything reaches production.
If wiring structural metrics into your journey automation is eating your dev hours, I can take it off your plate. I have been working with WordPress since the 4.x days.
Where to start
Tone is the last thing to worry about. If the structure underneath is a mess, no amount of polish in the copy will move your conversion rate. Build the taxonomic reference for your content first, then score against it, either with something like OpenAI Evals or with your own deterministic CDP scoring. It is boring pipeline work, and it is a lot cheaper than apologizing to customers who got the wrong message at the wrong time.