ProviderHistoryCompat
ProviderHistoryCompat 處理器會處理 Provider 專屬的歷史記錄不相容問題。它可以在呼叫 Provider 前改寫要送出的語言模型提示詞,也可以在發生 API 錯誤時作出反應,以修復後的訊息歷史記錄重試。
當 Agent 可能在不同模型 Provider 之間切換,或跨 Provider 重複使用訊息歷史記錄時,可使用此處理器。它也能處理 Provider 拒絕其他 Provider 所產生欄位的情況。
使用範例「使用範例」的直接連結
如果要讓 Agent 使用所有內建相容性規則,請將 ProviderHistoryCompat 加入 inputProcessors:
import { Agent } from '@mastra/core/agent'
import { ProviderHistoryCompat } from '@mastra/core/processors'
export const agent = new Agent({
id: 'my-agent',
name: 'my-agent',
instructions: 'You are a helpful assistant.',
model: 'anthropic/claude-sonnet-4-5',
inputProcessors: [new ProviderHistoryCompat()],
})
Mastra Agent 不會自動加入此處理器。需要 Provider 歷史記錄相容性規則、針對 API 錯誤的反應式復原、自訂規則,或可預期的處理器順序時,請明確加入此處理器。
建構函式參數「建構函式參數」的直接連結
opts?:
additionalRules?:
屬性「屬性」的直接連結
id:
name:
processLLMRequest:
processAPIError:
內建規則「內建規則」的直接連結
ProviderHistoryCompat 包含下列內建相容性規則:
| 規則 | Provider | 執行時機 | 行為 |
|---|---|---|---|
anthropic-tool-id-format | Anthropic | 反應式 API 錯誤復原 | 改寫包含 [a-zA-Z0-9_-] 以外字元的 Tool 呼叫 ID,並重試請求。 |
cerebras-strip-reasoning-content | Cerebras | 預先改寫提示詞 | 從要送出的提示詞移除 assistant reasoning 部分,避免序列化為不支援的 reasoning_content 欄位。 |
anthropic-strip-foreign-reasoning-content | Anthropic | 預先改寫提示詞 | 從要送出的提示詞移除非 Anthropic 的 assistant reasoning 部分。保留 Anthropic 原生的思考歷史記錄。 |
Mastra 將訊息轉換為模型提示詞格式後,會透過 processLLMRequest 執行預先規則,接著才將提示詞傳送至 Provider。這些改寫只會影響目前的 Provider 呼叫。
Provider 拒絕請求後,會透過 processAPIError 執行反應式規則。這些規則可以更新保存的 messageList 並要求重試。
CompatRule「compatrule」的直接連結
CompatRule 定義一項 Provider 歷史記錄相容性修正:
import type { CompatRule } from '@mastra/core/processors'
const removeUnsupportedPromptParts: CompatRule = {
name: 'remove-unsupported-prompt-parts',
applyToPrompt({ prompt, model }) {
// Return a modified LanguageModelV2Prompt, or undefined to leave it unchanged.
return undefined
},
}
name:
errorPatterns?:
fix?:
applyToPrompt?:
自訂規則「自訂規則」的直接連結
透過 additionalRules 傳入自訂規則。自訂規則會在內建規則之後執行:
import { Agent } from '@mastra/core/agent'
import { ProviderHistoryCompat, type CompatRule } from '@mastra/core/processors'
const stripUnsupportedAssistantMetadata: CompatRule = {
name: 'strip-unsupported-assistant-metadata',
applyToPrompt({ prompt, model }) {
if (typeof model !== 'string' || !model.startsWith('example-provider/')) {
return undefined
}
let changed = false
const nextPrompt = prompt.map(message => {
if (message.role !== 'assistant' || typeof message.content === 'string') {
return message
}
const nextContent = message.content.map(part => {
if (!('providerOptions' in part)) return part
changed = true
const { providerOptions: _providerOptions, ...rest } = part
return rest
})
return { ...message, content: nextContent }
})
return changed ? nextPrompt : undefined
},
}
export const agent = new Agent({
id: 'custom-provider-agent',
name: 'custom-provider-agent',
instructions: 'You are a helpful assistant.',
model: 'example-provider/model',
inputProcessors: [
new ProviderHistoryCompat({
additionalRules: [stripUnsupportedAssistantMetadata],
}),
],
})
若要執行不應儲存至記憶體的 Provider 專屬改寫,請使用 applyToPrompt。若 Provider 拒絕保存的訊息歷史記錄,而且修復後的歷史記錄應在後續對話輪次重複使用,請搭配 errorPatterns 使用 fix。