從 VNext 遷移至標準 API
自 @mastra/core 的 v0.20.0 起,適用下列變更。
舊版 API(AI SDK v4)「舊版 API(AI SDK v4)」的直接連結
原始方法已重新命名,並維持與 AI SDK v4 及 v1 模型的回溯相容性。
.stream()→.streamLegacy().generate()→.generateLegacy()
標準 API(AI SDK v5)「標準 API(AI SDK v5)」的直接連結
這些現在是目前使用的 API,完整相容於 AI SDK v5 與 v2 模型。
.streamVNext()→.stream().generateVNext()→.generate()
遷移路徑「遷移路徑」的直接連結
如果已使用 .streamVNext() 與 .generateVNext(),請使用尋找/替換,分別將方法改為 .stream() 與 .generate()。
如果使用舊的 .stream() 與 .generate(),請決定是否要升級。如果不升級,請使用尋找/替換,將它們分別改為 .streamLegacy() 與 .generateLegacy()。
請選擇符合需求的遷移路徑:
繼續使用 AI SDK v4 模型「繼續使用 AI SDK v4 模型」的直接連結
- 將所有
.stream()與.generate()呼叫分別重新命名為.streamLegacy()與.generateLegacy()。
不需進行其他變更。
繼續使用 AI SDK v5 模型「繼續使用 AI SDK v5 模型」的直接連結
- 將所有
.streamVNext()與.generateVNext()呼叫分別重新命名為.stream()與.generate()。
不需進行其他變更。
從 AI SDK v4 升級至 v5「從 AI SDK v4 升級至 v5」的直接連結
- 將所有模型 Provider 套件升級一個主要版本。
這可確保它們現在全都是 v5 模型。請依照下方指南瞭解主要差異,並據此更新程式碼。
主要差異「主要差異」的直接連結
更新後的 .stream() 與 .generate() 方法在行為、相容性、傳回型別和可用選項方面,都與舊版方法不同。本節會說明遷移時必須瞭解的最重要變更。
模型版本支援「模型版本支援」的直接連結
舊版 API
.generateLegacy().streamLegacy()
只支援 AI SDK v4 模型(specificationVersion: 'v1')
標準 API
.generate().stream()
只支援 AI SDK v5 模型(specificationVersion: 'v2')
這項限制會在執行階段強制執行,並提供清楚的錯誤訊息。
傳回型別「傳回型別」的直接連結
舊版 API
-
.generateLegacy()傳回:GenerateTextResult或GenerateObjectResult -
.streamLegacy()傳回:StreamTextResult或StreamObjectResult
如需詳細資訊,請參閱下列 API 參考文件:
標準 API
-
.generate()format: 'mastra'(預設):傳回MastraModelOutput.getFullOutput()format: 'aisdk':傳回AISDKV5OutputStream.getFullOutput()- 內部會呼叫
.stream()並等待.getFullOutput()
-
.stream()format: 'mastra'(預設):傳回MastraModelOutput<OUTPUT>format: 'aisdk':傳回AISDKV5OutputStream<OUTPUT>
如需詳細資訊,請參閱下列 API 參考文件:
格式控制「格式控制」的直接連結
舊版 API「舊版 API」的直接連結
沒有 format 選項:一律傳回 AI SDK v4 型別
// Mastra native format (default)
const result = await agent.stream(messages)
標準 API「標準 API」的直接連結
使用 format 選項選擇輸出:
'mastra'(預設)'aisdk'(相容於 AI SDK v5)
// AI SDK v5 compatibility
const result = await agent.stream(messages, {
format: 'aisdk',
})
標準 API 的新選項「標準 API 的新選項」的直接連結
標準 .stream() 與 generate() 提供下列選項,但舊版方法不提供:
-
format- 選擇「mastra」或「aisdk」輸出格式:const result = await agent.stream(messages, {format: 'aisdk', // or 'mastra' (default)}) -
system- 自訂系統訊息(與 instructions 分開)。const result = await agent.stream(messages, {system: 'You are a helpful assistant',}) -
structuredOutput- 強化的結構化輸出,支援覆寫模型與自訂選項。-
jsonPromptInjection- 用來覆寫將 response_format 傳給模型的預設行為。這會將內容插入提示詞,引導模型傳回結構化輸出。 -
model- 新增模型後,會建立 subagent,將主要 Agent 的回應結構化。主要 Agent 會呼叫 Tool 並傳回文字,而 subagent 會傳回符合所提供結構描述的物件。這會取代experimental_output。 -
errorStrategy- 決定輸出與結構描述不符時的處理方式:- 'warn' - 記錄警告
- 'error' - 擲回錯誤
- 'fallback' - 傳回你提供的備用值
const result = await agent.generate(messages, {structuredOutput: {schema: z.object({name: z.string(),age: z.number(),}),model: 'openai/gpt-5.6-sol', // Optional model override for structuringerrorStrategy: 'fallback',fallbackValue: { name: 'unknown', age: 0 },instructions: 'Extract user information', // Override default structuring instructions},})
-
-
stopWhen- 彈性的停止條件(步數、token 上限等)。const result = await agent.stream(messages, {stopWhen: ({ steps, totalTokens }) => steps >= 5 || totalTokens >= 10000,}) -
providerOptions- Provider 專屬選項(例如 OpenAI 專屬設定)const result = await agent.stream(messages, {providerOptions: {openai: {store: true,metadata: { userId: '123' },},},}) -
onChunk- 每個串流區塊的回呼。const result = await agent.stream(messages, {onChunk: chunk => {console.log('Received chunk:', chunk)},}) -
onError- 錯誤回呼。const result = await agent.stream(messages, {onError: error => {console.error('Stream error:', error)},}) -
onAbort- 中止回呼。const result = await agent.stream(messages, {onAbort: () => {console.log('Stream aborted')},}) -
activeTools- 指定此次執行中啟用的 Tool。const result = await agent.stream(messages, {activeTools: ['search', 'calculator'], // Only these tools will be available}) -
abortSignal- 用於取消的 AbortSignal。const controller = new AbortController()const result = await agent.stream(messages, {abortSignal: controller.signal,})// Later: controller.abort(); -
prepareStep- 多步驟執行中每個步驟開始前的回呼。const result = await agent.stream(messages, {prepareStep: ({ step, state }) => {console.log('About to execute step:', step)return {/* modified state */}},}) -
requireToolApproval- 所有 Tool 呼叫都必須經過核准。const result = await agent.stream(messages, {requireToolApproval: true,})
已移動的舊版選項「已移動的舊版選項」的直接連結
-
temperature與其他modelSettings。統一至
modelSettings。const result = await agent.stream(messages, {modelSettings: {temperature: 0.7,maxTokens: 1000,topP: 0.9,},}) -
resourceId與threadId。移至 Memory 物件。
const result = await agent.stream(messages, {memory: {resource: 'user-123',thread: 'thread-456',},})
已棄用或移除的選項「已棄用或移除的選項」的直接連結
-
experimental_output請改用
structuredOutput,以允許 Tool 呼叫並傳回物件。const result = await agent.generate(messages, {structuredOutput: {schema: z.object({summary: z.string(),}),model: 'openai/gpt-5.6-sol',},}) -
outputoutput屬性已棄用,請改用structuredOutput。若要達到相同結果,請省略模型,只傳入structuredOutput.schema;如果模型原生不支援response_format,可選擇新增jsonPromptInjection: true。const result = await agent.generate(messages, {structuredOutput: {schema: z.object({name: z.string(),}),},}) -
memoryOptions請改用
memory。const result = await agent.generate(messages, {memory: {},})
型別變更「型別變更」的直接連結
舊版 API
CoreMessage[]
如需詳細資訊,請參閱下列 API 參考文件:
標準 API
-
ModelMessage[]toolChoice使用 AI SDK v5 的ToolChoice型別。type ToolChoice<TOOLS extends Record<string, unknown>> =| 'auto'| 'none'| 'required'| {type: 'tool'toolName: Extract<keyof TOOLS, string>}
如需詳細資訊,請參閱下列 API 參考文件: