跳到主要内容

filterRun()

根据声明式选项创建 prepareRun 函数。将结果传给 createScorer(),即可筛选消息并限制上下文大小。它还会在 Scorer pipeline 运行前移除不必要的字段。

如需声明式筛选,请使用 filterRun()。当你需要 filterRun() 未涵盖的命令式逻辑时,可直接编写自定义 prepareRun 函数。详情请参阅自定义 Scorer:输入筛选

使用示例
使用示例的直接链接

以下示例创建了一个 Scorer,它只能看到 Tool 调用和文本消息,并将上下文限制为最近 20 条消息:

src/mastra/scorers/tool-scorer.ts
import { createScorer, filterRun } from '@mastra/core/evals'

const toolScorer = createScorer({
id: 'tool-usage',
description: 'Evaluates tool usage patterns',
type: 'agent',
prepareRun: filterRun({
partTypes: ['tool-invocation', 'text'],
maxRememberedMessages: 20,
}),
}).generateScore(({ run }) => {
// run.input.rememberedMessages contains only tool and text messages
// run.output contains only tool and text messages
return 1
})

按 Tool 名称筛选
按 Tool 名称筛选的直接链接

仅保留涉及特定 Tool 的消息:

import { createScorer, filterRun } from '@mastra/core/evals'

const fileEditScorer = createScorer({
id: 'file-edit-quality',
description: 'Evaluates file editing patterns',
type: 'agent',
prepareRun: filterRun({
toolNames: ['write_file', 'string_replace_lsp', 'view'],
}),
}).generateScore(({ run }) => {
// Only messages with these tool calls remain
return 1
})

移除字段
移除字段的直接链接

移除 Scorer 不需要的字段:

import { createScorer, filterRun } from '@mastra/core/evals'

const simpleScorer = createScorer({
id: 'response-length',
description: 'Checks response length',
type: 'agent',
prepareRun: filterRun({
dropRequestContext: true,
dropExpectedTrajectory: true,
dropGroundTruth: true,
maxOutputMessages: 5,
}),
}).generateScore(({ run }) => {
return run.output.length > 0 ? 1 : 0
})

参数
参数的直接链接

options:

FilterRunOptions
用于控制 Scorer 接收哪些数据的配置对象。
object

partTypes?:

MastraPartType[]
仅保留 part 与这些类型匹配的消息。每一项都与消息 part 的 type 进行前缀匹配。除非明确排除,否则始终保留纯文本消息(不含 Tool 调用)。System 消息和带标签的 System 消息永远不会被筛除。

toolNames?:

string[]
仅保留针对这些特定 Tool 的 Tool 调用消息。每一项都与 Tool 名称进行前缀匹配。非 Tool 消息(文本、数据)不受影响。

maxRememberedMessages?:

number
remembered messages(上下文)中最多保留的消息数量。从末尾(最新消息)开始取。在类型和 Tool 筛选后应用。

maxOutputMessages?:

number
输出中最多保留的消息数量。从末尾开始取。在类型和 Tool 筛选后应用。

dropRequestContext?:

boolean
从 run 中完全移除 request context。

dropExpectedTrajectory?:

boolean
从 run 中移除 expected trajectory。

dropGroundTruth?:

boolean
从 run 中移除 ground truth。

返回值: (run: ScorerRun) => ScorerRun。该函数可用于 createScorer()prepareRun 选项。

Part 类型
Part 类型的直接链接

partTypes 选项接受 MastraPartType 值。每个值都按前缀匹配,因此 'data-' 会匹配所有 data part 类型。

类型描述
'text'文本内容 part
'tool-invocation'Tool 调用和结果 part
'reasoning'思维链 reasoning part
'step-start'步骤标记 part
'image'图像 part
'file'文件 part
'source'来源引用 part
'source-document'来源文档 part
'data-'所有 data part(匹配任意 data-* 前缀)
'data-om-'Observational Memory 数据 part
'data-workspace-'Workspace 数据 part
'data-sandbox-'Sandbox 数据 part
'data-tool-'Tool 相关 data part

筛选行为
筛选行为的直接链接

  • input.rememberedMessagesoutput 包含 Agent 消息数组时,Part 类型筛选会同时应用于二者。
  • Tool 名称筛选仅影响包含 Tool 调用的消息。纯文本消息会直接保留。
  • 无论 partTypestoolNames 如何设置,System 消息systemMessagestaggedSystemMessages)都不会被筛选。
  • 消息数量限制maxRememberedMessagesmaxOutputMessages)会在类型和 Tool 筛选后应用,并保留最新的消息。
  • 同时设置 partTypestoolNames 时,消息必须满足两个筛选条件才会被保留。