跳到主要内容

完整性 Scorer

createCompletenessScorer() 函数评估 LLM 输出对输入中关键要素的覆盖程度。它会分析名词、动词、主题和术语以确定覆盖情况,并给出详细的完整性分数。

参数
参数的直接链接

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

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

.run() 返回值
run-returns的直接链接

runId:

string
本次运行的 id(可选)。

preprocessStepResult:

object
包含提取要素和覆盖详情的对象:{ inputElements: string[], outputElements: string[], missingElements: string[], elementCounts: { input: number, output: number } }

score:

number
完整性分数(0-1),表示输出所覆盖输入要素的比例。

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

{
runId: string,
extractStepResult: {
inputElements: string[],
outputElements: string[],
missingElements: string[],
elementCounts: { input: number, output: number }
},
score: number
}

要素提取详情
要素提取详情的直接链接

该 Scorer 会提取并分析多种类型的要素:

  • 名词:关键对象、概念和实体
  • 动词:动作和状态(转换为不定式形式)
  • 主题:主要话题和主题
  • 术语:单个有实际意义的词

提取流程包括:

  • 文本规范化(移除变音符号并转换为小写)
  • 拆分 camelCase 单词
  • 处理单词边界
  • 特殊处理短词(不超过 3 个字符)
  • 对要素去重

extractStepResult
extractstepresult的直接链接

通过 .run() 方法,可以获取包含以下属性的 extractStepResult 对象:

  • inputElements:在输入中找到的关键要素(例如名词、动词、主题和术语)。
  • outputElements:在输出中找到的关键要素。
  • missingElements:未在输出中找到的输入要素。
  • elementCounts:输入和输出中的要素数量。

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

该 Scorer 通过分析语言要素的覆盖情况来评估完整性。

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

  1. 提取关键要素:
    • 名词和命名实体
    • 动作动词
    • 特定主题的术语
    • 规范化后的词形
  2. 计算输入要素的覆盖率:
    • 对短术语(不超过 3 个字符)进行精确匹配
    • 对较长术语要求显著重叠(>60%)

最终分数:(covered_elements / total_input_elements) * scale

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

完整性分数介于 0 和 1 之间:

  • 1.0:详细而全面地回应了查询的所有方面。
  • 0.7 到 0.9:较为详细地覆盖了大部分重要方面,仅存在少量遗漏。
  • 0.4 到 0.6:回应了部分关键点,但遗漏了重要方面或缺少细节。
  • 0.1 到 0.3:仅部分回应了查询,存在大量遗漏。
  • 0.0:未回应查询,或提供了无关信息。

示例
示例的直接链接

评估不同查询复杂度下 Agent 响应的完整性:

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

const scorer = createCompletenessScorer()

const result = await runEvals({
data: [
{
input:
'Explain the process of photosynthesis, including the inputs, outputs, and stages involved.',
},
{
input: 'What are the benefits and drawbacks of remote work for both employees and employers?',
},
{
input:
'Compare renewable and non-renewable energy sources in terms of cost, environmental impact, and sustainability.',
},
],
scorers: [scorer],
target: myAgent,
onItemComplete: ({ scorerResults }) => {
console.log({
score: scorerResults[scorer.id].score,
})
},
})

console.log(result.scores)

有关 runEvals 的更多详情,请参阅 runEvals 参考

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