跳至主要內容

Agent 類別

Agent 類別是於 Mastra 建立 AI Agent 的基礎。它提供產生回應和串流互動的方法,亦可處理語音功能。

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

基本字串指示
基本字串指示 的直接連結

以字串或字串陣列傳入指示,是設定 Agent 最簡單的方法。這適合只需提供提示而毋須額外配置的直接使用情境。

src/mastra/agents/string-agent.ts
import { Agent } from '@mastra/core/agent'

// String instructions
export const agent = new Agent({
id: 'test-agent',
name: 'Test Agent',
instructions: 'You are a helpful assistant that provides concise answers.',
model: 'openai/gpt-5.6-sol',
})

// System message object
export const agent2 = new Agent({
id: 'test-agent-2',
name: 'Test Agent 2',
instructions: {
role: 'system',
content: 'You are an expert programmer',
},
model: 'openai/gpt-5.6-sol',
})

// Array of system messages
export const agent3 = new Agent({
id: 'test-agent-3',
name: 'Test Agent 3',
instructions: [
{ role: 'system', content: 'You are a helpful assistant' },
{ role: 'system', content: 'You have expertise in TypeScript' },
],
model: 'openai/gpt-5.6-sol',
})

Provider 特定配置
Provider 特定配置 的直接連結

每個模型 Provider 亦提供若干不同選項,包括提示快取和推理配置。你可在指示層級設定 providerOptions,為每項系統指示/提示指定不同的快取策略。

src/mastra/agents/core-message-agent.ts
import { Agent } from '@mastra/core/agent'

export const agent = new Agent({
id: 'core-message-agent',
name: 'Core Message Agent',
instructions: {
role: 'system',
content: 'You are a helpful assistant specialized in technical documentation.',
providerOptions: {
openai: {
reasoningEffort: 'low',
},
},
},
model: 'openai/gpt-5.6-sol',
})

混合指示格式
混合指示格式 的直接連結

src/mastra/agents/multi-message-agent.ts
import { Agent } from '@mastra/core/agent'

// This could be customizable based on the user
const preferredTone = {
role: 'system',
content: 'Always maintain a professional and empathetic tone.',
}

export const agent = new Agent({
id: 'multi-message-agent',
name: 'Multi Message Agent',
instructions: [
{ role: 'system', content: 'You are a customer service representative.' },
preferredTone,
{
role: 'system',
content: 'Escalate complex issues to human agents when needed.',
providerOptions: {
anthropic: { cacheControl: { type: 'ephemeral' } },
},
},
],
model: 'anthropic/claude-sonnet-4-6',
})

模型字串
模型字串 的直接連結

最簡單的設定方式,是以 provider/model 格式的字串傳入 model。請以斜線分隔 Provider 與模型名稱。Mastra 會從環境讀取相應的 Provider 憑證,因此此格式毋須 Provider 套件或 import。

常用的 Provider 字串及憑證:

  • OpenAIopenai/gpt-5.6-sol 使用 OPENAI_API_KEY
  • Anthropicanthropic/claude-sonnet-4-6 使用 ANTHROPIC_API_KEY
  • Googlegoogle/gemini-2.5-pro 使用 GOOGLE_API_KEYGOOGLE_GENERATIVE_AI_API_KEY

如需了解支援的模型 ID,請參閱模型;如需完整的 Provider 清單,請參閱環境變數

執行緒訊號
執行緒訊號 的直接連結

使用 Agent 訊號將即時輸入及上下文傳送至記憶體執行緒。訊息 API 適用於使用者撰寫的輸入;sendSignal() 則是用於系統產生上下文的較低階 API。

目標執行緒運行時,sendMessage() 會把訊息傳送至使用中的 Agent 迴圈。執行緒閒置時,Mastra 預設會啟動串流,並以該訊息作為第一項輸入。

src/mastra/signals.ts
const subscription = await agent.subscribeToThread({
resourceId: 'user-123',
threadId: 'thread-abc',
})

void (async () => {
for await (const chunk of subscription.stream) {
console.log(chunk)
}
})()

agent.sendMessage('Use the latest customer note too.', {
resourceId: 'user-123',
threadId: 'thread-abc',
ifIdle: {
streamOptions: {
maxSteps: 3,
},
},
})

