RegexFilterProcessor
RegexFilterProcessor 會套用零成本的 regex 模式比對,以篩選、遮蔽或封鎖 Agent 訊息中的內容。它不會呼叫 LLM,所有偵測皆以 regex 為基礎。
此處理器支援常見模式(PII、機密資訊、URL)的內建預設集與自訂 regex 規則,可套用至輸入階段、輸出階段,或兩者皆套用。
使用範例「使用範例」的直接連結
封鎖輸入訊息中的 PII:
import { RegexFilterProcessor } from '@mastra/core/processors'
const filter = new RegexFilterProcessor({
presets: ['pii'],
strategy: 'block',
phase: 'input',
})
遮蔽輸出中的機密資訊:
import { RegexFilterProcessor } from '@mastra/core/processors'
const filter = new RegexFilterProcessor({
presets: ['secrets'],
strategy: 'redact',
phase: 'output',
})
自訂規則:
import { RegexFilterProcessor } from '@mastra/core/processors'
const filter = new RegexFilterProcessor({
rules: [{ name: 'internal-id', pattern: /INTERNAL-\d{6}/g, replacement: '[INTERNAL_ID]' }],
strategy: 'redact',
})
對於較長的自訂相符項目(例如固定長度的機密資訊,或必須等到結尾分隔符號出現才會符合的值),可加大串流延續視窗:
import { RegexFilterProcessor } from '@mastra/core/processors'
const filter = new RegexFilterProcessor({
rules: [
{
name: 'armored-key',
pattern: /-----BEGIN KEY-----[A-Z]+-----END KEY-----/g,
replacement: '[KEY]',
},
],
strategy: 'redact',
streamCarryoverSize: 256,
})
附加至 Agent:
import { Agent } from '@mastra/core/agent'
import { RegexFilterProcessor } from '@mastra/core/processors'
const agent = new Agent({
id: 'my-agent',
name: 'my-agent',
model: 'openai/gpt-5-nano',
inputProcessors: [
new RegexFilterProcessor({
presets: ['pii', 'secrets'],
strategy: 'block',
}),
],
})
建構函式參數「建構函式參數」的直接連結
rules?:
name:
pattern:
replacement?:
presets?:
strategy?:
phase?:
includeRedactedValues?:
streamCarryoverSize?:
回傳值「回傳值」的直接連結
id:
name:
processInput:
processOutputStream:
processOutputResult:
錯誤行為「錯誤行為」的直接連結
啟用 block 策略(預設值)時,只要有任何模式相符,RegexFilterProcessor 就會擲回 retry: false 的 TripWire 錯誤。TripWire 中繼資料包含:
processorId:'regex-filter'matches:相符物件陣列,包含rule、match(遮蔽為'[REDACTED_MATCH]')與indexstrategy:'block'
內建預設集「內建預設集」的直接連結
| 預設集 | 模式 | 預設替代值 |
|---|---|---|
pii | 電子郵件地址、電話號碼、SSN、信用卡號 | [EMAIL]、[PHONE]、[SSN]、[CREDIT_CARD] |
secrets | API 金鑰、bearer token、AWS 存取金鑰 | [API_KEY]、[BEARER_TOKEN]、[AWS_KEY] |
urls | HTTP/HTTPS URL | [URL] |
遮蔽行為「遮蔽行為」的直接連結
每項規則都會獨立比對,因此兩項規則可能會比對到重疊的文字。例如,未使用分隔符號的信用卡號會同時符合 phone 與 credit-card。重疊的相符項目會合併為單一區域,並使用最長相符項目的替代值取代一次。
const filter = new RegexFilterProcessor({
presets: ['pii'],
strategy: 'redact',
})
// "Charge 4111111111111111 today" becomes "Charge [CREDIT_CARD] today"
替代字串可以使用 $1 或 $& 參照擷取群組。若單一相符項目的模式也能單獨比對該段文字,這些參照就會解析。若是合併區域,或規則使用 lookbehind 或 lookahead 錨定周圍內容,替代字串會依原樣插入。無論何種情況,該區域都會被遮蔽。
遮蔽報告「遮蔽報告」的直接連結
redact 策略會就地改寫文字,因此下游無法得知哪些內容有所變更。請指派 onViolation 來記錄變更。處理器會針對每一則已遮蔽的訊息、訊息部分或串流區塊呼叫一次,而位移量是相對於該段文字。它會等待非同步回呼完成並攔截錯誤,因此即使稽核接收端無法使用,也不會導致請求失敗。
import { RegexFilterProcessor, type RegexRedactionDetail } from '@mastra/core/processors'
const filter = new RegexFilterProcessor({
presets: ['pii'],
strategy: 'redact',
})
filter.onViolation = async ({ detail }) => {
const redaction = detail as RegexRedactionDetail
for (const entry of redaction.redactions) {
await auditLog.write({
phase: redaction.phase,
messageId: redaction.messageId,
rule: entry.rule,
offset: entry.index,
length: entry.length,
})
}
}
系統會等待回呼完成,包括在 processOutputStream 中,每個包含相符項目的區塊都會執行回呼。請讓回呼快速完成,或將工作交給佇列,以免緩慢的稽核接收端使串流回應停滯。未附加回呼時,redact 路徑會維持同步。
block 策略也會透過相同回呼報告。在此情況下,處理器執行器會在攔截到 TripWire 時呼叫回呼,因此 detail 會包含錯誤行為中說明的 tripwire 中繼資料,而非下方的結構。
遮蔽報告的 detail 是 RegexRedactionDetail:
strategy:
phase:
messageId?:
partIndex?:
redactions:
rule:
index:
length:
replacement:
overlappingRules?:
value?:
預設會省略值。若稽核軌跡複製了它原本要保護的資料,就會擴大本應縮小的曝露範圍。只有當目的地的保護程度與原始資料相同時,才設定 includeRedactedValues。也請注意,基於相同理由,block 策略的 TripWire 中繼資料也不會包含相符文字。