跳至主要內容

filterRun()

透過宣告式選項建立 prepareRun 函式。將結果傳遞至 createScorer(),即可篩選訊息及限制上下文大小。此函式亦會在評分器管線執行前移除不必要的欄位。

如需宣告式篩選,請使用 filterRun()。如需要 filterRun() 未涵蓋的命令式邏輯,請直接編寫自訂 prepareRun 函式。詳情請參閱自訂評分器:輸入篩選

使用範例
使用範例 的直接連結

以下範例建立一個評分器,只會接收 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
})

移除欄位
移除欄位 的直接連結

移除評分器不需要的欄位:

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
控制評分器接收哪些資料的設定物件。
object

partTypes?:

MastraPartType[]
只保留組件符合這些類型的訊息。每個項目會以訊息組件的類型作前綴比對。除非明確排除,否則純文字訊息(不含 Tool 調用)一律保留。系統訊息及帶標籤的系統訊息絕不會被篩選。

toolNames?:

string[]
只保留這些指定 Tool 的 Tool 調用訊息。每個項目會以 Tool 名稱作前綴比對。不含 Tool 的訊息(文字、資料)不受影響。

maxRememberedMessages?:

number
在記憶訊息(上下文)中保留的訊息數目上限。從末端(最近的訊息)開始選取。在類型及 Tool 篩選後套用。

maxOutputMessages?:

number
在輸出中保留的訊息數目上限。從末端開始選取。在類型及 Tool 篩選後套用。

dropRequestContext?:

boolean
從執行中完全移除請求上下文。

dropExpectedTrajectory?:

boolean
從執行中移除預期軌跡。

dropGroundTruth?:

boolean
從執行中移除標準答案。

傳回值: (run: ScorerRun) => ScorerRun。適用於 createScorer()prepareRun 選項的函式。

組件類型
組件類型 的直接連結

partTypes 選項接受 MastraPartType 值。每個值都會作前綴比對,因此 'data-' 會符合所有資料組件類型。

類型說明
'text'文字內容組件
'tool-invocation'Tool 調用及結果組件
'reasoning'思維鏈推理組件
'step-start'步驟標記組件
'image'圖像組件
'file'檔案組件
'source'來源參考組件
'source-document'來源文件組件
'data-'所有資料組件(符合任何 data-* 前綴)
'data-om-'觀察記憶資料組件
'data-workspace-'Workspace 資料組件
'data-sandbox-'Sandbox 資料組件
'data-tool-'Tool 相關資料組件

篩選行為
篩選行為 的直接連結

  • input.rememberedMessagesoutput 包含 Agent 訊息陣列時,組件類型篩選會套用至兩者。
  • Tool 名稱篩選只會影響包含 Tool 調用的訊息。純文字訊息會直接通過。
  • 無論 partTypestoolNames 為何,系統訊息systemMessagestaggedSystemMessages)絕不會被篩選。
  • 訊息限制maxRememberedMessagesmaxOutputMessages)會在類型及 Tool 篩選後套用,並選取最近的訊息。
  • 同時設定 partTypestoolNames 時,訊息必須符合兩項篩選條件才會保留。