跳至主要內容

內容相似度評分器

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:毫無相似之處,內容完全不同。