Skip to content
Guides7 min read

智能体评估工具对比:Potato、LangSmith 与 Langfuse

从 trace 渲染、逐步与多智能体标注、多模态智能体评审、编码智能体、实时观察、价格和自托管等方面,对比 Potato 与 LangSmith、Langfuse、Labelbox、Scale AI。

Potato Team

三个工具,三种出发点

Potato、LangSmith 和 Langfuse 都涉及智能体评估,但它们的起点不一样:

  • Potato 以标注为本。它最初是为了收集针对 AI 输出的结构化人类判断而做的,后来扩展到支持智能体 trace、代码 diff 和实时观察。它的长处在于标注 schema 的深度和可配置性。
  • LangSmith 以可观测性为本。它最初是为了给生产环境中的 LangChain 应用做埋点、追踪和调试。标注功能是后来加的,用于支撑 LangChain 生态内部的评估流程。
  • Langfuse 是开源的可观测性工具。它覆盖任意 LLM 应用的 tracing、prompt 管理和评估。标注功能可用,但相对监控是次要的。

没有哪一个在所有场景下都更好。选哪个取决于你主要需要的是标注、可观测性还是两者兼有,也取决于你是否绑定在某个特定框架生态上。


功能对比

下表对比了与 AI 智能体评估相关的能力。我们也把 Label Studio、Argilla 和 Scale AI 列了进来,因为团队常常也会一并考虑它们。

功能PotatoLangSmithLangfuseLabel StudioArgillaScale AI
主要定位标注可观测性可观测性标注标注标注
支持的 trace 格式15 种LangChain 原生Langfuse SDK定制
逐步标注完整(trajectory_eval)每个 span 一个评分 + 评论span 级结构化评分有(trace 导入)仅对话轮次定制
实时智能体观察
智能体暂停/恢复/接管
代码 diff 渲染有(unified diff、语法高亮)
终端输出渲染有(支持 ANSI 颜色)部分
PRM 数据收集有(步级正确性标签)
带行内评论的代码评审有(行级、分类)
成对比较3 种模式(并排、先后、盲测)有限(1 种模式)有(1 种模式)有(1 种模式)
多维度评分量表有(维度、量表均可配置)部分
错误分类体系分层、可配置类别型评分配置定制
严重程度评分有(加权、累计分数)仅数值评分定制
多智能体交互图(标注者可编辑)仅可视化 ¹
跨智能体失败归因仅能变通实现仅托管服务
交接评审(一等对象)
单智能体 + 团队级记分卡
computer-use 轨迹(点击定位)通用图像工具托管数据集 ²
全双工语音(插话打断评分)仅回放仅按轮次 ³
视频时间定位(实时 IoU)IoU 仅用于标注者间一致性
自托管有(完全支持)仅企业版有(开源)有(开源)有(开源)VPC(企业版)
免费是(完全开源)否(免费额度有限)部分(开源内核)部分(开源内核)是(开源)
框架锁定LangChain 生态

¹ Langfuse 的 Agent Graphs(beta)把一次多智能体运行渲染成图,但那是只读的调试视图,没有文档说明标注者可以在上面标出关键路径或标记某条边。² Scale AI 把 GUI / computer-use 轨迹的标注作为托管数据服务来做(例如它在 CVAT 上的 CUA-Suite 工作),而不是一项你自己配置的自助功能。³ Scale 的 Voice Showdown 是按轮次的;全双工的插话/重叠评分只是列在计划中,尚未提供(截至 2026-03-20)。

对比于 2026-06-24 观察得出,对应 LangSmith(docs.langchain.com)、Langfuse(MIT 内核,持续发布)、Label Studio 1.23.0、Argilla 2.8.0 和 Scale AI 的产品页面。这些工具迭代很快——如果这里有内容已经过时,欢迎到 GitHub 仓库提交更正。

在这些工具里,只有 Potato 会用规范的 diff 格式渲染编码智能体的 trace:

Potato 的编码 trace 显示,带 diff 渲染Potato 的 CodingTraceDisplay,带 unified diff 渲染、语法高亮和文件树


trace 格式支持的细节

一个很实际的差别是:每个工具原生支持多少种智能体 trace 格式。

Potato 内置了 15 种格式的转换器:

bash
# See all available converters
python -m potato.trace_converter --list-formats
 
