PLATE 05
A grounded conversational assistant constrained to regulated wording, handing guests through to a booking engine

PLATE 05

Prince of Whales

ROLE
Sole developer
YEAR
2023
STACK
PHP · JavaScript · MySQL · OpenAI
LINK
princeofwhales.com
AWARD
Summit Creative Award, Bronze, 2023
InterfaceTheme, ACF blocksConversationCustom plugin,OpenAIGroundingVector search overvetted sources,site context atloadHandoffZaui checkout, cartstate preservedPlatformWordPress, PHP,MySQL

BRIEF

A conversational assistant on a whale-watching operator's site. It answers guest questions about tours and wildlife in language the operator supplied, reads the site's current tours and promotions when it loads, and passes the guest through to the booking engine with their selection intact. It is for a visitor choosing a tour, on a subject where how you describe the wildlife is regulated.

DECISION LOG

  1. Compliance at the input, not the output

    Transport Canada regulates how wildlife interaction may be described. A generative model will paraphrase its way out of compliance without ever appearing to.

    The obvious approach is to check the output. The approach taken was to remove the model's licence to invent in the first place: the client supplied the exact language for regulated topics, and that language became the source of truth the assistant retrieves from and reproduces. Compliance stopped being a filtering problem and became an adherence problem.

    Adherence then turned out to be an engineering variable rather than a model-capability one. Getting the assistant to follow supplied wording reliably took iteration on how the instructions were structured, and the structure was tested as XML, as JSON, and as Markdown. XML proved the most reliable in controlled tests. The format the instructions arrive in measurably changes how well they are followed — which is not obvious, and is the kind of thing you only learn by running the comparison rather than assuming the model does not care.

  2. Load the site, not just the knowledge base

    When the assistant loads, a script pulls current tour information from the WordPress database. Tours and promotions are read at session start rather than queried per message.

    The failure being designed out is not staleness in the abstract — it is the assistant contradicting the page the guest is looking at. A visitor reading a promotion on screen and being told something different in the chat window has been given a reason to distrust both. Front-loading binds the assistant to the site's current state, so the two always agree.

  3. A link, not a handoff

    When the assistant cannot help, or a human is asked for, it offers the contact form.

    Deliberately unglamorous. There is no live-agent queue, no ticket creation, no routing. Knowing where an automated channel ends matters more than making the ending sophisticated, and a link to a form that a person actually reads is more reliable than an escalation path nobody staffs.

  4. Raw logs, no dashboard

    Anonymous conversations are written to a text log, downloadable from the WordPress admin. No analytics database, no reporting interface.

    The client gets flexible raw data to use however their own workflows require. Building a dashboard would have meant deciding in advance which questions they were allowed to ask of their own data, and they were better placed to answer that than I was.

  5. The prototype was the pitch

    This was 2023, and the stakeholders did not initially understand what was being proposed or why it was worth doing.

    No amount of explanation moved that. A working prototype did, immediately. The delivery lesson is the same one as the engineering one on this plate: for something people have no reference point for, the argument is the artefact.

DETAIL PLATES

Grounding
The tour records the assistant reads when it loads. Season, duration and price are the copy the operator supplied, and an answer about a tour is held to what this page says.
DETAIL A · GroundingThe tour records the assistant reads when it loads. Season, duration and price are the copy the operator supplied, and an answer about a tour is held to what this page says.
Handoff
A tour at the edge of the automated channel. The site carries departure point, season and duration; the booking control is where it ends and Zaui takes over.
DETAIL B · HandoffA tour at the edge of the automated channel. The site carries departure point, season and duration; the booking control is where it ends and Zaui takes over.

CONSTRAINT

Wrong wording here is not a quality problem, it is a regulatory one.

That constraint removed paraphrase as an option, and with it the usual reason to reach for a generative model at all. What remained was narrower and harder: an assistant that must sound conversational while reproducing supplied language faithfully, grounded in sources it may not depart from, bounded to a subject it may not leave, and honest enough to hand the guest to a human when it reaches the edge. The interesting engineering was in the constraint, not in the generation.

DELIBERATE BOUNDARIES

  • Whales and whale-watching tours only

    The assistant will not discuss anything else, and does not try to be generally helpful.

  • No live human escalation

    The channel ends at the contact form, by design.

Selected client platformsPLATE 06