使用 attributes 識別共用執行緒中的不同使用者。屬性會呈現為 XML,讓模型分辨每段內容由誰發出:

agent.sendMessage(
{
contents: 'Can we simplify the API surface?',
attributes: { name: 'Devin', from: 'slack' },
},
{ resourceId: 'user-123', threadId: 'thread-abc' },
)

模型會收到以下內容:

<user name="Devin" from="slack">Can we simplify the API surface?</user>

如訊息需因應執行緒目前是否運行而附帶不同上下文,請使用 ifActive.attributesifIdle.attributes

src/mastra/signals.ts
agent.sendMessage(
{
contents: 'Also cover the edge cases.',
attributes: { source: 'chat' },
},
{
resourceId: 'user-123',
threadId: 'thread-abc',
ifActive: { attributes: { delivery: 'while-active' } },
ifIdle: { attributes: { delivery: 'new-message' } },
},
)

執行緒使用中時,模型會看到:

<user source="chat" delivery="while-active">Also cover the edge cases.</user>

執行緒閒置時,模型會看到:

<user source="chat" delivery="new-message">Also cover the edge cases.</user>

UI 會看到訊息內容,亦可從訊號訊息讀取 attributesmetadata 以自訂呈現方式(例如顯示使用者名稱、頭像或平台徽章)。

sendMessage(message, options)
sendmessagemessage-options 的直接連結

向使用中的執行或記憶體執行緒傳送使用者訊息。如需讓使用中的 Agent 立即收到訊息,請使用此方法。

message:

string | Array<TextPart | FilePart> | { contents: string | Array<TextPart | FilePart>; attributes?: Record<string, JSONValue>; metadata?: Record<string, unknown>; providerOptions?: ProviderMetadata }
使用者撰寫的輸入。純字串及沒有屬性的部分會以一般使用者輸入傳送至模型。如有 attributes,Mastra 會把訊息呈現為包含這些屬性的 <user> XML 元素。

options?:

object
訊息的目標及傳送行為。
object

runId?:

string
要直接指定的執行 ID。當你已知使用中的執行 ID 時使用。

resourceId?:

string
記憶體執行緒的資源 ID。向執行緒傳送訊息時,必須與 threadId 一併提供。

threadId?:

string
要指定的執行緒 ID。向執行緒傳送訊息時,必須與 resourceId 一併提供。

ifActive?:

object
控制目標執行緒使用中時的行為。
object

behavior?:

'deliver' | 'persist' | 'discard'
控制目標執行緒使用中時的行為。預設為 deliver

attributes?:

Record<string, string | number | boolean>
目標執行緒使用中,而 Mastra 接受訊息時合併至訊息的屬性。

ifIdle?:

object
控制目標執行緒閒置時的行為。
object

behavior?:

'wake' | 'persist' | 'discard'
控制目標執行緒閒置時的行為。預設為 wake

streamOptions?:

AgentExecutionOptions
ifIdle.behaviorwake 時啟動之串流的選項。Mastra 使用頂層 resourceIdthreadId 作為記憶體上下文。

attributes?:

Record<string, string | number | boolean>
目標執行緒閒置,而 Mastra 接受訊息時合併至訊息的屬性。

如閒置執行緒應以自訂執行選項啟動新串流,請把 ifIdle.behavior 設為 wake,並傳入 ifIdle.streamOptions

src/mastra/signals.ts
agent.sendMessage('Continue with the next step.', {
resourceId: 'user-123',
threadId: 'thread-abc',
ifIdle: {
behavior: 'wake',
streamOptions: {
maxSteps: 3,
},
},
})

傳回 { accepted: Promise<SendAgentSignalAccepted>, signal: CreatedAgentSignal, persisted?: Promise<void> }。Mastra 決定如何處理訊息後,accepted 會在決策時解析:此程序運行 Agent(已啟動執行或取得啟動執行的租約)時為 { action: 'wake', runId, output };訊息轉送至現有執行時(包括此程序在跨程序喚醒競爭中落敗)為 { action: 'deliver', runId };沒有運行任何項目時則為 { action: 'persist' }{ action: 'discard' }runId 是處理訊息之執行的權威 ID,只會在 wakedeliver 中出現。對於 persistdiscard,請使用 result.signal.id 關聯已儲存的訊息。accepted 會就路由解析(wake 執行的產生錯誤會透過 output.consumeStream() 顯示),只有訊息完全無法路由或啟動時才會拒絕(例如 Agent 配置錯誤)。persisted 只會在 persist 行為中出現,並於 Mastra 完成把訊息寫入記憶體時解析。對於 wake 動作,output 是供程序內取用的 Agent 串流。

