# Компромисс качества и задержки в RAG **Автор:** Salimov Shaliko Kamalovich, группа R4210
**Генератор:** Sphinx 8 + MyST Retrieval-Augmented Generation (RAG) дополняет языковую модель найденными фрагментами внешней базы знаний {cite:p}`lewis2020rag`. На этой странице проверяется, как число переданных фрагментов $k$ связано с полнотой контекста, фактической верностью ответа и задержкой. ```{raw} html
Важно: это детерминированная синтетическая демонстрация структуры эксперимента, а не результат тестирования конкретной LLM или поискового индекса.
``` (sec-method)= ## Методика Для каждого $k \in \{1,2,4,6,8,10,12\}$ моделируются восемь повторов. Полнота контекста растёт с увеличением $k$, тогда как лишний контекст постепенно снижает фактическую верность и увеличивает задержку. Такое поведение согласуется с наблюдением, что модель использует длинный контекст неравномерно {cite:p}`liu2024lost`. Интегральная полезность определяется уравнением {eq}`eq-rag-score`: ```{math} :label: eq-rag-score S(k) = 0.50R(k) + 0.35F(k) - 0.15\frac{L(k)}{\max_j L(j)}, ``` где $R$ — полнота контекста, $F$ — фактическая верность, а $L$ — задержка. Веса заданы заранее и не подбирались под результат.[^weights] ::::{grid} 1 1 2 2 :::{grid-item} ### Устройство конвейера Запрос преобразуется в top-$k$ фрагментов, которые образуют контекст для LLM. Параметр $k$ одновременно управляет объёмом доступных сведений и количеством шума. Дальнейшие результаты интерпретируются по правилам из раздела {ref}`sec-results`. ::: :::{grid-item} ```{image} _static/rag_pipeline.svg :alt: Схема RAG-конвейера :width: 100% ``` ::: :::: (sec-results)= ## Результаты ```{raw} html
Таблица 1. Средние показатели синтетического RAG-эксперимента
РежимkПолнотаВерностьЗадержка, сS(k)
Малый контекст10,5660,8880,5250,556
20,6560,8740,6220,588
Сбалансированный40,7570,8410,8670,610
60,8120,8141,1130,610
Большой контекст80,8420,7901,4080,595
100,8620,7321,7140,563
120,8740,6792,0650,525
``` Максимум по неокруглённым данным достигается при **$k=6$**. После этой точки небольшой прирост полноты не компенсирует снижение верности и рост задержки. ```{figure} _static/rag_quality_static.png :name: fig-rag-quality :alt: Статический график качества и задержки RAG :width: 100% Статический график Matplotlib. Качество насыщается, а задержка продолжает расти. ``` На {numref}`fig-rag-quality` виден общий тренд. Интерактивная версия ниже позволяет сопоставить точные значения наведением курсора. ```{raw} html ``` ## Воспроизводимый расчёт ```{code-block} python :linenos: :caption: Расчёт интегральной полезности для одной строки def rag_utility(recall: float, faithfulness: float, latency: float, max_latency: float) -> float: """Combine quality gains with a normalized latency penalty.""" return ( 0.50 * recall + 0.35 * faithfulness - 0.15 * latency / max_latency ) ``` Полный генератор данных использует фиксированное зерно `4210`, сохраняет исходные повторы и агрегаты в CSV и создаёт оба графика из одной таблицы. Поэтому отличие двух страниц определяется генератором сайта, а не данными. ## Вывод Для заданной модели полезности разумный компромисс достигается при $k=6$. Увеличивать контекст автоматически невыгодно: полнота продолжает расти, но ответ становится медленнее и менее устойчив к нерелевантным фрагментам. Это вывод только о синтетическом сценарии; для практической RAG-системы функции из раздела {ref}`sec-method` нужно заменить измерениями на фиксированном датасете. [^weights]: Другие веса отражают другую прикладную задачу и могут изменить оптимальное значение $k$. ## Литература ```{bibliography} ```