AI Engineering · Self-initiated · Ryvo Labs
Ryva — a grounded RAG chatbot that filters before it generates
Site visitors get exact role answers, not LLM guesses
0+
Open roles indexed and answerable
0.0
Model temperature, tuned for factual recall
~1 KB
Tokens injected per turn for relevant-roles context
Why we built it
The problem we wanted to solve.
We wanted a chatbot for ryvosolutions.com that could answer detailed questions about every open role, every service line and every industry — without hallucinating job locations, salaries or work-authorization rules. The naive approach (dump everything into the system prompt and hope) drifts as the role count grows. We wanted a pattern that scales past 50 roles without losing accuracy.
How we built it
The approach, step by step.
- A tiny TypeScript intent classifier on each turn — detects city, state, IT vs Non-IT, remote vs onsite and ~60 topic keywords from the user's last message
- A deterministic filter that narrows the role corpus to only matching openings BEFORE the LLM is called
- Per-turn system-prompt injection — the model sees the filtered subset, not all 20+ roles
- Worked output examples in the prompt plus temperature 0.2 for factual reliability over creativity
- A custom markdown renderer that nests indented bullets under numbered items so role lists actually look like role lists
Letting code do the retrieval and the LLM only do the prose is the single change that took accuracy from "mostly right" to "actually trustworthy". Worth more than any prompt tweak we tried.
— Build notes
More builds