Как это работает
Это параметр поиска, а не генерации: он определяет, сколько кандидатов увидит модель. Для составных вопросов, где факты лежат в разных чанках, нужно большее k.
Значение подбирают по метрикам поиска: смотрят, как растёт hit rate@k и recall при увеличении k и как при этом падает precision. Дополнительный эффект: модели лучше используют информацию в начале и конце длинного контекста, чем в середине, поэтому порядок чанков тоже влияет на ответ [1].
Пример
1chunks = retrieve(question, k=5) # top-k поиска в RAG
2# не путать: top_k=40 в параметрах генерации — это семплирование моделиКак применять в тестировании ИИ
Измеряйте hit rate@k и precision@k для нескольких значений k и выбирайте компромисс между полнотой и шумом. Отдельно проверьте, что ответ не зависит от позиции нужного чанка среди отвлекающих.
Типичные ошибки
- Путать top-k в поиске и top-k в семплировании: параметры влияют на разные шаги.
- Увеличивать k «на всякий случай»: растут цена и задержка, а качество может упасть.
- Не проверять составные вопросы, которым нужно несколько чанков.
Частые вопросы
Как выбрать значение top-k в RAG?
Измерьте hit rate, recall и precision для нескольких значений k на своём наборе вопросов и выберите компромисс между полнотой и шумом. Для составных вопросов нужно большее k.
Чем top-k в RAG отличается от top-k в параметрах генерации?
Top-k в RAG определяет, сколько фрагментов поиск подставит в промпт. Top-k в семплировании ограничивает, из скольких самых вероятных токенов модель выбирает следующий. Это разные этапы конвейера.
Источники
- Lost in the Middle: How Language Models Use Long Contexts — Liu N. F., Lin K., Hewitt J. и др., TACL, 2023 (arXiv:2307.03172)