Skip to content

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 StudioWeb 应用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。

yaml
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 中。对于以文件形式导出的轨迹,先转换导出文件:

bash
python -m potato.trace_converter --input langfuse_traces.json --output data/traces.jsonl --input-format langfuse

Potato 用 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。

延伸阅读

参考文献

  1. 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