Dev.to
7/18/2026

Retrieval-Augmented Self-Recall — Part 5: The Gap Threshold That Didn't Transfer
Short summary
Part 5 of a RAG self-recall series reveals that a hardcoded cosine similarity threshold (0.50) for abstention silently fails when you swap embedding models. With bge-small, unanswerable queries scored above 0.50, so the guard never fired — FCR hit 1.00. The fix: calibrate the threshold per embedder against a small labeled set (~20 queries). This trap generalizes to semantic caching, dedup detection, and any system that thresholds similarity scores.
- •Hardcoded cosine threshold (0.50) silently broke when switching from voyage-3 to bge-small — every unanswerable query was confidently answered
- •Each embedding model has its own vector geometry; a threshold that works for one is meaningless for another
- •Fix: calibrate abstention threshold per embedder against ~20 labeled queries; applies to semantic caching, dedup, and relevance filtering too
Generated with AI, which can make mistakes.
Is this a good recommendation for you?



