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