LLM 与智能体轨迹的人工审核队列
轨迹如何进入人工审核队列、审核者给出哪些标签,以及 Langfuse、LangSmith 和 Potato 如何把这些标签变成分数和评测数据集。
人工审核队列是一份等待人工打标签的 LLM 或智能体轨迹(trace)清单,Langfuse 和 LangSmith 把这项功能称为标注队列。Langfuse、LangSmith 和 Arize AX 把标注队列内置在追踪工具中,Braintrust 在 Review 页面上把日志分派给审核者,Arize Phoenix 则让审核者在轨迹视图中直接标注 span。Potato 是一款免费、可自托管的审核工具:它从 Langfuse、webhook 或导出文件读取轨迹,把每条轨迹分给多名审核者,报告审核者之间的一致程度,并把合并后的结果作为分数写回 Langfuse 或 LangSmith。
一条轨迹记录 LLM 应用的一次运行,一个 span(在 Langfuse 中称为 observation)记录这次运行中的一步,例如一次模型调用或一次工具调用(OpenTelemetry traces)。智能体对话记录是多步智能体或多轮对话的轨迹。审核者给轨迹打标签有两个原因。第一,在LLM 评审(LLM-as-a-judge)独立给生产流量打分之前,要以人工标签为参照来检验它(Zheng et al., 2023)。第二,审核过的轨迹会成为评测数据集。评测数据集是一组固定的输入和期望输出,每个新的提示词或模型版本都在这组数据上测试。标注者间一致性指两名审核者给出相同标签的频率,通常用 Cohen's kappa 或 Krippendorff's alpha 报告。
AI 智能体评估工具对比逐项对比了各平台的功能。LLM 人工评估与偏好数据工具对比讨论偏好数据。标注智能体轨迹讨论如何设计步骤级的错误分类体系。
审核队列的轨迹来源
团队很少审核每一条轨迹,因此每个工具都提供了挑选轨迹交给人工的办法。在 Langfuse 中,可以在表格里选中轨迹、observation 或会话,再点 Add to queue,也可以在某个条目的详情页里单独标注它。LangSmith 的队列接收手动加入或由自动化规则加入的运行和整段会话线程。一次手动操作最多可以把 100 个运行或线程加入队列。LangSmith 的线程规则会在对话进入空闲状态后把它加入队列。Arize AX 用某个时间范围内的 span 或数据集样例填充队列。
Potato 通过三种方式读取轨迹:
- 导出文件。
python -m potato.trace_converter能把 15 种轨迹格式转换为 Potato 的 JSONL,其中包括用于 LangSmith 运行导出的langchain、langfuse,以及用于 Phoenix 或 Braintrust 导出器产生的 OpenTelemetry 和 OpenInference span 的otel。 - Webhook。 启用
trace_ingestion后,Potato 接收发送到/api/traces/webhook、/api/traces/langsmith和/api/traces/otel的轨迹,并在审核者工作期间把每条轨迹加入队列。 - Langfuse 轮询。
trace_ingestion.sources下的langfuse条目会按固定间隔从某个 Langfuse 项目拉取新轨迹。
Potato 决定哪些传入的轨迹交给审核者以及交给的顺序。自动化规则按某个字段和比例对传入轨迹抽样。分诊队列优先把出错的轨迹、收到差评(thumbs-down)的轨迹和自动评分偏低的轨迹交给审核者。
审核者给轨迹打的标签
审核者给出哪种标签,取决于标签之后的用途。通过或不通过的判定可以算出成功率,按每条标准给出的评分细则分数可以作为评审模型对齐的目标,修正后的输出则可以作为训练样例。下表中每种标签都有一个 Potato 方案来记录。
| 标签 | 示例 | Potato 方案 |
|---|---|---|
| 通过或不通过 | 智能体解决了这个请求吗? | radio |
| 评分细则分数 | 准确性、语气和安全性,各按 1-5 分打分 | rubric_eval、likert |
| 错误片段 | 高亮有幻觉的句子,并给出类型和严重程度 | error_span |
| 步骤正误 | 标出第一个出错的步骤,或逐步评判 | process_reward、trajectory_eval |
| 工具调用 | 工具选对了吗,参数对吗 | tool_call_review |
| 多智能体运行中的归因 | 哪个智能体的哪一步导致了失败 | failure_attribution、agent_scorecard |
| 修正后的输出 | 改写最终答案或某个错误步骤 | text_edit、trajectory_edit |
| 两次运行之间的偏好 | 回答 A、回答 B 或平局 | pairwise |
追踪平台把同样的判断记录为分数。Langfuse 在轨迹或 observation 上存储修正后的输出。LangSmith 的审核者编写断言,这些断言成为数据集样例的期望输出;Braintrust 可以把自由格式的分数写入 expected 字段。LangSmith 的成对比较队列把来自两次实验的运行并排显示,审核者在 A、B 和 Equal 中选择。
各工具的审核队列功能
Potato 团队于 2026-11-02 对照各项目自己的页面核查了下表中的许可证、方案和功能。
| 工具 | 运行方式 | 许可证或价格 | 审核功能 |
|---|---|---|---|
| Langfuse | 托管云服务或自托管 | MIT,自托管免费且包含标注队列;Cloud Hobby 免费,含 1 个队列;Core 每月 29 美元,含 3 个;Pro 每月 199 美元,队列不限 | 轨迹、observation 和会话的队列;修正后的输出;两个分数名称之间的 Cohen's kappa |
| LangSmith | 托管云服务 | Developer 免费,限 1 个席位;Plus 每席位每月 39 美元;自托管仅限 Enterprise | 单次运行队列和成对比较队列、线程审核、每次运行固定的审核者人数,以及 Add to Dataset |
| Arize Phoenix | 通过 pip 或 Docker 自托管 | Elastic License 2.0 | 来自人、LLM 或代码的分类、连续和自由格式标注,每条都注明作者 |
| Arize AX | 托管平台 | 商业许可 | span 或数据集样例的队列,分派方式为 ALL 或 RANDOM |
| Braintrust | 托管云服务 | Starter 免费,每个项目 1 个人工审核分数;Pro 每月 249 美元;本地部署仅限 Enterprise | 指定审核者、盲审、分数写入 expected |
| Label Studio | Web 应用 | Community Edition 采用 Apache-2.0;轨迹审核模板需要 Enterprise | 对通过 notebook 拉取的 Langfuse 或 Braintrust 轨迹,按轮次和按轨迹判定通过或不通过 |
| Argilla | 运行在 Docker 或 Hugging Face Space 上的 Web 应用 | Apache-2.0 | 通过 ChatField 处理对话记录,可设置每条记录的最少回答数 |
| Potato | 运行在你自己机器上的 Python Web 服务器 | GPL-3.0-or-later,免费 | 每条轨迹多名盲审审核者、一致性、步骤级方案,以及把分数发回 Langfuse 或 LangSmith |
Argilla 的代码仓库说明,最初的作者已经转向其他工作,项目只发布错误修复和补丁,不再增加新功能。托管平台适合已经在其中某个平台上追踪生产流量的团队。在托管平台上,审核者打开轨迹的工具,就是工程师调试这条轨迹的工具。
Humanloop 的迁移指南说明,Humanloop 平台将于 2025 年 9 月 8 日停止服务,此后平台和全部数据将永久无法访问。2025 年 8 月 13 日,TechCrunch 报道称其联合创始人和大部分团队成员已加入 Anthropic,Anthropic 发言人表示 Anthropic 没有收购 Humanloop 的资产或知识产权。如果需要在一个托管产品里同时完成自动评测和人工审核,最接近的托管替代品是 Langfuse、LangSmith、Braintrust 和 Arize。需要在每条轨迹上获得盲审审核者之间一致性的团队,可以在这四个平台中的任何一个旁边加上 Potato。
每条轨迹的审核者人数与一致性
每条轨迹只有一名审核者时,标签无从检验;两名盲审审核者则能显示哪些轨迹存在歧义,以及评分细则是否清楚。LangSmith 的队列可以设置每次运行的审核者人数,LangSmith 的审核者看不到彼此的反馈。Braintrust 在审核者提交之前隐藏其他人的分数。开启 Require all scores 后,Braintrust 的一行要等所有指定的审核者都打完分才算完成。Phoenix 列出一个 span 上的每条标注及其作者。在 Langfuse 论坛上,用户于 2025 年 11 月 7 日反映,两个人仍然无法在一个队列里独立标注同一条轨迹。讨论中的变通办法是每名审核者一个分数配置。最新一条评论的日期是 2026 年 4 月 22 日,描述的仍是变通办法。Langfuse 的分数分析可以计算任意两个分数名称之间的 Cohen's kappa,每次比较两个。
在 Potato 中,num_annotators_per_item 设定每条轨迹由几名审核者查看。/admin/iaa 看板对分类方案报告 Cohen's kappa、Fleiss' kappa 和 Krippendorff's alpha,对有序方案报告加权 kappa;/admin/api/step_agreement 报告步骤级标签的一致性。裁决者在 /adjudicate 页面上处理分歧,何时需要裁决见裁决与分歧处理。系数的选择见标注者间一致性详解。
把标签送回追踪工具和评测数据集
审核得到的标签,要进入测试下一个版本所用的评测数据集,才真正派上用场。LangSmith 的审核者可以在队列中把一次运行或整段线程加入数据集。Langfuse 把 observation 加入数据集时会附上指向源轨迹的链接,Langfuse 的分数 API 把修正后的输出作为 CORRECTION 类型的分数返回。Phoenix 把 span 标注传递到数据集,Braintrust 则从审核过的日志构建数据集。
Potato 通过三种方式返回标签:
- 原始轨迹上的分数。 启用
trace_ingestion.writeback后,对于来自 Langfuse 轮询器或 LangSmith webhook 的轨迹,在min_annotators人作答之后,每个方案会生成一个分数。radio的结果取多数标签,multiselect的结果是超过半数审核者选中的类别集合。评论和元数据记录标注者人数以及意见一致的审核者对所占的比例。票数持平时等待裁决。process_reward这类步骤级方案还会给每个 Langfuse observation 打分。 - 训练数据。
trajectory_correction导出器把每条修正后的轨迹写成一条 SFT 记录(prompt、completion)和一条 DPO 记录(prompt、chosen、rejected),见用于 SFT/DPO 的轨迹编辑。 - 文件和数据集。 Potato 可以导出为 CSV、JSONL、Parquet、Hugging Face 数据集和
agent_eval。agent_eval导出按轨迹汇总分数。Potato 的数据集功能保存带版本的评测集。
由 Langfuse 供给的 Potato 审核队列
使用下面的配置,Potato 每 60 秒轮询一次 Langfuse 项目,并把每条轨迹分给两名审核者。审核者回答三个问题;两名审核者都作答后,Potato 把每个答案作为 Langfuse 分数发回轨迹,分数名称分别为 review.outcome、review.failure_mode 和 review.step_correctness。这份配置是完整的,能通过 python -m potato.validate_cli --strict。
annotation_task_name: Support agent trace review, two reviewers per trace
task_dir: .
output_annotation_dir: annotation_output/
data_files:
- data/traces.jsonl
item_properties:
id_key: id
text_key: task_description
user_config:
allow_all_users: true
users: []
# Pull new traces from Langfuse every 60 seconds, and send each merged
# answer back to the trace as a Langfuse score once two people have judged it
trace_ingestion:
enabled: true
api_key: change-me
sources:
- type: langfuse
api_url: https://cloud.langfuse.com
public_key: pk-lf-...
secret_key: sk-lf-...
poll_interval: 60
writeback:
trigger: fully_annotated
min_annotators: 2
score_prefix: review
# Two reviewers per trace, so agreement can be measured on every trace
num_annotators_per_item: 2
instance_display:
fields:
- key: steps
type: agent_trace
label: Agent trace
annotation_schemes:
- annotation_type: radio
name: outcome
description: Did the agent resolve the customer's request?
labels: [pass, fail]
- annotation_type: multiselect
name: failure_mode
description: Which problems does the trace show?
labels: [wrong_tool, hallucinated_fact, ignored_instruction, unsafe_action, none]
- annotation_type: process_reward
name: step_correctness
description: Mark the first step that went wrong.
steps_key: steps
mode: first_error用 potato start config.yaml -p 8000 启动服务器。写回只作用于来自 Langfuse 或 LangSmith 的轨迹,从 data/traces.jsonl 加载的轨迹只留在 Potato 中。对于以文件形式导出的轨迹,先转换导出文件:
python -m potato.trace_converter --input langfuse_traces.json --output data/traces.jsonl --input-format langfusePotato 用 api_key 保护 webhook 端点。如果同时设置了 LANGFUSE_PUBLIC_KEY 和 LANGFUSE_SECRET_KEY 两个变量,写回从中读取 Langfuse 密钥,否则从 langfuse 来源读取。curl -H "X-API-Key: $KEY" http://localhost:8000/admin/api/trace_writeback 显示有多少分数处于待发送、已发送、失败和暂缓状态。
Potato 作为审核队列的局限
- 不做生产追踪。 Potato 从追踪工具读取轨迹,不能取代追踪工具。
- 不提供审核者。 请邀请你自己的团队,或在 Prolific 上招募审核者,见众包平台集成。
- 只写回两个服务。 分数只发往 Langfuse 和 LangSmith。文本答案从不发送,LangSmith 只接收轨迹级的反馈。Potato 的文档说明,LangSmith 的投递遵循 LangSmith 公开的 API,但尚未在该服务上实际运行过。
- 只有 Langfuse 支持轮询。 LangSmith 的运行通过 webhook 或导出文件进入。
常见问题
什么是面向智能体和 LLM 轨迹的标注队列?
标注队列是一份由团队挑出来交给人工打标签的轨迹、span 或对话清单,每个条目都配有一组固定的问题。审核者打开下一个条目,回答问题,然后把该条目标记为完成。Langfuse、LangSmith 和 Arize AX 都把这项功能称为标注队列。Potato 在你自己的服务器上运行同样的流程,每条轨迹有多名审核者,并报告一致性。
哪些工具支持对 LLM 轨迹做人工审核和打标签?
Langfuse、LangSmith、Braintrust、Arize Phoenix 和 Arize AX 在追踪工具内部给轨迹附加人工标签。在 Label Studio Enterprise 中,审核者通过模板给 Langfuse 和 Braintrust 的轨迹打标签。Potato 向审核者展示来自 Langfuse、LangSmith、OpenTelemetry 以及另外 12 种格式的轨迹,衡量审核者之间的一致性,并把结果发回 Langfuse 或 LangSmith。
做评测和人工审核,Humanloop 有哪些替代品?
Humanloop 的托管替代品包括 Langfuse、LangSmith、Braintrust 和 Arize。这四个平台都把追踪、自动评估器和人工审核结合在一起,其中 Langfuse 采用 MIT 许可证,可以免费自托管。Humanloop 平台已于 2025 年 9 月 8 日停止服务。在人工审核这一部分,Potato 是免费、可自托管的替代品,支持盲审审核者之间的一致性,并把分数写回 Langfuse 或 LangSmith。
延伸阅读
- AI 智能体评估工具对比和 LLM 人工评估与偏好数据工具对比
- 智能体评估:Potato 与 LangSmith、Langfuse 对比
- 如何评估 AI 智能体和标注智能体轨迹
- Potato 中的智能体评估和 Potato 中的 LLM 评估
- 如何衡量 LLM 评审者与人类标注者之间的一致性
- 轨迹分数写回,见 Potato 的源码文档
参考文献
- Zheng, L., Chiang, W.-L., Sheng, Y., et al. (2023). Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena. NeurIPS 2023 Datasets and Benchmarks. https://arxiv.org/abs/2306.05685