English translation is not available yet. Showing Russian content.
Что такое Path-level evaluation для Agentic RAG и чем оно лучше token-level?
Краткий тезис
Path-level evaluation — это подход к оценке Agentic RAG-систем, при котором анализируется не каждый токен ответа, а траектория (path) действий агента: какие инструменты были вызваны, в каком порядке, с какими аргументами, и достиг ли агент цели оптимальным маршрутом. В отличие от token-level evaluation, где оценивается точность каждого токена сгенерированного текста, path-level фокусируется на правильности процесса, а не только на финальном ответе. Это позволяет выявлять неэффективные или избыточные шаги, даже если итоговый ответ верен, и даёт более содержательную обратную связь для улучшения агента.
1. Контекст: Agentic RAG и необходимость новой оценки
Agentic RAG — это эволюция классического RAG, где система не просто ищет документы и генерирует ответ, а действует как агент: может вызывать несколько инструментов (поиск, калькулятор, API), принимать решения о следующем шаге, перепланировать маршрут. Пример: пользователь спрашивает «Какая средняя зарплата Python-разработчика в Берлине с учётом налогов?» Агент может: 1) найти медианную зарплату через поиск, 2) найти ставку налога для Берлина, 3) вычислить чистую сумму через калькулятор, 4) сгенерировать ответ.
Традиционные метрики (ROUGE, BLEU, BERTScore) оценивают токен-уровень: насколько сгенерированный текст совпадает с эталонным. Но для агента это неадекватно: агент может дать правильный ответ, но сделать это неоптимальным путём (например, вызвать 5 поисков вместо 2). И наоборот — может дать неверный ответ, но его траектория была разумной, а ошибка произошла из-за плохого источника. Поэтому требуется path-level evaluation.
2. Token-level evaluation: что это и её ограничения
Token-level evaluation — это классические метрики, сравнивающие сгенерированный текст с эталонным на уровне токенов (слов, субслов). Примеры:
- ROUGE-L — оценивает длиннейшую общую подпоследовательность.
- BLEU — n-gram precision с штрафом за длину.
- BERTScore — попарное косинусное сходство эмбеддингов токенов.
Проблемы для Agentic RAG:
- Игнорирование процесса: два агента могут выдать одинаковый текст, но один сделал 2 вызова, другой — 10. Token-level не заметит разницы.
- Нечувствительность к инструментам: если агент использовал не тот инструмент, но текст получился похожим, метрика может показать высокое качество.
- Зависимость от эталона: для агентов часто нет единственного «правильного» текста — ответ может быть сформулирован по-разному.
- Отсутствие диагностики: низкий BLEU не говорит, что именно пошло не так — плохой поиск, неверный вызов или ошибка генерации.
3. Path-level evaluation: определение и ключевые метрики
Path-level evaluation оценивает траекторию (path) агента — последовательность вызовов инструментов с аргументами и результатами. Основные компоненты:
- Список шагов: каждый шаг — это (инструмент, входные параметры, выходные данные).
- Порядок шагов: важен не только набор, но и последовательность.
- Успешность каждого шага: был ли инструмент вызван корректно, вернул ли ожидаемый результат.
- Оптимальность: минимально ли количество шагов, не было ли лишних вызовов.
Метрики path-level:
- Path Accuracy — доля шагов, совпадающих с эталонной траекторией (с учётом порядка).
- Tool Selection Accuracy — правильно ли выбран инструмент на каждом шаге.
- Argument Precision/Recall — насколько точно переданы аргументы (например, правильный запрос к поиску).
- Path Efficiency — отношение длины оптимального пути к длине фактического (чем ближе к 1, тем лучше).
- Goal Completion Rate — достиг ли агент конечной цели (бинарная метрика).
Пример эталонной траектории для запроса «Какая средняя зарплата Python-разработчика в Берлине с учётом налогов?»:
1. search(query="средняя зарплата python разработчик берлин 2024")
2. extract_salary(result) → 65000 EUR
3. search(query="налог на доход в германии берлин 2024")
4. extract_tax_rate(result) → 0.35
5. calculate(net = 65000 * (1 - 0.35)) → 42250 EUR
6. generate_answer("Чистая зарплата: 42250 EUR")
Фактическая траектория агента может отличаться: например, он может сделать два поиска вместо одного, или вызвать калькулятор до получения налога. Path-level метрики покажут эти расхождения.
4. Сравнение token-level и path-level evaluation
| Характеристика | Token-level | Path-level |
|---|---|---|
| Что оценивается | Текст ответа (токены) | Траектория действий (инструменты, порядок) |
| Чувствительность к процессу | Нет | Да |
| Диагностика ошибок | Слабая (только качество текста) | Сильная (какой шаг неверен) |
| Зависимость от эталона | Требует точного текста | Требует эталонной траектории (легче создать) |
| Применимость к агентам | Плохая | Хорошая |
| Пример метрик | ROUGE, BLEU, BERTScore | Path Accuracy, Tool Selection Accuracy |
| Стоимость вычисления | Низкая (только текст) | Средняя (нужен парсинг траектории) |
| Интерпретируемость | Низкая (число без контекста) | Высокая (можно увидеть, где ошибка) |
Почему path-level лучше:
- Прозрачность: можно точно сказать, на каком шаге агент ошибся.
- Обратная связь для улучшения: если агент часто выбирает неправильный инструмент, нужно улучшать промпт или fine-tuning.
- Робастность к формулировкам: неважно, как именно сформулирован ответ, важен маршрут.
- Эффективность: выявляются лишние вызовы, что критично для стоимости (каждый вызов LLM или API стоит денег).
5. Как реализовать path-level evaluation на практике
Инструменты:
- LangSmith / LangFuse — платформы для трассировки агентов, автоматически записывают шаги.
- Собственный evaluator на Python с использованием Pydantic для валидации траектории.
Общий подход:
- Собрать траектории — логировать каждый вызов инструмента: имя, входные параметры, выход, время.
- Определить эталонные траектории — вручную или с помощью LLM-as-a-judge (попросить LLM сгенерировать идеальный план).
- Сравнить фактическую и эталонную траектории — через алгоритмы выравнивания (например, модифицированное расстояние Левенштейна для последовательностей шагов).
- Агрегировать метрики по набору тестовых запросов.
Пример кода (упрощённый):
from typing import List, Dict
from dataclasses import dataclass
@dataclass
class Step:
tool: str
arguments: Dict[str, str]
result: str
@dataclass
class Trajectory:
steps: List[Step]
final_answer: str
def path_accuracy(actual: Trajectory, expected: Trajectory) -> float:
"""Доля шагов, совпадающих по инструменту и аргументам (порядок важен)."""
if not expected.steps:
return 1.0 if not actual.steps else 0.0
matches = 0
for a_step, e_step in zip(actual.steps, expected.steps):
if (a_step.tool == e_step.tool and
a_step.arguments == e_step.arguments):
matches += 1
return matches / len(expected.steps)
# Пример использования
expected = Trajectory(steps=[
Step("search", {"query": "средняя зарплата python берлин"}, "65000"),
Step("calculate", {"expression": "65000*0.65"}, "42250")
], final_answer="42250")
actual = Trajectory(steps=[
Step("search", {"query": "зарплата python берлин"}, "65000"),
Step("search", {"query": "налог германия"}, "0.35"),
Step("calculate", {"expression": "65000*0.65"}, "42250")
], final_answer="42250")
print(path_accuracy(actual, expected)) # 0.5 (первый шаг совпал частично, второй не совпал)
Более продвинутые метрики могут учитывать частичное совпадение аргументов (через семантическое сходство) и допускать перестановки шагов, если они логически эквивалентны.
6. Преимущества path-level evaluation (детально)
- Выявление неоптимальности: агент может достичь цели, но сделать лишние шаги. Token-level этого не покажет. Path-level даёт метрику Path Efficiency.
- Улучшение промптов и fine-tuning: зная, на каком шаге агент ошибается (выбор инструмента, аргументы), можно точечно корректировать.
- Контроль стоимости: каждый лишний вызов LLM или API увеличивает затраты. Path-level позволяет оптимизировать количество шагов.
- Безопасность: если агент вызывает опасные инструменты (например, удаление файлов) не в том порядке, path-level это зафиксирует.
- Интерпретируемость для бизнеса: менеджеры могут видеть не просто «качество 0.85», а «агент в 30% случаев использует поиск вместо калькулятора».
7. Ограничения и вызовы path-level evaluation
- Сложность создания эталонов: для каждого запроса нужно вручную или автоматически строить «идеальный» путь. Автоматизация через LLM-as-a-judge может внести свои ошибки.
- Неоднозначность: один и тот же результат может быть достигнут разными корректными путями. Нужны метрики, допускающие эквивалентные траектории.
- Затраты на логирование: требуется инфраструктура для сбора траекторий (LangSmith, OpenTelemetry).
- Чувствительность к деталям: если агент использует разные формулировки запроса, но семантически одинаковые, строгое сравнение аргументов может дать ложное расхождение. Нужны семантические метрики.
8. Пет-проект для закрепления
Задача: Реализовать простой Agentic RAG (агент с двумя инструментами: поиск и калькулятор) и написать evaluator, который сравнивает траектории на path-level.
Инструменты: Python, LangChain (или просто OpenAI API), Pydantic, pytest.
Шаги:
- Создать агента, который на запросы вида «сколько будет X плюс Y?» вызывает калькулятор, а на «какая столица Франции?» — поиск (имитация).
- Подготовить 10 тестовых запросов с эталонными траекториями (вручную).
- Запустить агента, записать фактические траектории.
- Написать функцию
path_accuracyс учётом нечёткого сравнения аргументов (через эмбеддинги). - Вычислить метрики для каждого запроса и среднее.
- Намеренно добавить ошибку в агента (например, заставить его всегда сначала вызывать поиск, потом калькулятор) и показать, что path-level метрика упала, хотя token-level (BLEU) может остаться высоким.
Ожидаемый результат: Вы получите численное подтверждение, что path-level evaluation чувствительнее к изменениям в логике агента, и сможете объяснить это на собеседовании.
9. Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 130 | LLM-as-a-Judge: как использовать LLM для оценки ответов |
| 131 | Метрики faithfulness и answer relevance в RAGAS |
| 132 | Оценка retrieval: hit rate, MRR, NDCG |
| 133 | Оценка генерации: ROUGE, BLEU, BERTScore |
| 136 | Как оценивать multi-hop RAG (многошаговый поиск) |
| 140 | Что такое Agentic RAG и как его проектировать |
10. Навигация
- Предыдущий: 134
- Следующий: 136
- Индекс: 00. Индекс разборов
Навигация
- Предыдущий: 134
- Следующий: 136
- Индекс: 00. Индекс разборов