Skip to content
指南閱讀約需 8 分鐘

Potato 對比 LangSmith 和 Langfuse 的智慧體評測:一份實用比較

LangSmith、Langfuse 和 Potato 在智慧體評測中各自為什麼而造,如何在它們之間搬運軌跡,以及人類判斷在哪裡被測量。

Potato Team

LangSmith 和 Langfuse 是為在生產環境中追蹤和監控 LLM 應用而造的。Potato 是為收集關於這些軌跡的結構化人類判斷、並測量判斷者之間有多一致而造的。兩樣都需要的團隊,通常用可觀測性工具做採集,用 Potato 跑人類研究。

這三個工具重疊得足夠多,所以這個比較經常被提起,而它們只在一個點上重疊:三者都能把一條人類判斷掛到一次已記錄的智慧體執行上。它們各自圍繞什麼來組織則不同,這個差別決定了哪一個適合你要問的問題。

每個工具各為什麼而造

LangSmith 給 LLM 應用做埋點、追蹤和除錯,與 LangChain 和 LangGraph 的整合最深。基於這兩個框架構建的應用,軌跡不需要額外埋點就會送達,整個平臺圍繞檢查執行、跟蹤延遲與成本、以及在資料集上執行評測實驗來組織。它的標註佇列支援量規反饋鍵、可配置的每次執行評審人數、成對佇列,以及互相看不到彼此反饋的評審者。

Langfuse 以開源方式覆蓋同樣的範圍,面向任意 LLM 應用而不是某一個框架,並把提示詞管理和追蹤打包在一起。打分可以在軌跡層面進行,也可以在觀測(span)層面進行,它的分類分值配置讓你定義一組固定的標籤集,並給同一個 span 掛上多個具名分值。

Potato 是一個被擴充套件到智慧體軌跡上的標註平臺。它圍繞研究而不是圍繞應用來組織,所以它的基本單位是誰標註什麼、每個項目由多少人看、他們意見不一致時會怎樣,以及一致性統計量對這些標籤是否有意義說了什麼。在當前版本登記的 61 種標註類型裡,智慧體軌跡只是其中一種項目類型,這也是它們能直接繼承標註者間一致性、訓練階段、裁定和眾包的原因,這些都不必為智慧體重做一遍。

三者沒有哪一個在抽象意義上更好。有用的問題是,你的瓶頸在於看清智慧體做了什麼,還是在於相信你正在收集的那些關於它的人類標籤。

在它們之間搬運軌跡

Potato 是事後讀取軌跡,而不是給你的程式碼做埋點,所以它為 15 種軌跡格式登記了轉換器:

bash
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。

把一份匯出轉換過來,在工作流的每個方向上都只是一條命令:

bash
# 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 的軌跡接入接受以 LangSmith 執行載荷格式提交到 /api/traces/* 的執行記錄,所以 LangChain 的回呼或者追蹤 SDK 可以在執行發生的同時就把它們推進標註佇列:

yaml
trace_ingestion:
  enabled: true
  api_key: "your-api-key"
  notify_annotators: true

軌跡進來之後 Potato 多做了什麼

方案是一個標註平臺立足的地方。trajectory_eval 在一個掛到一條軌跡上的方案裡,同時承載正確性標籤、帶子類型的分層錯誤分類體系、帶可配置權重的嚴重程度等級,以及一個持續累計的品質分:

yaml
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 方案,它有三種模式。binary 模式展示兩個可點選的方塊和一個可選的平局按鈕,scale 模式把這個選擇換成兩個項目之間的滑塊,multi_dimension 模式則要求按有用性、準確性、安全性這類具名維度分別給出 A/B 判斷。

程式設計智慧體有自己的展示方式,因為把統一 diff 當成 JSON 字串來讀是沒法評審的:

Potato 帶 diff 渲染的程式設計軌跡展示Potato 的程式設計軌跡展示,帶統一 diff 渲染、語法高亮和檔案樹

coding_trace 展示類型帶檔案樹渲染 diff,並摺疊過長的終端輸出,code_review 方案收集按行錨定的評論(分為可配置的類別)、按檔案的評分維度,以及一個類似拉取請求的結論。隨後 coding_eval 匯出器寫出過程獎勵模型標籤、程式碼評審標註、DPO 偏好對,以及與 SWE-bench 相容的分數,這是訓練資料需要的形狀,而不是儀表盤需要的形狀。

網頁智慧體軌跡渲染成帶 SVG 動作疊加層的截圖和一條膠片帶:

帶截圖和膠片帶的網頁智慧體軌跡檢視器網頁智慧體軌跡檢視器,展示帶 SVG 動作疊加層的截圖和膠片帶導航

多智慧體執行有自己的標註介面,而不是被壓平成一條步驟流。登錄檔裡帶有這些方案:可由標註者編輯的互動圖、跨智慧體的失敗歸因、交接評審、按智慧體和按團隊的評分卡、共享時間線上的工具爭用,以及湧現行為標記。具身智慧體和多模態智慧體也一樣,計算機操作軌跡、全雙工語音互動和影片時間定位都是一等公民方案。

不只是收集判斷,還要測量判斷

一個項目裡最晚暴露出來的差別,是兩名標註者意見不一致之後會發生什麼。Potato 把分歧當作一次測量,而不是一個待解決的衝突,所以文本標註研究用的那套一致性統計量、裁定佇列、訓練階段和金標項目,不需要額外配置就同樣適用於智慧體軌跡。Potato 自己的工具對比記錄到,按 2026-06-24 那次核查,那些追蹤平臺是為把人類判斷作為分數收集而造的,它們當中沒有一個記錄了針對這些判斷的可靠性統計量,而且 Langfuse 會替換掉同一條軌跡上先前的標註,所以在那裡做獨立的雙重標註需要變通辦法。

當評測本身就是證據時,這一點就要緊了。用未經複核的單份判斷算出來的成功率沒有誤差棒,而一個已經漂移的評審者,看上去和一個變好了的智慧體一模一樣。

在智慧體執行時觀察它

Potato 也可以在標註頁面裡直接執行一個智慧體,而不是回放一份錄製。live_agent 塊把一個視覺模型接到無頭瀏覽器上,並把會話流式傳給標註者,標註者可以暫停它、傳送指令,或者接管手動控制:

yaml
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,用每條軌跡多名標註者的方式跑標註研究,把一致性報告和分數放在一起讀。再把錯誤分類的計數反饋回開發,子類型的分佈會說清楚你面對的是一個系統性失敗,還是一條長尾。

bash
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

怎麼選

當應用建在 LangChain 或 LangGraph 上、需要的是生產可見性時,選 LangSmith,因為軌跡不用做埋點工作就會送達,託管服務也免去了基礎設施的問題。當你想以開源方式、跨多家提供商拿到同樣的可見性,並且希望提示詞版本管理在同一個工具裡時,選 Langfuse。當你需要的產出是一組站得住腳的人類標籤,當研究需要每個項目多名標註者和一個一致性數字,當智慧體是程式設計型、多智慧體或具身型、軌跡需要專門的展示方式,或者當資料必須留在你自己的基礎設施上時,選 Potato。Potato 採用 GPL-3.0-or-later 許可並自託管,沒有按席位或按軌跡的費用。

這裡關於 LangSmith 和 Langfuse 的陳述反映的是 2026-06-24 觀察到的它們的文件,而兩者的迭代都很快。歡迎在 GitHub 倉庫提出更正。配置本身見智慧體評測指南,從原始軌跡到匯出判斷的完整示例見評測 AI 智慧體。