AgentController
AgentController 功能目前處於 beta 階段,在脫離 beta 狀態之前,次要版本可能會包含破壞性變更。
AgentController 類別是一個共享主機,可供一個或多個 Session 實例使用。先初始化控制器並建立工作階段,然後使用 session.* API 管理對話狀態及執行控制。
如需引導式介紹,請參閱 AgentController 概覽。
使用範例使用範例 的直接連結
以下範例會初始化控制器並建立工作階段。它會先訂閱工作階段事件,然後才傳送訊息。
import { Agent } from '@mastra/core/agent'
import { AgentController } from '@mastra/core/agent-controller'
import { Workspace } from '@mastra/core/workspace'
const agent = new Agent({
id: 'coding-agent',
name: 'Coding agent',
instructions: 'Help with software engineering tasks.',
model: 'anthropic/claude-sonnet-4-6',
})
const controller = new AgentController({
id: 'coding-controller',
agent,
workspace: new Workspace({ id: 'coding-workspace' }),
modes: [{ id: 'build', name: 'Build', metadata: { default: true } }],
})
await controller.init()
const session = await controller.createSession({ resourceId: 'project-42' })
const unsubscribe = session.subscribe(event => {
if (event.type === 'message_update') {
console.log(event.message)
}
})
await session.sendMessage({ content: 'Review the project structure.' })
unsubscribe()
建構函數參數建構函數參數 的直接連結
id:
modes:
id:
name?:
defaultModelId?:
description?:
instructions?:
transitionsTo?:
submit_plan 暫停後進入的模式。availableTools?:
metadata?:
metadata.default: true 會標記預設模式。tools?:
additionalTools 同時使用。additionalTools?:
tools 同時使用。agent?:
agent 參數。default?:
metadata.default 或 defaultModeId。agent?:
resourceId?:
id。storage?:
stateSchema?:
session.state 更新的結構描述。initialState?:
memory?:
defaultModeId?:
instructions?:
tools?:
workspace?:
browser?:
channels?:
intervalHandlers?:
init() 啟動,並由 stopIntervals() 或 destroy() 停止的週期處理函數。idGenerator?:
modelUseCountProvider?:
modelUseCountTracker?:
session.model.switch() 後記錄模型選擇。subagents?:
subagent Tool 公開的子 Agent 類型。id:
name:
description:
instructions:
tools?:
allowedControllerTools?:
allowedWorkspaceTools?:
defaultModelId?:
maxSteps?:
stopWhen?:
forked?:
gateways?:
omConfig?:
disableBuiltinTools?:
toolCategoryResolver?:
pubsub?:
threadLock?:
observability?:
屬性屬性 的直接連結
id:
方法方法 的直接連結
工作階段工作階段 的直接連結
createSession(options)createsessionoptions 的直接連結
取得或建立已為 (resourceId, scope) 配對登記的即時工作階段。請先呼叫 init(),再呼叫此方法。
const session = await controller.createSession({
resourceId: 'project-42',
scope: 'editor-window-1',
threadId: 'thread-7',
})
相同的 resourceId 及 scope 會傳回同一個 Session 實例。不同的範圍會為同一資源建立隔離的工作階段。提供 threadId 時,此方法會將快取的工作階段切換至該執行緒;如果執行緒不存在,則會建立該執行緒。
resourceId?:
resourceId 或控制器 id。scope?:
threadId?:
id?:
id。ownerId?:
id。workspace?:
browser?:
requestContext?:
傳回:Promise<Session<TState>>
getSessionByResource(resourceId, scope?)getsessionbyresourceresourceid-scope 的直接連結
傳回已為資源及選用範圍登記的即時工作階段。
const session = await controller.getSessionByResource('project-42', 'editor-window-1')
傳回:Promise<Session<TState> | undefined>
setResourceId(session, { resourceId })setresourceidsession--resourceid- 的直接連結
將即時工作階段移至另一個資源,並清除其作用中執行緒綁定。
await controller.setResourceId(session, { resourceId: 'project-43' })
getKnownResourceIds(session)getknownresourceidssession 的直接連結
列出已儲存執行緒中的資源識別符。
const resourceIds = await controller.getKnownResourceIds(session)
傳回:Promise<string[]>
生命週期生命週期 的直接連結
init()init 的直接連結
初始化共享儲存空間、Workspace 服務及已設定的週期處理函數。重複呼叫會重用相同的初始化 promise。
await controller.init()
destroy()destroy 的直接連結
停止由控制器擁有的週期處理函數。這不會銷毀控制器建立的 Session。
await controller.destroy()
模式及 Agent模式及 Agent 的直接連結
listModes()listmodes 的直接連結
傳回已設定的模式定義。
const modes = controller.listModes()
傳回:AgentControllerMode[]
getCurrentAgent(session)getcurrentagentsession 的直接連結
傳回工作階段作用中模式的後端 Agent。
const agent = controller.getCurrentAgent(session)
傳回:Agent
Workspace 及瀏覽器Workspace 及瀏覽器 的直接連結
hasWorkspace()hasworkspace 的直接連結
報告控制器是否具有靜態、動態或物件式 Workspace 設定。
if (controller.hasWorkspace()) {
console.log('Workspace configured')
}
傳回:boolean
isWorkspaceReady()isworkspaceready 的直接連結
報告控制器層級的 Workspace 是否已準備就緒。
const ready = controller.isWorkspaceReady()
傳回:boolean
getWorkspace()getworkspace 的直接連結
傳回靜態控制器 Workspace。動態 Workspace 工廠在完成解析之前會傳回 undefined。
const workspace = controller.getWorkspace()
傳回:Workspace | undefined
resolveWorkspace({ session, requestContext? })resolveworkspace-session-requestcontext- 的直接連結
為工作階段解析動態 Workspace,並將結果快取於控制器上。
const workspace = await controller.resolveWorkspace({ session, requestContext })
傳回:Promise<Workspace | undefined>
setBrowser(browser)setbrowserbrowser 的直接連結
取代控制器瀏覽器,並將其傳遞至後端 Agent。
controller.setBrowser(browser)
Mastra 及頻道Mastra 及頻道 的直接連結
getMastra()getmastra 的直接連結
傳回父 Mastra 實例,或由 init() 建立的內部實例。
const mastra = controller.getMastra()
傳回:Mastra | undefined
getChannels()getchannels 的直接連結
傳回已設定的聊天頻道整合。
const channels = controller.getChannels()
傳回:AgentControllerChannels | null
模型模型 的直接連結
getCurrentModelAuthStatus(session)getcurrentmodelauthstatussession 的直接連結
傳回工作階段所選模型的驗證狀態。
const status = await controller.getCurrentModelAuthStatus(session)
傳回:Promise<ModelAuthStatus>
listAvailableModels()listavailablemodels 的直接連結
列出已設定及內置閘道中的模型。結果會短暫快取;設定 modelUseCountProvider 後,會使用用量資料排序。
const models = await controller.listAvailableModels()
傳回:Promise<AvailableModel[]>
invalidateAvailableModelsCache()invalidateavailablemodelscache 的直接連結
清除可用模型快取。
controller.invalidateAvailableModelsCache()
觀察記憶體及權限觀察記憶體及權限 的直接連結
loadOMProgress(session)loadomprogresssession 的直接連結
載入作用中執行緒已儲存的觀察記憶體進度,並發出 om_status 事件。
await controller.loadOMProgress(session)
getObservationalMemoryRecord(session)getobservationalmemoryrecordsession 的直接連結
傳回作用中執行緒的觀察記憶體記錄。
const record = await controller.getObservationalMemoryRecord(session)
傳回:Promise<ObservationalMemoryRecord | null>
getToolCategory({ toolName })gettoolcategory-toolname- 的直接連結
解析 Tool 的權限類別。
const category = controller.getToolCategory({ toolName: 'execute_command' })
傳回:ToolCategory | null
週期週期 的直接連結
registerInterval(handler)registerintervalhandler 的直接連結
啟動或取代週期處理函數。
controller.registerInterval({
id: 'refresh',
intervalMs: 60_000,
handler: async () => refreshData(),
})
removeInterval({ id })removeinterval-id- 的直接連結
停止一個週期,並執行其選用的關閉回呼函數。
await controller.removeInterval({ id: 'refresh' })
stopIntervals()stopintervals 的直接連結
停止所有週期,並執行其選用的關閉回呼函數。
await controller.stopIntervals()