В современном мире часто встречаются задачи с большим объемом данных, выполнение которых либо невозможно, либо сложно или затратно по времени/ресурсам автоматизировать обычными функциями и методами.
Одним из способов решения для таких случаев является применение AI с использованием RAG.
В этой статье мы постарались привести метрики для оценки качества работы подобных решений.
RAG (Retrieval Augmented Generation) — генерация ответов с использованием внешнего источника данных.
Говоря простым языком, это метод, при котором AI для выдачи ответа на поставленный вопрос использует не только общую базу знаний, на которых был обучен, но и специализированные материалы, которых, как правило, нет в свободном доступе.
В качестве примера допустим, что у вас в компании есть большое количество сотрудников и множество договоров с ними и с контрагентами. В какой-то момент вам понадобилось проверить, во всех ли договорах его положения согласуются с внутренней документацией или же недавними изменениями в законодательстве. Всегда есть риск того, что какой-то из договоров был составлен без соответствующего упоминания таких документов.
Какие есть способы решения поставленной задачи существуют?
Проверить всю документацию вручную;
Автоматизировать процесс проверки.
В первом случае есть очевидные минусы:
большие затраты времени и ресурсов;
человеческий фактор, когда на больших объемах данных ошибки в проверке становятся практически неизбежны.
Поэтому куда предпочтительнее выглядит вариант с автоматизацией.
Как автоматизировать процесс?
Можно пробовать поиск по ключевым фразам по всем документам.
Плюсы:
— Технически возможно осуществить без использования AI;
Минусы:
— Требует максимально полного описания всех возможных вариаций нужных для поиска фраз.
— Как следствие первого минуса, весьма вероятны неполное покрытие документации таким поиском, а также ложноположительные или ложноотрицательные результаты.
Например, одно и то же положение правил внутреннего распорядка или даже просто ссылка на отдельный документ, содержащий такие правила, могут быть представлены в разных документах по-разному.Автоматизация с помощью AI:
— обучение собственной модели для поиска нужной информации
— использование RAGВариант с обучением собственной модели будет нормальным решением только в том случае, если ваши данные не изменяются или изменяются/правятся редко.
В случаях, когда изменения происходят постоянно или часто, обучение новой модели становится слишком затратным по времени и ресурсам.
В таких ситуациях и будет наиболее предпочтительным использование RAG.
Для тестирования качества RAG существует множество метрик. В этой статье остановимся на двух популярных библиотеках: RAGAS и DeepEval.
В RAGAS представлены следующие метрики для оценки качества работы RAG:
Context Precision
Context Recall
Context Entities Recall
Noise Sensitivity
Response Relevancy
Faithfulness
Multimodal Faithfulness
Multimodal Relevance
В DeepEval, в свою очередь, представлены следующие метрики:
Answer Relevancy
Contextual Precision
Contextual Recall
Contextual Relevancy
Faithfulness
Как видно из представленных перечней, в обоих списках есть совпадающие по названию или очень близкие по смыслу метрики. Давайте сравним их и постараемся понять, есть ли между метриками разница, и в чем она заключается. Для метрик, у которых нет аналогов у обеих библиотек, представим описание с реализацией.
Response Relevancy/Answer Relevancy
RAGAS
Реализация в Python:
Сначала идет подготовка данных для дальнейшей обработки. Ниже в примере представлен пример данных со всеми возможными параметрами.
Далее идет конвертация данных в форму для обработки.
Наконец, происходит подсчет и выдача результатов метрики.
В полнном виде код выглядит так:
from datasets import Dataset from ragas import evaluate from ragas.metrics import ResponseRelevancy # Подготовка данных для RAGAS data = { «question»: questions, # Вопрос пользователя «answer»: answers, # Ответ модели } # Конвертация данных dataset = Dataset.from_dict(data) # Вычисление метрики def response_relevancy(dataset): result = evaluate( dataset=dataset, metrics=[ ResponseRelevancy() ], ) return result
DeepEval
Реализация в Python:
Сначала идет подготовка данных для дальнейшей обработки. Ниже в примере представлен пример данных со всеми возможными параметрами.
Далее идет конвертация данных в форму для обработки.
Наконец, происходит подсчет и выдача результатов метрики.
# Импорт библиотек import pytest from deepeval.test_case import LLMTestCase from deepeval import assert_test from deepeval.metrics import AnswerRelevancyMetric from deepeval.dataset import EvaluationDataset from deepeval.test_case import LLMTestCase # Подготовка формы для обработки данных dataset = EvaluationDataset() # Данные для тестирования question = question # Вопрос пользователя answers = answer # Ответ модели # Формирование тест кейса test_case = LLMTestCase(input=question, actual_output=answers) # Добавление тест кейса в набор данных dataset.add_test_case(test_case) # Формирование метрики для оценки metric = AnswerRelevancyMetric( threshold=threshold, # Пороговое значение model=model, # Модель для оценки по метрике include_reason=True) # Формирование причины присвоения того или иного значения @pytest.mark.asyncio # Передача параметров для теста @pytest.mark.parametrize( «test_case», dataset.test_cases, ) # Вычисление результата async def test_answer_relevancy(test_case: LLMTestCase): assert_test(test_case, [metric])
Метрика | Response Relevancy | Answer Relevancy |
Описание | На основании ответа от модели формирует вопрос, на который такой ответ мог быть дан. Для получения более стабильных результатов генерируется несколько вариантов вопросов для сравнения с изначальным (по умолчанию, 3) | Сравнивает полученный от модели ответ с изначальным запросом от пользователя на предмет соответствия |
Реализация | Промт для оценки релевантности содержит следующие инструкции: 1. Сформировать вопрос на основе ответа модели. 2. Оценить ответ на предмет уклончивости (если ответ вида “я не знаю”, “я не уверен” и т.д., то такой ответ уклончивый) Присвоить ответу 1, если ответ уклончивый и 0, если ответ четко сформулирован. | Промт для оценки релевантности содержит следующие инструкции: Сформировать утверждения из ответа. Сравнить все утверждения с изначальным вопросом на предмет соответствия Присвоить утверждению статус ‘yes’, ‘no’ или ‘idk’, в зависимости от релевантности утверждения вопросу. Сформировать краткое пояснение о причинах получения того или иного значения метрики Посчитать конечный результат |
Таким образом, главные различия метрик состоят в:
Предметах сравнения. У метрики от RAGAS сравниваются изначальный вопрос со сгенерированными вопросами.
У метрики от deepeval сравниваются изначальный вопрос и утверждения из полученного ответа модели.Методиках сравнения.
У метрики от RAGAS сравнение происходит посредством вычисления косинусного сходства.
У метрики от deepeval сравнение происходит посредством использования LLM.Объяснение вердикта по сравнениям.
В метрике от RAGAS объяснения не предусмотрены, поскольку сравнение происходит посредством вычисления косинусного сходства.
В метрике от deepeval присутствуют вердикты по каждому утверждениюОбработка уклончивости и галлюцинаций в ответах:
В метрике от RAGAS уклончивость и галлюцинации в ответе могут привести к автоматическому обнулению результата расчета.
В метрике от deepeval наличие галлюцинаций и уклончивости фиксируется и приводит к снижению итогового результата оценки.
Context Precision/Contextual Precision
RAGAS
Реализация в Python:
Сначала идет подготовка данных для дальнейшей обработки. Ниже в примере представлен пример данных со всеми возможными параметрами.
Происходит подсчет и выдача результатов метрики.
Код для метрики с использованием LLM и без использования переданного контекста.
import asyncio from ragas import SingleTurnSample from ragas.metrics import LLMContextPrecisionWithoutReference # Определение метрики с уточнением LLM для вычисления результата context_precision = LLMContextPrecisionWithoutReference(llm=evaluator_llm) # Подготовка данных для RAGAS sample = SingleTurnSample( user_input = question # Вопрос пользователя retrieved_contexts = contexts # Возвращаемый контекст response = answer # Ответ модели ) # Вычисление метрики async def context_precision_without_reference(sample): result = await context_precision.single_turn_ascore(sample) return result asyncio.run(run_context_precision_without_reference(sample))
Код для метрики с использованием LLM и переданным контекстом
import asyncio from ragas import SingleTurnSample from ragas.metrics import LLMContextPrecisionWithReference # Определение метрики с уточнением LLM для вычисления результата context_precision = LLMContextPrecisionWithReference(llm=evaluator_llm) # Подготовка данных для RAGAS sample = SingleTurnSample( user_input = question # Вопрос пользователя retrieved_contexts = contexts # Возвращаемый контекст reference = reference # Переданный контекст ) # Вычисление метрики async def context_precision_with_reference(sample): result = await context_precision.single_turn_ascore(sample) return result asyncio.run(run_context_precision_with_reference(sample))
Код для метрики без использования LLM
import asyncio from ragas import SingleTurnSample from ragas.metrics import NonLLMContextPrecisionWithReference # Определение метрики context_precision = NonLLMContextPrecisionWithReference() # Подготовка данных для RAGAS sample = SingleTurnSample( retrieved_contexts = contexts # Возвращаемый контекст reference_contexts = reference # Переданный контекст ) # Вычисление метрики async def context_precision_without_LLM(sample): result = await context_precision.single_turn_ascore(sample) return result asyncio.run(context_precision_without_LLM(sample))
DeepEval
Реализация в Python:
Сначала идет подготовка данных для дальнейшей обработки. Ниже в примере представлен пример данных со всеми возможными параметрами.
Далее идет конвертация данных в форму для обработки.
Наконец, происходит подсчет и выдача результатов метрики.
# Импорт библиотек import pytest from deepeval.test_case import LLMTestCase from deepeval import assert_test from deepeval.metrics import ContextualPrecisionMetric from deepeval.dataset import EvaluationDataset from deepeval.test_case import LLMTestCase # Подготовка формы для обработки данных dataset = EvaluationDataset() # Данные для тестирования question = question # Вопрос пользователя ground_truths = expected_answer # Ожидаемый ответ contexts = contexts # Возвращаемый контекст # Формирование тест кейса test_case = LLMTestCase(input=question, expected_output=ground_truths, retrieval_context=contexts) # Добавление тест кейса в набор данных dataset.add_test_case(test_case) # Формирование метрики для оценки metric = ContextualPrecisionMetric( threshold=threshold, # Пороговое значение model=model, # Модель для оценки по метрике include_reason=True) # Формирование причины присвоения того или иного значения @pytest.mark.asyncio # Передача параметров для теста @pytest.mark.parametrize( «test_case», dataset.test_cases, ) # Вычисление результата async def test_contextual_precision(test_case: LLMTestCase): assert_test(test_case, [metric])
Метрика | Context Precision | Contextual Precision |
Описание | Сравнивает возвращенный контекст с изначальным вопросом и проверяет, каков процент релевантного контекста во всех возвращенных с помощью RAG контекстах. | Сравнивает возвращенный контекст с изначальным вопросом и проверяет, насколько высоко в выдаче оказались релевантные вопросу контексты. Подсчитывается итоговым положением релевантных контекстов в выдаче |
Модификации | с использованием LLM без использования LLM | с использованием LLM |
Реализация | 1. Основная реализация с LLM 2. Модификация с эталонным контекстом 3. Модификация без использования LLM | Промт для оценки релевантности содержит следующие инструкции: Сформировать список возвращенных из контекста элементов. Сравнить все элементы с ожидаемым ответом Присвоить элементу статус ‘yes’ или ‘no’ в зависимости от релевантности утверждения вопросу. Сформировать краткое пояснение о причинах получения того или иного значения метрики Посчитать конечный результат |
Таким образом, главные различия метрик состоят в:
В количестве возможных модификаций. Три варианта метрики у RAGAS и одна у DeeepEval.
Различии методик сравнения у разных модификаций. Если в основной реализации у RAGAS схожая методика с DeepEval, то другие модификации уже используют эталонный контекст, а также расстояние Левенштейна (есть и другие опции сравнения) для варианта без использования LLM.
Объяснение вердикта по сравнениям.
В метрике от RAGAS объяснения не предусмотрены, поскольку сравнение происходит посредством вычисления расстояния Левенштейна (есть и другие опции сравнения) для варианта без использования LLM. При использовании LLM в RAGAS также предусмотрено объяснение вердикта.
В метрике от deepeval присутствуют вердикты по каждому утверждению.
Context Recall/Contextual Recall
RAGAS
LLM-Based Context Recall
Реализация в Python:
Сначала идет подготовка данных для дальнейшей обработки. Ниже в примере представлен пример данных со всеми возможными параметрами.
Происходит подсчет и выдача результатов метрики.
import asyncio from ragas import SingleTurnSample from ragas.metrics import LLMContextRecall # Определение метрики с уточнением LLM для вычисления результата context_precision = LLMContextRecall(llm=evaluator_llm) # Подготовка данных для RAGAS sample = SingleTurnSample( user_input = question # Вопрос пользователя retrieved_contexts = contexts # Возвращаемый контекст reference = reference # Переданный контекст ) # Вычисление метрики async def context_recall_with_LLM(sample): result = await context_recall.single_turn_ascore(sample) return result asyncio.run(context_recall_with_LLM(sample))
Non LLM Based Context Recall
Реализация в Python:
Сначала идет подготовка данных для дальнейшей обработки. Ниже в примере представлен пример данных со всеми возможными параметрами.
Происходит подсчет и выдача результатов метрики.
import asyncio from ragas import SingleTurnSample from ragas.metrics import NonLLMContextRecall # Определение метрики context_recall = NonLLMContextRecall() # Подготовка данных для RAGAS sample = SingleTurnSample( retrieved_contexts = contexts # Возвращаемый контекст reference_contexts = reference # Переданный контекст ) # Вычисление метрики async def context_recall_without_LLM(sample): result = await context_recall.single_turn_ascore(sample) return result asyncio.run(context_recall_without_LLM(sample))
DeepEval
Реализация в Python:
Сначала идет подготовка данных для дальнейшей обработки. Ниже в примере представлен пример данных со всеми возможными параметрами.
Далее идет конвертация данных в форму для обработки.
Наконец, происходит подсчет и выдача результатов метрики.
# Импорт библиотек import pytest from deepeval.test_case import LLMTestCase from deepeval import assert_test from deepeval.metrics import ContextualRecallMetric from deepeval.dataset import EvaluationDataset from deepeval.test_case import LLMTestCase # Подготовка формы для обработки данных dataset = EvaluationDataset() # Данные для тестирования question = question # Вопрос пользователя ground_truths = expected_answer # Ожидаемый ответ contexts = contexts # Возвращаемый контекст # Формирование тест кейса test_case = LLMTestCase(input=question, expected_output=ground_truths, retrieval_context=contexts) # Добавление тест кейса в набор данных dataset.add_test_case(test_case) # Формирование метрики для оценки metric = ContextualRecallMetric( threshold=threshold, # Пороговое значение model=model, # Модель для оценки по метрике include_reason=True) # Формирование причины присвоения того или иного значения @pytest.mark.asyncio # Передача параметров для теста @pytest.mark.parametrize( «test_case», dataset.test_cases, ) # Вычисление результата async def test_contextual_recall(test_case: LLMTestCase): assert_test(test_case, [metric])
Метрика | Context Recall | Contextual Recall |
Описание | Показывает, сколько релевантных документов было приведено на заданный вопрос | Вычисляет, представлены ли ключевые элементы, релевантные вопросу пользователя, в приведенном контексте выше нерелевантных |
Модификации | с использованием LLM сравнивает количество утверждений из переданного контекста и возвращенного контекста относительно общего количества утверждений в ответе без использования LLM сравнивает количество релевантных контекстов относительно общего числа приведенных контекстов | с использованием LLM |
Реализация | 1. Основная реализация с LLM 2. Модификация с эталонным контекстом 3. Модификация без использования LLM | Промт для оценки релевантности содержит следующие инструкции: Составить список выданных в ответе модели утверждений на предмет релевантных и нерелевантных приведенному контексту Сформировать краткое пояснение о причинах получения того или иного значения метрики Посчитать конечный результат |
Таким образом, главные различия метрик состоят в:
В количестве возможных модификаций. Три варианта метрики у RAGAS и одна у DeeepEval.
Различии методик сравнения у разных модификаций. Если в основной реализации у RAGAS схожая методика с DeepEval, то другие модификации уже используют эталонный контекст, а также расстояние Левенштейна (есть и другие опции сравнения) для варианта без использования LLM.
Объяснение вердикта по сравнениям.
В метрике от RAGAS объяснения не предусмотрены, поскольку сравнение происходит посредством вычисления расстояния Левенштейна (есть и другие опции сравнения) для варианта без использования LLM. При использовании LLM в RAGAS также предусмотрено объяснение вердикта.
В метрике от deepeval присутствуют вердикты по каждому утверждению.
Faithfulness/Faithfulness
RAGAS
Реализация в Python:
Сначала идет подготовка данных для дальнейшей обработки. Ниже в примере представлен пример данных со всеми возможными параметрами.
Далее идет конвертация данных в форму для обработки.
Наконец, происходит подсчет и выдача результатов метрики.
from datasets import Dataset from ragas import evaluate from ragas.metrics import faithfulness # Подготовка данных для RAGAS data = { «question»: questions, # Вопрос пользователя «contexts»: contexts, # Возвращаемый контекст «reference»: references # Переданный контекст } # Конвертация данных dataset = Dataset.from_dict(data) # Вычисление метрики def check_faithfulness(dataset): result = evaluate( dataset=dataset, metrics=[ faithfulness ], ) return result
DeepEval
Реализация в Python:
Сначала идет подготовка данных для дальнейшей обработки. Ниже в примере представлен пример данных со всеми возможными параметрами.
Далее идет конвертация данных в форму для обработки.
Наконец, происходит подсчет и выдача результатов метрики.
# Импорт библиотек import pytest from deepeval.test_case import LLMTestCase from deepeval import assert_test from deepeval.metrics import FaithfulnessMetric from deepeval.dataset import EvaluationDataset from deepeval.test_case import LLMTestCase # Подготовка формы для обработки данных dataset = EvaluationDataset() # Данные для тестирования question = question # Вопрос пользователя contexts = contexts # Возвращаемый контекст answers = answer # Ответ модели # Формирование тест кейса test_case = LLMTestCase(input=question, actual_output=answers, retrieval_context=contexts) # Добавление тест кейса в набор данных dataset.add_test_case(test_case) # Формирование метрики для оценки metric = FaithfulnessMetric( threshold=threshold, # Пороговое значение model=model, # Модель для оценки по метрике include_reason=True) # Формирование причины присвоения того или иного значения @pytest.mark.asyncio # Передача параметров для теста @pytest.mark.parametrize( «test_case», dataset.test_cases, ) # Вычисление результата async def test_faithfulness(test_case: LLMTestCase): assert_test(test_case, [metric])
Метрика | Faithfulness (RAGAS) | Faithfulness (DeepEval) |
Описание | Показывает количество утверждений в ответе модели, которые соответствуют приведенному контексту | Показывает, соответствует ли ответ модели приведенному контексту |
Модификации | с использованием LLM | с использованием LLM |
Реализация | Промт для оценки содержит следующие инструкции: Получить ответ, возвращенный контекст и вопрос. Разбить ответ и вопрос на отдельные утверждения Определить, относится ли каждое утверждение из ответа приведенному контексту. Если относится, то присвоить результат 1, если нет, то 0 Вычислить итоговый результат | Промт для оценки релевантности содержит следующие инструкции: Разбить ответ модели на утверждения Вычислить, относится ли каждое из утверждений к приведенному контексту. Если относится, то присвоить значение ‘yes’, если не относится, то присвоить значение ‘no’, если невозможно дать ни положительного, ни отрицательного ответа, присвоить значение ‘idk’ Посчитать конечный результат |
Таким образом, главные различия метрик состоят в:
В количестве опций для оценки утверждений. У RAGAS только два возможных значения, в то время как у DeeepEval таких значений три.
Объяснение вердикта по сравнениям.
В метрике от RAGAS объяснения не предусмотрены, поскольку сравнение происходит посредством вычисления расстояния Левенштейна (есть и другие опции сравнения) для варианта без использования LLM. При использовании LLM в RAGAS также предусмотрено объяснение вердикта.
В метрике от deepeval присутствуют вердикты по каждому утверждению.
Context Entities Recall
Метрика показывает, какой процент сущностей из переданного контекста присутствует в возвращенном контексте. Рассчитывается как отношение количества сущностей в приведенном контексте к общему числу сущностей в переданном контексте.
где
RE — набор сущностей в переданном контексте
RCE — набор сущностей в возвращенном контексте
Реализация
1. Происходит разбивка текста на независимые неповторяющиеся сущности.
2. Сравниваются множества сущностей в переданном и возвращенном контекстах
3. Вычисляется итоговое значение метрики.
from datasets import Dataset from ragas import evaluate from ragas.metrics import ContextEntityRecall # Подготовка данных для RAGAS data = { «contexts»: contexts, # Возвращаемый контекст «reference»: references # Переданный контекст } # Конвертация данных dataset = Dataset.from_dict(data) # Вычисление метрики def check_context_entity_recall(dataset): result = evaluate( dataset=dataset, metrics=[ ContextEntityRecall() ], ) return resultNoise Sensitivity
Метрика показывает процент нерелевантных утверждений относительно общего количества утверждений в ответе.
Реализация
Происходит разбивка ответа на утверждения
Каждое утверждение оценивается на предмет релевантности вопросу.
Вычисляется итоговое значение метрики.
from datasets import Dataset from ragas import evaluate from ragas.metrics import NoiseSensitivity # Подготовка данных для RAGAS data = { «question»: questions, # Вопрос пользователя «answer»: answers, # Ответ модели «contexts»: contexts, # Возвращаемый контекст «reference»: references # Переданный контекст } # Конвертация данных dataset = Dataset.from_dict(data) # Вычисление метрики def check_noise_sensitivity(dataset): result = evaluate( dataset=dataset, metrics=[ NoiseSensitivity() ], ) return resultMultimodal Faithfulness
Метрика показывает фактическое соответствие ответа модели и возвращенного контекста.
Ответ считается правдивым, если все его утверждения могут быть получены из возвращенного контекста (текста или картинок).
Реализация
Ответ модели сравнивается с возвращенным контекстом (текстом и картинками) на предмет фактического соответствия.
Если ответ фактически соответствует контексту, ему присваивается значение 1, в противном случае 0.
Происходит подсчет итогового результата.
import asyncio from ragas.dataset_schema import SingleTurnSample from ragas.metrics import MultiModalFaithfulness from datasets import Dataset from ragas import evaluate # Подготовка данных для RAGAS data = { «user_input»: question, # Вопрос пользователя «response»: answer, # Ответ модели «retrieved_contexts»: contexts # Возвращенный контекст # (текст или картинки) } # Конвертация данных dataset = Dataset.from_dict(data) # Вычисление метрики def check_multimodal_faithfulness(dataset): result = evaluate( dataset=dataset, metrics=[ MultiModalFaithfulness() ], ) return resultMultimodal Relevancy
Метрика показывает, насколько ответ модели соответствует возвращенному контексту.
Реализация
Ответ модели сравнивается с возвращенным контекстом (текстом и картинками) на предмет соответствия.
Если ответ соответствует контексту, ему присваивается значение 1, в противном случае 0.
Происходит подсчет итогового результата.
import asyncio from ragas.dataset_schema import SingleTurnSample from ragas.metrics import MultiModalRelevance from datasets import Dataset from ragas import evaluate # Подготовка данных для RAGAS data = { «user_input»: question, # Вопрос пользователя «response»: answer, # Ответ модели «retrieved_contexts»: contexts # Возвращенный контекст # (текст или картинки) } # Конвертация данных dataset = Dataset.from_dict(data) # Вычисление метрики def check_multimodal_relevancy(dataset): result = evaluate( dataset=dataset, metrics=[ MultiModalRelevance() ], ) return resultContextual Relevancy
Метрика показывает, насколько контекст релевантен изначальному запросу.
Реализация
Происходит разбиение контекста на утверждения.
Каждое утверждение оценивается на предмет релевантности вопросу. Если утверждение релевантно, ему присваивается значение ‘yes’, в противном случае присваивается значение ‘no’
Происходит итоговый подсчет метрики.
# Импорт библиотек import pytest from deepeval.test_case import LLMTestCase from deepeval import assert_test from deepeval.metrics import ContextualRelevancyMetric from deepeval.dataset import EvaluationDataset from deepeval.test_case import LLMTestCase # Подготовка формы для обработки данных dataset = EvaluationDataset() # Данные для тестирования question = question # Вопрос пользователя contexts = contexts # Возвращаемый контекст # Формирование тест кейса test_case = LLMTestCase(input=question, retrieval_context=contexts) # Добавление тест кейса в набор данных dataset.add_test_case(test_case) # Формирование метрики для оценки metric = ContextualRelevancyMetric( threshold=threshold, # Пороговое значение model=model, # Модель для оценки по метрике include_reason=True) # Формирование причины присвоения того или иного значения @pytest.mark.asyncio # Передача параметров для теста @pytest.mark.parametrize( «test_case», dataset.test_cases, ) # Вычисление результата async def test_contextual_relevancy(test_case: LLMTestCase): assert_test(test_case, [metric])
Как видно из указанного выше описания, все метрики RAGAS и DeepEval, несмотря на свою схожесть, имеют свои плюсы и минусы, и, как следствие, могут быть эффективно использованы в подходящей для этого ситуации.
Поскольку область применения AI становится все шире, требуется и большое разнообразие метрик для оценки качества работы AI-продуктов.
В этой статье мы рассмотрели лишь часть применяемых метрик, касающихся работы с RAG. В следующих публикациях постараемся рассказать о других имеющихся на данный момент метриках и принципах их работы.
Источник: habr.com


