# Available formats:
#   react                 - ReAct-style (Thought/Action/Observation)
#   openai                - OpenAI Chat Completions and Assistants API
#   anthropic             - Anthropic Messages API with tool_use
#   langchain             - LangChain / LangSmith run trace exports
#   langfuse              - Langfuse observation and trace exports
#   multi_agent           - CrewAI, AutoGen, and LangGraph multi-agent logs
#   swebench              - SWE-bench benchmark traces
#   swe_agent_trajectory  - SWE-Agent trajectory files
#   claude_code           - Claude Code and coding-agent session logs
#   aider                 - Aider chat histories with edit blocks
#   webarena              - WebArena / VisualWebArena episode traces
#   web_agent             - Mind2Web, Computer Use, and raw browser recordings
#   mcp                   - Model Context Protocol interaction logs
#   otel                  - OpenTelemetry / OTLP trace exports
#   atif                  - Agent Trace Interchange Format

没有单独的 langsmith 转换器:LangSmith 的导出走 langchain,AutoGen 和 CrewAI 走 multi_agent。如果你的框架不在列表里,--auto-detect 会根据字段特征尝试挑一个转换器,你也可以继承 BaseTraceConverter 自己写一个。

LangSmith 原生支持 LangChain 的 trace。如果你的智能体用 LangChain 或 LangGraph 搭建,trace 会自动流入。如果不是,你需要用 LangSmith SDK 手动给代码埋点,或者把 trace 转换成 LangSmith 的格式。

Langfuse 原生支持通过 Langfuse SDK 埋点产生的 trace。它支持 Python 和 JavaScript,并集成了 LangChain、LlamaIndex 和 OpenAI。和 LangSmith 一样,它要求在代码层面埋点,而不是事后转换 trace。

把 LangSmith 或 Langfuse 的 trace 导入 Potato

如果你的 trace 已经在 LangSmith 或 Langfuse 里,又想用 Potato 的标注功能,转换器可以处理:

bash
# Export from LangSmith and convert
python -m potato.trace_converter \
  --input langsmith_export.jsonl \
  --output data/traces.jsonl \
  --input-format langchain
 
# Export from Langfuse and convert
python -m potato.trace_converter \
  --input langfuse_traces.json \
  --output data/traces.jsonl \
  --input-format langfuse

所以你可以继续用 LangSmith 或 Langfuse 做生产监控,需要做细致的人工评估时再把 trace 拿到 Potato 里。


逐步标注:差距最大的地方

能力上差别最大的是逐步标注的深度。

Potato 提供 trajectory_eval schema,包含:

  • 步级正确性标签(correct/incorrect)
  • 分层错误分类体系的选择
  • 权重可配置的严重程度等级
  • 逐步更新的累计分数
  • 每一步的自由文本理由
  • 以上都通过 YAML 配置
yaml
# Potato: rich per-step annotation
annotation_schemes:
  - annotation_type: "trajectory_eval"

LangSmith 允许你给一条 trace 中的单次 run 附上数值评分或类别标签。这对基本的质量跟踪有用,但不支持错误分类体系、严重程度加权或累计分数。它没有内置的逐步评审界面;你是在 trace 详情视图里给 run 打分。

Langfuse 支持在 trace 级和 observation(span)级打分,它的类别型 score config 允许你定义固定的标签集——一套可用的错误分类体系——并给同一个 span 挂上多个具名评分。它没有作为一等 schema 提供的,是分层的分类体系,以及跨步骤累积的、按严重程度加权的累计分数;这些需要你自己用扁平的 score config 拼出来。

所以诚实地讲,这个差距比过去要小:Langfuse 和 Label Studio(现在可以导入 LangGraph/CrewAI/AutoGen 的 trace 做逐步评审)都能做结构化的逐步打分。Potato 仍然是专门为此而建的地方在于组合——分层错误分类体系加严重程度权重加累计分数,全都在一个 trajectory_eval schema 里——而这正是构建 PRM 训练数据或定位智能体最先在哪里出错时需要的。


编码智能体支持

评估编码智能体(Claude Code、Aider、SWE-Agent、Devin、OpenHands)意味着要渲染代码 diff 和终端输出,好让评审快起来。这是 Potato 领先于其他工具的地方。

Potato 会渲染:

  • 带红/绿高亮和语法高亮的 unified diff
  • 支持 ANSI 颜色码的终端输出
  • 锚定到具体行的 diff 行内评论
  • 文件级质量评分
  • PR 风格的批准 / 要求修改结论

LangSmith 把工具调用的输入输出显示为格式化后的 JSON。代码 diff 以原始文本字符串的形式出现在工具输出里。没有 diff 渲染、语法高亮或行内评论。

