Service AI Engineering

Customer-support chatbots that admit what they do not know.

We build chatbots that retrieve from your real docs, escalate to humans cleanly, and never invent answers. Your customers get help. Your team gets back the questions that actually need them.

Projects are scope-dependent. Free discovery call.
chat.example.com
chatbot/handler.ts ts
    
      
          
          // chatbot/handler.ts
        
          
          import { retrieve } from './rag';
        
          
          import { classifyIntent } from './intent';
        
          
          import { escalateToHuman } from './handoff';
        
          
           
        
          
          export async function handleMessage(msg: Message, conversation: Conversation) {
        
          
            const intent = await classifyIntent(msg);
        
          
           
        
          
            if (intent === 'refund' || intent === 'complaint') {
        
          
              return escalateToHuman(conversation, intent);
        
          
            }
        
          
           
        
          
            const docs = await retrieve(msg.content, { topK: 5, threshold: 0.7 });
        
          
           
        
          
            if (docs.length === 0) {
        
          
              return { reply: "I do not have a confident answer for that. Connecting you to a human now.", handoff: true };
        
          
            }
        
          
           
        
          
            return generateAnswer(msg, docs, conversation);
        
          
          }
        
    
  

Why this matters

Chatbots that confidently make things up cost you trust faster than they save you tickets.

A bot that answers wrong with confidence is worse than no bot at all. Customers who learn your bot lies stop trusting your brand. We build chatbots that retrieve from your real documentation, admit when they do not have a confident answer, and hand off to humans with the full context. Honest bots earn trust. Trusted bots get used.

What we build

A bot your customers will actually choose to use.

Real retrieval over your real docs. Clean escalation. Honest about its limits. Multi-channel from one core. The kind of bot that improves CSAT, not the kind that tanks it.

01

Retrieval over your real documentation

The bot answers from your actual docs, knowledge base, and product specs. Not from generic training data, not from vibes. If your docs say something, the bot says it. If they do not, the bot does not invent.

Hallucination rate falls below 2 percent on real queries.

02

Escalation that does not lose context

When the bot hits its limits, the handoff includes the full conversation, the intent classification, and the retrieved sources. Your human agent picks up where the bot left off, not from zero.

Customer repeat-the-question rate drops to near zero.

03

Admits what it does not know

No confident wrong answers. When retrieval fails or confidence drops, the bot says so and escalates. Your customers learn the bot is honest, which makes them trust it.

CSAT on bot interactions matches human-only baseline.

04

Multi-channel from one core

Same bot ships to website widget, Intercom, Crisp, Slack, WhatsApp, and SMS. One conversation logic, one source of truth, six channels. Your team maintains one thing.

New channel ships in under a week.

05

Cost ceiling per conversation

Per-conversation cost cap, per-tenant rate limits, prompt caching. Production cost typically under five cents per resolved conversation. No surprise bills at end of month.

Cost per resolved conversation under five cents.

06

Analytics that explain bot behavior

Per-intent resolution rate, escalation reasons, top unanswered questions, retrieval source attribution. Your support lead can see what the bot does and what to fix.

Weekly review takes 30 minutes, not 3 hours.

<2%

hallucination rate target across our production chatbot deployments

Measured continuously against a held-out evaluation set. Methodology public on request.

The retrieval layer

Answers grounded in your real documentation.

Embedding-based search across your knowledge base, with confidence thresholds and tenant filtering. The bot never answers from training data when your docs do not back it up.

rag/retrieve.ts ts
    
      
          
          // rag/retrieve.ts
        
          
          import { embed } from './embedder';
        
          
          import { vectordb } from './storage';
        
          
           
        
          
          export async function retrieve(query: string, opts: RetrieveOpts) {
        
          
            const embedding = await embed(query);
        
          
            const results = await vectordb.search({
        
          
              vector: embedding,
        
          
              topK: opts.topK,
        
          
              filter: { tenant: opts.tenant, doc_type: { $in: opts.allowedTypes } },
        
          
            });
        
          
           
        
          
            return results
        
          
              .filter((r) => r.score >= opts.threshold)
        
          
              .map((r) => ({
        
          
                content: r.metadata.content,
        
          
                source: r.metadata.url,
        
          
                title: r.metadata.title,
        
          
                lastUpdated: r.metadata.updated_at,
        
          
              }));
        
          
          }
        
    
  

Process

How a chatbot project runs.

01

Discovery

Two weeks. We audit your existing support volume, identify the questions worth automating, ingest your docs into the retrieval index, and design the escalation rules.

Fixed scope, fixed price.

02

Build

Three to five weeks. Bot ships behind a feature flag on a single channel first. Retrieval, escalation, and analytics from day one. Your support team can shadow real conversations.

Real conversations in week three.

03

Launch + tune

Two weeks. Canary rollout, weekly tuning sessions with your support lead, multi-channel rollout once the bar is hit. Handoff includes the maintenance runbook.

Your team owns the bot at the end.

Common questions

Frequently asked

  1. Will the bot replace our human support team?

    No, and we will warn you if you ask us to try. The bot handles the questions humans should not be answering for the hundredth time. Humans handle the questions that need judgment. Done right, your team grows into the higher-value work.

  2. How do you keep the bot from hallucinating?

    Retrieval-first architecture. The bot only answers from your real docs. When confidence drops or retrieval fails, the bot escalates instead of inventing. We measure hallucination rate continuously and target below 2 percent.

  3. Which channels can the bot ship to?

    Website widget, Intercom, Crisp, Zendesk, Help Scout, Freshdesk, Slack, WhatsApp Business, SMS via Twilio, Discord. We can ship to any channel that has a webhook or API. Same bot, same logic, every channel.

  4. How do you handle conversations in multiple languages?

    Claude handles 95+ languages natively. We test in the languages your customers actually speak and tune the retrieval source documents per language. The bot detects the language and responds in the same one.

  5. What about data privacy and PII?

    PII filtering before model calls, configurable data residency, conversation retention limits, no training opt-in. Your security team reviews the data flow before launch. We have shipped chatbots that pass HIPAA and GDPR review.

  6. What does it cost?

    Chatbot projects are scope-dependent for a single-channel bot with retrieval over your existing docs. Multi-channel bots with custom intent flows and analytics are scoped after discovery. Discovery call is free.

Ready to ship a bot your customers will trust?

Tell us what you want to build.

Discovery call is free. Fixed-price quote within 48 hours. NDA on request.