跳到主要内容

文本差异 Scorer

createTextualDifferenceScorer() 函数使用序列匹配来衡量两个字符串之间的文本差异。它会提供详细的变更信息,包括将一段文本转换为另一段文本所需的操作次数。

参数
参数的直接链接

createTextualDifferenceScorer() 函数不接受任何选项。

此函数返回 MastraScorer 类的实例。有关 .run() 方法及其输入/输出的详情,请参阅 MastraScorer 参考

.run() returns
run-returns的直接链接

runId:

string
运行 ID(可选)。

analyzeStepResult:

object
包含差异指标的对象:{ confidence: number, changes: number, lengthDiff: number }

score:

number
相似度比率(0-1),其中 1 表示文本完全相同。

.run() 返回以下结构的结果:

{
runId: string,
analyzeStepResult: {
confidence: number,
ratio: number,
changes: number,
lengthDiff: number
},
score: number
}

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

该 Scorer 会计算以下几项指标:

  • 相似度比率:基于文本之间的序列匹配(0-1)
  • 更改数:所需的不匹配操作数量
  • 长度差异:文本长度差异的归一化结果
  • 置信度:与长度差异成反比

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

  1. 分析文本差异:
    • 对输入和输出执行序列匹配
    • 统计所需的更改操作数量
    • 衡量长度差异
  2. 计算指标:
    • 计算相似度
    • 确定置信度分数
    • 合并为加权分数

最终分数: (similarity_ratio * confidence) * scale

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

文本差异分数介于 0 和 1 之间:

  • 1.0:文本完全相同。
  • 0.7 到 0.9:差异较小,只需少量更改。
  • 0.4 到 0.6:存在中等差异,需要明显更改。
  • 0.1 到 0.3:差异较大,需要大量更改。
  • 0.0:文本完全不同。

示例
示例的直接链接

衡量 Agent 预期输出与实际输出之间的文本差异:

src/example-textual-difference.ts
import { runEvals } from '@mastra/core/evals'
import { createTextualDifferenceScorer } from '@mastra/evals/scorers/prebuilt'
import { myAgent } from './agent'

const scorer = createTextualDifferenceScorer()

const result = await runEvals({
data: [
{
input: 'Summarize the concept of recursion',
groundTruth:
'Recursion is when a function calls itself to solve a problem by breaking it into smaller subproblems.',
},
{
input: 'What is the capital of France?',
groundTruth: 'The capital of France is Paris.',
},
],
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 概述指南。