queueMessage(message, options)
queuemessagemessage-options 的直接連結

將使用者訊息排入執行緒下一輪的佇列。如執行緒使用中,Mastra 會等待目前執行完成,然後以已排入佇列的訊息啟動新執行。如執行緒閒置,Mastra 會立即啟動執行。

agent.queueMessage('Also check whether the tests need updates.', {
resourceId: 'user-123',
threadId: 'thread-abc',
})

queueMessage() 接受與 sendMessage() 相同結構的 messageoptions,並傳回 { accepted: Promise<SendAgentSignalAccepted>, signal: CreatedAgentSignal, persisted?: Promise<void> };其 accepted 語意亦與 sendMessage() 相同。

sendSignal(signal, options)
sendsignalsignal-options 的直接連結

向使用中的執行或記憶體執行緒傳送訊號。

signal:

{ type: 'user' | 'state' | 'reactive' | 'notification' | 'user-message' | 'system-reminder'; tagName?: string; contents: string | Array<TextPart | FilePart>; attributes?: Record<string, JSONValue>; metadata?: Record<string, unknown>; providerOptions?: ProviderMetadata }
要傳送至執行緒的訊號上下文。type 是訊號的語意類別。tagName 控制模型看到的 XML 標籤。例如,{ type: 'notification', tagName: 'github-review' } 會呈現為 <github-review>...</github-review>。系統仍會接受舊有的 user-messagesystem-reminder 承載資料並將其標準化。未知的 type 值會被拒絕;自訂 XML 標籤請使用 tagName

options?:

object
訊號的目標及傳送行為。
object

runId?:

string
要直接指定的執行 ID。當你已知使用中的執行 ID 時使用。

resourceId?:

string
記憶體執行緒的資源 ID。向執行緒傳送訊號時,必須與 threadId 一併提供。

threadId?:

string
要指定的執行緒 ID。向執行緒傳送訊號時,必須與 resourceId 一併提供。

ifActive?:

object
控制目標執行緒使用中時的行為。
object

behavior?:

'deliver' | 'persist' | 'discard'
控制目標執行緒使用中時的行為。預設為 deliver

attributes?:

Record<string, string | number | boolean>
目標執行緒使用中,而 Mastra 接受訊號時合併至訊號的屬性。

ifIdle?:

object
控制目標執行緒閒置時的行為。
object

behavior?:

'wake' | 'persist' | 'discard'
控制目標執行緒閒置時的行為。預設為 wake

streamOptions?:

AgentExecutionOptions
ifIdle.behaviorwake 時啟動之串流的選項。Mastra 使用頂層 resourceIdthreadId 作為記憶體上下文。

attributes?:

Record<string, string | number | boolean>
目標執行緒閒置,而 Mastra 接受訊號時合併至訊號的屬性。

傳回 { accepted: Promise<SendAgentSignalAccepted>, signal: CreatedAgentSignal, persisted?: Promise<void> }。Mastra 決定如何處理訊號後,accepted 會在決策時解析:此程序運行 Agent 時為 { action: 'wake', runId, output };訊號轉送至現有執行時為 { action: 'deliver', runId };沒有運行任何項目時則為 { action: 'persist' }{ action: 'discard' }action 會反映 ifActiveifIdle 中勝出的 behaviorrunId 是處理訊號之執行的權威 ID,只會在 wakedeliver 中出現。對於 persistdiscard,請使用 result.signal.id 關聯已儲存的訊號。accepted 會就路由解析(wake 執行的產生錯誤會透過 output.consumeStream() 顯示);只有訊號完全無法路由或啟動時才會拒絕。persisted 只會在 persist 行為中出現,並於 Mastra 完成把訊號寫入記憶體時解析。對於 wake 動作,output 是供程序內取用的 Agent 串流。

