PLATE 05

Prince of Whales

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

ROLE
Sole developer
YEAR
2023
STACK
PHP · JavaScript · MySQL · OpenAI
AWARD
Summit Creative Award, Bronze, 2023
Grounding
An orca surfaces beside a wooded coastline and lighthouse.
DETAIL grounding · GroundingCoastal context for a carefully bounded assistant. Photography from Prince of Whales.

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.

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. That is not obvious, and is the kind of thing you only learn by running the comparison rather than assuming the model does not care.

CONSTRAINT

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

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.

Handoff
Reconstructed Prince of Whales tour page with departure information and booking control.
DETAIL handoff · HandoffInterface reconstruction: tour information sits beside a booking control, where the guest continues to checkout.

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.

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.

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.

CONSEQUENCE

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.

NEXT PROJECT

Selected client platforms

Three client platforms where the engineering was integration and data work: scheduled synchronisation, feed normalisation and editorial tooling

Illustrated Tourism Richmond directory with four business listings and activity filters.