跳至主要內容

submitPlanTool

這是一個不限定 Agent 的內建 Tool,用來提交實作計畫供使用者審閱。Agent 會將計畫寫入 Markdown 檔案,再把檔案路徑傳給此 Tool。Tool 會暫停執行,直到使用者核准或拒絕計畫。

此 Tool 透過原生的 Tool 暫停機制暫停執行:它會呼叫 suspend({ path }),讓 Agent 發出 tool-call-suspended 事件。主機會讀取計畫檔案並呈現給使用者,接著根據核准或拒絕結果繼續執行。

若在 Agent 執行之外使用(無法使用 suspend),此 Tool 會回傳一段包含檔案路徑且便於閱讀的備援字串。

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

submitPlanTool 加入 Agent 的 Tool 集合:

src/mastra/agents/index.ts
import { Agent } from '@mastra/core/agent'
import { submitPlanTool } from '@mastra/core/tools'

const agent = new Agent({
id: 'planner',
name: 'Planner',
instructions: 'Write a plan to a file before starting work, then submit it for approval.',
model,
tools: { submitPlanTool },
})

處理暫停並繼續執行:

src/run.ts
import fs from 'node:fs'

const stream = await agent.stream('Refactor the auth module')

for await (const chunk of stream.fullStream) {
if (chunk.type === 'tool-call-suspended' && chunk.payload.toolName === 'submit_plan') {
const { path } = chunk.payload.suspendPayload
const plan = fs.readFileSync(path, 'utf-8')
console.log(plan)

// Approve:
const resumed = await agent.resumeStream({ action: 'approved' }, { runId: stream.runId })
for await (const c of resumed.textStream) process.stdout.write(c)
}
}

若要拒絕並提供意見:

await agent.resumeStream(
{ action: 'rejected', feedback: 'Add error handling steps' },
{ runId: stream.runId },
)

輸入 schema
「輸入 schema」的直接連結

模型會使用下列參數呼叫此 Tool:

path:

string
磁碟上計畫 Markdown 檔案的路徑(例如 '.mastracode/plans/add-dark-mode.md')。

暫停 payload
「暫停 payload」的直接連結

tool-call-suspended 事件會攜帶 suspendPayload

path:

string
Agent 寫入的計畫檔案路徑。

title?:

string
主機讀取檔案後填入的計畫標題。

plan?:

string
主機讀取檔案後填入的計畫內文。

繼續執行的資料
「繼續執行的資料」的直接連結

將物件傳入 agent.resumeStream()

action:

'approved' | 'rejected'
使用者是否核准或拒絕計畫。

feedback?:

string
計畫遭拒絕時的修訂指示。此內容會提供給模型,讓模型能夠修訂並重新提交。

path?:

string
原樣回傳的計畫檔案路徑,用於重播歷程。

title?:

string
原樣回傳的計畫標題,用於重播歷程。

plan?:

string
原樣回傳的計畫內文,用於重播歷程。

核准行為
「核准行為」的直接連結

  • 已核准: Tool 會向模型回傳 "Plan approved. Proceed with implementation following the approved plan."
  • 拒絕並提供意見: Tool 會回傳意見,並要求模型修訂計畫後再次提交。
  • 拒絕但未提供意見: Tool 會要求模型等候使用者的下一則訊息,再進行修訂。

AgentController 中使用時,核准計畫會從目前模式切換至 transitionsTo 設定的模式。如果未設定 transitionsTo,controller 會切換到解析後的預設模式。詳情請參閱模式