跳到主要内容

内容相似度 Scorer

createContentSimilarityScorer() 函数衡量两个字符串之间的文本相似度,并通过分数表示二者的匹配程度。它支持配置是否区分大小写以及如何处理空白字符。

参数
参数的直接链接

createContentSimilarityScorer() 函数接受一个 options 对象,其中包含以下属性:

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 表示完全相似。

评分详情
评分详情的直接链接

该 Scorer 通过字符级匹配和可配置的文本规范化来评估文本相似度。

评分流程
评分流程的直接链接

  1. 规范化文本:
    • 规范化大小写(如果 ignoreCase: true)
    • 规范化空白字符(如果 ignoreWhitespace: true)
  2. 使用 string-similarity 算法比较处理后的字符串:
    • 分析字符序列
    • 对齐单词边界
    • 考虑相对位置
    • 将长度差异纳入考量

最终分数:similarity_value * scale

示例
示例的直接链接

评估预期 Agent 输出和实际 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 参考

要将此 Scorer 添加到 Agent,请参阅 Scorer 概览指南。

分数解读
分数解读的直接链接

相似度分数介于 0 和 1 之间:

  • 1.0:完全匹配,内容几乎相同。
  • 0.7 到 0.9:相似度高,仅在用词或结构上有细微差异。
  • 0.4 到 0.6:相似度中等,整体有所重叠,但存在明显差异。
  • 0.1 到 0.3:相似度低,只有少量共同要素或共同含义。
  • 0.0:毫无相似之处,内容完全不同。