跳至主要內容

答案相關性評分器

createAnswerRelevancyScorer() 函數接受一個包含以下屬性的選項物件:

參數
參數 的直接連結

model:

LanguageModel
用於評估相關性的模型設定。

uncertaintyWeight:

number
= 0.3
評分時給予 'unsure' 判定的權重(0 至 1)。

scale:

number
= 1
最高分數值。

此函數會傳回 MastraScorer 類別的實例。.run() 方法接受與其他評分器相同的輸入(請參閱 MastraScorer 參考),但傳回值包含下文說明的 LLM 特定欄位。

.run() 傳回值
run-returns 的直接連結

runId:

string
執行的 ID(選填)。

score:

number
相關性分數(0 至 scale,預設為 0 至 1)

preprocessPrompt:

string
在預處理步驟傳送至 LLM 的提示(選填)。

preprocessStepResult:

object
包含已擷取陳述的物件:{ statements: string[] }

analyzePrompt:

string
在分析步驟傳送至 LLM 的提示(選填)。

analyzeStepResult:

object
包含結果的物件:{ results: Array<{ result: 'yes' | 'unsure' | 'no', reason: string }> }

generateReasonPrompt:

string
在原因步驟傳送至 LLM 的提示(選填)。

reason:

string
分數的解釋。

評分詳情
評分詳情 的直接連結

評分器透過比對查詢與答案來評估相關性,過程會考慮完整度及細節程度,但不會考慮事實是否正確。

評分流程
評分流程 的直接連結

  1. 陳述預處理:
    • 在保留語境的同時,將輸出拆分成有用的陳述。
  2. 相關性分析:
    • 每項陳述會評定為:
      • "yes":直接相符,獲得完整權重
      • "unsure":大致相符,獲得部分權重(預設:0.3)
      • "no":內容不相關,權重為零
  3. 分數計算:
    • ((direct + uncertainty * partial) / total_statements) * scale

分數解讀
分數解讀 的直接連結

相關性分數介乎 0 至 1:

  • 1.0:回應以相關且聚焦的資料完整回答查詢。
  • 0.7 至 0.9:回應大致回答查詢,但可能包含少量不相關內容。
  • 0.4 至 0.6:回應局部回答查詢,當中混有相關及不相關資料。
  • 0.1 至 0.3:回應只有少量相關內容,且大致偏離查詢意圖。
  • 0.0:回應完全不相關,並未回答查詢。

範例
範例 的直接連結

在不同情境下評估 Agent 回應的相關性:

src/example-answer-relevancy.ts
import { runEvals } from '@mastra/core/evals'
import { createAnswerRelevancyScorer } from '@mastra/evals/scorers/prebuilt'
import { myAgent } from './agent'

const scorer = createAnswerRelevancyScorer({ model: 'openai/gpt-5.6-sol' })

const result = await runEvals({
data: [
{
input: 'What are the health benefits of regular exercise?',
},
{
input: 'What should a healthy breakfast include?',
},
{
input: 'What are the benefits of meditation?',
},
],
scorers: [scorer],
target: myAgent,
onItemComplete: ({ scorerResults }) => {
console.log({
score: scorerResults[scorer.id].score,
reason: scorerResults[scorer.id].reason,
})
},
})

console.log(result.scores)

有關 runEvals 的詳情,請參閱 runEvals 參考

如要將此評分器加入 Agent,請參閱評分器概覽指南。