Area: mobieusAI (audit p11) · Surface: mobieusAI Q&A retrieval (AssistantAI::retrieve) · Dimension: competitor-gap · Severity: major
Circle, Intercom Fin, and Zendesk all ground their AI on vector/semantic retrieval over full article + post bodies, so a question phrased differently from the source still finds it. mobieusAI matches keywords against titles only. A member asking 'how do I get my money back' will not surface a wiki page titled 'Refund policy' unless the words overlap, and the page body is never searched at all for knowledge/threads. When retrieval returns empty the assistant gives up with 'The sources I can read don't cover that yet' (AssistantAI.php:83) — a false negative driven by lexical, not semantic, miss.
Evidence
platform/src/Services/AI/AssistantAI.php:15-16 docblock states it outright: 'Pragmatic v1: retrieval is MariaDB FULLTEXT + LIKE — no vector embeddings, no separate index.' retrieveKnowledge() (AssistantAI.php:234-244) matches `MATCH(p.title) AGAINST (:q IN NATURAL LANGUAGE MODE) OR p.title LIKE :likeq` — and critically only matches on `p.title`, not the page body. retrieveForumThreads() (AssistantAI.php:262-273) likewise matches only `t.title`. A grep for `embedding|vector|cosine|pgvector` across src/Services returns only the comment lines disclaiming them.
Suggested fix. Add a semantic layer: store embeddings for knowledge_pages bodies and forum first-posts (own-the-stack: a local embedding model or Anthropic-adjacent provider, then a MariaDB vector column or a lightweight ANN index), and union semantic hits with the existing FULLTEXT hits. At minimum, extend the FULLTEXT MATCH to cover bodies, not just titles, as a cheap interim win.
Filed by the automated tenant-app audit and adversarially evidence-verified. Status: verified. Open — not yet actioned.
Patrick Bass
@mobieus