在無伺服器處理常式中,請等待 accepted,並把 wake 輸出傳給平台上相當於 waitUntil 的方法,讓勝出的程序可在 HTTP 回應傳回後耗盡串流。

const result = agent.sendSignal(signal, { resourceId, threadId })
ctx.waitUntil(
result.accepted.then(async accepted => {
if (accepted.action === 'wake') {
await accepted.output.consumeStream()
}
}),
)

sendStateSignal(state, options)
sendstatesignalstate-options 的直接連結

向使用中的執行或記憶體執行緒傳送具名稱、執行緒範圍的狀態上下文。當外部產生者擁有會隨時間變更的持久上下文(例如瀏覽器狀態、編輯器狀態或監察器輸出)時使用。

const result = await agent.sendStateSignal(
{
id: 'browser',
mode: 'snapshot',
cacheKey: 'browser:https://example.com:3-tabs',
contents: 'Browser is open. Active tab URL: https://example.com. 3 open tabs.',
value: {
activeUrl: 'https://example.com',
tabCount: 3,
open: true,
},
},
{
resourceId: 'user-123',
threadId: 'thread-abc',
},
)

state:

object
要傳送至執行緒的狀態訊號。
object

id:

string
狀態通道名稱,例如 browsereditor

cacheKey:

string
由產生者擁有的鍵,Mastra 用它略過相同通道及模式的重複狀態。

contents:

string | Array<TextPart | FilePart>
向 LLM 呈現的狀態表示。

mode?:

'snapshot' | 'delta'
狀態是權威快照還是變更事件。預設為 snapshot

value?:

unknown
mode: 'snapshot' 的結構化快照值。

delta?:

unknown
mode: 'delta' 的結構化變更值。

attributes?:

Record<string, string | number | boolean>
在狀態訊號標籤上呈現的屬性。

metadata?:

Record<string, unknown>
與狀態訊號一併儲存的應用程式中繼資料。

tagName?:

string
向模型顯示的 XML 標籤名稱。預設為 state

options:

object
狀態訊號的目標及傳送行為。接受與 sendSignal() 相同的選項。

Mastra 接受新狀態時,傳回 { accepted: Promise<SendAgentSignalAccepted>, signal: CreatedAgentSignal, persisted?: Promise<void>, skipped?: false }。如同一 cacheKey 及模式已是狀態通道的目前值,則傳回 { skipped: true, reason: 'unchanged' }。Mastra 決定如何處理訊號後,accepted 會在決策時解析:此程序運行 Agent 時為 { action: 'wake', runId, output };訊號轉送至現有執行時為 { action: 'deliver', runId };沒有運行任何項目時則為 { action: 'persist' }{ action: 'discard' }runId 是處理訊號之執行的權威 ID,只會在 wakedeliver 中出現。對於 persistdiscard,請使用 result.signal.id 關聯已儲存的訊號。對於 wake 動作,output 是供程序內取用的 Agent 串流。

sendNotificationSignal(notification, options)
sendnotificationsignalnotification-options 的直接連結

建立或合併通知收件匣記錄,並解析通知傳送政策。決策為立即傳送時,它會傳送通知訊號。

const result = await agent.sendNotificationSignal(
{
source: 'github',
kind: 'ci-status',
priority: 'high',
summary: 'CI failed on main: 3 tests failed.',
dedupeKey: 'github:acme/app:main:ci',
},
{
resourceId: 'user-123',
threadId: 'thread-abc',
},
)

notification:

object
要建立或合併的通知收件匣記錄。
object

source:

string
產生通知的外部系統,例如 githubslackemail

kind:

string
來源內的通知種類,例如 ci-statusmentiondirect-message

summary:

string
用作通知訊號內容、向 LLM 呈現的摘要。

priority?:

'low' | 'medium' | 'high' | 'urgent'
通知傳送政策使用的優先級。預設為 medium

payload?:

unknown
儲存在收件匣記錄中、供 Tool 或應用程式碼使用的結構化承載資料。

dedupeKey?:

string
用於合併來自相同來源及執行緒之重複待處理通知的鍵。