Langfuse 同样把 trace 数据显示为结构化 JSON。代码内容显示为纯文本。对 diff 或终端输出没有专门渲染。

对编码智能体来说,这直接改变评审者一天的工作。在语法高亮的 unified diff 视图里配合行内评论看一份 50 行的 diff,花的时间只是把同一份 diff 当作 JSON 字符串读的一小部分。

Web 智能体的 trace 包含带 SVG 叠加层的截图和胶片条导航:

Web 智能体 trace 查看器,带截图和胶片条Web 智能体 trace 查看器,展示带 SVG 动作叠加层的截图和胶片条导航


实时智能体观察

Potato 可以实时观察一个正在运行的智能体,这一点 LangSmith 和 Langfuse 的标注流程都做不到。

在 Potato 的实时观察模式下,标注者可以逐步看着智能体干活,暂停它来查看当前状态,之后再让它继续,也可以接管会话来纠正方向或者自己手动把任务做完。

这在几种情况下有帮助:在智能体做出破坏性操作之前把它拦下来(安全)、把人的纠正记录成示范数据(训练),以及观察你中途介入时智能体作何反应(交互式评估)。

yaml
# Enable live observation in Potato config
live_observation:
  enabled: true
  agent_endpoint: "http://localhost:5000/agent"
  allow_pause: true
  allow_takeover: true
  auto_pause_on:
    - action_type: "delete"
    - action_type: "execute"
    - confidence_below: 0.3

LangSmith 和 Langfuse 的设计目标是对已完成的 trace 做事后分析,不是与运行中的智能体实时交互。


成对比较

把两个智能体的输出并排比较是常见的评估模式,尤其是在做模型版本 A/B 测试或比较智能体架构时。

Potato 提供三种比较模式:

  • 并排:两条 trace 同时可见,滚动同步
  • 先后:先看 trace A,再看 trace B,然后下判断
  • 盲测:两条 trace 被随机标为 A 和 B,不显示模型来源
yaml
annotation_schemes:
  - annotation_type: "pairwise"

LangSmith 通过评估实验里的 comparison view 支持基础的成对比较。你可以跨不同模型版本比较 run,但这个界面是为并排检查 run 设计的,不是为结构化的偏好标注设计的。

Langfuse 没有内置的成对比较标注功能。


各自适合什么时候用

用 Potato,当:

  • 标注是你的主要目标:你要的是结构化的人类判断,不只是监控
  • 你需要编码智能体支持:diff 渲染、行内评论、终端输出显示
  • 你在收集 PRM 训练数据:带累计分数的步级正确性标签
  • 你需要自托管:数据留在自己的基础设施上,不依赖云
  • 你会用到多个智能体框架:15 种 trace 格式转换器,而不是绑死在单一框架上
  • 你需要丰富的评估 schema:轨迹评估、量表评估、代码评审、成对比较
  • 预算有限:完全免费且开源

用 LangSmith,当:

  • 你已经在用 LangChain/LangGraph:trace 零配置自动流入
  • 生产监控是你的首要需求:实时 tracing、延迟跟踪、成本监控
  • 标注是次要的:你需要基本的打分和反馈,不需要深度评估 schema
  • 你想要托管服务:没有基础设施需要维护
  • 团队规模小:免费额度可能足够做轻量评估

用 Langfuse,当:

  • 你需要开源的可观测性:自托管的监控和 tracing
  • 你使用多个 LLM 提供方:对 OpenAI、Anthropic、LangChain、LlamaIndex 的集成都不错
  • 标注不是你的主要用途:有打分功能,但不是重点
  • 你想要 prompt 管理和 tracing 放在一起:Langfuse 把 prompt 版本管理和可观测性打包在一起
  • 你需要一个免费的 LangSmith 监控替代品:Langfuse 的开源内核覆盖了大部分监控需求

互补方案:可观测性 + 标注

对不少团队来说,实际做法是用一个可观测性工具(LangSmith 或 Langfuse)做生产监控,用 Potato 做细致的人工评估。流程大致是:

  1. 给智能体埋点,用 LangSmith 或 Langfuse 做生产 tracing
  2. 抽取需要人工评审的 trace(失败案例、边界情况、随机抽样)
  3. 从可观测性工具导出这些 trace
  4. 用内置转换器转换并导入 Potato
  5. 用 Potato 丰富的标注 schema 执行人工评估
  6. 把结果反馈回你的开发循环
