For a small, high-value knowledge base, I would not start with a complicated agent or fine-tuning. The best architecture is a grounded RAG support bot with aggressive retrieval precision and a strict “I don’t know” fallback.
My recommended setup
1. Clean and structure the knowledge base
- Break documents into small, self-contained answerable chunks, rather than blindly splitting every N tokens.
- Keep titles, product/version, category, and other metadata attached to each chunk.
- Remove duplicate, obsolete, and contradictory content.
- For a small KB, quality of the source material matters more than having a sophisticated vector database.
2. Use hybrid retrieval
Combine:
- Semantic/vector search for questions phrased differently from the documentation.
- Keyword/BM25 search for exact product names, error codes, SKUs, feature names, etc.
Hybrid search is particularly valuable because vector search can miss exact terminology while keyword search can miss semantic matches.
3. Rerank the candidates
Retrieve, say, the top 20–50 candidates, then rerank them and give only the best 3–8 passages to the LLM. A reranker evaluates the query against the actual text rather than relying solely on embedding similarity, which improves precision.
4. Make the LLM answer only from retrieved evidence
Your system prompt should essentially enforce:
Answer only from the supplied knowledge-base passages.
If the passages don't contain enough information to answer confidently, say you don't have enough information and escalate/ask for clarification.
This is crucial for support: a confident “I don't know” is preferable to a plausible hallucination.
5. Add a retrieval confidence threshold
Don't force an answer just because the search returned something. OpenAI's current File Search API, for example, supports both hybrid-search weighting and a relevance score_threshold, allowing you to trade recall for precision.
If you want the simplest implementation
I'd seriously consider OpenAI Responses API + File Search/vector stores rather than building the retrieval stack yourself. OpenAI's current retrieval infrastructure supports vector stores, configurable chunking, metadata attributes, hybrid search, ranking controls, and score thresholds.
A good initial architecture is:
User question
↓
Query normalization
↓
Hybrid retrieval
(vector + keyword)
↓
Retrieve ~20–50 candidates
↓
Rerank
↓
Keep top 3–8 passages
↓
LLM
↓
Grounded answer + citations
↓
If confidence is insufficient → "I don't know"
One important point
With limited data, don't assume you need a bigger model or fine-tuning. Retrieval quality is usually the bottleneck: if the correct passage never reaches the model, a better generator can't recover it.
I'd also build a tiny evaluation set—perhaps 50–200 real support questions with known answers—and measure Recall@K / retrieval accuracy and answer groundedness whenever you change chunking, embeddings, or ranking. That will tell you much more than subjective testing.
Bottom line: for your use case, I'd choose small, clean KB + hybrid retrieval + reranking + strict grounding + confidence threshold. It's likely to outperform a more elaborate AI-agent architecture while being cheaper, faster, and much easier to make reliable.