coalesceKey?:

string
用於結合來自相同來源及執行緒之相關待處理通知的鍵。

attributes?:

Record<string, JSONValue>
複製至已發出通知訊號的額外屬性。

metadata?:

Record<string, unknown>
儲存在收件匣記錄中的應用程式中繼資料。

options:

object
通知的目標執行緒及喚醒行為。
object

resourceId:

string
通知收件匣及目標記憶體執行緒的資源 ID。

threadId:

string
通知收件匣及目標記憶體執行緒的執行緒 ID。

ifIdle?:

object
控制目標執行緒閒置時的行為。
object

streamOptions?:

AgentExecutionOptions
即時通知喚醒閒置執行緒時啟動之串流的選項。

傳回 { record: NotificationRecord, decision: NotificationDeliveryDecision, runId?: string, signal?: CreatedAgentSignal, persisted?: Promise<void>, accepted?: Promise<SendAgentSignalAccepted> }record 是已儲存的收件匣記錄;decision 是傳送政策結果。入口立即發出訊號時會提供 signalrunId,包括為使用中的高優先級通知立即發出的摘要。已發出的訊號在不喚醒閒置執行緒下持久保存時,會提供 persisted。發出訊號時會提供 accepted;Mastra 決定如何處理後,它會在決策時解析:此程序運行 Agent 時為 { action: 'wake', runId, output };訊號轉送至現有執行時為 { action: 'deliver', runId };沒有運行任何項目時則為 { action: 'persist' }{ action: 'discard' }。已接受結果的 runId 只會在 wakedeliver 中出現。對於 wake 動作,output 是供程序內取用的 Agent 串流。

預設傳送方式會考慮優先級。urgent 通知會立即傳送。執行緒閒置時,high 通知會立即傳送;執行緒使用中時,Mastra 會立即發出摘要,並保留 deliverAt,待執行緒閒置時再完整傳送。medium 通知在閒置時立即傳送,使用中時則批次整理為摘要。low 通知在使用中及閒置執行緒均會批次整理為摘要。閒置時的低優先級摘要毋須喚醒模型迴圈,亦可送達訂閱者。完整流程請參閱訊號

如部分通知應等待不同的派送時段或摘要彙總,請在 Agent 上配置 notifications.deliveryPolicy

src/mastra/agents/support-agent.ts
export const supportAgent = new Agent({
id: 'support-agent',
name: 'Support Agent',
instructions: 'Help the user triage updates.',
model: 'openai/gpt-5.6-sol',
notifications: {
deliveryPolicy: {
priorities: {
urgent: 'deliver',
},
decide: ({ record }) => {
if (record.priority === 'low') {
return {
action: 'summarize',
summaryAt: new Date(Date.now() + 30 * 60 * 1000),
}
}
},
},
},
})

subscribeToThread(options)
subscribetothreadoptions 的直接連結

訂閱記憶體執行緒的原始串流區塊。請在呼叫 sendMessage()queueMessage()sendSignal() 前使用。它可讓你呈現串流輸出及觀察訊號回應,包括訊號中止使用中執行的情況。

options:

object
執行緒訂閱目標。
object

resourceId?:

string
記憶體執行緒的資源 ID。

threadId:

string
要訂閱的執行緒 ID。

傳回包含以下成員的 AgentThreadSubscription 物件:

stream:

AsyncIterable<AgentChunkType>
已訂閱執行緒的原始 Agent 串流區塊。

activeRunId:

() => string | null
傳回執行緒的使用中執行 ID;如沒有使用中的執行則傳回 null

abort:

() => boolean
中止執行緒的使用中執行。成功中止執行時傳回 true

unsubscribe:

() => void
停止訂閱,而不中止使用中的執行。

建構函式參數
建構函式參數 的直接連結

id:

string
Agent 的唯一識別碼。

name:

string
Agent 的顯示名稱。

description?:

string
Agent 用途及功能的可選說明。

metadata?:

Record<string, unknown> | ({ requestContext: RequestContext }) => Record<string, unknown> | Promise<Record<string, unknown>>
用於在用戶端分類或篩選 Agent 的可選中繼資料。可以是靜態記錄,或從請求上下文解析中繼資料的函式。

