跳至主要內容

關鍵字覆蓋率評分器

createKeywordCoverageScorer() 函式會評估 LLM 輸出涵蓋輸入中重要關鍵字的程度。它會分析關鍵字是否出現以及相符情形,同時忽略常用字詞與停用詞。

參數
「參數」的直接連結

createKeywordCoverageScorer() 函式不接受任何選項。

此函式會傳回 MastraScorer 類別的執行個體。如需 .run() 方法及其輸入/輸出的詳細資訊,請參閱 MastraScorer 參考文件

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

runId:

string
此次執行的 ID(選填)。

preprocessStepResult:

object
包含擷取關鍵字的物件:{ referenceKeywords: Set<string>, responseKeywords: Set<string> }

analyzeStepResult:

object
包含關鍵字覆蓋情形的物件:{ totalKeywords: number, matchedKeywords: number }

score:

number
覆蓋率分數(0–1),代表相符關鍵字所占的比例。

.run() 會傳回以下結構的結果:

{
runId: string,
extractStepResult: {
referenceKeywords: Set<string>,
responseKeywords: Set<string>
},
analyzeStepResult: {
totalKeywords: number,
matchedKeywords: number
},
score: number
}

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

此評分器會比對關鍵字,並具備以下功能,以評估關鍵字覆蓋率:

  • 過濾常用字詞與停用詞(例如「the」、「a」與「and」)
  • 不區分大小寫的比對
  • 處理詞形變化
  • 特別處理技術術語與複合詞

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

  1. 處理輸入與輸出中的關鍵字:
    • 濾除常用字詞與停用詞
    • 將大小寫與詞形標準化
    • 處理特殊術語與複合詞
  2. 計算關鍵字覆蓋率:
    • 比對兩段文字中的關鍵字
    • 計算成功相符的數量
    • 計算覆蓋比例

最終分數:(matched_keywords / total_keywords) * scale

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

關鍵字覆蓋率分數介於 0 到 1:

  • 1.0:完整涵蓋,所有關鍵字都存在。
  • 0.7 到 0.9:覆蓋率高,包含大多數關鍵字。
  • 0.4 到 0.6:部分涵蓋,存在一些關鍵字。
  • 0.1 到 0.3:覆蓋率低,只有少數關鍵字相符。
  • 0.0:回應不包含任何關鍵字。

特殊情況
「特殊情況」的直接連結

此評分器會處理數種特殊情況:

  • 輸入/輸出為空:若兩者皆空,傳回 1.0;若只有其中一者為空,則傳回 0.0
  • 單一字詞:視為一個關鍵字
  • 技術術語:保留複合技術術語(例如「React.js」、「machine learning」)
  • 大小寫差異:「JavaScript」會與「javascript」相符
  • 常用字詞:評分時予以忽略,以聚焦於有用的關鍵字

範例
「範例」的直接連結

評估輸入查詢與 Agent 回應之間的關鍵字覆蓋率:

src/example-keyword-coverage.ts
import { runEvals } from '@mastra/core/evals'
import { createKeywordCoverageScorer } from '@mastra/evals/scorers/prebuilt'
import { myAgent } from './agent'

const scorer = createKeywordCoverageScorer()

const result = await runEvals({
data: [
{
input: 'JavaScript frameworks like React and Vue',
},
{
input: 'TypeScript offers interfaces, generics, and type inference',
},
{
input:
'Machine learning models require data preprocessing, feature engineering, and hyperparameter tuning',
},
],
scorers: [scorer],
target: myAgent,
onItemComplete: ({ scorerResults }) => {
console.log({
score: scorerResults[scorer.id].score,
})
},
})

console.log(result.scores)

如需 runEvals 的詳細資訊,請參閱 runEvals 參考文件

如需將此評分器新增至 Agent,請參閱評分器概觀指南。