Оценка RAG (RAGAS, Recall@K)
Измеряйте достоверность, релевантность ответа, точность контекста и recall@K, чтобы понимать, улучшают ли изменения систему.
«Оценка RAG (RAGAS, Recall@K)» — бесплатный урок AI Agents на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Agents, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Agents содержит 4 уроков всего.
Нельзя улучшить то, что нельзя измерить
У RAG много параметров: размер фрагмента, top-K, модель повторного ранжирования, запрос и модель. Без метрик любые изменения превращаются в догадки.
Ключевые метрики для RAG
- Поиск: получили ли мы правильные фрагменты?
- Фактическая обоснованность: опирается ли ответ на найденные фрагменты?
- Релевантность ответа: отвечает ли он на вопрос?
- Полнота и точность контекста: доля полезных найденных фрагментов
Recall@K
Создайте эталонный набор пар (вопрос, список идентификаторов релевантных фрагментов). Измерьте, как часто среди K лучших найденных фрагментов присутствует хотя бы один релевантный:
def recall_at_k(eval_set, k=5):
hits = 0
for item in eval_set:
retrieved = retriever(item['question'], k=k)
if any(c.id in item['relevant_ids'] for c in retrieved):
hits += 1
return hits / len(eval_set)Precision@K
Какая доля найденных фрагментов релевантна?
def precision_at_k(eval_set, k=5):
total_relevant = 0
total_retrieved = 0
for item in eval_set:
retrieved = retriever(item['question'], k=k)
total_relevant += sum(1 for c in retrieved if c.id in item['relevant_ids'])
total_retrieved += k
return total_relevant / total_retrievedMRR (средний обратный ранг)
На какой позиции находится FIRST релевантный документ?
def mrr(eval_set, k=10):
total = 0
for item in eval_set:
retrieved = retriever(item['question'], k=k)
for rank, c in enumerate(retrieved, start=1):
if c.id in item['relevant_ids']:
total += 1 / rank
break
return total / len(eval_set)Фактическая обоснованность (LLM в роли судьи)
Используйте LLM, чтобы проверить, подтверждается ли каждое утверждение в ответе контекстом:
judge_prompt = '''
Given the context and answer, identify each factual claim in the answer.
For each claim, judge whether the context supports it.
Return {claims: [{claim, supported: true/false}]}.
'''
result = judge_llm.invoke(judge_prompt.format(context=ctx, answer=ans))Релевантность ответа
Обратная оценка: спросите LLM «Может ли этот ответ быть ответом на данный вопрос?» Это помогает выявлять ответы не по теме.
Фреймворк RAGAS
RAGAS автоматизирует описанные выше метрики:
# pip install ragas
from ragas import evaluate
from ragas.metrics import faithfulness, answer_relevancy, context_precision, context_recall
results = evaluate(
dataset, # HF dataset with question, contexts, answer, ground_truth
metrics=[faithfulness, answer_relevancy, context_precision, context_recall]
)
print(results)Создание эталонного набора
От 20 до 200 кортежей (вопрос, ожидаемый ответ, релевантные фрагменты), отобранных людьми. Включите:
- Распространённые запросы
- Граничные случаи
- Нестандартные входные данные, например вопросы вне набора документов
Синтетические наборы для оценки
Начальная генерация: попросите LLM создать пары вопросов и ответов на основе ваших документов. Качество ниже, зато это быстро:
synth_prompt = 'Read this document and write 3 questions a user might ask, with answers from the doc:\n{doc}'
# Use as a starting point; humans curate later.
print(synth_prompt)
Наборы данных LangSmith и Langfuse
Оба инструмента позволяют превратить рабочие трассировки в наборы данных для оценки. Выберите 50 реальных вопросов, на которые были даны плохие ответы, отметьте правильные ответы и используйте полученный набор как эталон.
Не оптимизируйте одну метрику чрезмерно
Максимизация Recall@K может ухудшить Precision@K из-за слишком большого числа ложноположительных результатов. Отслеживайте несколько метрик и составной показатель.
A/B-тесты в рабочей среде
Когда у вас появится автономная оценка, согласующаяся с удовлетворённостью пользователей, вы сможете тестировать изменения в рабочей среде и сравнивать как метрики, так и оценки пользователей.
Определение Recall@K
Что означает Recall@5 = 0.8?
Повторение
Создайте эталонный набор. Измеряйте Recall@K, Precision@K, MRR, фактическую обоснованность и релевантность ответа. Используйте RAGAS для автоматизации. Итеративно улучшайте систему на основе метрик.
Часто задаваемые вопросы
Урок «Оценка RAG (RAGAS, Recall@K)» бесплатный?
Да — полный текст урока «Оценка RAG (RAGAS, Recall@K)» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Agents, подпишись на CoddyKit PRO. Курс AI Agents содержит 4 уроков всего.
Чему я научусь в уроке «Оценка RAG (RAGAS, Recall@K)»?
Измеряйте достоверность, релевантность ответа, точность контекста и recall@K, чтобы понимать, улучшают ли изменения систему. Ты практикуешь AI Agents с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AI Agents?
Предыдущий опыт не требуется. AI Agents на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Оценка RAG (RAGAS, Recall@K)»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AI Agents?
Да. Каждый урок AI Agents включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Переранжирование с помощью кросс-энкодеров
- HyDE: гипотетические эмбеддинги документов
- Многовекторный поиск (ColBERT)
- Оценка RAG (RAGAS, Recall@K)