instructions:

SystemMessage | ({ requestContext: RequestContext }) => SystemMessage | Promise<SystemMessage>
引導 Agent 行為的指示。可以是字串、字串陣列、系統訊息物件、 系統訊息陣列,或動態傳回任何上述類型的函式。 SystemMessage 類型:string | string[] | CoreSystemMessage | CoreSystemMessage[] | SystemModelMessage | SystemModelMessage[]

model:

MastraLanguageModel | ({ requestContext: RequestContext }) => MastraLanguageModel | Promise<MastraLanguageModel>
Agent 使用的語言模型。傳入 provider/model 格式的模型路由器字串、模型配置或 Provider 實例,或在執行階段解析模型的函式。常用 Provider 及環境變數請參閱模型字串

agents?:

Record<string, Agent> | ({ requestContext: RequestContext }) => Record<string, Agent> | Promise<Record<string, Agent>>
Agent 可存取的子 Agent。可靜態提供或動態解析。

tools?:

ToolsInput | ({ requestContext: RequestContext, mastra?: Mastra }) => ToolsInput | Promise<ToolsInput>
Agent 可存取的 Tool。可靜態提供,或在可用時從請求上下文及相關 Mastra 實例動態解析。

hooks?:

ToolHooks
在此 Agent 每次呼叫 Tool 前後運行的 hook。傳給 generate()stream() 的每次執行 hook,會覆寫此處設定的相符 hook。請參閱下方的 Tool hook。
ToolHooks

beforeToolCall?:

(context: ToolHookContext) => void | ToolBeforeHookResult | Promise<void | ToolBeforeHookResult>
在 Tool 執行前運行。接收 { toolName, input, context, metadata }。傳回 { proceed: false, output } 可略過 Tool 呼叫,並以 output 作為結果。

afterToolCall?:

(context: ToolAfterHookContext) => void | Promise<void>
在 Tool 執行後運行。接收 { toolName, input, context, metadata, output, error }。Tool 擲回錯誤時,output 為 undefined,並改為設定 error

transform?:

ToolPayloadTransformPolicy
在顯示串流或使用者可見的記錄訊息收到 Tool 承載資料前,轉換該資料的共用政策。如需個別 Tool 的規則,請使用 createTool() 上每個 Tool 的 transform

workflows?:

Record<string, Workflow> | ({ requestContext: RequestContext }) => Record<string, Workflow> | Promise<Record<string, Workflow>>
Agent 可執行的 Workflow。可靜態提供或動態解析。

defaultOptions?:

AgentExecutionOptions | ({ requestContext: RequestContext }) => AgentExecutionOptions | Promise<AgentExecutionOptions>
呼叫 stream()generate() 時使用的預設選項。

defaultGenerateOptionsLegacy?:

AgentGenerateOptions | ({ requestContext: RequestContext }) => AgentGenerateOptions | Promise<AgentGenerateOptions>
呼叫 generateLegacy() 時使用的預設選項。

defaultStreamOptionsLegacy?:

AgentStreamOptions | ({ requestContext: RequestContext }) => AgentStreamOptions | Promise<AgentStreamOptions>
呼叫 streamLegacy() 時使用的預設選項。

mastra?:

Mastra
Mastra 執行階段實例的參照(自動注入)。

scorers?:

MastraScorers | ({ requestContext: RequestContext }) => MastraScorers | Promise<MastraScorers>
執行階段評估及遙測的評分配置。可靜態或動態提供。

memory?:

MastraMemory | ({ requestContext: RequestContext }) => MastraMemory | Promise<MastraMemory>
用於儲存及擷取具狀態上下文的記憶體模組。

notifications?:

object
持久通知訊號的通知傳送配置。
object

deliveryPolicy?:

NotificationDeliveryPolicyConfig
控制通知記錄的傳送方式。可配置預設決策、各優先級決策、各來源決策,或自訂 decide() 函式。

voice?:

CompositeVoice
語音輸入及輸出的語音設定。

inputProcessors?:

(Processor | ProcessorWorkflow)[] | ({ requestContext: RequestContext }) => (Processor | ProcessorWorkflow)[] | Promise<(Processor | ProcessorWorkflow)[]>
在 Agent 處理訊息前修改或驗證訊息的輸入處理器。可以是個別 Processor 物件,或使用 ProcessorStepSchema 配合 createWorkflow() 建立的 Workflow。

