Potato против LangSmith и Langfuse для оценки агентов: практическое сравнение
Для чего предназначены LangSmith, Langfuse и Potato в оценке агентов, как переносить трассы между ними и где измеряется человеческое суждение.
LangSmith и Langfuse созданы для трассировки и мониторинга LLM-приложений в продакшене. Potato создан для сбора структурированных человеческих суждений о том, что показывают эти трассы, и для измерения того, насколько оценщики согласны между собой. Команды, которым нужно и то и другое, обычно собирают трассы в инструменте наблюдаемости, а исследование с участием людей проводят в Potato.
Три инструмента пересекаются достаточно, чтобы их часто сравнивали, но пересекаются они только в одной точке. Все три умеют прикрепить человеческое суждение к записанному запуску агента. Вокруг чего каждый из них организован, различается, и именно это различие решает, какой из них подходит под ваш вопрос.
Для чего создан каждый инструмент
LangSmith инструментирует, трассирует и отлаживает LLM-приложения, причём глубже всего интегрирован с LangChain и LangGraph. Трассы приложения, построенного на этих фреймворках, приходят без дополнительного инструментирования, а сама платформа организована вокруг просмотра запусков, отслеживания задержек и стоимости и проведения оценочных экспериментов на датасетах. Его очереди разметки поддерживают ключи обратной связи с рубриками, настраиваемое число ревьюеров на запуск, попарные очереди и ревьюеров, которые не видят отзывов друг друга.
Langfuse покрывает ту же область как проект с открытым кодом, для любого LLM-приложения, а не для одного фреймворка, и объединяет управление промптами с трассировкой. Оценки можно ставить на уровне трассы и на уровне наблюдения (span), а категориальные score configs позволяют задать фиксированный набор меток и прикрепить к одному span несколько именованных оценок.
Potato это платформа разметки, которую расширили на трассы агентов. Она организована вокруг исследования, а не приложения, поэтому её базовые понятия касаются того, кто что размечает, сколько человек видит каждый элемент, что происходит при расхождении и что говорит статистика согласия о том, значат ли метки хоть что-то. Трассы агентов это один тип элементов среди 61 типа разметки, которые регистрирует текущий релиз, и поэтому они наследуют согласие между разметчиками, обучающие этапы, арбитраж и краудсорсинг, причём ничего из этого не пришлось перестраивать под агентов.
Ни один из трёх не лучше в отрыве от задачи. Полезный вопрос в том, состоит ли ваше узкое место в том, чтобы увидеть, что сделал агент, или в том, чтобы доверять человеческим меткам, которые вы о нём собираете.
Перенос трасс между инструментами
Potato читает трассы постфактум, а не инструментирует ваш код, поэтому регистрирует конвертеры для 15 форматов трасс:
python -m potato.trace_converter --list-formatsВ списке react, openai, anthropic, langchain, langfuse, multi_agent, mcp, otel, atif, webarena, web_agent, swebench, swe_agent_trajectory, claude_code и aider. Экспорт запусков LangSmith проходит через конвертер langchain, поскольку отдельного langsmith нет. Логи CrewAI, AutoGen и LangGraph проходят через multi_agent.
Преобразование экспорта занимает одну команду в каждом направлении рабочего процесса:
# LangSmith runs, exported from LangSmith, converted for annotation
python -m potato.trace_converter \
--input langsmith_export.jsonl \
--output data/traces.jsonl \
--input-format langchain
# Langfuse traces, exported from Langfuse
python -m potato.trace_converter \
--input langfuse_traces.json \
--output data/traces.jsonl \
--input-format langfuseЕсли вашего фреймворка нет в списке, --auto-detect выберет конвертер по сигнатурам полей, а новый конвертер пишется как подкласс BaseTraceConverter. Автоопределение берёт первый подходящий конвертер, поэтому, как только станет ясно, какой формат подходит вашим файлам, указывайте его явно.
Трассы могут приходить и без шага экспорта. Приём трасс в Potato принимает запуски, отправленные на /api/traces/* в формате полезной нагрузки запусков LangSmith, так что callback LangChain или SDK трассировки могут отправлять запуски в очередь разметки по мере их выполнения:
trace_ingestion:
enabled: true
api_key: "your-api-key"
notify_annotators: trueЧто добавляет Potato, когда трасса уже внутри
Именно в схемах платформа разметки оправдывает своё место. trajectory_eval содержит метку корректности, иерархическую таксономию ошибок с подтипами, уровни серьёзности с настраиваемыми весами и накопительную оценку качества, и всё это в одной схеме, прикреплённой к одной трассе:
annotation_schemes:
- annotation_type: trajectory_eval
name: step_evaluation
description: "Mark each step and classify anything that went wrong"
steps_key: conversation
step_text_key: text
error_types:
- name: execution
subtypes: [wrong_tool, wrong_args, api_error]
severities:
- name: minor
weight: -1
- name: critical
weight: -10
show_score: trueДля сравнения трасс важны именно веса серьёзности. Простой подсчёт отмеченных шагов говорит, что один агент ошибся четыре раза, а другой два, а взвешенная оценка говорит, были ли эти четыре косметическими, а эти две опасными.
Сравнительная оценка идёт через схему pairwise, у которой три режима. Бинарный режим показывает две кликабельные плитки с необязательной кнопкой ничьей, режим шкалы заменяет выбор ползунком между двумя элементами, а режим multi_dimension запрашивает независимый вердикт A/B по каждому именованному измерению, например полезности, точности и безопасности.
Для агентов, пишущих код, есть собственное отображение, потому что унифицированный дифф, прочитанный как JSON-строка, проверить невозможно:
Отображение трасс кодовых агентов в Potato с отрисовкой унифицированных диффов, подсветкой синтаксиса и деревом файлов
Отображение coding_trace рисует диффы с деревом файлов и сворачивает длинный вывод терминала, а схема code_review собирает комментарии, привязанные к строкам, в настраиваемых категориях, оценки по измерениям для каждого файла и вердикт в стиле pull request. Затем экспортёр coding_eval записывает метки для process reward model, аннотации код-ревью, пары предпочтений для DPO и оценки, совместимые с SWE-bench, то есть данные в том виде, который нужен для обучения, а не для дашборда.
Трассы веб-агентов отображаются как скриншоты с SVG-наложениями действий и лентой кадров:
Просмотрщик трасс веб-агентов со скриншотами, SVG-наложениями действий и навигацией по ленте кадров
У мультиагентных запусков есть собственные интерфейсы разметки, а не один сплющенный поток шагов. В реестре есть схемы для графа взаимодействий, который разметчик может редактировать, для атрибуции сбоев между агентами, проверки передач задач, карточек оценок по агентам и по командам, конкуренции за инструменты на общей временной шкале и тегирования эмерджентного поведения. То же верно для воплощённых и мультимодальных агентов, где траектории работы с компьютером, полнодуплексное голосовое взаимодействие и временная привязка в видео представлены полноценными схемами.
Измерять суждения, а не только собирать их
Различие, которое проявляется в проекте позже всего, в том, что происходит после того, как два разметчика не согласились. Potato рассматривает расхождение как измерение, а не как конфликт, который надо разрешить, поэтому та же статистика согласия, очередь арбитража, обучающие этапы и эталонные элементы, что используются в исследовании по разметке текста, применяются к трассам агентов без дополнительной настройки. Собственное сравнение инструментов Potato фиксирует по состоянию на проверку 2026-06-24, что платформы трассировки созданы для сбора человеческих суждений в виде оценок и ни одна из них не документирует статистику надёжности этих суждений, а также что Langfuse заменяет предыдущую аннотацию на той же трассе, поэтому независимая двойная разметка там требует обходного пути.
Это важно, когда оценка служит доказательством. У доли успехов, построенной на единичных непроверенных суждениях, нет погрешности, а ревьюер, у которого поплыли критерии, выглядит точно так же, как агент, который стал лучше.
Наблюдение за агентом во время работы
Potato может также запускать агента прямо на странице разметки, а не воспроизводить запись. Блок live_agent подключает визуальную модель к headless-браузеру и транслирует сессию разметчику, который может поставить её на паузу, отправить инструкции или взять управление на себя:
live_agent:
endpoint_type: anthropic_vision
ai_config:
model: claude-sonnet-4-20250514
api_key: ${ANTHROPIC_API_KEY}
max_steps: 30
allow_takeover: true
allow_instructions: true
instance_display:
fields:
- key: agent_trace
type: live_agent
label: "Live Agent Session"
display_options:
show_overlays: true
show_filmstrip: trueЕсть три ситуации, в которых это стоит усилий по настройке по сравнению с проверкой постфактум. Остановить запуск перед разрушительным действием значит принять меру безопасности, которую записанные трассы дать не могут. Перехват управления человеком посреди запуска, если его записать, становится демонстрационными данными. А наблюдение за тем, как агент восстанавливается после вмешательства, отвечает на вопрос, которого нет ни в одной завершённой трассе.
Совместное использование
Типичная продакшен-схема использует оба инструмента, и разделение получается чистым, потому что инструментам нужно разное. Инструментируйте агента через LangSmith или Langfuse и трассируйте каждый запуск. Отберите запуски, которые заслуживают человеческого мнения, обычно это сбои, пограничные случаи и случайная контрольная выборка. Сконвертируйте их для Potato, проведите исследование разметки с несколькими разметчиками на трассу и читайте отчёт о согласии рядом с оценками. Возвращайте счётчики таксономии ошибок в разработку, где распределение подтипов покажет, одна ли у вас систематическая проблема или длинный хвост.
python -m potato.trace_converter \
--input langfuse_failed_traces.json \
--output data/traces_to_review.jsonl \
--input-format langfuse
potato start config.yaml -p 8000Как выбрать
Берите LangSmith, когда приложение построено на LangChain или LangGraph и нужна видимость в продакшене, поскольку трассы приходят без работы по инструментированию, а управляемый сервис снимает вопрос инфраструктуры. Берите Langfuse, когда вам нужна та же видимость в виде открытого кода с несколькими провайдерами и версионирование промптов в том же инструменте. Берите Potato, когда нужный вам результат это набор человеческих меток, который можно защитить, когда исследованию нужны несколько разметчиков на элемент и показатель согласия, когда агенты настолько кодовые, мультиагентные или воплощённые, что трассе нужно специально созданное отображение, или когда данные должны оставаться на вашей собственной инфраструктуре. Potato распространяется под GPL-3.0-or-later и размещается у вас, без оплаты за место или за трассу.
Утверждения о LangSmith и Langfuse здесь отражают их документацию по состоянию на 2026-06-24, а оба инструмента меняются быстро. Исправления приветствуются в репозитории на GitHub. По самой настройке смотрите руководство по оценке агентов, а разобранный пример от сырых трасс до экспортированных суждений есть в статье Оценка ИИ-агентов.