bash
# Example: convert failed traces exported from Langfuse and import to Potato
python -m potato.trace_converter \
  --input langfuse_failed_traces.json \
  --output data/traces_to_review.jsonl \
  --input-format langfuse

这样你既有可观测性平台的实时可见性,也有一个为标注而建的工具所提供的标注深度。


主要差异小结

其中有两块地方,这个说法最站得住脚。在我们调研过的所有工具里(商业的和开源的),只有 Potato 提供面向多智能体团队结构和多模态智能体评审的、标注者可配置的界面

  • 一张可点击、标注者可编辑的多智能体交互图——标出关键路径,标记有问题的交接。别处最接近的东西是 Langfuse 的 Agent Graphs,那是只读的调试视图。
  • 跨智能体失败归因、作为一等对象的交接评审单智能体和团队级记分卡工具争用时间线,以及涌现行为标记——这些其他工具都没有作为内置的标注构件提供。
  • 带点击定位的 computer-use 轨迹带插话打断评分的全双工语音时间线,以及带实时 IoU 的视频时间定位。Scale AI 做 GUI 定位和语音评估,但那是托管的数据集服务,而且它的语音竞技场仍是按轮次的。

在这些之上,Potato 仍然是唯一一个免费、可自托管,同时把编码智能体 diff 渲染与行内评论、PRM 数据收集、带暂停/恢复/接管的实时观察、任意框架的 trace 接入、带严重程度加权累计分数的分层错误分类体系、三种成对比较模式,以及 PR 风格代码评审集于一身的工具。

我们不知道还有哪个工具,开源的或商业的,把这些全都打包在一起——截至 2026-06-24,已对照 LangSmith、Langfuse、Labelbox、Scale AI、Label Studio、Argilla 和 Braintrust 核实(见对比表下方带日期的脚注)。LangSmith 和 Langfuse 是很强的可观测性工具,但它们的标注功能是 span 范围的评分,不是面向智能体结构的界面。Label Studio 和 Argilla 是通用标注工具;Label Studio 加装了 trace 导入,但两者都没有上面说的多智能体或多模态智能体界面。Labelbox 和 Scale 提供智能体评估的数据产品,但形式是付费的云服务或托管服务,而不是一个研究团队可以自己运行和改造的自托管工具。

如果你的目标是搞清楚智能体如何以及为何成功或失败,并收集改进它们所需的训练数据,Potato 补上了其他工具留下的这块空缺。


迁移路径

从 LangSmith 迁到 Potato(用于标注)

bash
# 1. Export your dataset from LangSmith
langsmith export dataset my_eval_dataset -o langsmith_data.jsonl
 
# 2. Convert to Potato format
python -m potato.trace_converter \
  --input langsmith_data.jsonl \
  --output data/traces.jsonl \
  --input-format langchain
 
# 3. Create your Potato config and start annotating
potato start config.yaml -p 8000

从 Langfuse 迁到 Potato(用于标注)

python
# 1. Export traces from Langfuse via API
import requests
 
response = requests.get(
    "https://cloud.langfuse.com/api/public/traces",
    headers={"Authorization": "Bearer your_api_key"},
    params={"limit": 500}
)
 
with open("langfuse_traces.json", "w") as f:
    json.dump(response.json()["data"], f)
bash
# 2. Convert to Potato format
python -m potato.trace_converter \
  --input langfuse_traces.json \
  --output data/traces.jsonl \
  --input-format langfuse
 
# 3. Start annotating
potato start config.yaml -p 8000

从 Label Studio 或 Argilla 迁移(用于智能体评估)

如果你目前用 Label Studio 或 Argilla 做通用标注,想再加上智能体评估能力,Potato 可以和现有工具并行运行。用 Label Studio 或 Argilla 处理非智能体的标注任务(NER、分类等),用 Potato 做需要 trace 渲染、逐步标注和代码评审的智能体专项评估。


结语

在 Potato、LangSmith 和 Langfuse 之间做选择,不是抽象地问哪个最好。取决于你主要需要什么:

  • 要在生产环境监控智能体,用 LangSmith 或 Langfuse。
  • 要用结构化的人工标注评估智能体行为,用 Potato。
  • 两者都要,就一起用。它们互补。

该问的问题是:你的主要目标是观察智能体做了什么,还是评估它做得有多好。如果是评估,Potato 就是为此而建的。

更完整的逐项对比见对比文档智能体评估指南