RAG system from scratch
Full pipeline: ingestion and normalization, chunking strategy chosen from the corpus’s real structure, embeddings, vector store, hybrid search with reranking, grounded generation and evaluation.
Retrieval-Augmented Generation connects a language model to your company’s real information. Done right, it answers with verifiable sources. Done wrong, it answers confidently about what it does not know.
Key takeaways
Operating track record
Three years operating the system in production — not one delivery and an exit.
The most frequent failure in RAG architectures, solved with structured metadata at ingestion.
The proposal arrives within 48 hours with fixed scope, price and date. If scope changes, it is quoted separately and approved first.
A language model knows everything except your company: not your prices, your inventory, your policies or an order’s status. RAG solves that by inverting the order: it searches your information first, then writes the answer using only what it found, and cites where it came from.
The idea is simple. The execution is everything. A mediocre RAG and a good one look identical in the demo and separate brutally by month three.
If any of these sound familiar, your problem is fixable and probably cheaper than you fear.
Full pipeline: ingestion and normalization, chunking strategy chosen from the corpus’s real structure, embeddings, vector store, hybrid search with reranking, grounded generation and evaluation.
Reference set built from real questions, retrieval and generation measured separately, and failures ranked by impact with their fix.
When the system exists but retrieves badly: query rewriting, metadata filtering, reranking, chunking strategy adjustment.
Reference set, retrieval and generation metrics, A/B testing between configurations and tracing. So your team can change things without breaking them.
| Dimension | Metric |
|---|---|
| Retrieval | recall@k |
| Retrieval | MRR |
| Retrieval | NDCG |
| Generation | Groundedness |
| Generation | Faithfulness |
| Generation | Answer relevance |
| Operations | Cost per query |
| Operations | p95 latency |
We work with RAGAS and LLM-as-judge alongside the classic retrieval metrics.
This is not theory. We operated a RAG system for three years over a knowledge base of product, points, promotions and policies, with high similarity between entities, serving more than two million users across ten countries.
The cross-entity contamination failure — number one on the list above — was solved there, with structured metadata at ingestion and pre-ranking filtering. It is the kind of problem that only appears once the system has been in production for months and the catalog has grown.
LLM applications with structured output and tool calling.
View serviceLangGraph orchestration, durable state and human approval on steps with consequences.
View serviceWith the evaluation set run before it ever reaches production.
View serviceThe system is already in production and answers badly. We measure it and determine what to fix.
View serviceRAG stands for Retrieval-Augmented Generation. Instead of asking the model to answer from memory, the system searches your information first, selects the relevant passages and asks the model to write using only those. ChatGPT on its own does not know your prices or policies: ask it and it answers generically or invents. With RAG the answer comes from your documentation and can be verified because it cites the source.
Almost always RAG, for a practical reason: your information changes. Fine-tuning teaches a model to speak a certain way, not to memorize updatable facts — when prices change you would have to retrain. RAG separates knowledge from the model, so updating means reindexing. Fine-tuning makes sense for tone, format or very specific domains, and sometimes both are combined. We tell you which applies on the first call.
There is no strict minimum, but below roughly twenty FAQs with information that barely changes, RAG is over-engineering: a subscription platform solves that more cheaply. RAG starts paying off when the corpus is large, changes often, has many similar entities, or when a wrong answer carries real cost.
PDF, Word, Excel, HTML, Markdown, plain text, web pages and databases. Also scanned documents through OCR. What takes work is not the format but the structure: tables, documents with many sections and catalogs with variants need different chunking strategies, and that gets decided by looking at your actual corpus, not by default.
Four things combined: grounding constraints in the system prompt, mandatory citation of the passage backing each claim, explicit refusal when search returns nothing relevant, and groundedness measurement over a reference set to catch when the system starts drifting from sources. None of the four is sufficient alone.
It depends on how fast your information changes. For catalogs and pricing we usually schedule daily or event-driven reindexing; for policies and documentation, weekly. What matters is that ingestion is reproducible and has alerts when a source has gone too long without refreshing, because the most common failure mode is not breaking: it is going stale without anyone noticing.
Only if you want it to. We can deploy on Azure OpenAI or Amazon Bedrock inside your own subscription with the vector store in your cloud, so information never leaves your perimeter. In any configuration we use enterprise plans where API data is not used for training, and we filter personal data before sending.
Model consumption plus the vector store. For a mid-market company it usually lands between USD 150 and 900 per month depending on query volume and corpus size. Model routing — a cheap one to classify and summarize, a capable one for the final answer — and context trimming exist precisely to keep that figure predictable as usage grows.
Tell us what you are building, or what stopped working. You leave the call with a concrete answer: it can be fixed, it can be built, or it isn't worth it.