outputProcessors?:

(Processor | ProcessorWorkflow)[] | ({ requestContext: RequestContext }) => (Processor | ProcessorWorkflow)[] | Promise<(Processor | ProcessorWorkflow)[]>
在 Agent 的訊息傳送至用戶端前修改或驗證訊息的輸出處理器。可以是個別 Processor 物件或 Workflow。

maxProcessorRetries?:

number
處理器可要求重試 LLM 步驟的次數上限。

requestContextSchema?:

StandardJSONSchemaV1
用於驗證請求上下文值的標準 JSON Schema。提供後,會在 generate() 或 stream() 開始時驗證上下文;驗證失敗會擲回 MastraError。

editor?:

false | { instructions?: boolean; tools?: boolean | { description?: boolean } }
控制編輯器可覆寫此程式碼定義 Agent 的哪些欄位。省略時允許編輯指示及 Tool。請參閱下方的編輯器覆寫。

generate() 記憶體選項
generate-memory-options 的直接連結

呼叫 agent.generate() 時傳入 memory,以選擇執行應讀取及寫入哪個對話執行緒。常用結構為 memory: { resource: string, thread: string },其中 resource 識別擁有者,thread 則識別對話。概念模型請參閱執行緒與資源

src/mastra/run.ts
const response = await agent.generate('What did we decide about retries?', {
memory: {
resource: 'user-123',
thread: 'support-thread-456',
},
})

如需在呼叫期間建立或更新執行緒中繼資料,請使用執行緒物件:

src/mastra/run.ts
const response = await agent.generate('Continue the support conversation.', {
memory: {
resource: 'user-123',
thread: {
id: 'support-thread-456',
title: 'Billing support',
metadata: { category: 'billing' },
},
},
})

Tool hook
Tool hook 的直接連結

使用 hooks 在 Agent 每次呼叫 Tool 前後運行邏輯,包括已指派 Tool、記憶體 Tool、工具集、用戶端 Tool 及 Workspace Tool。

src/mastra/agents/hooked-agent.ts
import { Agent } from '@mastra/core/agent'

export const agent = new Agent({
id: 'support-agent',
name: 'support-agent',
instructions: 'Help users with their questions.',
model: 'openai/gpt-5.6-sol',
hooks: {
beforeToolCall: ({ toolName, input }) => {
console.log(`Running ${toolName}`, input)
},
afterToolCall: ({ toolName, output, error }) => {
console.log(`Finished ${toolName}`, { output, error })
},
},
})

beforeToolCall 可傳回 { proceed: false, output },提前中止 Tool 呼叫。Agent 會略過執行,並以 output 作為 Tool 結果:

const result = await agent.generate('Clean up old records', {
hooks: {
beforeToolCall: ({ toolName }) => {
if (toolName === 'deleteRecord') {
return { proceed: false, output: { blocked: true } }
}
},
},
})

hook 上下文的 metadata 包含 agentIdagentName。傳給 generate()stream() 的每次執行 hook 會覆寫相符的 Agent 層級 hook。當 Workspace 亦定義 tools.hooks 時,Workspace hook 會在 Agent hook 包裝器內運行。

編輯器覆寫
編輯器覆寫 的直接連結

註冊 MastraEditor 時,editor 欄位控制程式碼定義的 Agent 有哪些部分可透過編輯器變更。由程式碼擁有的欄位在 Studio 中為唯讀,並會從已儲存的覆寫中移除。

editor?:

false | { instructions?: boolean; tools?: boolean | { description?: boolean } }
省略時允許編輯指示及 Tool。設為 false 可鎖定 Agent。設為 instructions: true 可編輯指示。設為 tools: true 可編輯 Tool 成員及說明;設為 tools: { description: true } 則只允許編輯說明。

Agent 的 idnamemodel 一律來自程式碼,無法透過 Editor 覆寫。使用方式請參閱 Editor

傳回值
傳回值 的直接連結

agent:

Agent<TAgentId, TTools>
採用指定配置的新 Agent 實例。