跳至主要內容

內容相似度評分器

createContentSimilarityScorer() 函式會測量兩個字串之間的文字相似度,並提供一個分數表示兩者的相符程度。此函式支援設定是否區分大小寫及如何處理空白字元。

參數
「參數」的直接連結

createContentSimilarityScorer() 函式接受包含下列屬性的單一選項物件:

ignoreCase:

boolean
= true
比較字串時是否忽略大小寫差異。

ignoreWhitespace:

boolean
= true
比較字串時是否正規化空白字元。

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

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

runId:

string
執行 ID(選填)。

preprocessStepResult:

object
包含處理後輸入與輸出的物件:{ processedInput: string, processedOutput: string }

analyzeStepResult:

object
包含相似度的物件:{ similarity: number }

score:

number
相似度分數(0-1),1 表示完全相似。

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

此評分器會比對字元層級的內容,並依設定正規化文字,以評估文字相似度。

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

  1. 正規化文字:
    • 正規化大小寫(若 ignoreCase: true)
    • 正規化空白字元(若 ignoreWhitespace: true)
  2. 使用字串相似度演算法比較處理後的字串:
    • 分析字元序列
    • 對齊單字邊界
    • 考量相對位置
    • 納入長度差異

最終分數:similarity_value * scale

範例
「範例」的直接連結

評估預期輸出與 Agent 實際輸出之間的文字相似度:

src/example-content-similarity.ts
import { runEvals } from '@mastra/core/evals'
import { createContentSimilarityScorer } from '@mastra/evals/scorers/prebuilt'
import { myAgent } from './agent'

const scorer = createContentSimilarityScorer()

const result = await runEvals({
data: [
{
input: 'Summarize the benefits of TypeScript',
groundTruth:
'TypeScript provides static typing, better tooling support, and improved code maintainability.',
},
{
input: 'What is machine learning?',
groundTruth:
'Machine learning is a subset of AI that enables systems to learn from data without explicit programming.',
},
],
scorers: [scorer],
target: myAgent,
onItemComplete: ({ scorerResults }) => {
console.log({
score: scorerResults[scorer.id].score,
groundTruth: scorerResults[scorer.id].groundTruth,
})
},
})

console.log(result.scores)

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

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

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

相似度分數介於 0 到 1:

  • 1.0:完全相符,內容幾乎相同。
  • 0.7 到 0.9:相似度高,僅用字或結構稍有不同。
  • 0.4 到 0.6:相似度中等,整體有所重疊,但存在明顯差異。
  • 0.1 到 0.3:相似度低,只有少數共同要素或相同含義。
  • 0.0:毫無相似之處,內容完全不同。