В RAG модель видит только первые k найденных пунктов. Если нужного пункта среди них нет, хорошего ответа не будет, как ни старайся с промптом. Recall@k меряет ровно это и не требует никакой LLM: только разметку, какие пункты правильные.
01 · формула один вопрос
Recall@k = нужных в топ-k / всего нужных
вопрос ›
02 · все 14 вопросов места 1–10
Клетка — место в выдаче, цветная — там стоит правильный пункт. Вертикальная граница — текущее k: всё правее модель не увидит. У вопросов с несколькими правильными пунктами (например, «кто может участвовать» — 4 пункта) Recall@1 не может быть больше 1/4.
03 · кривая по k среднее по 14 вопросам
04 · таблица Recall@k и MRR
MRR — средняя обратная позиция первого правильного пункта: 1 — правильный всегда первый, 0.5 — в среднем второй. Recall@k отвечает «попал ли нужный в контекст», MRR — «насколько высоко». Для RAG важнее первое: модель читает все k пунктов.
Всё считается в браузере: BM25, косинусы на эмбеддингах all-MiniLM-L6-v2 (посчитаны заранее), слияние RRF и метрики. Правильные пункты для 14 вопросов я разметил вручную ещё для страницы hybrid search, до запуска поиска. 14 вопросов — маленькая выборка: разница в один вопрос двигает метрику на 7%.