Skip to content
Guides1 min read

如何用人工標註評估 RAG 系統

評估檢索增強生成的實用指南:分別衡量檢索相關性和回答忠實度,並在 Potato 中用片段標註標出缺乏依據的論斷。

Potato Team

檢索增強生成系統可能以兩種完全不同的方式失敗,而單一的品質分數會掩蓋你正在面對的到底是哪一種:要麼是檢索器拉取了錯誤的文件,要麼是生成器拿到了好文件卻置之不理。如果你只衡量"回答好不好",就無法區分這兩者,也就無法判斷該修復系統的哪一半。

A RAG pipeline with three annotation points: retrieval relevance, answer faithfulness, and citation accuracyWhere RAG goes wrong

解決辦法是分別評估檢索和生成,並精確標出回答在哪裡偏離了它的來源。

值得標註的三件事

  1. **檢索相關性。**對於每一份檢索到的文件,它是否真的與查詢相關?
  2. **回答忠實度。**生成的回答是否紮根於這些文件,沒有憑空捏造的論斷?
  3. **引用準確性。**回答中的論斷能否追溯回它所引用的來源?

把這三者分開,就能把含糊的"回答錯了"變成"檢索到的文件是對的,但模型添加了一個文件中沒有的論斷"。這是一個生成問題,它指向的修復方向與檢索失敗截然不同。

在 Potato 中進行配置

你可以把這三項都放在同一個介面上。用 multirate 在同一個量表上為每份檢索到的文件打分,用李克特量表評估忠實度,並在回答中高亮出有問題的片段。

yaml
annotation_schemes:
  - annotation_type: multirate
    name: retrieval_relevance
    description: "Rate the relevance of each retrieved document to the query."
    labels: ["Irrelevant", "Somewhat", "Relevant", "Highly relevant"]
 
  - annotation_type: likert
    name: faithfulness
    description: "Is the answer faithful to the retrieved documents?"
    size: 5
    min_label: "Many unsupported claims"
    max_label: "Fully grounded"
 
  - annotation_type: span
    name: problems
    description: "Highlight any unsupported or incorrect claim in the answer."
    labels: [unsupported_claim, contradicted, hallucination]

正是片段標註讓資料變得可付諸行動。5 分中得 2 分的忠實度評分告訴你某處出了問題;而高亮出的片段則告訴你是哪一句、又錯在哪裡。

那些悄悄毀掉 RAG 評估的細節

**沒有來源,標註者無法判斷忠實度。**把查詢、檢索到的文件和回答放在同一個介面上。如果文件被摺疊起來或放在另一個標籤頁裡,人們就會根據回答聽起來是否正確來打分,而這恰恰是你想要捕捉的失敗模式。

**"相關"需要一個定義。**是與查詢相關,還是確實被用在了回答裡?這是兩種不同的判斷,如果你不事先確定,標註者就會各執一詞。

**忠實度才是那個主觀的部分。**在一部分樣本上收集重疊標註,並專門檢查忠實度評分的一致性。如果那裡一致性偏低,就先收緊"缺乏依據"的定義,再去信任這些數字。

接下來去哪裡

完整的演練,包括這三個標註方案如何相互配合,可參見 RAG 評估指南。若要在任意模型輸出(而不僅是 RAG)中標記事實錯誤和幻覺,請參見用片段標註檢測幻覺。如果你想更廣泛地評估智慧體,可以從如何評估 AI 智慧體開始。